Ü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.