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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  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 (oder.) bin/activate
  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 xxxxx@prompt
  118. die verschlüsselte vault datei erzeugen
  119. anzeigen kann man die Datei mit ansible-vault view vault
  120. und entschlüsseln mit ansible-vault decrypt vault
  121. playbooks/update.yaml
  122. ---
  123. # name: update yaml
  124. - hosts: [desktops,apus,altlast]
  125. tasks:
  126. - name: Testausgabe
  127. debug: msg="Hallo von {{ ansible_hostname }} Ansible managed!"
  128. - name: df -h Aufruf
  129. command: df -h /
  130. changed_when: false
  131. register: df_cmd
  132. - debug:
  133. msg: '{{df_cmd.stdout_lines}} {{ansible_distribution }}'
  134. - name: ping meine hosts
  135. ansible.builtin.ping:
  136. changed_when: false
  137. # - name: Warte auf enter Taste
  138. # ansible.builtin.pause:
  139. - name: apt update mit upgrade und autoremove
  140. ansible.builtin.apt:
  141. update_cache: yes
  142. cache_valid_time: 3600
  143. autoremove: yes
  144. upgrade: 'yes'
  145. when: ansible_os_family == "Debian"
  146. - stat:
  147. path: /var/run/needrestart
  148. register: needrestart_file
  149. - name: reboot falls erforderlich
  150. ansible.builtin.reboot:
  151. when:
  152. - needrestart_file.stat.exists == True
  153. Ausgabe von playbook update.yaml (die letzten beiden tasks stat und reboot sind nicht in der Ausgabe, weil sie später hinzugefügt wurden)
  154. luna ist ausgeschaltet und nicht erreichbar.
  155. (ffhome) 20:55:59[frankb@berglap /datadisk/ffhome 4] ansible-playbook -b playbooks/update.yaml -i inventory/hosts.yaml --ask-vault-pass
  156. Vault password:
  157. PLAY [desktops,apus,altlast] ***************************************************************
  158. TASK [Gathering Facts] *********************************************************************
  159. [WARNING]: Platform linux on host berglap is using the discovered Python interpreter at
  160. /usr/bin/python3.10, but future installation of another Python interpreter could change the
  161. meaning of that path. See https://docs.ansible.com/ansible-
  162. core/2.17/reference_appendices/interpreter_discovery.html for more information.
  163. ok: [berglap]
  164. [WARNING]: Platform linux on host bergdesk is using the discovered Python interpreter at
  165. /usr/bin/python3.11, but future installation of another Python interpreter could change the
  166. meaning of that path. See https://docs.ansible.com/ansible-
  167. core/2.17/reference_appendices/interpreter_discovery.html for more information.
  168. ok: [bergdesk]
  169. fatal: [luna]: UNREACHABLE! => changed=false
  170. msg: 'Failed to connect to the host via ssh: ssh: connect to host 192.168.178.224 port 24: No route to host'
  171. unreachable: true
  172. [WARNING]: Platform linux on host berghofen is using the discovered Python interpreter at
  173. /usr/bin/python3.11, but future installation of another Python interpreter could change the
  174. meaning of that path. See https://docs.ansible.com/ansible-
  175. core/2.17/reference_appendices/interpreter_discovery.html for more information.
  176. ok: [berghofen]
  177. [WARNING]: Platform freebsd on host hoerde is using the discovered Python interpreter at
  178. /usr/local/bin/python3.9, but future installation of another Python interpreter could
  179. change the meaning of that path. See https://docs.ansible.com/ansible-
  180. core/2.17/reference_appendices/interpreter_discovery.html for more information.
  181. ok: [hoerde]
  182. TASK [Testausgabe] *************************************************************************
  183. ok: [bergdesk] =>
  184. msg: Hallo von bergdesk Ansible managed!
  185. ok: [berglap] =>
  186. msg: Hallo von berglap Ansible managed!
  187. ok: [berghofen] =>
  188. msg: Hallo von berghofen Ansible managed!
  189. ok: [hoerde] =>
  190. msg: Hallo von hoerde Ansible managed!
  191. TASK [df -h Aufruf] ************************************************************************
  192. ok: [berglap]
  193. ok: [bergdesk]
  194. ok: [berghofen]
  195. ok: [hoerde]
  196. TASK [debug] *******************************************************************************
  197. ok: [bergdesk] =>
  198. msg: '[''Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf'', ''/dev/sdb1 439G 98G 319G 24% /''] Debian'
  199. ok: [berglap] =>
  200. msg: '[''Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf'', ''/dev/mapper/system-root 444G 298G 124G 71% /''] Ubuntu'
  201. ok: [berghofen] =>
  202. msg: '[''Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf'', ''/dev/sda6 18G 5,1G 12G 30% /''] Debian'
  203. ok: [hoerde] =>
  204. msg: '[''Filesystem Size Used Avail Capacity Mounted on'', ''s3pool25/jail/hoerde.ffdo.net 3.9G 891M 3.0G 22% /''] FreeBSD'
  205. TASK [ping meine hosts] ********************************************************************
  206. ok: [berglap]
  207. ok: [bergdesk]
  208. ok: [berghofen]
  209. ok: [hoerde]
  210. TASK [apt update mit upgrade und autoremove] ***********************************************
  211. skipping: [hoerde]
  212. ok: [bergdesk]
  213. ok: [berglap]
  214. ok: [berghofen]
  215. PLAY RECAP *********************************************************************************
  216. bergdesk : ok=6 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
  217. berghofen : ok=6 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
  218. berglap : ok=6 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
  219. hoerde : ok=5 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
  220. luna : ok=0 changed=0 unreachable=1 failed=0 skipped=0 rescued=0 ignored=0