Hosts in Ansible aufteilen (gerade/ungerade)

Datum

Nachfolgend zeige ich wie man in Ansible seine Hosts nach gerade bzw. ungrade aufteilen kann.
Angenommen man hat sechs Webserver (z.B.: web01web06) und möchte Tasks nur auf allen geraden bzw. ungeraden Hosts ausführen:

Aufteilen der Hosts
- name: "split hosts in two groups"
  hosts: all
  gather_facts: false
  tasks:
  - group_by:
      key: "{{ 'even' if ((inventory_hostname.split('-')[2][-2:] | int) is even) else 'odd' }}"
...
  - assert:
      that:
        - groups.odd is defined
        - groups.even is defined
      msg: "gruppen konnten nicht in even/odd aufgeteilt werden"

Damit werden die Hosts in even (gerade) und odd (ungerade) aufgeteilt. Natürlich kann man die Gruppen auch anders benennen.
Anschließend wird noch überprüft ob die Aufteilung funktioniert hat.

Ausführen von Tasks auf geraden/ungeraden Hosts

Ansprechen der entsprechenden Gruppe für die Tasks geschieht per hosts: all:&<GRUPPENNAME>

ungerade Hosts:

- name: "deploy on odd hosts"
  hosts: all:&odd
  gather_facts: false
  tasks:
  - debug:
      msg: "odd: {{inventory_hostname}}"

gerade Hosts:

- name: "deploy on even hosts"
  hosts: all:&even
  gather_facts: false
  tasks:
  - debug:
      msg: "even: {{inventory_hostname}}"

Autor
Kategorien Ansible, Automatisierung

PRTG Map