foxit
Well-Known Member
Hallo zusammen
Ich persönlich verwalte meine Systeme seit Jahren mit Ansible, Puppet oder Saltstack. Ich habe dazu diverse Konfigurationen geschrieben. Eine dieser Ansible Rollen, möchte ich euch hier zeigen, damit ihr sehen könnt, wie einfach es ist dies mit Ansible umzusetzen. Zuerst ein kleiner Abriss zu Ansible.
Was ist Ansible?
Ansible ist ein Automatisierungs-Werkzeug zur Orchestrierung und Administration diverser Geräte.
Ansible hat folgende Vorteile:
Der Aufbau ist wie folgt:
Beispiel Rolle
Hier nun ein kleines Beispiel für eine Rolle, welche die Datei:
defaults/main.yml:
Hier wird eingetragen, welche Datei geändert werden soll.
tasks/main.yml:
Damit wird die Template-Datei kopiert bzw. erstellt.
templates/_frebsd_etc_rc_conf.j2:
Hier ist die ganze Magie zu finde.
vars/main.yml:
In YAML definierte Werte.
Die Rolle kann man einfach zu einem Playbook hinzufügen. Wenn das Playbook durchgelaufen ist, sollte die Datei:
Man sieht wie die einzelnen Keys und Werte aus der YAML Datei in ein anderes Format konvertiert werden. Natürlich kann man noch etliche Sachen anpassen oder auch anders definieren. Der Vorteil besteht jetzt darin, dass ich mir zu 100% sicher sein kann, dass die Datei immer gleich erstellt bzw. angepasst wird.
foxit
Ich persönlich verwalte meine Systeme seit Jahren mit Ansible, Puppet oder Saltstack. Ich habe dazu diverse Konfigurationen geschrieben. Eine dieser Ansible Rollen, möchte ich euch hier zeigen, damit ihr sehen könnt, wie einfach es ist dies mit Ansible umzusetzen. Zuerst ein kleiner Abriss zu Ansible.
Was ist Ansible?
Ansible ist ein Automatisierungs-Werkzeug zur Orchestrierung und Administration diverser Geräte.
Ansible hat folgende Vorteile:
- Ansible hat eine grosse Verbreitung
- Die Dokumentation ist vorbiedlich
- Auf dem Zielsystem muss nur SSH Verfügbar sein
Der Aufbau ist wie folgt:
Playbooks -> Collections/Rollen -> Tasks
- Ein Playbook beinhaltet Rollen und/oder Collections
- Eine Rolle ist der primäre Mechanismus zum Aufteilen eines Playbooks in mehrere Dateien.
- Rollen vereinfachen das Schreiben komplexer Playbooks
- Eine Rolle wiederrum beinhaltet Tasks. In diesen Tasks wird definiert, was ausgeführt werden soll
Beispiel Rolle
Hier nun ein kleines Beispiel für eine Rolle, welche die Datei:
/etc/rc.conf
bearbeitet. Der Aufbau der Rolle sieht so aus:
Bash:
freebsd_etc_rc_conf
├── defaults
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
│ └── _frebsd_etc_rc_conf.j2
└── vars
└── main.yml
defaults/main.yml:
Bash:
---
freebsd_etc_rc_conf: '/etc/rc.conf'
tasks/main.yml:
Bash:
---
- name: Update file rc.conf
template:
src: _frebsd_etc_rc_conf.j2
dest: "{{ freebsd_etc_rc_conf }}"
mode: 0644
templates/_frebsd_etc_rc_conf.j2:
Bash:
# ---
# {{ ansible_managed }}!
# ---
{% for key, value in freebsd_base_etc_rc.items() %}
# {{ key }}
{% for x,y in value and value.items() %}
{{ x }}="{{ y | replace("True", "YES") | replace("False", "NO") }}"
{% endfor %}
{% endfor %}
vars/main.yml:
YAML:
---
freebsd_base_etc_rc:
network:
hostname: 'testvm01'
ifconfig_em0: 'DHCP'
services:
clear_tmp_enable: true
dumpdev: false
moused_enable: false
nginx_enable: true
nrpe3_enable: true
sshd_enable: true
syslogd_flags: '-s -s'
zfs_enable: true
openntpd:
openntpd_enable: true
openntpd_flags: '-v'
sendmail:
sendmail_enable: 'NONE'
snmp:
snmpd_conffile: '/usr/local/etc/snmpd.conf'
snmpd_enable: true
snmpd_flags: '-a'
telegraf:
telegraf_enable: true
Die Rolle kann man einfach zu einem Playbook hinzufügen. Wenn das Playbook durchgelaufen ist, sollte die Datei:
/etc/rc.conf
danach so aussehen:
Bash:
# ---
# Ansible managed!
# ---
# network
hostname="testvm01"
ifconfig_em0="DHCP"
# services
clear_tmp_enable="YES"
dumpdev="NO"
moused_enable="NO"
nginx_enable="YES"
nrpe3_enable="YES"
sshd_enable="YES"
syslogd_flags="-s -s"
zfs_enable="YES"
# openntpd
openntpd_enable="YES"
openntpd_flags="-v"
# sendmail
sendmail_enable="NONE"
# snmp
snmpd_conffile="/usr/local/etc/snmpd.conf"
snmpd_enable="YES"
snmpd_flags="-a"
# telegraf
telegraf_enable="YES"
Man sieht wie die einzelnen Keys und Werte aus der YAML Datei in ein anderes Format konvertiert werden. Natürlich kann man noch etliche Sachen anpassen oder auch anders definieren. Der Vorteil besteht jetzt darin, dass ich mir zu 100% sicher sein kann, dass die Datei immer gleich erstellt bzw. angepasst wird.
foxit