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:
- Ansible verbindet sich per SSH zu allen Hosts
- Führt die Tasks nacheinander aus
- 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.