--- format: markdown title: Ansible ff@home aufsetzen toc: yes ... # 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 (oder.) bin/activate cd /datadisk/ffhome 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 xx@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 0] 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] \n[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' \n 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] \n[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