Was ist Ansible?

Ansible ist ein Framework, das mit sogenannten “Playbooks” gesteuert wird. Diese rufen einzelne Module auf, die dann Aktionen auf per SSH zugänglichen Servern durchführen. Die Liste der vorhandenen Module ist lang und im Module Index zu finden.

Ansible arbeitet im Gegensatz zu Chef oder Puppet ohne einen zentralen Server, die Playbooks werden entweder von einem Jumphost oder der lokalen Workstation ausgeführt.

Natürlich gibt es mit AWX auch eine zentrale Komponente von der aus Playbooks ausgeführt werden können.

Im Prinzip kann man alles was Ansible tut, auch per SSH oder Shell-Skript ausführen. Ansible abstrahiert dabei die Fehlerbehandlung und macht Befehle auch mehrfach ausführbar. z.B. “Service X soll gestartet sein” - im Skript würde man systemctl start foo benutzen, oder service foo start. Dieses kann manchmal zur Folge haben, daß Programme doppelt gestartet werden, grade wenn die Skripte komisch sind.

In Ansible übernimmt das das service Modul, diesem gibt man den Wunsch an, daß ein Dienst gestartet sein soll, und auch noch beim Systemstart automatisch gestartet werden soll.

- name: start and enable apache
  service:
    name: apache2
    state: started
    enabled: true

Diesen Block kann ich in einem Play oder einer Rolle benutzen. Plays werden in einem Playbook aufgeführt. Ein Play kann entweder direkte Tasks, also Module, enthalten oder eine Anzahl von Rollen, die auf die jeweiligen Server angewendet werden können.

Wie kommt Ansible jetzt an die Rechner? Nun, dafür gibt es das inventory - eine Textdatei mit allen Hosts, die man verwalten will.

Installation

Linux

Debian

$ apt install ansible

CentOS

$ dnf install ansible

MacOS

$ brew install ansible

Mein erstes Playbook

Nehmen wir mal an, wir wollen auf dem lokalen Rechner sicherstellen, daß das Paket vim installiert ist. Dazu brauchen wir folgende 3 Dateien:

playbook.yml

---
- name: install vim
  hosts: all
  become: true
  tasks:
    - name: install vim
      package:
        name: vim 
        state: present

ansible.cfg

[default]
inventory = inventory

inventory

[localhost]
localhost

Der aktuelle Benutzer sollte per SSH ohne Paßwort auf den lokalen Rechner zugreifen können und ohne Paßwort sudo nutzen können.

Nach dem Erstellen der Dateien können wir das Playbook mit ansible-playbook playbook.yml laufen lassen. Anschließend sollte auf dem Rechner das Paket vim installiert sein.