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

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