Ansible Automatisierung.page 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. ---
  2. format: markdown
  3. categories: Netz-Infrastruktur, Backbone, Supernodes
  4. title: Server-Automatisierung
  5. ...
  6. # Automatisierung der Konfiguration von Supernodes/Gateways und anderer Server (als Link in ff@home einfuegen!)
  7. ## Aufbau und Konfiguration 1) Steuerungsrechner 2) Repository 3) Zielrechner
  8. ## 1) Steuerungsrechner
  9. Der Steuerungsrechner (Control Host) hält die Konfigurationen der Zielrechner (target hosts) und die Ansible Playbooks zur Anpassung der Zielrechner vor.
  10. Ein Steuerungsrechner wird mit Python3 und Ansible in einer virtuellen venv-Umgebung verwendet:
  11. ansible [core 2.19.3]
  12. config file = /home/m-an/git/snng-roles-l2tp/ansible.cfg
  13. configured module search path = ['/home/m-an/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  14. ansible python module location = /home/m-an/git/venv/lib/python3.12/site-packages/ansible
  15. ansible collection location = /home/m-an/.ansible/collections:/usr/share/ansible/collections
  16. executable location = /home/m-an/git/venv/bin/ansible
  17. python version = 3.12.3 (main, Nov 6 2025, 13:44:16) [GCC 13.3.0] (/home/m-an/git/venv/bin/python3)
  18. jinja version = 3.1.6
  19. pyyaml version = 6.0.3 (with libyaml v0.2.5)
  20. Die Ansibleversion des Steuerungsrechners ausserhalb der venv-Umgebung kann sich wegen Systemupdates unterscheiden:
  21. ansible [core 2.19.4]
  22. config file = /home/m-an/git/snng-roles-l2tp/ansible.cfg
  23. configured module search path = ['/home/m-an/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  24. ansible python module location = /usr/lib/python3/dist-packages/ansible
  25. ansible collection location = /home/m-an/.ansible/collections:/usr/share/ansible/collections
  26. executable location = /usr/bin/ansible
  27. python version = 3.12.3 (main, Nov 6 2025, 13:44:16) [GCC 13.3.0] (/usr/bin/python3)
  28. jinja version = 3.1.2
  29. pyyaml version = 6.0.1 (with libyaml v0.2.5)
  30. Diese Unterschiede können zu Konflikten bei der Playbookausführung führen, deshalb sollten während der Erstellung eines Playbooks weder die Ansible- noch die Pythonversion verändert werden.
  31. ## Python venv-Umgebung erstellen
  32. ✅ 1. Benötigte Pakete installieren
  33. Unter Debian heißt das Paket für virtuelle Umgebungen meist python3-venv:
  34. $ sudo apt update
  35. $ sudo apt install python3-venv
  36. ✅ 2. Virtuelle Umgebung erstellen
  37. Wechsle mit cd xyz in den gewünschten Projektordner und führe aus:
  38. ~/git/xyz $ python3 -m venv venv
  39. Dadurch entsteht ein Verzeichnis venv/, das unabhängig vom hostsystem die nötigen Python-Pakete enthält.
  40. ✅ 3. venv aktivieren
  41. ~/git/xyz $ source venv/bin/activate
  42. Du erkennst die aktivierte venv an der (venv)-Präfix in der Shell.
  43. ✅ 4. Pakete installieren
  44. Jetzt nutzt pip die isolierte Umgebung:
  45. (venv)~/git/xyz $ pip install <paketname>
  46. oder zum Beispiel:
  47. (venv)~/git/xyz $ pip install ansible
  48. um genau in diese venv-Umgebung ansible zu installieren.
  49. ✅ 5. venv wieder deaktivieren, (venv) erscheint nicht mehr im Prompt:
  50. (venv)~/git/xyz $ deactivate
  51. ~/git/xyz $
  52. ## 2) Aufbau des Repository
  53. Das Repository ist unter gogs.ffdo.de im Verzeichnis snng-roles-l2tp zu finden. Dieses Repository ist geforkt von ffdo-infrastruktur/ffdo-ansible-l2tp.
  54. Das komplette Playbook zur Erstellung eines Gateways/Supernodes heisst ng-gateway.yml, über Tags können daraus einzelne Playbooks isoliert ausgeführt werden.
  55. Alle Playbooks werden als root ausgeführt, eine Anmeldung auf den Zielrechnern als root ist grundsätzlich ausgeschlossen und für User nur über ssh möglich.
  56. Dafür müssen für jeden User, der das Playbook ausführen soll, der publickey auf die Zielrechner kopiert werden.
  57. Das Passwort für die privelage-escalation, also für sudo ist abgeschaltet. Ein Aufruf für den Server snng-dus03 lautet dann:
  58. (venv)$ ansible-playbook -b ng-gateway.yml -v -l snng-dus03 -u <username>
  59. oder mit einem Tag, um nur ein oder mehrere Teile des Playbooks auszuführen:
  60. (venv)$ ansible-playbook -b ng-gateway.yml -v -l snng-dus03 --tags "<tagname>" -u <username>
  61. Die anderen dort vorhandenen Playbooks dienen zu Testzwecken.
  62. ## Umgang mit dem Repository und mit git
  63. Wenn nur wenige Personen im Repo arbeiten, ist es sinnvoll, vor jedem Arbeitstreffen ein git pull durchzuführen und nach Abschluss der Arbeiten ein git push.
  64. Damit werden Forks und evtl. notwendige --rebase vermieden.
  65. ## 3) Zielrechner
  66. Ein Zielrechner oder eine Ziel-VM müssen folgende Elemente als Rohzustand enthalten, damit sie per ansible konfiguriert werden können:
  67. - ein aktuelles Debian-Betriebssystem mit python3
  68. - eine ip, also einen Netzzugang
  69. - einen ssh-Zugang für die Personen, die von ihrem Steuerungsrechner aus Playbooks auf dem Zielrechnmer ausführen möchten
  70. - ansible selbst ist **nicht** erforderlich
  71. ## historischer Stand
  72. Es gab Ansätze eine Community (Supernodes + Map Server) in Ansible zu beschreiben. Das Playbook kann
  73. [hier](https://github.com/dereulenspiegel/ffdo-ansible) Stand: 09.12.25 gefunden werden.
  74. Auf Basis dieses Playbook wurden einige Rollen
  75. als eigenständige Rollen ausgegliedert und in eigene Repositories abgespalten
  76. * [Alfred](https://github.com/dereulenspiegel/ansible-alfred) Stand: 09.12.25
  77. * [Alfred-json](https://github.com/dereulenspiegel/ansible-alfred-json) -"-
  78. * [fastd](https://github.com/dereulenspiegel/ansible-fastd) -"-
  79. Diese Rollen können eigenständig benutzt werden und sollten keine bzw. wenige Abhängigkeiten zu anderen Rollen haben.
  80. Diese Rollen werden auch im oben genannten Playbook wiederverwendet.
  81. Inzwischen werden die Repos des Freifunk Dortmund unter git.ffdo.de gehostet und dort über git (siehe oben) bearbeitet.