Ansible Grundlagen

6 Kernkonzepte
Die wichtigsten Ansible-Konzepte für die Automatisierung: Inventory · Playbooks · Modules · Roles · Ad-Hoc · Variables Ansible ist ein agentenloses Automatisierungstool für Konfigurationsmanagement, Deployment und Orchestrierung. Diese Konzepte sind essenziell für die effiziente Automatisierung von IT-Infrastrukturen.

Inventory – Hosts und Gruppen verwalten

/etc/ansible/hosts · inventory.ini · groups · ansible_host
# inventory.ini webserver ansible_host=192.168.1.10 dbserver ansible_host=192.168.1.20 # Gruppen [web] webserver [db] dbserver

Inventory definiert die Hosts und Gruppen, die Ansible verwaltet. Es kann als einfache INI-Datei, YAML-Datei oder dynamisches Inventory (z.B. AWS, Azure) bereitgestellt werden.

Beispiele
# INI-Format
server1 ansible_host=10.0.0.10 ansible_user=admin
[webservers]
web1 ansible_host=192.168.1.10
web2 ansible_host=192.168.1.11
[dbservers]
db1 ansible_host=192.168.1.20
[all:vars]
ansible_user=ubuntu
# YAML-Format (inventory.yaml)
all:
hosts:
server1:
ansible_host: 10.0.0.10
Tipp: Verwenden Sie ansible-inventory --list um das vollständige Inventory mit allen Hosts und Gruppen anzuzeigen. Das ist besonders nützlich bei dynamischen Inventories.

Playbooks – Konfigurationen automatisieren

YAML · tasks · hosts · become · handlers
--- - hosts: webservers become: yes tasks: - name: Installiere nginx apt: name: nginx state: present

Playbooks sind YAML-Dateien, die die gewünschte Konfiguration beschreiben. Sie enthalten eine Liste von tasks, die auf bestimmten Hosts ausgeführt werden.

Beispiele
---
- hosts: webservers
become: yes
vars:
http_port: 80
tasks:
- name: Installiere Nginx
apt:
name: nginx
state: present
- name: Starte Nginx
service:
name: nginx
state: started
enabled: yes
# Handlers
handlers:
- name: Reload nginx
service:
name: nginx
state: reloaded
Tipp: Playbooks sind idempotent – sie können mehrfach ausgeführt werden, ohne den Zustand zu verändern, wenn bereits der gewünschte Zustand erreicht ist.

Modules – Werkzeuge für Tasks

apt · yum · copy · template · service · command · file
- name: Datei kopieren copy: src: /local/datei.conf dest: /etc/datei.conf owner: root mode: '0644'

Modules sind die ausführbaren Einheiten in Ansible. Sie führen spezifische Aufgaben aus – z.B. Pakete installieren, Dateien kopieren oder Dienste starten.

Häufige Module

Modul Beschreibung
apt / yum / dnf Paketverwaltung (Ubuntu/Debian, RHEL/CentOS)
copy / template Dateien kopieren oder mit Jinja2-Templates generieren
service / systemd Dienste starten, stoppen, neu laden
file Dateien und Verzeichnisse verwalten (Berechtigungen, Eigentümer)
command / shell Beliebige Befehle ausführen (shell = mit Shell-Interpretation)
git Git-Repository klonen oder aktualisieren
docker_container Docker-Container verwalten
Beispiele
# Paket installieren
- name: Installiere Python3
apt:
name: python3
state: present
# Template anwenden
- name: Konfiguration generieren
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
owner: root
mode: '0644'
Tipp: Nutzen Sie ansible-doc <modul> um die vollständige Dokumentation eines Moduls anzuzeigen – inklusive aller Parameter und Beispiele.

Roles – Wiederverwendbare Strukturen

roles/ · tasks/ · handlers/ · vars/ · defaults/ · templates/
# Verzeichnisstruktur einer Role roles/ nginx/ tasks/main.yml handlers/main.yml vars/main.yml templates/nginx.conf.j2 files/index.html

Roles sind strukturierte, wiederverwendbare Einheiten für Playbooks. Sie organisieren Tasks, Handler, Variablen und Templates in einem standardisierten Verzeichnisbaum.

Beispiele
# Playbook mit Roles
---
- hosts: webservers
become: yes
roles:
- common
- nginx
- postgresql
# tasks/main.yml einer Role
---
- name: Installiere Nginx
apt:
name: nginx
state: present
- name: Starte Nginx
service:
name: nginx
state: started
enabled: yes
Tipp: Nutzen Sie ansible-galaxy init <role-name> um automatisch das Grundgerüst einer Role zu erstellen. Teilen Sie Ihre Roles über Ansible Galaxy.

Ad-Hoc Commands – Einzelne Befehle ausführen

ansible · -m · -a · -i · --check
ansible webservers -m ping ansible all -m apt -a "name=nginx state=present" -b ansible webservers -m copy -a "src=/local/file dest=/remote/file"

Ad-Hoc Commands führen einzelne Tasks auf einer Gruppe von Hosts aus – ohne Playbook. Sie sind ideal für schnelle Operationen, Tests und Überwachung.

Beispiele
# Ping aller Hosts
ansible all -m ping
# Paket installieren (mit become)
ansible webservers -m apt -a "name=nginx state=present" -b
# Datei kopieren
ansible webservers -m copy -a "src=./config.conf dest=/etc/config.conf owner=root mode=0644" -b
# Befehl ausführen
ansible dbservers -m command -a "df -h"
# Service neu starten
ansible webservers -m service -a "name=nginx state=restarted" -b
# Trockenlauf (--check)
ansible webservers -m apt -a "name=nginx state=present" --check -b
Tipp: Ad-Hoc-Befehle sind perfekt für schnelle Änderungen und Überprüfungen. Kombinieren Sie sie mit --check für einen Trockenlauf, um Änderungen zu testen.

Variables – Dynamische Konfiguration

vars · group_vars · host_vars · jinja2 · {{ }}
# In Playbook vars: app_port: 8080 # In Template (Jinja2) {{ app_port }} # In group_vars/all.yml ansible_user: ubuntu

Variables ermöglichen die dynamische Konfiguration von Playbooks. Sie können in Playbooks, Inventory, group_vars, host_vars und Templates definiert werden.

Beispiele
# group_vars/webservers.yml
---
nginx_port: 80
# host_vars/web1.yml
---
server_name: web1.example.com
# Verwendung im Template (nginx.conf.j2)
server {
listen {{ nginx_port }};
server_name {{ server_name }};
root /var/www/html;
}
# Variable mit Default
{{ app_port | default(3000) }}
# Facts (automatische Systeminformationen)
{{ ansible_os_family }} # Debian, RedHat, etc.
Tipp: Nutzen Sie ansible -m setup host um alle verfügbaren Facts (Systeminformationen) eines Hosts anzuzeigen. Diese können Sie in Playbooks und Templates verwenden.

Ansible Grundkonzepte im Überblick

Agentenlos Kein Agent auf Zielsystemen
Nutzt SSH / WinRM
YAML Playbooks in YAML
Menschlich lesbar
Idempotent Mehrfach ausführbar
Zustand bleibt gleich
SSH Standard für Linux
WinRM für Windows
Galaxy Shared Roles
Ansible Galaxy
AWX Web-UI & API
Red Hat Ansible Automation Platform

Quick Summary

Inventory
Hosts & Gruppen
Playbooks
Konfigurationsdateien
Modules
Ausführbare Einheiten
Roles
Wiederverwendbare Strukturen
Ad-Hoc
Einzelne Befehle
Variables
Dynamische Konfiguration
ansible all -m ping · ansible-playbook site.yml · ansible-galaxy init role_name