Skip to content
Menu
msandor honlapja
  • Bemutatkozás
msandor honlapja

Ansible: mire jó a template?

Posted on 2023.06.30.2024.04.10.

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!

Vélemény, hozzászólás? Válasz megszakítása

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

Kategóriák

  • ansible
  • docker
  • e-mail
  • git
  • hardware
  • hibakeresés
  • kubernetes
  • ldap
  • Linux
  • MariaDB
  • OpenWrt
  • Proxmox
  • security
  • SNMP
  • Synology
  • teszt
  • Unifi
  • UPS
  • vagrant
  • Virtualbox
  • zabbix
©2025 msandor honlapja | WordPress Theme by Superb WordPress Themes

Adatkezelési tájékoztató || Hibát talált az oldalon? Írja meg nekem. || Impresszum || Powered by WordPress

Oldalunk cookie-kat ("sütiket") használ. Ezen fájlok információkat szolgáltatnak számunkra a felhasználó oldallátogatási szokásairól a legjobb felhasználói élmény nyújtása érdekében, de nem tárolnak személyes információkat, adatokat. Szolgáltatásaink igénybe vételével Ön beleegyezik a cookie-k használatába. Kérjük, hogy kattintson az Elfogadom gombra, amennyiben böngészni szeretné weboldalunkat.ElfogadomAdatvédelmi irányelvek