| Zeile 1: |
Zeile 1: |
| − | Ansible ist ein so genanntes Orchestrierungswerkzeug, mit dem man Computer automatisch konfigurieren kann. Dazu verwendet Ansible so genannte Playbooks. | + | [https://docs.ansible.com/ansible/latest/index.html Ansible] ist ein so genanntes Orchestrierungswerkzeug, mit dem man Computer automatisch konfigurieren kann. Dazu verwendet Ansible so genannte Playbooks. |
| | | | |
| | | | |
| | | | |
| − | Siehe
| |
| − | * [https://www.informatik-aktuell.de/entwicklung/programmiersprachen/einfuehrung-in-ansible.html Einführung in Ansible]
| |
| | | | |
| | == Vorbereitung == | | == Vorbereitung == |
| Zeile 11: |
Zeile 9: |
| | | | |
| | * Installation eines Minimalsystems | | * Installation eines Minimalsystems |
| | + | * Einrichten eines Benutzers speziell für Ansible (Beispiel, das bereits Ansible nutzt, siehe unten) |
| | * Installation der Pakete | | * Installation der Pakete |
| | ** openssh-server | | ** openssh-server |
| | ** sudo | | ** sudo |
| − | *** Der sudo-Gruppe das passwortlose Ausführen erlauben (siehe [[Sudo]]) | + | *** Der ansible-Benutzer das passwortlose Ausführen erlauben (siehe [[Sudo]]) |
| | ** python3 | | ** python3 |
| | *** Verlinke python3: <code>sudo ln -s /usr/bin/python3 /usr/bin/python</code> oder | | *** Verlinke python3: <code>sudo ln -s /usr/bin/python3 /usr/bin/python</code> oder |
| Zeile 21: |
Zeile 20: |
| | hosts: | | hosts: |
| | blacky: | | blacky: |
| − | ansible_host: blacky.fritz.box | + | ansible_host: blacky.fritz.box |
| − |
| |
| | children: | | children: |
| | home: | | home: |
| Zeile 32: |
Zeile 30: |
| | vars: | | vars: |
| | ansible_python_interpreter: /usr/bin/python3 | | ansible_python_interpreter: /usr/bin/python3 |
| | + | |
| | + | ==== Einrichten eines Ansible-Benutzers ==== |
| | + | |
| | + | Das folgende Skript <code>setupAnsible.yaml</code> geht davon aus, dass auf dem Zielrechner ein frisches [[Ubuntu]] 18.04 installiert ist, auf das man sich mit [[SSH]] als normaler Nutzer einwählen kann. Dieser Nutzer ist auch in der sudo-Gruppe und kann mittels Eingabe eines sudo-Passworts root-Rechte bekommen. |
| | + | |
| | + | <pre> |
| | + | # Call this file with |
| | + | # ansible-playbook -l YOURRECHNER -K -v setupAnsible.yaml |
| | + | |
| | + | - hosts: |
| | + | - all |
| | + | |
| | + | tasks: |
| | + | - name: create group ansible |
| | + | become: true |
| | + | group: |
| | + | name: ansible |
| | + | gid: 425 |
| | + | |
| | + | - name: create user ansible |
| | + | become: true |
| | + | user: |
| | + | name: ansible |
| | + | group: ansible |
| | + | uid: 425 |
| | + | password: "$6$rXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXh." |
| | + | # encrypted password created with |
| | + | # mkpasswd --method=sha-512 |
| | + | # You can make it really complicated, since you do not need it again. |
| | + | state: present |
| | + | |
| | + | - name: add user ansible to sudoers with no passwd |
| | + | become: true |
| | + | copy: |
| | + | src: etc/sudoers.d/ansible |
| | + | dest: /etc/sudoers.d/ansible |
| | + | mode: "0440" |
| | + | validate: "visudo -cf %s" |
| | + | |
| | + | - name: set my authorized key for user ansible |
| | + | become: true |
| | + | authorized_key: |
| | + | key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}" |
| | + | user: ansible |
| | + | state: present |
| | + | </pre> |
| | + | |
| | + | Nach Ausführung dieses Playbooks mittels |
| | + | ansible-playbook -i inventory.yaml -l YOURRECHNER -K -v setupAnsible.yaml |
| | + | |
| | + | wird der Nutzer <code>ansible</code> in die <code>inventory.yaml</code> als Standard-Ansible-Nutzer eingetragen: |
| | + | all: |
| | + | hosts: |
| | + | blacky: |
| | + | ansible_host: blacky.fritz.box |
| | + | '''ansible_ssh_user: ansible''' |
| | | | |
| | === Vorbereitung des Kontrollrechners === | | === Vorbereitung des Kontrollrechners === |
| Zeile 57: |
Zeile 111: |
| | blacky: | | blacky: |
| | ansible_host: blacky.fritz.box | | ansible_host: blacky.fritz.box |
| | + | ansible_user: ansible |
| | | | |
| | In YAML werden die Zeilen mit Leerzeichen, nicht mit Tabs eingerückt. | | In YAML werden die Zeilen mit Leerzeichen, nicht mit Tabs eingerückt. |
| | | | |
| − | === Ping-Test === | + | Siehe |
| | + | * https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html |
| | + | |
| | + | === Einfache Kommandos === |
| | + | ==== Ping-Test ==== |
| | | | |
| | ansible all -m ping | | ansible all -m ping |
| | | | |
| | + | ==== Ausführen eines Shell-Kommandos ==== |
| | + | |
| | + | Mit Ansible lässt sich auch jedes beliebige [[Shell]]-Kommando ausführen: |
| | + | |
| | + | ansible zielrechner -m command -a "whoami" |
| | + | |
| | + | Will man das Kommando als root ausführen, setzt man <code>--become</code> hinzu: |
| | + | ansible pia2016 --become -m command -a "whoami" |
| | + | |
| | + | Das hier verwendete Modul command nutzt jedoch nicht die Shell-Erweiterungen. Dafür müsste man das Modul <code>shell</code> nennen. |
| | + | |
| | + | ==== Debug-Hilfe ==== |
| | + | |
| | + | Das Modul "Debug" kann Hilfsausgaben erzeugen. Beispiel: |
| | + | ansible blacky -m debug -a <nowiki>'msg="{{ ansible_ssh_user }}"'</nowiki> |
| | + | |
| | + | === Playbooks === |
| | | | |
| | + | Mit Playbooks kann man automatisieren, welcher Rechner welchen Zustand erreichen soll. |
| | + | |
| | + | Dazu nutzt man Tasks in Form von Modulaufrufen (deklarative Ansible-Form von Befehlen), Rechnergruppen und Rollen. |
| | + | |
| | + | ==== Package-Updates ==== |
| | + | |
| | + | Folgender Auszug aus den Tasks eines Playbooks sollte das Paket-Updaten auf einem [[Debian]]- oder [[Ubuntu]]-System ermöglichen: |
| | + | |
| | + | - name: update and upgrade apt packages |
| | + | become: true |
| | + | apt: |
| | + | name: "*" |
| | + | state: latest |
| | + | install_recommends: false |
| | + | update_cache: true |
| | + | |
| | + | === Roles === |
| | + | |
| | + | Roles ist ein Konzept, um bestimmte Funktionalitäten zu bündeln; diese können dann auf verschiedenen Rechnern wiederverwendet werden. |
| | + | |
| | + | Mit ansible-galaxy können diese Rollen auch leicht an andere Benutzer weitergegeben werden. |
| | + | |
| | + | ==== Nginx Ansible Role ==== |
| | + | |
| | + | Die offizielle Rolle für den [[Nginx]]-Server nennt sich [https://galaxy.ansible.com/nginxinc/nginx nginxinc.nginx]. Sie lässt sich folgendermaßen installieren: |
| | + | |
| | + | ansible-galaxy install nginxinc.nginx |
| | + | |
| | + | Die Rolle lässt sich dann folgendermaßen ins Playbook integrieren: |
| | + | <pre> |
| | + | |
| | + | - hosts: NGINXRECHNER |
| | + | roles: |
| | + | - role: galaxy/nginxinc.nginx |
| | + | vars: |
| | + | nginx_debug_output: true |
| | + | nginx_install_from: os_repository |
| | + | </pre> |
| | + | |
| | + | === Ansible und Container === |
| | + | |
| | + | Im Zusammenspiel mit podman bietet ansible-bender eine Möglichkeit Container-Images zu erstellen und zu betreiben. |
| | + | |
| | + | Auch das reine Ansible bietet im Zusammenspiel mit Docker vielfältige Möglichkeiten Docker-Container-Images zu erstellen und laufen zu lassen. Siehe |
| | + | * https://tech.labs.oliverwyman.com/blog/2019/08/30/docker-without-dockerfiles/ |
| | + | |
| | + | === Ansible und Hetzner Cloud === |
| | + | Siehe |
| | + | * https://www.unixwitch.de/de/sysadmin/tools/hcloud-ansible |
| | + | * https://community.hetzner.com/tutorials/howto-hcloud-ansible |
| | + | |
| | + | == Fehlerbehebung == |
| | + | |
| | + | Ansible hat Probleme, wenn die kontrollierende Maschine auf Python2 und die kontrollierte auf Python3 läuft. Das äußert sich z.B. mit folgender Warnung:<cite> |
| | + | [WARNING]: Module invocation had junk after the JSON data: AttributeError("module 'platform' |
| | + | has no attribute 'dist'") |
| | + | </cite> |
| | + | |
| | + | Daher lässt man auf dem Zielrechner (hier: <code>TARGET</code>) auch Python2 laufen, indem man die <code>inventory.yaml</code> ändert: |
| | + | |
| | + | TARGET: |
| | + | ansible_python_interpreter: "/usr/bin/python2" |
| | + | |
| | + | == Weiterführendes == |
| | + | |
| | + | Siehe |
| | + | * [https://www.informatik-aktuell.de/entwicklung/programmiersprachen/einfuehrung-in-ansible.html Einführung in Ansible] |
| | + | * [https://www.grund-wissen.de/linux/shell/ansible.html Aktualisieren von Knoten mit Hilfe von Ansible] |
| | | | |
| | ------- | | ------- |
| | [[Category:Linux]] | | [[Category:Linux]] |