Synchronisierung mittels ``unison`` und ``ansible`` =================================================== Unison ------ ... Ansible ------- Ansible ist ein Programm, mit dessen Hilfe man beispielsweise Konfigurations-Dateien gleichzeitig auf beliebig vielen Rechnern aktuell halten kann; man kann sogar ganze Betrieb-Systeme mittels Ansible auf dem jeweils gleichen Stand halten. Ansible kann mittels :ref:`apt ` über das gleichnamige Paket installiert werden: .. code-block:: sh sudo aptitude install ansible Der grundlegende Workflow von Ansible ist etwa folgender: * Auf einem Hauptrechner ("Server") werden einzelne Vorgänge ("Tasks") definiert, die dann auf den Zielrechnern ("Hosts") ausgeführt werden sollen. * Die einzelnen Hosts werden beim Aufruf von Ansible via :ref:`SSH ` kontaktiert. Anstelle der manuellen Eingabe von Passwörtern werden dabei meist :ref:`SSH-Schlüssel ` verwendet. Ähnlich wie man sich mit ``ssh`` auf einem entfernten Rechner mit einem bestimmten Benutzernamen einloggen und dort Programme aufrufen kann, so kann man dies mittels Ansible tun; dabei kann allerdings zum einen die Festlegung der einzelnen Programm-Aufrufe sehr übersichtlich organisiert werden, zum anderen kann man derartige Task-Listen gleichzeitig vom Server aus auf mehreren Client-Rechnern ausführen lassen. Jeder Rechner, auf dem Ansible installiert ist, kann als Server Tasks auf beliebig vielen Rechnern ausführen, sofern diese über das Netzwerk erreichbar sind und man sich auf diesen via SSH einloggen kann. Auf Benutzer-Ebene kann dies beispielsweise zur Synchronisierung von Konfigurationsdateien nützlich sein, auf Administrator-Ebene beispielsweise zur parallelen Installation von Programmen auf mehreren Rechnern, zum Neustart von Server-Diensten, usw. Zur Festlegung der Zielrechner, die auch mit Alias-Namen versehen und/oder zu Gruppen gebündelt werden können, sowie der eigentlichen Verwaltungsaufgaben werden Konfigurationsdateien mit `YAML `__-Syntax verwendet. .. _Beispiel Aktualisierungen im lokalen Netzwerk: .. rubric:: Beispiel: Aktualisierungen im lokalen Netzwerk Mittels Ansible kann man als einfaches Beispiel auf mehreren Rechnern des lokalen Netzwerks eine Aktualisierung der Paketquellen sowie einen Upgrade aller installierten Programme auf die aktuell verfügbare Version erreichen; Ansible unterstützt dabei sowohl das beispielsweise unter Debian, Ubuntu und Linux Mint übliche Paketverwaltungs-Programm :ref:`apt ` wie auch den in Python geschriebenen Paket-Manager ``yum``. Zur Festlegung der Zielrechner kann man beispielsweise einen Ordner ``~/ansible`` anlegen und darin eine Datei ``~/ansible/ansible_hosts`` mit folgendem Inhalt anlegen: .. code-block:: yaml --- # Ansible Hosts [servers] 192.168.2.101 192.168.2.102 192.168.2.103 Mit dieser einfachen Form können alle aufgelisteten Netzwerk-Adressen unter der Sammel-Bezeichnung ``servers`` angesprochen werden; im realen Einsatz müssen die obigen Netzwerk-Adressen durch die tatsächlichen Netzwerk-Adressen ersetzt werden, die man sich beispielsweise mittels ``nmap -sP 192.168.2.0/24`` anzeigen lassen kann (die meisten Router weisen lokalen Rechnern standardmäßig die Adressen ``192.168.1.XXX`` oder ``192.168.2.XXX`` zu). Möchte man, dass Ansible standardmäßig auf diese Host-Datei zurückgreift, so kann man folgende Anweisung in einer Shell eingeben (oder an die Konfigurationsdatei ``~/.bashrc`` beziehungsweise ``~/.zshrc`` anfügen): .. code-block:: sh export ANSIBLE_HOSTS=~/ansible/ansible_hosts Die auszuführenden Tasks können ebenfalls in einer YAML-Datei ('Playbook') abgelegt werden. So kann man beispielsweise eine Datei ``~/ansible/upgrade-servers.yml`` mit folgendem Inhalt anlegen: .. code-block:: yaml - hosts: servers sudo: true tasks: - name: update apt sources apt: update_cache=yes - name: upgrade apt packages apt: upgrade=yes Hat man auf all diesen Rechnern Netzwerk-Zugriff und Admin-Rechte, so kann man anschließend Ansible mit folgender Anweisung aufrufen: .. code-block:: sh ansible-playbook ~/ansible/upgrade-server.yml -u -K Durch die Option ``-u`` wird der Benutzer auf dem entfernten Rechner festgelegt, durch die Option ``-K`` wird nach dem jeweiligen Passwort gefragt. ansible-playbook update-servers.yml --ask-sudo-pass .. https://techsomnia.net/2013/11/ansible-apt-get-updateupgrade/ Ansible Modules: http://docs.ansible.com/ansible/modules_by_category.html Relevant für Backups!?: http://docs.ansible.com/ansible/copy_module.html http://docs.ansible.com/ansible/fetch_module.html