]>
Jörg Kastning
Ansible ist ein Werkzeug für:
Die Wunschkonfiguration eines Zielsystems wird deklariert. Ansible stellt die Wunschkonfiguration des Zielsystems her, indem es z. B.:
Der Ausdruck Deployment wird in diesem Kontext verwendet, wenn Software auf Server verteilt, eingerichtet und die benötigten Dienste zu starten sind.
Ansible kann sowohl zum Konfigurations-Management als auch zum Deployment genutzt werden. Da beide Bereiche eng miteinander verzahnt sind, erleichtert es die Arbeit, da ein Werkzeug für beide Aufgaben verwendet werden kann.
Von Orchestrierung wird gesprochen, wenn die Reihenfolge, wann welche Aufgaben ausgeführt werden, eine entscheidende Rolle spielt. Zum Beispiel weil Abhängigkeiten aufzulösen sind oder mehrere Server an einem Deployment beteiligt sind. Beispiel:
Provisionierung beschreibt den Bereistellungsprozess einer neuen virtuellen Maschine in virtuellen/Cloud-Umgebungen.
Ansible soll die Lücke zwischen IT-Automation und "Hack-and-Slash"-Scripting füllen. Mit diesem einen Werkzeug sollen folgende Einzelprojekte ersetzt werden können:
Zu Beginn galt: "All Batteries included."
Mittlerweile wurde auf ein modulares System bestehend aus ansible-core
und separat entwickelten Collections, Modulen und Plugins umgestellt. Die Community pflegt ein ansible
-Paket mit dem der frühere Ansatz aufrecht erhalten werden soll. Die Ansible-Dokumentation hält in Selecting an Ansible artifact and version to install weitere Informationen dazu bereit.
Push | Pull |
---|---|
Zeitpunkt der Ausführung kann besser kontrolliert werden; Wahlmöglichkeit zwischen manueller und zeitgesteuerter Ausführung | Ausführung erfolgt ausschließlich zeitgesteuert |
Kommunikationsrichtung von der Control Machine zu den Clients; aus "sicherer" Zone in "unsichere" Zonen | Kommunikationsrichtung von den Clients zum Master-Server; aus "unsicheren" Zonen in "sichere" Zone |
Beispiele: Ansible, SaltStack | Beispiele: Puppet, Chef, StaltStack |
Inventory → Enthält die Managed Nodes
Modules → Vorgefertigte Skripte mit denen Aktionen auf Managed Nodes durchgeführt werden können. Zum Beispiel die Installation von Paketen, Steuerung von Diensten etc.
Tasks → Aufgaben die auf den Managed Nodes ausgeführt werden
Plays → Repräsentation von YAML- oder JSON-Dictionaries
Playbooks → Verknüpft Hosts mit Plays bzw. Tasks
[hosts-to-patch-by-jka]
isl-p1.hrz.uni-bielefeld.de
jka-rhel7-t1.hrz.uni-bielefeld.de
jka-rhel8-t1.hrz.uni-bielefeld.de
nbde-ptang1.hrz.uni-bielefeld.de
nbde-ptang2.hrz.uni-bielefeld.de
uhrz-tcpdump-p1.ad.uni-bielefeld.de
rhel-s0[1:5].hrz.uni-bielefeld.de
rpm-repo.hrz.uni-bielefeld.de
rpm-repo-p2.hrz.uni-bielefeld.de
virt-who-p1.hrz.uni-bielefeld.de
rhel-t2.hrz.uni-bielefeld.de
uhrz-rhel-t3.ad.uni-bielefeld.de
rhel-t4.hrz.uni-bielefeld.de
[t-stage:children]
t-hosts
pgsql-t
[i-stage:children]
hio-i-all
[q-stage:children]
q-hosts
pgsql-q
hio-q-all-1
hio-q-all-2
hio-k-all-1
hio-k-all-2
[p-stage:children]
p-hosts
hio-p-all-1
hio-p-all-2
pgsql-p
[t-hosts]
rhel-t[0:2].hrz.uni-bielefeld.de
rhel-t4.hrz.uni-bielefeld.de
rhel-t5.hrz.uni-bielefeld.de
rhel-s0[1:5].hrz.uni-bielefeld.de
Ansible kann genutzt werden, um "gewöhnliche" Shell-Skripte parallel auf Hosts auszuführen. Für viele Standardfälle existieren Module, welche die Nutzung vereinfachen. Module haben dabei folgende Eigenschaften:
user: name=hrzadm group=wheel status=present
Module können dabei sowohl in Playbooks, als auch in Ad-hoc-Kommandos verwendet werden.
Die Konfigurations-Management-Skripte werden in Ansible als Playbooks bezeichnet.
---
# Register RHEL-System add subscription and disable repo
- name: Register System and add Subcription
hosts: all
tasks:
- name: Register system and add standard subscription
redhat_subscription:
activationkey: "some-string"
org_id: 1234567
state: present
- name: Disable repo in redhat.repo
command: /usr/sbin/subscription-manager repos --disable=rhel-7-server-rpms
Ansible wird für jeden Task im Playbook:
root@ansible-pctrl01>ansible-playbook -i staging register_rhel.yml
PLAY [Register System and add Subscription] ************************************
TASK [setup] *******************************************************************
ok: [rhel-t2.hrz.uni-bielefeld.de]
ok: [avnscan-t01.hrz.uni-bielefeld.de]
TASK [Register system and add standard subscription] ***************************
ok: [avnscan-t01.hrz.uni-bielefeld.de]
ok: [rhel-t2.hrz.uni-bielefeld.de]
TASK [Disable repo in redhat.repo] *********************************************
changed: [avnscan-t01.hrz.uni-bielefeld.de]
changed: [rhel-t2.hrz.uni-bielefeld.de]
PLAY RECAP *********************************************************************
avnscan-t01.hrz.uni-bielefeld.de : ok=3 changed=1 unreachable=0 failed=0
rhel-t2.hrz.uni-bielefeld.de : ok=3 changed=1 unreachable=0 failed=0
roles/
`-- common # Name der Rolle
|-- defaults
| `-- main.yml # Default-Variablen die überschrieben werden können
|-- files
| `-- main.yml # Dateien die auf verknüpfte Hosts hochgeladen werden
|-- handlers
| `-- main.yml # Zur Rolle gehörende Handlers
|-- meta
| `-- main.yml # Definition der Abhängigkeiten einer Rolle
|-- tasks
| `-- main.yml # Tasks
|-- templates
| `-- main.yml # Enthält Jinja2-Vorlagen
`-- vars
`-- main.yml # Variablen die nicht überschrieben werden dürfen
Jede Datei ist optional. Wenn eine Rolle keine Handler enthält, besteht keine Notwendigkeit eine leere Datei handlers/main.yml zu erstellen.
Aktuelle wird Ansible im BITS genutzt durch: