|  | @@ -3,5 +3,264 @@ format: markdown
 | 
	
		
			
				|  |  |  title: Ansible ff@home aufsetzen
 | 
	
		
			
				|  |  |  toc: yes
 | 
	
		
			
				|  |  |  ...
 | 
	
		
			
				|  |  | +# Description
 | 
	
		
			
				|  |  | +# Software 
 | 
	
		
			
				|  |  | +- Debian 12 (bookworm) oder Ubuntu 22.04
 | 
	
		
			
				|  |  | +- python3 und ansible
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +     ***** Es empfiehlt sich, eine python virtuelle Umgebung zu verwenden *****  
 | 
	
		
			
				|  |  | +     Die folgenden Pakete installieren:
 | 
	
		
			
				|  |  | +     sudo apt install python3-pip python3-venv
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Dazu in das Basisverzeichnis gehen (bei mir /datadisk), dann die virtuelle Umgebung anlegen
 | 
	
		
			
				|  |  | +python3 -m venv ffhome
 | 
	
		
			
				|  |  | +In das Verzeichnis ffhome wechseln und die Umgebung aktivieren
 | 
	
		
			
				|  |  | +source bin/activate
 | 
	
		
			
				|  |  | +Dadurch ändert sich der prompt:
 | 
	
		
			
				|  |  | +(ffhome) 18:16:41[frankb@berglap /datadisk/ffhome 0]
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Zum Verlassen der Umgebung:
 | 
	
		
			
				|  |  | +deactivate  oder Terminal Fenster schliessen
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Jetzt kann ansible in der ffhome Umgebung installiert werden:
 | 
	
		
			
				|  |  | +pip3 install ansible
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +18:11:20[frankb@berglap /datadisk/ffhome 0] 
 | 
	
		
			
				|  |  | +Die Verzeichnistruktur der Testumgebung   
 | 
	
		
			
				|  |  | +tree -L 4
 | 
	
		
			
				|  |  | +    .
 | 
	
		
			
				|  |  | +    ├── ansible.cfg
 | 
	
		
			
				|  |  | +    ├── bin
 | 
	
		
			
				|  |  | +    │   ├── activate
 | 
	
		
			
				|  |  | +    │   ├── activate.csh
 | 
	
		
			
				|  |  | +    │   ├── activate.fish
 | 
	
		
			
				|  |  | +    │   ├── Activate.ps1
 | 
	
		
			
				|  |  | +    │   ├── ansible
 | 
	
		
			
				|  |  | +    │   ├── ansible-community
 | 
	
		
			
				|  |  | +     ... 
 | 
	
		
			
				|  |  | +    │   └── yamllint
 | 
	
		
			
				|  |  | +    ├── include
 | 
	
		
			
				|  |  | +    ├── inventory
 | 
	
		
			
				|  |  | +    │   ├── hosts.yaml
 | 
	
		
			
				|  |  | +    │   └── host_vars
 | 
	
		
			
				|  |  | +    │       ├── bergdesk
 | 
	
		
			
				|  |  | +    │       │   ├── vars
 | 
	
		
			
				|  |  | +    │       │   └── vault
 | 
	
		
			
				|  |  | +    │       ├── berghofen
 | 
	
		
			
				|  |  | +    │       │   ├── vars
 | 
	
		
			
				|  |  | +    │       │   └── vault
 | 
	
		
			
				|  |  | +    │       ├── berglap
 | 
	
		
			
				|  |  | +    │       │   ├── vars
 | 
	
		
			
				|  |  | +    │       │   └── vault
 | 
	
		
			
				|  |  | +    │       └── luna
 | 
	
		
			
				|  |  | +    │           ├── vars
 | 
	
		
			
				|  |  | +    │           └── vault
 | 
	
		
			
				|  |  | +    ├── lib
 | 
	
		
			
				|  |  | +    │   └── python3.10
 | 
	
		
			
				|  |  | +    ├── lib64 -> lib
 | 
	
		
			
				|  |  | +     ...
 | 
	
		
			
				|  |  | +    ├── playbooks
 | 
	
		
			
				|  |  | +    │   └── update.yaml
 | 
	
		
			
				|  |  | +    └── pyvenv.cfg
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Bei den ... sind Zeilen der Übersichtlichkeit halber weggelassen.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Datei mit den beteiligten Hosts inventory/hosts.yaml
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    ---
 | 
	
		
			
				|  |  | +    all:
 | 
	
		
			
				|  |  | +      vars:
 | 
	
		
			
				|  |  | +        ansible_port: 24
 | 
	
		
			
				|  |  | +        ansible_user: frankb
 | 
	
		
			
				|  |  | +        ansible_become: true
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    apus:
 | 
	
		
			
				|  |  | +      hosts:
 | 
	
		
			
				|  |  | +        berghofen:
 | 
	
		
			
				|  |  | +          ansible_host: 192.168.178.51
 | 
	
		
			
				|  |  | +          ansible_user: fb
 | 
	
		
			
				|  |  | +          ansible_become_password: "{{ berghofen_password }}"
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    desktops:
 | 
	
		
			
				|  |  | +      hosts:
 | 
	
		
			
				|  |  | +        bergdesk:
 | 
	
		
			
				|  |  | +          ansible_host: 192.168.178.201
 | 
	
		
			
				|  |  | +          ansible_become_pass: '{{ bergdesk_password }}'
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +        berglap:
 | 
	
		
			
				|  |  | +          ansible_host: 192.168.178.52
 | 
	
		
			
				|  |  | +          ansible_become_pass: '{{ berglap_password }}'
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +        luna:
 | 
	
		
			
				|  |  | +          ansible_host: 192.168.178.224
 | 
	
		
			
				|  |  | +          ansible_become_pass: '{{ luna_password }}'
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    altlast:
 | 
	
		
			
				|  |  | +      hosts:
 | 
	
		
			
				|  |  | +        hoerde:
 | 
	
		
			
				|  |  | +          ansible_host: 193.43.220.136
 | 
	
		
			
				|  |  | +          ansible_become: true
 | 
	
		
			
				|  |  | +          ansible_become_method: su
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    supernodes:
 | 
	
		
			
				|  |  | +      hosts:
 | 
	
		
			
				|  |  | +        31.172.33.20:
 | 
	
		
			
				|  |  | +          ansible_port: 22
 | 
	
		
			
				|  |  | +        snng-dus01.ffdo.de:
 | 
	
		
			
				|  |  | +          ansible_port: 22
 | 
	
		
			
				|  |  | +        snng-dtm01.ffdo.de:
 | 
	
		
			
				|  |  | +          ansible_port: 22
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Die Gruppen apus und desktops enthalten die testhosts, die Gruppen altlast und supernodes sind nicht komplett einbezogen.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Im Verzeichnis inventory/host_vars sind Variablen für die einzelnen hosts, also hier die passwords, in vars unverschlüsselt, in vault aes256 geschützt. Beispielhaft mal für bergdesk
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +bergdesk/vars
 | 
	
		
			
				|  |  | +    ---
 | 
	
		
			
				|  |  | +    bergdesk_password: "{{ vault_bergdesk_password }}"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +bergdesk/vault
 | 
	
		
			
				|  |  | +    $ANSIBLE_VAULT;1.2;AES256;xx
 | 
	
		
			
				|  |  | +    35656536383233636434636533613830303439316263636436363932333636626462616461636537
 | 
	
		
			
				|  |  | +    3838626266396332363236643361626134393238636133640a646333333866643161356333626564
 | 
	
		
			
				|  |  | +    32373735343033633666353763376230646137663639373438393537663031643562376365396337
 | 
	
		
			
				|  |  | +    3161646534666236350a303366373433373833373066353030363766616166666361376637393464
 | 
	
		
			
				|  |  | +    30613139313661643932373239333865616338653132613530393161656466326561633537383535
 | 
	
		
			
				|  |  | +    3631356664643139383037636565346630643036353364333866
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Zur Erzeugung der Verschlüsselung in der vault Datei
 | 
	
		
			
				|  |  | +    ---
 | 
	
		
			
				|  |  | +    vault_bergdesk_password: hier das echte PW eintragen
 | 
	
		
			
				|  |  | +dann mit 
 | 
	
		
			
				|  |  | +ansible-vault encrypt vault --vault-id xxxxx@prompt
 | 
	
		
			
				|  |  | +die verschlüsselte vault datei erzeugen
 | 
	
		
			
				|  |  | +anzeigen kann man die Datei mit ansible-vault view vault   
 | 
	
		
			
				|  |  | +und entschlüsseln mit ansible-vault decrypt vault
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +playbooks/update.yaml
 | 
	
		
			
				|  |  | +    ---
 | 
	
		
			
				|  |  | +    # name: update yaml
 | 
	
		
			
				|  |  | +    - hosts: [desktops,apus,altlast]
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +      tasks:
 | 
	
		
			
				|  |  | +        - name: Testausgabe
 | 
	
		
			
				|  |  | +          debug: msg="Hallo von {{ ansible_hostname }} Ansible managed!"
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +        - name: df -h Aufruf
 | 
	
		
			
				|  |  | +          command: df -h /
 | 
	
		
			
				|  |  | +          changed_when: false
 | 
	
		
			
				|  |  | +          register: df_cmd
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +        - debug:
 | 
	
		
			
				|  |  | +            msg: '{{df_cmd.stdout_lines}} {{ansible_distribution }}'
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +        - name: ping meine hosts
 | 
	
		
			
				|  |  | +          ansible.builtin.ping:
 | 
	
		
			
				|  |  | +          changed_when: false
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    #   - name: Warte auf enter Taste
 | 
	
		
			
				|  |  | +    #     ansible.builtin.pause:
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +        - name: apt update mit upgrade und autoremove
 | 
	
		
			
				|  |  | +          ansible.builtin.apt:
 | 
	
		
			
				|  |  | +            update_cache: yes
 | 
	
		
			
				|  |  | +            cache_valid_time: 3600
 | 
	
		
			
				|  |  | +            autoremove: yes
 | 
	
		
			
				|  |  | +            upgrade: 'yes'
 | 
	
		
			
				|  |  | +          when:  ansible_os_family == "Debian"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        - stat:
 | 
	
		
			
				|  |  | +            path: /var/run/needrestart
 | 
	
		
			
				|  |  | +          register: needrestart_file
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        - name: reboot falls erforderlich
 | 
	
		
			
				|  |  | +          ansible.builtin.reboot:
 | 
	
		
			
				|  |  | +          when:
 | 
	
		
			
				|  |  | +            - needrestart_file.stat.exists == True
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +Ausgabe von playbook update.yaml (die letzten beiden tasks stat und reboot sind nicht in der Ausgabe, weil sie später hinzugefügt wurden) 
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +luna ist ausgeschaltet und nicht erreichbar.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +(ffhome) 20:55:59[frankb@berglap /datadisk/ffhome 4] ansible-playbook -b  playbooks/update.yaml -i inventory/hosts.yaml --ask-vault-pass 
 | 
	
		
			
				|  |  | +Vault password: 
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +PLAY [desktops,apus,altlast] ***************************************************************
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +TASK [Gathering Facts] *********************************************************************
 | 
	
		
			
				|  |  | +[WARNING]: Platform linux on host berglap is using the discovered Python interpreter at
 | 
	
		
			
				|  |  | +/usr/bin/python3.10, but future installation of another Python interpreter could change the
 | 
	
		
			
				|  |  | +meaning of that path. See https://docs.ansible.com/ansible-
 | 
	
		
			
				|  |  | +core/2.17/reference_appendices/interpreter_discovery.html for more information.
 | 
	
		
			
				|  |  | +ok: [berglap]
 | 
	
		
			
				|  |  | +[WARNING]: Platform linux on host bergdesk is using the discovered Python interpreter at
 | 
	
		
			
				|  |  | +/usr/bin/python3.11, but future installation of another Python interpreter could change the
 | 
	
		
			
				|  |  | +meaning of that path. See https://docs.ansible.com/ansible-
 | 
	
		
			
				|  |  | +core/2.17/reference_appendices/interpreter_discovery.html for more information.
 | 
	
		
			
				|  |  | +ok: [bergdesk]
 | 
	
		
			
				|  |  | +fatal: [luna]: UNREACHABLE! => changed=false 
 | 
	
		
			
				|  |  | +  msg: 'Failed to connect to the host via ssh: ssh: connect to host 192.168.178.224 port 24: No route to host'
 | 
	
		
			
				|  |  | +  unreachable: true
 | 
	
		
			
				|  |  | +[WARNING]: Platform linux on host berghofen is using the discovered Python interpreter at
 | 
	
		
			
				|  |  | +/usr/bin/python3.11, but future installation of another Python interpreter could change the
 | 
	
		
			
				|  |  | +meaning of that path. See https://docs.ansible.com/ansible-
 | 
	
		
			
				|  |  | +core/2.17/reference_appendices/interpreter_discovery.html for more information.
 | 
	
		
			
				|  |  | +ok: [berghofen]
 | 
	
		
			
				|  |  | +[WARNING]: Platform freebsd on host hoerde is using the discovered Python interpreter at
 | 
	
		
			
				|  |  | +/usr/local/bin/python3.9, but future installation of another Python interpreter could
 | 
	
		
			
				|  |  | +change the meaning of that path. See https://docs.ansible.com/ansible-
 | 
	
		
			
				|  |  | +core/2.17/reference_appendices/interpreter_discovery.html for more information.
 | 
	
		
			
				|  |  | +ok: [hoerde]
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +TASK [Testausgabe] *************************************************************************
 | 
	
		
			
				|  |  | +ok: [bergdesk] => 
 | 
	
		
			
				|  |  | +  msg: Hallo von bergdesk Ansible managed!
 | 
	
		
			
				|  |  | +ok: [berglap] => 
 | 
	
		
			
				|  |  | +  msg: Hallo von berglap Ansible managed!
 | 
	
		
			
				|  |  | +ok: [berghofen] => 
 | 
	
		
			
				|  |  | +  msg: Hallo von berghofen Ansible managed!
 | 
	
		
			
				|  |  | +ok: [hoerde] => 
 | 
	
		
			
				|  |  | +  msg: Hallo von hoerde Ansible managed!
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +TASK [df -h Aufruf] ************************************************************************
 | 
	
		
			
				|  |  | +ok: [berglap]
 | 
	
		
			
				|  |  | +ok: [bergdesk]
 | 
	
		
			
				|  |  | +ok: [berghofen]
 | 
	
		
			
				|  |  | +ok: [hoerde]
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +TASK [debug] *******************************************************************************
 | 
	
		
			
				|  |  | +ok: [bergdesk] => 
 | 
	
		
			
				|  |  | +  msg: '[''Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf'', ''/dev/sdb1       439G     98G  319G   24% /''] Debian'
 | 
	
		
			
				|  |  | +ok: [berglap] => 
 | 
	
		
			
				|  |  | +  msg: '[''Dateisystem             Größe Benutzt Verf. Verw% Eingehängt auf'', ''/dev/mapper/system-root  444G    298G  124G   71% /''] Ubuntu'
 | 
	
		
			
				|  |  | +ok: [berghofen] => 
 | 
	
		
			
				|  |  | +  msg: '[''Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf'', ''/dev/sda6        18G    5,1G   12G   30% /''] Debian'
 | 
	
		
			
				|  |  | +ok: [hoerde] => 
 | 
	
		
			
				|  |  | +  msg: '[''Filesystem                       Size    Used   Avail Capacity  Mounted on'', ''s3pool25/jail/hoerde.ffdo.net    3.9G    891M    3.0G    22%    /''] FreeBSD'
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +TASK [ping meine hosts] ********************************************************************
 | 
	
		
			
				|  |  | +ok: [berglap]
 | 
	
		
			
				|  |  | +ok: [bergdesk]
 | 
	
		
			
				|  |  | +ok: [berghofen]
 | 
	
		
			
				|  |  | +ok: [hoerde]
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +TASK [apt update mit upgrade und autoremove] ***********************************************
 | 
	
		
			
				|  |  | +skipping: [hoerde]
 | 
	
		
			
				|  |  | +ok: [bergdesk]
 | 
	
		
			
				|  |  | +ok: [berglap]
 | 
	
		
			
				|  |  | +ok: [berghofen]
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +PLAY RECAP *********************************************************************************
 | 
	
		
			
				|  |  | +bergdesk                   : ok=6    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
 | 
	
		
			
				|  |  | +berghofen                  : ok=6    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
 | 
	
		
			
				|  |  | +berglap                    : ok=6    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
 | 
	
		
			
				|  |  | +hoerde                     : ok=5    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   
 | 
	
		
			
				|  |  | +luna                       : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0   
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -# Freifunk Dortmund und Ansible
 |