<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=Ansible_KIT_Grundlagen</id>
	<title>Ansible KIT Grundlagen - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=Ansible_KIT_Grundlagen"/>
	<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Ansible_KIT_Grundlagen&amp;action=history"/>
	<updated>2026-04-17T12:07:03Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://wiki.ixheim.de/index.php?title=Ansible_KIT_Grundlagen&amp;diff=68449&amp;oldid=prev</id>
		<title>Thomas.will: Die Seite wurde neu angelegt: „= Ansible Grundlagen =  Ansible ist ein agentenloses Automatisierungswerkzeug. Es verbindet sich per SSH auf die Zielsysteme und führt dort Aufgaben aus – o…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Ansible_KIT_Grundlagen&amp;diff=68449&amp;oldid=prev"/>
		<updated>2026-04-07T12:46:47Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „= Ansible Grundlagen =  Ansible ist ein agentenloses Automatisierungswerkzeug. Es verbindet sich per SSH auf die Zielsysteme und führt dort Aufgaben aus – o…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Ansible Grundlagen =&lt;br /&gt;
&lt;br /&gt;
Ansible ist ein agentenloses Automatisierungswerkzeug. Es verbindet sich per SSH auf die Zielsysteme und führt dort Aufgaben aus – ohne dass auf den Zielsystemen Software installiert werden muss.&lt;br /&gt;
&lt;br /&gt;
== Begriffe ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Begriff !! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| '''Control-Node''' || Der Rechner von dem Ansible ausgeführt wird&lt;br /&gt;
|-&lt;br /&gt;
| '''Managed Node''' || Die Zielsysteme die Ansible konfiguriert&lt;br /&gt;
|-&lt;br /&gt;
| '''Inventory''' || Liste der Managed Nodes&lt;br /&gt;
|-&lt;br /&gt;
| '''Playbook''' || YAML-Datei mit den auszuführenden Aufgaben&lt;br /&gt;
|-&lt;br /&gt;
| '''Task''' || Eine einzelne Aufgabe in einem Playbook&lt;br /&gt;
|-&lt;br /&gt;
| '''Modul''' || Ansible-Baustein der eine Aufgabe erledigt (z.B. &amp;lt;code&amp;gt;template&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;systemd&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| '''Rolle (Role)''' || Wiederverwendbare Sammlung von Tasks, Templates und Handlers&lt;br /&gt;
|-&lt;br /&gt;
| '''Handler''' || Task der nur ausgeführt wird wenn er durch &amp;lt;code&amp;gt;notify&amp;lt;/code&amp;gt; ausgelöst wurde&lt;br /&gt;
|-&lt;br /&gt;
| '''Template''' || Konfigurationsdatei mit Jinja2-Variablen&lt;br /&gt;
|-&lt;br /&gt;
| '''Vault''' || Verschlüsselter Speicher für Passwörter und Secrets&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Ansible wird nur auf dem Control-Node installiert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt update&lt;br /&gt;
apt install ansible -y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Version prüfen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ansible --version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Inventory ==&lt;br /&gt;
&lt;br /&gt;
Das Inventory definiert welche Hosts Ansible verwalten soll.&lt;br /&gt;
&lt;br /&gt;
=== Einfaches Inventory ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[webserver]&lt;br /&gt;
web01 ansible_host=192.168.1.10&lt;br /&gt;
web02 ansible_host=192.168.1.11&lt;br /&gt;
&lt;br /&gt;
[webserver:vars]&lt;br /&gt;
ansible_user=admin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Variablen pro Host ===&lt;br /&gt;
&lt;br /&gt;
Jeder Host kann eigene Variablen bekommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[firewalls]&lt;br /&gt;
fw01 ansible_host=192.168.1.20 fw_xx=201&lt;br /&gt;
fw02 ansible_host=192.168.1.21 fw_xx=202&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inventory testen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ansible all --list-hosts&lt;br /&gt;
ansible webserver --list-hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ansible.cfg ==&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;lt;code&amp;gt;ansible.cfg&amp;lt;/code&amp;gt; im Projektverzeichnis setzt Standardwerte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[defaults]&lt;br /&gt;
inventory         = inventory/hosts.ini&lt;br /&gt;
remote_user       = admin&lt;br /&gt;
host_key_checking = False&lt;br /&gt;
&lt;br /&gt;
[privilege_escalation]&lt;br /&gt;
become        = True&lt;br /&gt;
become_method = sudo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;host_key_checking = False&amp;lt;/code&amp;gt;: Deaktiviert die SSH-Fingerprint-Prüfung – sinnvoll im Lab, nicht für Produktion&lt;br /&gt;
;&amp;lt;code&amp;gt;become = True&amp;lt;/code&amp;gt;: Führt Befehle mit &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; aus&lt;br /&gt;
&lt;br /&gt;
== Ad-hoc-Befehle ==&lt;br /&gt;
&lt;br /&gt;
Ad-hoc-Befehle sind Einzeiler für schnelle Aufgaben ohne Playbook.&lt;br /&gt;
&lt;br /&gt;
;Erreichbarkeit prüfen:&lt;br /&gt;
* &amp;lt;code&amp;gt;ansible all -m ping&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Befehl ausführen:&lt;br /&gt;
* &amp;lt;code&amp;gt;ansible all -m command -a &amp;quot;uptime&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Paket installieren:&lt;br /&gt;
* &amp;lt;code&amp;gt;ansible webserver -m apt -a &amp;quot;name=vim state=present&amp;quot; -b&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Datei kopieren:&lt;br /&gt;
* &amp;lt;code&amp;gt;ansible all -m copy -a &amp;quot;src=foo.txt dest=/tmp/foo.txt&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Playbook ==&lt;br /&gt;
&lt;br /&gt;
Ein Playbook ist eine YAML-Datei die beschreibt was auf welchen Hosts ausgeführt werden soll.&lt;br /&gt;
&lt;br /&gt;
=== Aufbau ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
- name: Webserver einrichten&lt;br /&gt;
  hosts: webserver&lt;br /&gt;
  gather_facts: false&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: nginx installieren&lt;br /&gt;
      apt:&lt;br /&gt;
        name: nginx&lt;br /&gt;
        state: present&lt;br /&gt;
&lt;br /&gt;
    - name: nginx starten&lt;br /&gt;
      systemd:&lt;br /&gt;
        name: nginx&lt;br /&gt;
        state: started&lt;br /&gt;
        enabled: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Playbook ausführen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ansible-playbook site.yml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Nur bestimmte Hosts:&lt;br /&gt;
* &amp;lt;code&amp;gt;ansible-playbook site.yml --limit fw212,fw213&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Nur bestimmte Tags:&lt;br /&gt;
* &amp;lt;code&amp;gt;ansible-playbook site.yml --tags nftables&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Trockenlauf (nichts wird verändert):&lt;br /&gt;
* &amp;lt;code&amp;gt;ansible-playbook site.yml --check&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Verbose-Ausgabe:&lt;br /&gt;
* &amp;lt;code&amp;gt;ansible-playbook site.yml -v&amp;lt;/code&amp;gt; (mehr v = mehr Details, bis &amp;lt;code&amp;gt;-vvvv&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
&lt;br /&gt;
Mit Tags kann man gezielt einzelne Tasks ausführen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tasks:&lt;br /&gt;
  - name: nftables konfigurieren&lt;br /&gt;
    template:&lt;br /&gt;
      src: nftables.conf.j2&lt;br /&gt;
      dest: /etc/nftables.conf&lt;br /&gt;
    tags: nftables&lt;br /&gt;
&lt;br /&gt;
  - name: Hostname setzen&lt;br /&gt;
    hostname:&lt;br /&gt;
      name: &amp;quot;fw.example.int&amp;quot;&lt;br /&gt;
    tags: hostname&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ausführen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ansible-playbook site.yml --tags nftables&lt;br /&gt;
ansible-playbook site.yml --skip-tags reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Templates ==&lt;br /&gt;
&lt;br /&gt;
Templates sind Konfigurationsdateien mit Jinja2-Variablen. Ansible befüllt die Variablen beim Ausführen pro Host.&lt;br /&gt;
&lt;br /&gt;
Templates liegen in &amp;lt;code&amp;gt;roles/&amp;amp;lt;rolle&amp;amp;gt;/templates/&amp;lt;/code&amp;gt; und haben die Endung &amp;lt;code&amp;gt;.j2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
&lt;br /&gt;
Template &amp;lt;code&amp;gt;resolv.conf.j2&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
search it2{{ fw_xx }}.int&lt;br /&gt;
nameserver 192.168.{{ fw_y }}.88&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Task der das Template einsetzt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- name: resolv.conf konfigurieren&lt;br /&gt;
  template:&lt;br /&gt;
    src: resolv.conf.j2&lt;br /&gt;
    dest: /etc/resolv.conf&lt;br /&gt;
    owner: root&lt;br /&gt;
    group: root&lt;br /&gt;
    mode: '0644'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Jinja2-Grundlagen ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Syntax !! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;{{ variable }}&amp;lt;/code&amp;gt; || Variablenwert einsetzen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;{% if bedingung %} ... {% endif %}&amp;lt;/code&amp;gt; || Bedingung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;{% for item in liste %} ... {% endfor %}&amp;lt;/code&amp;gt; || Schleife&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Rollen (Roles) ==&lt;br /&gt;
&lt;br /&gt;
Rollen sind wiederverwendbare Einheiten die Tasks, Templates und Handler bündeln.&lt;br /&gt;
&lt;br /&gt;
=== Struktur ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
roles/&lt;br /&gt;
└── meine-rolle/&lt;br /&gt;
    ├── tasks/&lt;br /&gt;
    │   └── main.yml      ← Tasks&lt;br /&gt;
    ├── handlers/&lt;br /&gt;
    │   └── main.yml      ← Handler&lt;br /&gt;
    ├── templates/&lt;br /&gt;
    │   └── config.j2     ← Templates&lt;br /&gt;
    ├── files/&lt;br /&gt;
    │   └── script.sh     ← Statische Dateien&lt;br /&gt;
    └── defaults/&lt;br /&gt;
        └── main.yml      ← Standardwerte für Variablen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rolle im Playbook verwenden ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
- name: Firewall konfigurieren&lt;br /&gt;
  hosts: firewalls&lt;br /&gt;
  roles:&lt;br /&gt;
    - fw&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Handler ==&lt;br /&gt;
&lt;br /&gt;
Handler werden nur ausgeführt wenn ein Task sie mit &amp;lt;code&amp;gt;notify&amp;lt;/code&amp;gt; ausgelöst hat – und das nur einmal am Ende des Plays, egal wie oft sie ausgelöst wurden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tasks:&lt;br /&gt;
  - name: nftables.conf konfigurieren&lt;br /&gt;
    template:&lt;br /&gt;
      src: nftables.conf.j2&lt;br /&gt;
      dest: /etc/nftables.conf&lt;br /&gt;
    notify: nftables reload&lt;br /&gt;
&lt;br /&gt;
handlers:&lt;br /&gt;
  - name: nftables reload&lt;br /&gt;
    systemd:&lt;br /&gt;
      name: nftables&lt;br /&gt;
      state: reloaded&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Typische Anwendung: Konfigurationsdatei ändern → Dienst neu starten.&lt;br /&gt;
&lt;br /&gt;
== Vault ==&lt;br /&gt;
&lt;br /&gt;
Mit Ansible Vault können Passwörter und Secrets verschlüsselt gespeichert werden.&lt;br /&gt;
&lt;br /&gt;
;Datei verschlüsseln:&lt;br /&gt;
* &amp;lt;code&amp;gt;ansible-vault encrypt secrets.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Datei entschlüsseln:&lt;br /&gt;
* &amp;lt;code&amp;gt;ansible-vault decrypt secrets.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Datei ansehen ohne entschlüsseln:&lt;br /&gt;
* &amp;lt;code&amp;gt;ansible-vault view secrets.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Playbook mit Vault-Datei ausführen:&lt;br /&gt;
* &amp;lt;code&amp;gt;ansible-playbook site.yml --ask-vault-pass&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Passwort aus Datei lesen:&lt;br /&gt;
* &amp;lt;code&amp;gt;ansible-playbook site.yml --vault-password-file .vault_pass&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verschlüsselte Variable in einer normalen YAML-Datei:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
db_password: !vault |&lt;br /&gt;
  $ANSIBLE_VAULT;1.1;AES256&lt;br /&gt;
  61383034346134653831...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[Ansible Firewall Konfiguration]]&lt;br /&gt;
* [[nftables Masquerade]]&lt;br /&gt;
* [[Debian Netzwerkkonfiguration]]&lt;/div&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
</feed>