Back to Blog
ansible automation tutorial

Ansible für Einsteiger: Dein erstes Playbook

Ansible macht Server-Administration reproduzierbar. Kein "das hab ich auf Server 3 vergessen" mehr.

Was ist Ansible?

  • Agentless: Kein Client auf den Servern nötig
  • SSH-basiert: Nutzt deine bestehenden SSH-Keys
  • YAML: Lesbare Konfiguration
  • Idempotent: Kann mehrfach laufen ohne Schaden

Installation

Auf deinem lokalen Rechner (Control Node):

# Debian/Ubuntu
apt install ansible

# macOS
brew install ansible

# pip
pip install ansible

Grundkonzepte

Inventory

Liste deiner Server. inventory.yml:

all:
  hosts:
    web1:
      ansible_host: 192.168.1.10
    web2:
      ansible_host: 192.168.1.11
    db1:
      ansible_host: 192.168.1.20

  children:
    webservers:
      hosts:
        web1:
        web2:
    databases:
      hosts:
        db1:

Playbook

Die Anweisungen. update.yml:

---
- name: Update all servers
  hosts: all
  become: true

  tasks:
    - name: Update apt cache
      apt:
        update_cache: true
        cache_valid_time: 3600

    - name: Upgrade all packages
      apt:
        upgrade: dist

    - name: Check if reboot required
      stat:
        path: /var/run/reboot-required
      register: reboot_required

    - name: Reboot if required
      reboot:
        msg: "Reboot by Ansible"
        reboot_timeout: 300
      when: reboot_required.stat.exists

Dein erstes Playbook ausführen

ansible-playbook -i inventory.yml update.yml

Was passiert:

  1. Ansible verbindet sich per SSH zu allen Hosts
  2. Führt die Tasks nacheinander aus
  3. Zeigt Ergebnis pro Host

Nützliche Befehle

Ping alle Server

ansible all -i inventory.yml -m ping

Ad-hoc Command

# Uptime aller Server
ansible all -i inventory.yml -a "uptime"

# Nur Webserver
ansible webservers -i inventory.yml -a "uptime"

Playbook testen (Dry Run)

ansible-playbook -i inventory.yml update.yml --check

Verbosity erhöhen

ansible-playbook -i inventory.yml update.yml -v
ansible-playbook -i inventory.yml update.yml -vvv

Praktisches Beispiel: Docker installieren

install-docker.yml:

---
- name: Install Docker on all servers
  hosts: all
  become: true

  tasks:
    - name: Install required packages
      apt:
        name:
          - curl
          - gnupg
          - ca-certificates
        state: present
        update_cache: true

    - name: Check if Docker is installed
      command: docker --version
      register: docker_installed
      ignore_errors: true
      changed_when: false

    - name: Install Docker via get.docker.com
      shell: curl -fsSL https://get.docker.com | bash
      when: docker_installed.rc != 0

    - name: Add user to docker group
      user:
        name: "{{ ansible_user }}"
        groups: docker
        append: true

    - name: Start Docker service
      systemd:
        name: docker
        state: started
        enabled: true

Variablen nutzen

vars.yml:

docker_users:
  - daniel
  - deploy

Im Playbook:

- name: Add users to docker group
  user:
    name: "{{ item }}"
    groups: docker
    append: true
  loop: "{{ docker_users }}"

Ausführen:

ansible-playbook -i inventory.yml install-docker.yml -e @vars.yml

Ansible.cfg

Weniger Tipparbeit. ansible.cfg:

[defaults]
inventory = inventory.yml
remote_user = daniel
private_key_file = ~/.ssh/id_ed25519

[privilege_escalation]
become = true
become_method = sudo

Jetzt reicht:

ansible-playbook update.yml

Fazit

Das war nur die Spitze des Eisbergs. Ansible kann:

  • Komplette Server provisionieren
  • Konfigurationen verwalten
  • Deployments automatisieren
  • Mehrere Umgebungen managen

Im nächsten Post: Ansible Inventory für viele Server.

Made with by Daniel Hiller

|