Ansible Spickzettel
Lernen Sie Ansible mit Hands-On Labs
Lernen Sie Ansible Infrastrukturautomatisierung durch praktische Labs und reale Szenarien. LabEx bietet umfassende Ansible-Kurse, die die Erstellung wesentlicher Playbooks, Bestandsverwaltung, Modulnutzung und Rollenorganisation abdecken. Meistern Sie Konfigurationsmanagement und Infrastrukturautomatisierung für DevOps-Workflows.
Installation & Einrichtung
Ubuntu/Debian: apt install ansible
Installieren Sie Ansible auf Debian-basierten Linux-Systemen.
# Ansible Repository hinzufügen
sudo apt-add-repository ppa:ansible/ansible
# Paketlisten aktualisieren
sudo apt-get update
# Ansible installieren
sudo apt-get install ansible
# Installation überprüfen
ansible --version
CentOS/RHEL: yum install ansible
Installieren Sie Ansible auf Red Hat-basierten Systemen.
# EPEL Repository installieren
sudo yum install epel-release -y
# Ansible installieren
sudo yum install ansible -y
# Installation überprüfen
ansible --version
macOS: brew install ansible
Installieren Sie Ansible auf macOS mit Homebrew.
# Installation mit Homebrew
brew install ansible
# Installation überprüfen
ansible --version
Konfiguration: /etc/ansible/ansible.cfg
Konfigurieren Sie Ansible-Einstellungen und Standardwerte.
# Aktuelle Konfiguration anzeigen
ansible-config list
# Effektive Konfiguration anzeigen
ansible-config view
# Benutzerdefinierte Konfigurationsdatei
export ANSIBLE_CONFIG=/path/to/ansible.cfg
SSH-Einrichtung: Schlüsselbasierte Authentifizierung
Ansible verwendet SSH zur Kommunikation zwischen Knoten.
# SSH-Schlüssel generieren
ssh-keygen -t rsa -b 4096
# Öffentlichen Schlüssel auf Remote-Hosts kopieren
ssh-copy-id user@hostname
# SSH-Verbindung testen
ssh user@hostname
Umgebungseinrichtung
Richten Sie Ansible-Umgebungsvariablen und Pfade ein.
# Speicherort der Inventardatei festlegen
export ANSIBLE_INVENTORY=/path/to/inventory
# Host-Schlüsselprüfung festlegen
export ANSIBLE_HOST_KEY_CHECKING=False
# Remote-Benutzer festlegen
export ANSIBLE_REMOTE_USER=ubuntu
Bestandsverwaltung (Inventory Management)
Basis-Inventar: /etc/ansible/hosts
Host-Gruppen können erstellt werden, indem ein Gruppenname in eckigen Klammern angegeben wird.
# Basis-Hosts-Datei (INI-Format)
[webservers]
web1.example.com
web2.example.com
[databases]
db1.example.com
db2.example.com
[all:vars]
ansible_user=ubuntu
ansible_ssh_private_key_file=~/.ssh/id_rsa
YAML-Inventarformat
Inventardateien können im INI- oder YAML-Format vorliegen.
# inventory.yml
all:
children:
webservers:
hosts:
web1.example.com:
web2.example.com:
databases:
hosts:
db1.example.com:
vars:
mysql_port: 3306
Host-Variablen & Gruppen
Definieren Sie hostspezifische Variablen und Gruppenkonfigurationen.
# Inventar mit Variablen
[webservers]
web1.example.com http_port=80
web2.example.com http_port=8080
[webservers:vars]
ansible_user=nginx
nginx_version=1.18
# Inventar testen
ansible-inventory --list
ansible-inventory --graph
Ad-Hoc-Befehle
Grundlegende Befehlsstruktur
Grundstruktur eines Ansible-Befehls: ansible <hosts> -m <module> -a "<arguments>"
# Konnektivität testen
ansible all -m ping
# Spezifische Gruppe prüfen
ansible webservers -m ping
# Befehl auf allen Hosts ausführen
ansible all -m command -a "uptime"
# Mit sudo-Rechten ausführen
ansible all -m command -a "systemctl status nginx" --become
Melden Sie sich an, um dieses Quiz zu beantworten und Ihren Lernfortschritt zu verfolgen
ansible all -m ping?Dateioperationen
Erstellen Sie Verzeichnisse, Dateien und symbolische Links auf Hosts.
# Verzeichnis erstellen
ansible all -m file -a "path=/tmp/test state=directory mode=0755"
# Datei erstellen
ansible all -m file -a "path=/tmp/test.txt state=touch"
# Datei/Verzeichnis löschen
ansible all -m file -a "path=/tmp/test state=absent"
# Symbolischen Link erstellen
ansible all -m file -a "src=/etc/nginx dest=/tmp/nginx state=link"
Paketverwaltung
Installieren, aktualisieren und entfernen Sie Pakete auf verschiedenen Systemen.
# Paket installieren (apt)
ansible webservers -m apt -a "name=nginx state=present" --become
# Paket installieren (yum)
ansible webservers -m yum -a "name=httpd state=present" --become
# Alle Pakete aktualisieren
ansible all -m apt -a "upgrade=dist" --become
# Paket entfernen
ansible all -m apt -a "name=apache2 state=absent" --become
Dienstverwaltung
Starten, stoppen und verwalten Sie Systemdienste.
# Dienst starten
ansible webservers -m service -a "name=nginx state=started" --become
# Dienst stoppen
ansible webservers -m service -a "name=apache2 state=stopped" --become
# Dienst neu starten
ansible webservers -m service -a "name=ssh state=restarted" --become
# Dienst beim Booten aktivieren
ansible all -m service -a "name=nginx enabled=yes" --become
Playbooks & Aufgaben (Tasks)
Grundlegende Playbook-Struktur
YAML-Dateien, die definieren, welche Aufgaben auf welchen Hosts ausgeführt werden sollen.
---
- name: Webserver-Setup
hosts: webservers
become: yes
vars:
nginx_port: 80
tasks:
- name: nginx installieren
apt:
name: nginx
state: present
- name: nginx-Dienst starten
service:
name: nginx
state: started
enabled: yes
Playbooks ausführen
Führen Sie Playbooks mit verschiedenen Optionen und Konfigurationen aus.
# Playbook ausführen
ansible-playbook site.yml
# Mit spezifischem Inventar ausführen
ansible-playbook -i inventory.yml site.yml
# Trockenlauf (Prüfmodus)
ansible-playbook site.yml --check
# Auf spezifischen Hosts ausführen
ansible-playbook site.yml --limit webservers
# Mit zusätzlichen Variablen ausführen
ansible-playbook site.yml --extra-vars "nginx_port=8080"
Melden Sie sich an, um dieses Quiz zu beantworten und Ihren Lernfortschritt zu verfolgen
ansible-playbook site.yml --check?Aufgabenoptionen & Bedingungen
Fügen Sie Bedingungen, Schleifen und Fehlerbehandlung zu Aufgaben hinzu.
tasks:
- name: Pakete installieren
apt:
name: '{{ item }}'
state: present
loop:
- nginx
- mysql-server
- php
when: ansible_os_family == "Debian"
- name: Benutzer erstellen
user:
name: webuser
state: present
register: user_result
- name: Ergebnis der Benutzererstellung anzeigen
debug:
msg: 'Benutzer erstellt: {{ user_result.changed }}'
Handler & Benachrichtigungen
Definieren Sie Handler, die ausgeführt werden, wenn sie benachrichtigt werden.
tasks:
- name: nginx-Konfiguration aktualisieren
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: nginx neu starten
handlers:
- name: nginx neu starten
service:
name: nginx
state: restarted
Melden Sie sich an, um dieses Quiz zu beantworten und Ihren Lernfortschritt zu verfolgen
Variablen & Vorlagen (Templates)
Variablendefinition
Definieren Sie Variablen auf verschiedenen Ebenen und in verschiedenen Gültigkeitsbereichen.
# Im Playbook
vars:
app_name: myapp
app_port: 8080
# In group_vars/all.yml
database_host: db.example.com
database_port: 5432
# In host_vars/web1.yml
server_role: frontend
max_connections: 100
# Kommandozeilenvariablen
ansible-playbook site.yml -e "env=production"
Jinja2-Vorlagen
Erstellen Sie dynamische Konfigurationsdateien mithilfe von Vorlagen.
# Vorlagendatei: nginx.conf.j2
server {
listen {{ nginx_port }};
server_name {{ server_name }};
location / {
proxy_pass http://{{ backend_host }}:{{ backend_port }};
}
}
# Verwendung des template-Moduls
- name: nginx-Konfiguration bereitstellen
template:
src: nginx.conf.j2
dest: /etc/nginx/sites-available/default
notify: nginx neu laden
Fakten & Systeminformationen
Sammeln und verwenden Sie Systemfakten in Playbooks.
# Fakten manuell sammeln
ansible all -m setup
# Spezifische Fakten sammeln
ansible all -m setup -a "filter=ansible_eth*"
# Fakten in Playbooks verwenden
- name: Systeminformationen anzeigen
debug:
msg: '{{ ansible_hostname }} läuft auf {{ ansible_distribution }}'
- name: Paket basierend auf OS installieren
apt:
name: apache2
when: ansible_os_family == "Debian"
Vault & Geheimnisverwaltung
Verschlüsseln Sie sensible Daten mit Ansible Vault.
# Verschlüsselte Datei erstellen
ansible-vault create secrets.yml
# Verschlüsselte Datei bearbeiten
ansible-vault edit secrets.yml
# Bestehende Datei verschlüsseln
ansible-vault encrypt passwords.yml
# Playbook mit Vault ausführen
ansible-playbook site.yml --ask-vault-pass
# Vault-Passwortdatei verwenden
ansible-playbook site.yml --vault-password-file .vault_pass
Rollen & Organisation
Rollenstruktur
Organisieren Sie Playbooks in wiederverwendbare Rollen.
# Rollenstruktur erstellen
ansible-galaxy init webserver
# Rollenverzeichnisstruktur
webserver/
├── tasks/
│ └── main.yml
├── handlers/
│ └── main.yml
├── templates/
├── files/
├── vars/
│ └── main.yml
├── defaults/
│ └── main.yml
└── meta/
└── main.yml
Rollen in Playbooks verwenden
Wenden Sie Rollen auf Hosts in Ihren Playbooks an.
---
- hosts: webservers
roles:
- common
- webserver
- { role: database, database_type: mysql }
# Oder mit include_role
- hosts: webservers
tasks:
- include_role:
name: webserver
vars:
nginx_port: 8080
Ansible Galaxy
Laden Sie Community-Rollen von Ansible Galaxy herunter und verwalten Sie diese.
# Rolle von Galaxy installieren
ansible-galaxy install geerlingguy.nginx
# Spezifische Version installieren
ansible-galaxy install geerlingguy.nginx,2.8.0
# Aus Requirements-Datei installieren
ansible-galaxy install -r requirements.yml
# Installierte Rollen auflisten
ansible-galaxy list
# Rolle entfernen
ansible-galaxy remove geerlingguy.nginx
Collections
Arbeiten Sie mit Ansible Collections für erweiterte Funktionalität.
# Collection installieren
ansible-galaxy collection install community.general
# Collection im Playbook verwenden
collections:
- community.general
tasks:
- name: Paket installieren
community.general.snap:
name: code
state: present
Debugging & Fehlerbehebung
Aufgaben debuggen
Debuggen und beheben Sie Probleme bei der Playbook-Ausführung.
# Debug-Aufgaben hinzufügen
- name: Variablenwert anzeigen
debug:
var: my_variable
- name: Benutzerdefinierte Nachricht anzeigen
debug:
msg: 'Server {{ inventory_hostname }} hat IP {{ ansible_default_ipv4.address }}'
# Ausführliche Ausführung
ansible-playbook site.yml -v
ansible-playbook site.yml -vvv # Maximale Ausführlichkeit
Fehlerbehandlung
Behandeln Sie Fehler und Fehler elegant.
- name: Aufgabe, die fehlschlagen könnte
command: /bin/false
ignore_errors: yes
- name: Aufgabe mit Rettung (Rescue)
block:
- command: /bin/false
rescue:
- debug:
msg: 'Aufgabe fehlgeschlagen, führe Rettung aus'
always:
- debug:
msg: 'Dies wird immer ausgeführt'
Testen & Validieren
Testen Sie Playbooks und validieren Sie Konfigurationen.
# Syntax prüfen
ansible-playbook site.yml --syntax-check
# Aufgaben auflisten
ansible-playbook site.yml --list-tasks
# Hosts auflisten
ansible-playbook site.yml --list-hosts
# Schrittweise durchführen
ansible-playbook site.yml --step
# Mit Prüfmodus testen
ansible-playbook site.yml --check --diff
Leistung & Optimierung
Optimieren Sie die Playbook-Leistung und -Ausführung.
# Aufgaben parallel ausführen
- name: Pakete installieren
apt:
name: '{{ packages }}'
vars:
packages:
- nginx
- mysql-server
# Asynchrone Ausführung für lang laufende Aufgaben
- name: Lang laufende Aufgabe
command: /usr/bin/long-task
async: 300
poll: 5
Best Practices & Tipps
Sicherheitspraktiken
Sichern Sie Ihre Ansible-Infrastruktur und -Vorgänge.
# Ansible Vault für Geheimnisse verwenden
ansible-vault create group_vars/all/vault.yml
# Host-Schlüsselprüfung vorsichtig deaktivieren
host_key_checking = False
# become nur bei Bedarf verwenden
become: yes
become_user: root
# Playbook-Umfang begrenzen
ansible-playbook site.yml --limit production
Code-Organisation
Strukturieren Sie Ihre Ansible-Projekte effektiv.
# Empfohlene Verzeichnisstruktur
ansible-project/
├── inventories/
│ ├── production/
│ └── staging/
├── group_vars/
├── host_vars/
├── roles/
├── playbooks/
└── ansible.cfg
# Sinnvolle Namen und Dokumentation verwenden
- name: Beschreibender Aufgabenname
# Kommentare für komplexe Logik hinzufügen
Versionskontrolle & Testen
Verwalten Sie Ansible-Code mit ordnungsgemäßer Versionskontrolle.
# Git für Versionskontrolle verwenden
git init
git add .
git commit -m "Erste Ansible-Einrichtung"
# In Staging testen, bevor in Produktion
ansible-playbook -i staging site.yml
# Tags für selektive Ausführung verwenden
ansible-playbook site.yml --tags "nginx,ssl"
Konfiguration & Erweiterte Funktionen
Ansible-Konfiguration
Passen Sie das Ansible-Verhalten mit Konfigurationsoptionen an.
# ansible.cfg
[defaults]
inventory = ./inventory
remote_user = ansible
host_key_checking = False
timeout = 30
forks = 5
[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=60s
pipelining = True
Callback-Plugins
Erweitern Sie Ausgabe und Protokollierung mit Callback-Plugins.
# Callback-Plugins in ansible.cfg aktivieren
[defaults]
stdout_callback = yaml
callbacks_enabled = profile_tasks, timer
# Benutzerdefinierte Callback-Konfiguration
[callback_profile_tasks]
task_output_limit = 20
Filter & Lookups
Verwenden Sie Jinja2-Filter und Lookup-Plugins zur Datenmanipulation.
# Häufige Filter in Vorlagen
{{ variable | default('default_value') }}
{{ list_var | length }}
{{ string_var | upper }}
{{ dict_var | to_nice_yaml }}
# Lookup-Plugins
- name: Dateiinhalt lesen
debug:
msg: "{{ lookup('file', '/etc/hostname') }}"
- name: Umgebungsvariable
debug:
msg: "{{ lookup('env', 'HOME') }}"
Dynamische Inventare
Verwenden Sie dynamische Inventare für Cloud- und Containerumgebungen.
# AWS EC2 dynamisches Inventar
ansible-playbook -i ec2.py site.yml
# Docker dynamisches Inventar
ansible-playbook -i docker.yml site.yml
# Benutzerdefiniertes Inventarskript
ansible-playbook -i ./dynamic_inventory.py site.yml