A korábbi cikkemben megmutattam néhány ad-hoc példán keresztül, hogy mire is jó az ansible. Most elkészítjük az első playbookunkat.
Mi az a playbook?
Az ansible playbook gyakorlatilag egy recept, kitaláljuk, hogy mit szeretnénk csinálni a szervereinken, majd a szükséges ansible modulok segítségével megvalósítjuk. Mindezt pedig rendezett formában beleírjuk a playbookunkba. Így, ha első alkalommal lefuttatjuk, elvégzi a kívánt feladatokat, ismételt futtatásnál már nem fog csinálni semmit (feltéve, hogy egy tudatlan rendszergazda nem piszkál bele az általunk módosított fájlokba, ekkor az ansible ismét beállítja). Érdemes jelezni egy ansible által kezelt konfig fájlban, hogy ezt központilag menedzseljük, senki sem piszkáljon bele (emlékeztek, ennek a szövege van benne az ansible.cfg fájlban)!
Mi legyen a megoldandó feladat?
A nyugodt alvás érdekében minden szervert monitorozunk egy zabbix nevű szoftverrel. Ehhez erősen ajánlott a zabbix-agentet feltelepíteni. Legyen ez az első playbookunk feladata.
Egy gyors ismertető a playbook fájlokhoz, yaml formátumot használ az ansible, minden fájl három kötőjellel kezdődik, és minden behúzás két szóközzel van beljebb, mint a felette lévő sor.
Kezdésképp a vm1 szerverünkre telepítsük fel a zabbix-agentet. A kedvenc szövegszerkesztőnkkel mentsük el a playbook mappába az install-zabbix-agent.yml fájlt az alábbi tartalommal:
---
- hosts: all
become: true
tasks:
- name: Zabbix Agent telepítése
yum:
name: zabbix-agent
state: latest
update_cache: yes
Látjátok, nem is bonyolult a formátuma. Gyors magyarázat:
- sor: a kötelező 3 kötőjel
- sor: mely hosztokon futhat, all=mindenhol
- sor: rootként fusson (ezért nem kell a -b kapcsoló)
- sor: jöhetnek a taskok
- sor: adjunk nevet a gyereknek, ezt fogja kiírni, amikor futtatjuk
- sor: a modul neve, a vm1 szerveren futó CentOS 7 yum-ot használ a csomagok kezelésére
- sor: a feltelepítendő csomag neve
- sor: a legfrissebb csomagra van szükségünk
- sor: előbb frissítse a csomaglistát (törli a cache-t)
Futtassuk az első playbookunkat!
A megszokott mappában állunk, ahol a Vagrantfile is van, adjuk ki ezt a parancsot:
$ ansible-playbook playbook/install-zabbix-agent.yml -l vm1
PLAY [all] *****************************************************************************
TASK [Gathering Facts] *****************************************************************************
ok: [vm1]
TASK [Zabbix Agent telepítése] *****************************************************************************
changed: [vm1]
PLAY RECAP *****************************************************************************
vm1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Mit látunk a képernyőn?
A megszokott ansible parancsunk kiegészült ansible-playbooká, utána jön a playbook fájl és a végén a kívánt szerver neve az -l
kapcsoló után. Ahogy a korábbi cikkben is említettem, ez csak vagrant szerveren fog működni, „igazi” szervernél be kell kérni a jelszavunkat a -K
kapcsolóval.
A [Gathering Facts]
azt jelenti, hogy mielőtt bármit is csinálna, begyűjti az ansible a számára szükséges információkat a távoli szerverről. Ha ez ok
, akkor sikerült neki.
A TASK [Zabbix Agent telepítése]
pedig a mi első taskunk a playbookban (ezért fontos a helyes megnevezés), ha changed
, akkor sikerült végrehajtania.
És a végére összefoglalja az információkat: gépenként egy sorban (csak a fontosabbakat említem):
ok=2
: két sikeres végrehajtás volt (agathering facts
is beleszámít)
changed=1
: egy task végzett módosítást a szerveren
Mi történik, ha újra lefuttatjuk?
$ ansible-playbook playbook/install-zabbix-agent.yml -l vm1
PLAY [servers] *****************************************************************************
TASK [Gathering Facts] *****************************************************************************
ok: [vm1]
TASK [Zabbix Agent telepítése] *****************************************************************************
ok: [vm1]
PLAY RECAP *****************************************************************************
vm1 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Nem történt változás, hiszen már fel lett telepítve a zabbix-agent, ezt mutatja a changed=0
is.
Most vonjunk be egy másik szervert is, szándékosan nem Red Hat alapút:
$ ansible-playbook playbook/install-zabbix-agent.yml -l vm1,vm3
PLAY [all] *****************************************************************************
TASK [Gathering Facts] *****************************************************************************
ok: [vm3]
ok: [vm1]
TASK [Zabbix Agent telepítése] *****************************************************************************
fatal: [vm3]: FAILED! => {"ansible_facts": {"pkg_mgr": "apt"}, "changed": false, "msg": ["Could not detect which major revision of yum is in use, which is required to determine module backe
nd.", "You should manually specify use_backend to tell the module whether to use the yum (yum3) or dnf (yum4) backend})"]}
ok: [vm1]
PLAY RECAP **********************************************************************************************************************************************************************************
vm1 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
vm3 : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
Magyarázat:
- a parancs végén a két szervert egy vesszővel választjuk el egymástól
- meghiúsult a telepítés az ubuntus szerveren, mivel ő nem tud mit kezdeni a yummal, ezt jelzi a vm3 sorában a
failed=1
Rendben, tegyük a playbookunkat ubuntu kompatibilissé, bővítsük a playbook/install-zabbix-agent.yml fájlunkat így:
---
- hosts: all
become: true
tasks:
- name: Zabbix Agent telepítése [Red Hat family]
yum:
name: zabbix-agent
state: latest
update_cache: yes
when:
- ansible_os_family == "RedHat"
- name: Zabbix Agent telepítése [Debian family]
apt:
name: zabbix-agent
state: latest
update_cache: yes
when:
- ansible_os_family == "Debian"
Mi változott?
- a könnyebb azonosítás érdekében a megnevezést külön-külön módosítottam [Red Hat illetve Debian family]
- bekerült a
when
a taskhoz, ami egy feltétel, a mi példánkban csak akkor fog lefutni, ha azansible_os_family
a kívánt eredményt adja vissza (ezt gyűjti ki az ansible facts, és a korábbi cikkben erről beszéltem, hogy még fontos lesz 🙂 ) - ha újra lefuttatjuk a
ansible-playbook playbook/install-zabbix-agent.yml -l vm1,vm3
parancsot, immár minden rendben lesz
Ez tök jó, de ez még most sem konfiguráció menedzsment…
Igaz, de nem lehet rögtön azzal kezdeni, kellenek az alapok. Ismét nyissuk meg a playbook/install-zabbix-agent.yml fájlunkat, és adjunk hozzá egy új taskot
(most az első 20 sor nem fog változni):
---
- hosts: all
become: true
tasks:
- name: Zabbix Agent telepítése [Red Hat family]
yum:
name: zabbix-agent
state: latest
update_cache: yes
when:
- ansible_os_family == "RedHat"
- name: Zabbix Agent telepítése [Debian family]
apt:
name: zabbix-agent
state: latest
update_cache: yes
when:
- ansible_os_family == "Debian"
- name: Zabbix Agent konfigurálása [CentOS]
lineinfile:
path: '/etc/zabbix_agentd.conf'
regexp: "{{ item.regexp }}"
line: "{{ item.line }}"
state: present
backup: yes
with_items:
- {regexp: '^\s*#?\s*Server\s*=', line: 'Server=192.168.5.250'}
- {regexp: '^\s*#?\s*Hostname\s*=', line: 'Hostname={{ inventory_hostname_short }}'}
- {regexp: '^\s*#?\s*LogFileSize\s*=', line: 'LogFileSize=50'}
- {regexp: '^\s*#?\s*ListenPort\s*=', line: 'ListenPort=10050'}
- {regexp: '^\s*#?\s*ListenIP\s*=', line: 'ListenIP=0.0.0.0'}
when:
- ansible_distribution == "CentOS"
- name: Zabbix Agent konfigurálása [Debian family]
lineinfile:
path: '/etc/zabbix/zabbix_agentd.conf'
regexp: "{{ item.regexp }}"
line: "{{ item.line }}"
state: present
backup: yes
with_items:
- {regexp: '^\s*#?\s*Server\s*=', line: 'Server=192.168.5.250'}
- {regexp: '^\s*#?\s*Hostname\s*=', line: 'Hostname={{ inventory_hostname_short }}'}
- {regexp: '^\s*#?\s*LogFileSize\s*=', line: 'LogFileSize=50'}
- {regexp: '^\s*#?\s*ListenPort\s*=', line: 'ListenPort=10050'}
- {regexp: '^\s*#?\s*ListenIP\s*=', line: 'ListenIP=0.0.0.0'}
when:
- ansible_os_family == "Debian"
Mivel bővült?
Normális esetben elég lenne egy Zabbix Agent konfigurálása
nevű task is, de a CentOS 7 és az Ubuntu 22.02 máshová teszi a zabbix-agent konfig fájlját 🙁
Én két féle módszert ismerek a konfig fájlok módosítására. Az első a most bemutatott lineinfile
modul. Ennek az előnye, hogy csak azok a sorok fognak módosulni, amit mi akarunk, a többi részhez nem nyúl az ansible. Hátránya, hogy pontosan kell definiálni a regexpeket… A másik a template alapú, erről majd legközelebb.
Pici magyarázat az új taskhoz:
- a
lineinfile
a modul neve - a
path
a konfig fájl neve, teljes elérési úttal - a
regexp
ebben az esetben egy változó lesz, mivel több paramétert is fogunk módosítani - a
backup
: yes azt jelenti, hogy minden módosítás előtt elmenti a fájlt - a
with_items
egy ciklus fajta, ez kell akkor, ha több paramétert szeretnénk módosítani, mint most
Ok, lássuk a medvét, akarom mondani az ansible-playbook futását
$ ansible-playbook playbook/install-zabbix-agent.yml -l vm1,vm3
PLAY [all] *****************************************************************************
TASK [Gathering Facts] *****************************************************************************
ok: [vm3]
ok: [vm1]
TASK [Zabbix Agent telepítése [Red Hat family]] *****************************************************************************
skipping: [vm3]
ok: [vm1]
TASK [Zabbix Agent telepítése [Debian family]] *****************************************************************************
skipping: [vm1]
ok: [vm3]
TASK [Zabbix Agent konfigurálása [CentOS]] *****************************************************************************
skipping: [vm3] => (item={'regexp': '^\\s*#?\\s*Server\\s*=', 'line': 'Server=192.168.5.250'})
skipping: [vm3] => (item={'regexp': '^\\s*#?\\s*Hostname\\s*=', 'line': 'Hostname=vm3'})
skipping: [vm3] => (item={'regexp': '^\\s*#?\\s*LogFileSize\\s*=', 'line': 'LogFileSize=50'})
skipping: [vm3] => (item={'regexp': '^\\s*#?\\s*ListenPort\\s*=', 'line': 'ListenPort=10050'})
skipping: [vm3] => (item={'regexp': '^\\s*#?\\s*ListenIP\\s*=', 'line': 'ListenIP=0.0.0.0'})
skipping: [vm3]
changed: [vm1] => (item={'regexp': '^\\s*#?\\s*Server\\s*=', 'line': 'Server=192.168.5.250'})
changed: [vm1] => (item={'regexp': '^\\s*#?\\s*Hostname\\s*=', 'line': 'Hostname=vm1'})
changed: [vm1] => (item={'regexp': '^\\s*#?\\s*LogFileSize\\s*=', 'line': 'LogFileSize=50'})
changed: [vm1] => (item={'regexp': '^\\s*#?\\s*ListenPort\\s*=', 'line': 'ListenPort=10050'})
changed: [vm1] => (item={'regexp': '^\\s*#?\\s*ListenIP\\s*=', 'line': 'ListenIP=0.0.0.0'})
TASK [Zabbix Agent konfigurálása [Debian family]] *****************************************************************************
skipping: [vm1] => (item={'regexp': '^\\s*#?\\s*Server\\s*=', 'line': 'Server=192.168.5.250'})
skipping: [vm1] => (item={'regexp': '^\\s*#?\\s*Hostname\\s*=', 'line': 'Hostname=vm1'})
skipping: [vm1] => (item={'regexp': '^\\s*#?\\s*LogFileSize\\s*=', 'line': 'LogFileSize=50'})
skipping: [vm1] => (item={'regexp': '^\\s*#?\\s*ListenPort\\s*=', 'line': 'ListenPort=10050'})
skipping: [vm1] => (item={'regexp': '^\\s*#?\\s*ListenIP\\s*=', 'line': 'ListenIP=0.0.0.0'})
skipping: [vm1]
changed: [vm3] => (item={'regexp': '^\\s*#?\\s*Server\\s*=', 'line': 'Server=192.168.5.250'})
changed: [vm3] => (item={'regexp': '^\\s*#?\\s*Hostname\\s*=', 'line': 'Hostname=vm3'})
changed: [vm3] => (item={'regexp': '^\\s*#?\\s*LogFileSize\\s*=', 'line': 'LogFileSize=50'})
changed: [vm3] => (item={'regexp': '^\\s*#?\\s*ListenPort\\s*=', 'line': 'ListenPort=10050'})
changed: [vm3] => (item={'regexp': '^\\s*#?\\s*ListenIP\\s*=', 'line': 'ListenIP=0.0.0.0'})
PLAY RECAP *****************************************************************************
vm1 : ok=3 changed=1 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
vm3 : ok=3 changed=1 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
Szuper, az elvárt eredményt hozta, a playbookban meghatározott 5 változót megfelelően beállította.
El is felejtettem mondani, hogy mit is kívántunk a gyári konfigban megváltoztatni:
- beállítjuk a zabbix szerver IP címét, a példában: 192.168.5.250
- beállítjuk a szerver zabbix által ismert hoszt nevét, a példáinkban egy változó van erre használva (
inventory_hostname_short
), ami azinventory.yml
-ból veszi az adatokat (vm1,vm2,vm3,vm4) - beállítjuk a logfile max méretét 50-re
- beállítjuk az agenthez szükséges portot 10050-re (ez a gyári érték, de lehet olyan eset, hogy változtatnunk kell rajta)
- és végül beállítjuk, hogy melyik interface-en fusson az agent (0.0.0.0, tehát mindegyiken)
Mi a hiba a playbookban?
Beállítja a paramétereket, de nem indította újra az agentet, így ez csak fél siker. A másik apró bibi, hogy ugyanazokat a változókat ismétli, ami nem kívánatos, erre is mutatok másik módszert.
Íme a módosított playbookunk, ami mindkét feladatot megoldja:
---
- hosts: all
become: true
vars:
ZBXSERVER: '192.168.5.250'
ZBXLOGFILESIZE: '50'
ZBXAGENTPORT: '10050'
ZBXLISTENIP: '0.0.0.0'
tasks:
- name: Zabbix Agent telepítése [Red Hat family]
yum:
name: zabbix-agent
state: latest
update_cache: yes
when:
- ansible_os_family == "RedHat"
- name: Zabbix Agent telepítése [Debian family]
apt:
name: zabbix-agent
state: latest
update_cache: yes
when:
- ansible_os_family == "Debian"
- name: Zabbix Agent konfigurálása [CentOS]
lineinfile:
path: '/etc/zabbix_agentd.conf'
regexp: "{{ item.regexp }}"
line: "{{ item.line }}"
state: present
backup: yes
with_items:
- {regexp: '^\s*#?\s*Server\s*=', line: 'Server={{ ZBXSERVER }}'}
- {regexp: '^\s*#?\s*Hostname\s*=', line: 'Hostname={{ inventory_hostname_short }}'}
- {regexp: '^\s*#?\s*LogFileSize\s*=', line: 'LogFileSize={{ ZBXLOGFILESIZE }}'}
- {regexp: '^\s*#?\s*ListenPort\s*=', line: 'ListenPort={{ ZBXAGENTPORT }}'}
- {regexp: '^\s*#?\s*ListenIP\s*=', line: 'ListenIP={{ ZBXLISTENIP }}'}
notify:
- restart zabbix-agent
when:
- ansible_distribution == "CentOS"
- name: Zabbix Agent konfigurálása [Debian family]
lineinfile:
path: '/etc/zabbix/zabbix_agentd.conf'
regexp: "{{ item.regexp }}"
line: "{{ item.line }}"
state: present
backup: yes
with_items:
- {regexp: '^\s*#?\s*Server\s*=', line: 'Server={{ ZBXSERVER }}'}
- {regexp: '^\s*#?\s*Hostname\s*=', line: 'Hostname={{ inventory_hostname_short }}'}
- {regexp: '^\s*#?\s*LogFileSize\s*=', line: 'LogFileSize={{ ZBXLOGFILESIZE }}'}
- {regexp: '^\s*#?\s*ListenPort\s*=', line: 'ListenPort={{ ZBXAGENTPORT }}'}
- {regexp: '^\s*#?\s*ListenIP\s*=', line: 'ListenIP={{ ZBXLISTENIP }}'}
notify:
- restart zabbix-agent
when:
- ansible_os_family == "Debian"
handlers:
- name: restart zabbix-agent
service: name=zabbix-agent state=restarted
A két konfiguráló taskhoz bekerült a notify: - restart zabbix-agent
, ami annyit tesz, hogy ha bármi változott a fájlban, csak akkor indítja újra az agentet.
És ehhez tartozik a handlers
, ami szükség esetén elvégzi az újraindítást.
Illetve bekerült a változókat definiáló vars
: sor, alatta vannak a közös változók. A taskoknál két kapcsos zárójel {{ }}
közé kell tenni a változó neveket.
Ha most lefuttatjuk a playbookot, nem fog történni semmi, hiszen már korábban beállítottuk a konfigot.
A demonstráció kedvéért én visszamásoltam az eredeti fájlokat, hogy lássátok, mi történik:
$ ansible-playbook playbook/install-zabbix-agent.yml -l vm1,vm3
PLAY [all] *****************************************************************************
TASK [Gathering Facts] *****************************************************************************
ok: [vm3]
ok: [vm1]
TASK [Zabbix Agent telepítése [Red Hat family]] *****************************************************************************
skipping: [vm3]
ok: [vm1]
TASK [Zabbix Agent telepítése [Debian family]] *****************************************************************************
skipping: [vm1]
ok: [vm3]
TASK [Zabbix Agent konfigurálása [CentOS]] *****************************************************************************
skipping: [vm3] => (item={'regexp': '^\\s*#?\\s*Server\\s*=', 'line': 'Server=192.168.5.250'})
skipping: [vm3] => (item={'regexp': '^\\s*#?\\s*Hostname\\s*=', 'line': 'Hostname=vm3'})
skipping: [vm3] => (item={'regexp': '^\\s*#?\\s*LogFileSize\\s*=', 'line': 'LogFileSize=50'})
skipping: [vm3] => (item={'regexp': '^\\s*#?\\s*ListenPort\\s*=', 'line': 'ListenPort=10050'})
skipping: [vm3] => (item={'regexp': '^\\s*#?\\s*ListenIP\\s*=', 'line': 'ListenIP=0.0.0.0'})
skipping: [vm3]
changed: [vm1] => (item={'regexp': '^\\s*#?\\s*Server\\s*=', 'line': 'Server=192.168.5.250'})
changed: [vm1] => (item={'regexp': '^\\s*#?\\s*Hostname\\s*=', 'line': 'Hostname=vm1'})
changed: [vm1] => (item={'regexp': '^\\s*#?\\s*LogFileSize\\s*=', 'line': 'LogFileSize=50'})
changed: [vm1] => (item={'regexp': '^\\s*#?\\s*ListenPort\\s*=', 'line': 'ListenPort=10050'})
changed: [vm1] => (item={'regexp': '^\\s*#?\\s*ListenIP\\s*=', 'line': 'ListenIP=0.0.0.0'})
TASK [Zabbix Agent konfigurálása [Debian family]] *****************************************************************************
skipping: [vm1] => (item={'regexp': '^\\s*#?\\s*Server\\s*=', 'line': 'Server=192.168.5.250'})
skipping: [vm1] => (item={'regexp': '^\\s*#?\\s*Hostname\\s*=', 'line': 'Hostname=vm1'})
skipping: [vm1] => (item={'regexp': '^\\s*#?\\s*LogFileSize\\s*=', 'line': 'LogFileSize=50'})
skipping: [vm1] => (item={'regexp': '^\\s*#?\\s*ListenPort\\s*=', 'line': 'ListenPort=10050'})
skipping: [vm1] => (item={'regexp': '^\\s*#?\\s*ListenIP\\s*=', 'line': 'ListenIP=0.0.0.0'})
skipping: [vm1]
changed: [vm3] => (item={'regexp': '^\\s*#?\\s*Server\\s*=', 'line': 'Server=192.168.5.250'})
changed: [vm3] => (item={'regexp': '^\\s*#?\\s*Hostname\\s*=', 'line': 'Hostname=vm3'})
changed: [vm3] => (item={'regexp': '^\\s*#?\\s*LogFileSize\\s*=', 'line': 'LogFileSize=50'})
changed: [vm3] => (item={'regexp': '^\\s*#?\\s*ListenPort\\s*=', 'line': 'ListenPort=10050'})
changed: [vm3] => (item={'regexp': '^\\s*#?\\s*ListenIP\\s*=', 'line': 'ListenIP=0.0.0.0'})
RUNNING HANDLER [restart zabbix-agent] *****************************************************************************
changed: [vm1]
changed: [vm3]
PLAY RECAP *****************************************************************************
vm1 : ok=4 changed=2 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
vm3 : ok=4 changed=2 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
Kimaradt egy nem elhanyagolható rész a playbookból, mi van, ha eleve nem fut az agent? Vagy nincs beállítva az autostart? Adjuk hozzá a fájlunkhoz, ami így néz ki teljes terjedelmében:
---
- hosts: all
become: true
vars:
ZBXSERVER: '192.168.5.250'
ZBXLOGFILESIZE: '50'
ZBXAGENTPORT: '10050'
ZBXLISTENIP: '0.0.0.0'
tasks:
- name: Zabbix Agent telepítése [Red Hat family]
yum:
name: zabbix-agent
state: latest
update_cache: yes
when:
- ansible_os_family == "RedHat"
- name: Zabbix Agent telepítése [Debian family]
apt:
name: zabbix-agent
state: latest
update_cache: yes
when:
- ansible_os_family == "Debian"
- name: Zabbix Agent konfigurálása [CentOS]
lineinfile:
path: '/etc/zabbix_agentd.conf'
regexp: "{{ item.regexp }}"
line: "{{ item.line }}"
state: present
backup: yes
with_items:
- {regexp: '^\s*#?\s*Server\s*=', line: 'Server={{ ZBXSERVER }}'}
- {regexp: '^\s*#?\s*Hostname\s*=', line: 'Hostname={{ inventory_hostname_short }}'}
- {regexp: '^\s*#?\s*LogFileSize\s*=', line: 'LogFileSize={{ ZBXLOGFILESIZE }}'}
- {regexp: '^\s*#?\s*ListenPort\s*=', line: 'ListenPort={{ ZBXAGENTPORT }}'}
- {regexp: '^\s*#?\s*ListenIP\s*=', line: 'ListenIP={{ ZBXLISTENIP }}'}
notify:
- restart zabbix-agent
when:
- ansible_distribution == "CentOS"
- name: Zabbix Agent konfigurálása [Debian family]
lineinfile:
path: '/etc/zabbix/zabbix_agentd.conf'
regexp: "{{ item.regexp }}"
line: "{{ item.line }}"
state: present
backup: yes
with_items:
- {regexp: '^\s*#?\s*Server\s*=', line: 'Server={{ ZBXSERVER }}'}
- {regexp: '^\s*#?\s*Hostname\s*=', line: 'Hostname={{ inventory_hostname_short }}'}
- {regexp: '^\s*#?\s*LogFileSize\s*=', line: 'LogFileSize={{ ZBXLOGFILESIZE }}'}
- {regexp: '^\s*#?\s*ListenPort\s*=', line: 'ListenPort={{ ZBXAGENTPORT }}'}
- {regexp: '^\s*#?\s*ListenIP\s*=', line: 'ListenIP={{ ZBXLISTENIP }}'}
notify:
- restart zabbix-agent
when:
- ansible_os_family == "Debian"
- name: Zabbix Agent engedélyezése és elindítása
service:
name: zabbix-agent
enabled: yes
state: started
handlers:
- name: restart zabbix-agent
service: name=zabbix-agent state=restarted
Az új service
modul felel a zabbix-agent elindításáért (ha még nem futna), és beállítja az autostartot.
Már majdnem tökéletes, de mi van, ha egy másik playbooknak is szüksége lenne ebben a fájlban definiált változókra?
Akkor oda is fel kell venni, ami erősen kerülendő, mivel, ha valaha változtatni akarunk rajta, akkor nem fogunk emlékezni, hogy mely fájlokban szerepeltek.
Íme a végleges verzió, eskü, ebből ma nem lesz több:
---
- hosts: all
become: true
tasks:
- name: Zabbix Agent telepítése [Red Hat family]
yum:
name: zabbix-agent
state: latest
update_cache: yes
when:
- ansible_os_family == "RedHat"
- name: Zabbix Agent telepítése [Debian family]
apt:
name: zabbix-agent
state: latest
update_cache: yes
when:
- ansible_os_family == "Debian"
- name: Zabbix Agent konfigurálása [CentOS]
lineinfile:
path: '/etc/zabbix_agentd.conf'
regexp: "{{ item.regexp }}"
line: "{{ item.line }}"
state: present
backup: yes
with_items:
- {regexp: '^\s*#?\s*Server\s*=', line: 'Server={{ ZBXSERVER }}'}
- {regexp: '^\s*#?\s*Hostname\s*=', line: 'Hostname={{ inventory_hostname_short }}'}
- {regexp: '^\s*#?\s*LogFileSize\s*=', line: 'LogFileSize={{ ZBXLOGFILESIZE }}'}
- {regexp: '^\s*#?\s*ListenPort\s*=', line: 'ListenPort={{ ZBXAGENTPORT }}'}
- {regexp: '^\s*#?\s*ListenIP\s*=', line: 'ListenIP={{ ZBXLISTENIP }}'}
notify:
- restart zabbix-agent
when:
- ansible_distribution == "CentOS"
- name: Zabbix Agent konfigurálása [Debian family]
lineinfile:
path: '/etc/zabbix/zabbix_agentd.conf'
regexp: "{{ item.regexp }}"
line: "{{ item.line }}"
state: present
backup: yes
with_items:
- {regexp: '^\s*#?\s*Server\s*=', line: 'Server={{ ZBXSERVER }}'}
- {regexp: '^\s*#?\s*Hostname\s*=', line: 'Hostname={{ inventory_hostname_short }}'}
- {regexp: '^\s*#?\s*LogFileSize\s*=', line: 'LogFileSize={{ ZBXLOGFILESIZE }}'}
- {regexp: '^\s*#?\s*ListenPort\s*=', line: 'ListenPort={{ ZBXAGENTPORT }}'}
- {regexp: '^\s*#?\s*ListenIP\s*=', line: 'ListenIP={{ ZBXLISTENIP }}'}
notify:
- restart zabbix-agent
when:
- ansible_os_family == "Debian"
- name: Zabbix Agent engedélyezése és elindítása
service:
name: zabbix-agent
enabled: yes
state: started
handlers:
- name: restart zabbix-agent
service: name=zabbix-agent state=restarted
Kikerültek a változók, de hová lettek?
Hozzunk létre egy mappát az inventory alá: group_vars
néven, és helyezzünk el benne egy új fájlt: all.yml
az alábbi tartalommal:
ZBXSERVER: '192.168.5.250'
ZBXLOGFILESIZE: '50'
ZBXAGENTPORT: '10050'
ZBXLISTENIP: '0.0.0.0'
És tényleg készen vagyunk!
Az inventory/group_vars/all.yml
fájlba tehetjük az összes közös változót, mindegy, hogy melyik playbookot futtatjuk, onnan fogja kiolvasni. Persze az ansible nem ilyen egyszerű, a változóknak van egy tucat szintje, de mára elég volt ennyi infó is, lehet gyakorolni az eddig olvasottakat 🙂
Frissítés… Egy apróság kimaradt, ezért a playbook nem fut rá a vm2-es szerverre.
Íme a javított playbook:
---
- hosts: all
become: true
tasks:
- name: Zabbix Agent telepítése [Red Hat family]
yum:
name: zabbix-agent
state: latest
update_cache: yes
when:
- ansible_os_family == "RedHat"
- name: Zabbix Agent telepítése [Debian family]
apt:
name: zabbix-agent
state: latest
update_cache: yes
when:
- ansible_os_family == "Debian"
- name: Zabbix Agent konfigurálása [Red Hat family]
lineinfile:
path: '/etc/zabbix_agentd.conf'
regexp: "{{ item.regexp }}"
line: "{{ item.line }}"
state: present
backup: yes
with_items:
- {regexp: '^\s*#?\s*Server\s*=', line: 'Server={{ ZBXSERVER }}'}
- {regexp: '^\s*#?\s*Hostname\s*=', line: 'Hostname={{ inventory_hostname_short }}'}
- {regexp: '^\s*#?\s*LogFileSize\s*=', line: 'LogFileSize={{ ZBXLOGFILESIZE }}'}
- {regexp: '^\s*#?\s*ListenPort\s*=', line: 'ListenPort={{ ZBXAGENTPORT }}'}
- {regexp: '^\s*#?\s*ListenIP\s*=', line: 'ListenIP={{ ZBXLISTENIP }}'}
notify:
- restart zabbix-agent
when:
- ansible_os_family == "RedHat"
- name: Zabbix Agent konfigurálása [Debian family]
lineinfile:
path: '/etc/zabbix/zabbix_agentd.conf'
regexp: "{{ item.regexp }}"
line: "{{ item.line }}"
state: present
backup: yes
with_items:
- {regexp: '^\s*#?\s*Server\s*=', line: 'Server={{ ZBXSERVER }}'}
- {regexp: '^\s*#?\s*Hostname\s*=', line: 'Hostname={{ inventory_hostname_short }}'}
- {regexp: '^\s*#?\s*LogFileSize\s*=', line: 'LogFileSize={{ ZBXLOGFILESIZE }}'}
- {regexp: '^\s*#?\s*ListenPort\s*=', line: 'ListenPort={{ ZBXAGENTPORT }}'}
- {regexp: '^\s*#?\s*ListenIP\s*=', line: 'ListenIP={{ ZBXLISTENIP }}'}
notify:
- restart zabbix-agent
when:
- ansible_os_family == "Debian"
- name: Zabbix Agent engedélyezése és elindítása
service:
name: zabbix-agent
enabled: yes
state: started
handlers:
- name: restart zabbix-agent
service: name=zabbix-agent state=restarted