Pakete auf verschiedenen Linux-Systemen mit nur einem Ansible-Task installieren

Datum

Üblicherweise wird in Ansible beim installieren von Paketen auf verschiedenen Linux-Systemen für jede Servergruppe der entsprechende Paketmanager angegeben.

Bsp.:

  - name: ensure nginx is at the latest version
      apt: name=nginx state=latest
Ansible-eigenen Paketmanager verwenden

Um nun in nur einem Task mehrere verschiedene Linux-Systeme zu aktualisieren lässt man einfach Ansible selbst den passenden Paketmanager ermitteln und verwenden.
Hierbei wird die entsprechende Information als {{ ansible_pkg_mgr }} gespeichert.
Das funktioniert nur wenn kein gather_facts: False im entsprechenden Playbook gesetzt ist.

Beipiele

Install_basic_Tools.yml

---
- hosts: all
  become: true
  roles:
  - all_systems

roles/all_systems/tasks/main.yml

- name: "Installation Basic-Tools"
  action: >
    {{ ansible_pkg_mgr }} name={{ item }} state=present update_cache=yes
  with_items:
  - vim
  - git
  - curl
  - wget
  - ntp
  - tree

hosts

[deb]
ubuntu01

[rpm]
centos01

Wenn der Syntax-Check Ok war, den man per ansible-playbook Install_basic_Tools.yml -i hosts --syntax-check durchführen kann, führt man das Playbook direkt aus:

$ ansible-playbook Install_basic_Tools.yml -i hosts                                                                                                                              

PLAY [all] ***********************************************************************************

TASK [Gathering Facts] ***********************************************************************
ok: [ubuntu01]
ok: [centos01]

TASK [all_systems : Installation Basic-Tools] ************************************************
changed: [ubuntu01] => (item=[u'vim', u'git', u'curl', u'wget', u'ntp', u'tree'])
changed: [centos01] => (item=[u'vim', u'git', u'curl', u'wget', u'ntp', u'tree'])

PLAY RECAP ***********************************************************************************
centos01                   : ok=2    changed=1    unreachable=0    failed=0
ubuntu01                   : ok=2    changed=1    unreachable=0    failed=0

Wie man hier sieht wurden die entsprechenden Pakete auf den beiden unterschiedlichen Linux-Systemen erfolgreich mit nur einem Task installiert.

Autor
Kategorien Ansible, Linux

PRTG Map