Aufgabe: Docker aus offiziellem Repo installieren
# tasks/main.yaml
# ---
- name: Install docker dependencies
ansible.builtin.apt:
name:
- apt-transport-https
- ca-certificates
- curl
- gnupg2
- software-properties-common
# alternativ: ['apt-transport-https', 'ca-certificates', ...]
state: present
- name: Add docker gpg key to apt
ansible.builtin.apt_key:
url: https://download.docker.com/linux/ubuntu/gpg
state: present
- name: Add docker repository
ansible.builtin.apt_repository:
repo: >
deb [arch=amd64]
https://download.docker.com/{{ ansible_system | lower }}/{{ ansible_distribution | lower }}
{{ ansible_distribution_release }} stable
state: present
- name: Install docker
ansible.builtin.apt:
name:
- docker-ce
- docker-ce-cli
- containerd.io
state: present
Nett to know:
Multiline strings mit >
Operator:
repo: >
this
is
a
string
Ansible liest string als this is a string\n
, Zeilenumbrüche werden also durch Leerzeichen ersetzt
/etc/hosts
updatenAufgabe: Setze in Variablen gespeicherte Hostnamen für alle Server und update /etc/hosts
dynamisch
hostname
kann (nur) Hostnames setzenlineinfile
kann ähnlich zu sed Zeilen in Dateien matchen und umschreiben- name: Set hostname to names in variables
ansible.builtin.hostname:
name: "{{ training_hostname }}"
- name: Update /etc/hosts
ansible.builtin.lineinfile:
path: /etc/hosts
# '.*' - eine beliebige Anzahl von beliebigen Zeichen
# {{ item }} - aus `with_items` Statement -> Hostname
# '$' - Zeilenende
regexp: '.*{{ item }}$'
# hostvars - Funktion zum Holen von 'ansible facts'
# [item] - Facts für Host in aktueller Iteration
line: "{{ hostvars[item]['ansible_facts']['default_ipv4']['address'] }} {{item}}"
state: present
# Bedingte Ausführung: Ansible muss eine IPv4-Adresse finden
when: hostvars[item]['ansible_facts']['default_ipv4']['address'] is defined
# Loop über alle Hosts in Gruppe 'training'
with_items: "{{ groups['training'] }}"
Docs: - hostname Modul - linelinfile Modul