30 Ansible für ff@home aufsetzen.page 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. ---
  2. format: markdown
  3. title: Ansible ff@home aufsetzen
  4. toc: yes
  5. ...
  6. # Description
  7. # Software
  8. - Debian 12 (bookworm) oder Ubuntu 22.04
  9. - python3 und ansible
  10. ***** Es empfiehlt sich, eine python virtuelle Umgebung zu verwenden *****
  11. Die folgenden Pakete installieren:
  12. sudo apt install python3-pip python3-venv
  13. Dazu in das Basisverzeichnis gehen (bei mir /datadisk), dann die virtuelle Umgebung anlegen
  14. python3 -m venv ffhome
  15. In das Verzeichnis ffhome wechseln und die Umgebung aktivieren
  16. source bin/activate
  17. Dadurch ändert sich der prompt:
  18. (ffhome) 18:16:41[frankb@berglap /datadisk/ffhome 0]
  19. Zum Verlassen der Umgebung:
  20. deactivate oder Terminal Fenster schliessen
  21. Jetzt kann ansible in der ffhome Umgebung installiert werden:
  22. pip3 install ansible
  23. 18:11:20[frankb@berglap /datadisk/ffhome 0]
  24. Die Verzeichnistruktur der Testumgebung
  25. tree -L 4
  26. .
  27. ├── ansible.cfg
  28. ├── bin
  29. │   ├── activate
  30. │   ├── activate.csh
  31. │   ├── activate.fish
  32. │   ├── Activate.ps1
  33. │   ├── ansible
  34. │   ├── ansible-community
  35. ...
  36. │   └── yamllint
  37. ├── include
  38. ├── inventory
  39. │   ├── hosts.yaml
  40. │   └── host_vars
  41. │   ├── bergdesk
  42. │   │   ├── vars
  43. │   │   └── vault
  44. │   ├── berghofen
  45. │   │   ├── vars
  46. │   │   └── vault
  47. │   ├── berglap
  48. │   │   ├── vars
  49. │   │   └── vault
  50. │   └── luna
  51. │   ├── vars
  52. │   └── vault
  53. ├── lib
  54. │   └── python3.10
  55. ├── lib64 -> lib
  56. ...
  57. ├── playbooks
  58. │   └── update.yaml
  59. └── pyvenv.cfg
  60. Bei den ... sind Zeilen der Übersichtlichkeit halber weggelassen.
  61. Datei mit den beteiligten Hosts inventory/hosts.yaml
  62. ---
  63. all:
  64. vars:
  65. ansible_port: 24
  66. ansible_user: frankb
  67. ansible_become: true
  68. apus:
  69. hosts:
  70. berghofen:
  71. ansible_host: 192.168.178.51
  72. ansible_user: fb
  73. ansible_become_password: "{{ berghofen_password }}"
  74. desktops:
  75. hosts:
  76. bergdesk:
  77. ansible_host: 192.168.178.201
  78. ansible_become_pass: '{{ bergdesk_password }}'
  79. berglap:
  80. ansible_host: 192.168.178.52
  81. ansible_become_pass: '{{ berglap_password }}'
  82. luna:
  83. ansible_host: 192.168.178.224
  84. ansible_become_pass: '{{ luna_password }}'
  85. altlast:
  86. hosts:
  87. hoerde:
  88. ansible_host: 193.43.220.136
  89. ansible_become: true
  90. ansible_become_method: su
  91. supernodes:
  92. hosts:
  93. 31.172.33.20:
  94. ansible_port: 22
  95. snng-dus01.ffdo.de:
  96. ansible_port: 22
  97. snng-dtm01.ffdo.de:
  98. ansible_port: 22
  99. Die Gruppen apus und desktops enthalten die testhosts, die Gruppen altlast und supernodes sind nicht komplett einbezogen.
  100. 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
  101. bergdesk/vars
  102. ---
  103. bergdesk_password: "{{ vault_bergdesk_password }}"
  104. bergdesk/vault
  105. $ANSIBLE_VAULT;1.2;AES256;xx
  106. 35656536383233636434636533613830303439316263636436363932333636626462616461636537
  107. 3838626266396332363236643361626134393238636133640a646333333866643161356333626564
  108. 32373735343033633666353763376230646137663639373438393537663031643562376365396337
  109. 3161646534666236350a303366373433373833373066353030363766616166666361376637393464
  110. 30613139313661643932373239333865616338653132613530393161656466326561633537383535
  111. 3631356664643139383037636565346630643036353364333866
  112. Zur Erzeugung der Verschlüsselung in der vault Datei
  113. ---
  114. vault_bergdesk_password: hier das echte PW eintragen
  115. dann mit
  116. ansible-vault encrypt vault --vault-id xxxxx@prompt
  117. die verschlüsselte vault datei erzeugen
  118. anzeigen kann man die Datei mit ansible-vault view vault
  119. und entschlüsseln mit ansible-vault decrypt vault
  120. playbooks/update.yaml
  121. ---
  122. # name: update yaml
  123. - hosts: [desktops,apus,altlast]
  124. tasks:
  125. - name: Testausgabe
  126. debug: msg="Hallo von {{ ansible_hostname }} Ansible managed!"
  127. - name: df -h Aufruf
  128. command: df -h /
  129. changed_when: false
  130. register: df_cmd
  131. - debug:
  132. msg: '{{df_cmd.stdout_lines}} {{ansible_distribution }}'
  133. - name: ping meine hosts
  134. ansible.builtin.ping:
  135. changed_when: false
  136. # - name: Warte auf enter Taste
  137. # ansible.builtin.pause:
  138. - name: apt update mit upgrade und autoremove
  139. ansible.builtin.apt:
  140. update_cache: yes
  141. cache_valid_time: 3600
  142. autoremove: yes
  143. upgrade: 'yes'
  144. when: ansible_os_family == "Debian"
  145. - stat:
  146. path: /var/run/needrestart
  147. register: needrestart_file
  148. - name: reboot falls erforderlich
  149. ansible.builtin.reboot:
  150. when:
  151. - needrestart_file.stat.exists == True
  152. Ausgabe von playbook update.yaml (die letzten beiden tasks stat und reboot sind nicht in der Ausgabe, weil sie später hinzugefügt wurden)
  153. luna ist ausgeschaltet und nicht erreichbar.
  154. (ffhome) 20:55:59[frankb@berglap /datadisk/ffhome 4] ansible-playbook -b playbooks/update.yaml -i inventory/hosts.yaml --ask-vault-pass
  155. Vault password:
  156. PLAY [desktops,apus,altlast] ***************************************************************
  157. TASK [Gathering Facts] *********************************************************************
  158. [WARNING]: Platform linux on host berglap is using the discovered Python interpreter at
  159. /usr/bin/python3.10, but future installation of another Python interpreter could change the
  160. meaning of that path. See https://docs.ansible.com/ansible-
  161. core/2.17/reference_appendices/interpreter_discovery.html for more information.
  162. ok: [berglap]
  163. [WARNING]: Platform linux on host bergdesk is using the discovered Python interpreter at
  164. /usr/bin/python3.11, but future installation of another Python interpreter could change the
  165. meaning of that path. See https://docs.ansible.com/ansible-
  166. core/2.17/reference_appendices/interpreter_discovery.html for more information.
  167. ok: [bergdesk]
  168. fatal: [luna]: UNREACHABLE! => changed=false
  169. msg: 'Failed to connect to the host via ssh: ssh: connect to host 192.168.178.224 port 24: No route to host'
  170. unreachable: true
  171. [WARNING]: Platform linux on host berghofen is using the discovered Python interpreter at
  172. /usr/bin/python3.11, but future installation of another Python interpreter could change the
  173. meaning of that path. See https://docs.ansible.com/ansible-
  174. core/2.17/reference_appendices/interpreter_discovery.html for more information.
  175. ok: [berghofen]
  176. [WARNING]: Platform freebsd on host hoerde is using the discovered Python interpreter at
  177. /usr/local/bin/python3.9, but future installation of another Python interpreter could
  178. change the meaning of that path. See https://docs.ansible.com/ansible-
  179. core/2.17/reference_appendices/interpreter_discovery.html for more information.
  180. ok: [hoerde]
  181. TASK [Testausgabe] *************************************************************************
  182. ok: [bergdesk] =>
  183. msg: Hallo von bergdesk Ansible managed!
  184. ok: [berglap] =>
  185. msg: Hallo von berglap Ansible managed!
  186. ok: [berghofen] =>
  187. msg: Hallo von berghofen Ansible managed!
  188. ok: [hoerde] =>
  189. msg: Hallo von hoerde Ansible managed!
  190. TASK [df -h Aufruf] ************************************************************************
  191. ok: [berglap]
  192. ok: [bergdesk]
  193. ok: [berghofen]
  194. ok: [hoerde]
  195. TASK [debug] *******************************************************************************
  196. ok: [bergdesk] =>
  197. msg: '[''Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf'', ''/dev/sdb1 439G 98G 319G 24% /''] Debian'
  198. ok: [berglap] =>
  199. msg: '[''Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf'', ''/dev/mapper/system-root 444G 298G 124G 71% /''] Ubuntu'
  200. ok: [berghofen] =>
  201. msg: '[''Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf'', ''/dev/sda6 18G 5,1G 12G 30% /''] Debian'
  202. ok: [hoerde] =>
  203. msg: '[''Filesystem Size Used Avail Capacity Mounted on'', ''s3pool25/jail/hoerde.ffdo.net 3.9G 891M 3.0G 22% /''] FreeBSD'
  204. TASK [ping meine hosts] ********************************************************************
  205. ok: [berglap]
  206. ok: [bergdesk]
  207. ok: [berghofen]
  208. ok: [hoerde]
  209. TASK [apt update mit upgrade und autoremove] ***********************************************
  210. skipping: [hoerde]
  211. ok: [bergdesk]
  212. ok: [berglap]
  213. ok: [berghofen]
  214. PLAY RECAP *********************************************************************************
  215. bergdesk : ok=6 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
  216. berghofen : ok=6 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
  217. berglap : ok=6 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
  218. hoerde : ok=5 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
  219. luna : ok=0 changed=0 unreachable=1 failed=0 skipped=0 rescued=0 ignored=0