Nachdem wir bereits einige Ansible Rollen in den letzten Artikel erstellt haben, wollen wir heute mal eine Allgemeine Rolle für alle System erstellen. Diese nenne ich universal.
Ziel ist es, ein paar Standardeinstellungen auf den Zielsystem zu hinterlegen. Dafür werde ich zwei weitere Rollen erstellen. Eine für selinux und eine für firewalld. Diese beiden Rollen werden dann in der universal Role mit dem include_role Modul hinterlegen, damit ich nicht jede Rolle einzelnd in der site.yml auflisten muss. So verlieren ich nicht die dynamic und kann ggf. auf bereits vorhandenen Systemen noch mit selinux oder firewalld Rolle arbeiten.
Erstellen der Ansible selinux role
In der Ansible Rolle für selinux wollen wir lediglich selinux auf dem Zielsystem deaktivieren. Dafür legen wir den folgenden Block in selinux/tasks/main.yml an.
1 2 3 | - name: Disable SELinux at next reboot selinux: state: disabled |
Erstellen der Ansible firewalld role
Ähnlich wie in der Rolle für selinux wollen wir in der firewalld Rolle dafür sorgen, dass die Firwall auf unserem System generell deaktiviert ist.
1 2 3 4 5 | - name: disable firewalld command: "{{ item }}" with_items: - systemctl stop firewalld - systemctl disable firewalld |
Erstellen der Ansible universal role
Nun wollen wir in der universal role die beiden Rollen von selinux und firewalld einbinden. Das ganze sieht wie folgt aus.
1 2 3 4 5 | - include_role: name: selinux - include_role: name: firewalld |
Durch das include_role Modul wird die entsprechende main.yml im tasks Ordner der Rolle geladen.
Neben der selinux und der firewalld role will ich mit der universal role noch ein paar Pakete installieren, die ich auf jedem System gerne vorfinde. Dazu dient der folgende Block:
1 2 3 4 5 6 | - name: install standard packages yum: name={{ item }} with_items: - vim - wget - unzip |
Testen der universal role
Nachdem wir die universal role angelegt haben, wollen wir diese nun auch testen. Dafür erstellt man als erstes einen entsprechenden Eintrag in der site.yml.
1 2 3 4 | - name: universal hosts: universal roles: - universal |
Anschließend wird noch die hosts Datei angepasst.
1 2 | [universal] 192.168.10.90 |
Jetzt können wir den Ansible lauf starten.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | ansible-playbook site.yml -i hosts PLAY [universal] ************************************************************************ TASK [Gathering Facts] ****************************************************************** ok: [192.168.10.90] TASK [universal : include_role] ********************************************************* TASK [selinux : Disable SELinux at next reboot] ***************************************** ok: [192.168.10.90] TASK [universal : include_role] ********************************************************* TASK [firewalld : disable firewalld] **************************************************** changed: [192.168.10.90] => (item=systemctl stop firewalld) changed: [192.168.10.90] => (item=systemctl disable firewalld) TASK [universal : install standard packages] ******************************************** changed: [192.168.10.90] => (item=[u'vim', u'wget', u'unzip']) PLAY RECAP ****************************************************************************** 192.168.10.90 : ok=4 changed=2 unreachable=0 failed=0 |
Wenn hier keine Fehler auftauchen war der Test erfolgreich. Somit haben wir unsere erste Hierachie in Ansible Rollen abgebildet.
Sämtliche Rollen die ich hier verwende könnt ihr in meinem GitHub Repository finden: https://github.com/Modius22/ansible-role
Ich würde anstelle des command modul bei firewalld das Modul systemd oder service verwenden. Damit kannst du sicher gehen das er nicht bei jedem Durchlauf das command ausführt sondern nur wenn es notwendig ist.
Danke für den Hinweis. Das schaue ich mir mal an.