Az előző ansible cikkben mutattam egy módszert, amivel konfig fájlokat lehet szerkeszteni, ráadásul úgy, hogy csak azokhoz nyúl hozzá, amit mi szeretnénk. Most egy másik megoldást fogok bemutatni, ami teljes kontrollt ad a kívánt konfig fájl felett.
A ~/git/ansible_vagrant
az én gépemen az a mappa, ahol az ansible fájlok vannak, ha Te más néven hoztad létre, módosítsd a playbookban!
Vegyük elő a szokásos install-zabbix-agent.yml
fájlunkat, és a tartalmát cseréljük le erre:
---
- 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
template: src=~/git/ansible_vagrant/templates/zabbix_agentd.conf.j2 dest={{ ZBXDIR }}/zabbix_agentd.conf backup=yes
notify:
- restart zabbix-agent
- 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
Sokkal rövidebb lett, nem?
Igaz is, meg nem is 🙂
Sikeresen összevontam két taskot, és a template
modul sokkal rövidebb, mint a korábbi lineinfile
modul. Viszont, hogy ez működhessen, bővítenünk kell az inventory.yml-t, így:
---
all:
hosts:
localhost:
children:
servers:
vars:
ansible_ssh_user: vagrant
hosts:
vm1:
ansible_host: 192.168.56.2
ansible_ssh_private_key_file: .vagrant/machines/vm1/virtualbox/private_key
vm2:
ansible_host: 192.168.56.3
ansible_ssh_private_key_file: .vagrant/machines/vm2/virtualbox/private_key
vm3:
ansible_host: 192.168.56.4
ansible_ssh_private_key_file: .vagrant/machines/vm3/virtualbox/private_key
vm4:
ansible_host: 192.168.56.5
ansible_ssh_private_key_file: .vagrant/machines/vm4/virtualbox/private_key
redhat:
vars:
ZBXDIR: '/etc'
ZBXLOGDIR: 'zabbix'
hosts:
vm1:
vm2:
debian:
vars:
ZBXDIR: '/etc/zabbix'
ZBXLOGDIR: 'zabbix-agent'
hosts:
vm3:
vm4:
Itt csak plusz sorok jelentek meg, a redhat
és a debian
két csoportot takar, amiknek saját változóik vannak (ZBXDIR, ZBXLOGDIR
), és mindkettőnek két-két tagja van. Erre azért volt szükség, mert a két fő operációs rendszer család eltérő mappákat használ a logoknak és magának az agent konfignak.
És végezetül mentsük el a templates
mappába a zabbix_agentd.conf.j2
nevű fájlt az alábbi tartalommal:
################################################################################
{{ ansible_managed | comment }}
################################################################################
PidFile=/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/{{ ZBXLOGDIR }}/zabbix_agentd.log
LogFileSize={{ ZBXLOGFILESIZE }}
Server={{ ZBXSERVER }}
ListenPort={{ ZBXAGENTPORT }}
ListenIP={{ ZBXLISTENIP }}
ServerActive=127.0.0.1
Hostname={{ inventory_hostname_short}}
Valójában sokkal hosszabb a gyári konfig, de ezen kívül minden sor komment benne, így most azokat nagyvonalúan kihagytam. Látjátok az elején az {{ ansible_managed | comment }}
sort? Ha még rémlik az első ansible cikk anyaga, ott szerepelt az ansible.cfg
-ben ennek a definíciója. És hogy fog ez kinézni a szervereken található konfigban, hát így (a vm1 szerveren):
################################################################################
#
# This file is managed by Ansible, all changes will be lost! PLEASE DO NOT EDIT!
#
# template: ~/git/ansible_vagrant/templates/zabbix_agentd.conf.j2
# date: 2023.06.30. 23:07:00
# user: msandor
# host: msandorhp.msandor.hu
#
################################################################################
PidFile=/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=50
Server=192.168.5.250
ListenPort=10050
ListenIP=0.0.0.0
ServerActive=127.0.0.1
Hostname=vm1
Az első sort írtuk be az ansible.cfg
-be, a többi pedig változókból jön. Mint a template fájl helye az ansible gépen, a dátum a template utolsó módosításának időpontja, az user és a host, pedig az ansible-playbookot futtató felhasználónév és gépnév.
Van egy nagy kedvencem, a diff
, amely futtatás közben megmutatja, hogy mi változik mire. Csak egy plusz sor adunk a taskhoz:
- name: Zabbix Agent konfigurálása
diff: yes
template: src=~/git/ansible_vagrant/templates/zabbix_agentd.conf.j2 dest={{ ZBXDIR }}/zabbix_agentd.conf backup=yes
notify:
- restart zabbix-agent
Van egy üres tasks mappa, nem teszünk bele semmit?
Az újrahasznosítható taskok hasznosak. Ma utoljára vegyük elő a playbook/install-zabbix-agent.yml
fájlunkat, és ezzel töltsük fel:
---
- hosts: all
become: true
tasks:
- include: ~/git/ansible_vagrant/tasks/install-zabbix_agent.yml
- include: ~/git/ansible_vagrant/tasks/configure-zabbix_agent.yml
- include: ~/git/ansible_vagrant/tasks/service-zabbix_agent.yml
handlers:
- name: restart zabbix-agent
service: name=zabbix-agent state=restarted
Hoppácska, mennyivel kisebb lett!
Persze, mert három kis fájlban él tovább, az energia nem vész el, csak átalakul 🙂
Nyissuk meg szerkesztésre ezt: tasks/install-zabbix_agent.yml
:
---
- 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"
Nyissuk meg szerkesztésre ezt: tasks/configure-zabbix_agent.yml
:
---
- name: Zabbix Agent konfigurálása
diff: yes
template: src=~/git/ansible_vagrant/templates/zabbix_agentd.conf.j2 dest={{ ZBXDIR }}/zabbix_agentd.conf backup=yes
notify:
- restart zabbix-agent
És végül nyissuk meg szerkesztésre ezt: tasks/service-zabbix_agent.yml
:
---
- name: Zabbix Agent engedélyezése és elindítása
service:
name: zabbix-agent
enabled: yes
state: started
Összegezzük a dolgokat és a fájlokat:
├── git
│ ├── ansible_vagrant
│ │ ├── ansible.cfg
│ │ ├── inventory
│ │ │ ├── group_vars
│ │ │ │ └── all.yml
│ │ │ └── inventory.yml
│ │ ├── log
│ │ │ └── ansible.log
│ │ ├── playbook
│ │ │ └── deploy-zabbix-labor.yml
│ │ ├── tasks
│ │ │ ├── configure-zabbix_agent.yml
│ │ │ ├── install-zabbix_agent.yml
│ │ │ └── service-zabbix_agent.yml
│ │ ├── templates
│ │ │ ├── zabbix_agentd.conf.j2
│ │ └── Vagrantfile
Az eddigiek alapján bármilyen konfig fájlt fogunk tudni szerkeszteni (mindkét módszerrel), csak le kell másolni a taskokat, és értelemszerűen át kell írni a fájlokat/változókat. Nem ez az univerzális, egyetlen megoldás a példa feladatra, ez csak egy jó megoldás a sok közül. Én négy éve gyakorlom az ansible-playbook írást, és minden nap tanulok valami újat, ha lenne elég időm, az összes ansible-playbookom újra írnám 🙂
Egyelőre ennyit terveztem az ansible képességeiből bemutatni, ha lesz rá kapacitásom, akkor más finomságokkal fogok visszatérni.
Ha bármi kérdésed volna, nyugodtan tedd fel a cikkek alatt kommentben, ha tudok, fogok rá válaszolni!