Salt - grains, pillars si sabloane
Postat la Wed 13 February 2019 in tutoriale
Un aspect important in orice sistem de managementul configuratiilor este descrierea variabilelor pentru sistemele administrate (minioni pentru Salt). Acest lucru se face prin:
- grains - se definesc la minion - includ atributute sistem (OS, aplicatii instalate, etc) si variabile definite.
- pillars - sunt definite pe master - includ uzual credentiale / setari comune pe roluri sau grupe de minioni
Sistemul de sabloane (template-uri) foloseste aceste variabile - specifice pentru minion - la generarea fisierelor de configurare.
Grains
Grains descriu componentele statice ale unui minion si sunt detectate de modulele ce ruleaza pentru functionarea corecta. De exemplu daca detecteaza ca sistemul de operare (os_family) este Debian vor folosi aplicatia apt pentru instalarea aplicatiilor si yum la minion cu sisteme de operare Redhat.
Salt detecteaza un numar mare de grains ca de ex: os_family, saltversion, adrese IP, arhitectura sistem, etc. Acestea sunt stocate in memorie la pornirea agentului pe minion (salt-minion).
O lista comleta a lor o putem obtine:
salt minion1.domeniu.meu grains.ls
minion1.domeniu.meu:
-------------
- biosreleasedate
- biosversion
- cpu_flags
- cpu_model
- cpuarch
- disks
...
iar lista cu valori:
salt minion1.domeniu.meu grains.ls
minion1.domeniu.meu:
-------------
...
host:
salt-node2
hwaddr_interfaces:
----------
eth0:
00:16:3e:ce:61:71
eth1:
00:16:3e:38:e3:1a
lo:
00:00:00:00:00:00
id:
salt-node2.lxd
init:
systemd
ip4_gw:
192.168.25.1
ip4_interfaces:
----------
eth0:
- 10.209.214.32
eth1:
- 192.168.25.108
lo:
- 127.0.0.1
...
Individual putem afisa un grain cu grains.get <nume>:
salt minion1.domeniu.meu grains.get hosts
minion1.domeniu.meu:
minion1.domeniu.meu
Grains pot fi adaugate sau modificate:
salt minion1.domeniu.meu grains.setval variabila valoare
sau sterse
salt minion1.domeniu.meu grains.delval variabila
Valorile custom setate sunt salvate in fisierul /etc/salt/grains pe minion.
Pillars
Pillars se utilizeaza similar ca si grains cu diferenta ca sunt definite pe master intr-o locatie centrala uzual in /srv/pillar/. Pentru targetarea specifica pe minion se foloseste tot un fisier top.sls
base:
'*':
- ssh
- utils
Pentru contin doar valori statice pot fi ierarhizate foarte simplu:
Lista cu datele din pillar o puteti extrage:
salt minion1.domeniu.meu pilars.items
Pentru aplicatii avansate datele din pillars se pot imparti pe roluri, enviromente si care apoi se combina intr-un mod ordonat. O prezentare pe acest subiect este Herding Cattle with SaltStack and Targeting via CMDB
Salt permite si encriptarea datelor prin gpg
Sabloane (templates)
Salt se foloseste de sabloane ce pot include atribute din grains si pillars pentru generarea fisierelor de configurare in mod dinamic. Un engine de templating larg folosit este jinja specific in aplicatiile python.
Generarea fisierelor prin engine de templating se face cu comanda file.managed:
apache2_conf:
file:
- managed
- name: /etc/apache2/apache2.conf
- source: salt://apache2/apache2.conf
- template: jinja
Includerea variabilor din grains se insereaza in template
The user {{ grains['user'] }} is referred to here.
sau a celor din pillar
The user {{ pillar['user'] }} is referred to here.
Se recomanda ca in cazul in care un grain/pillar nu este definit sa se populeze cu o valoare implicita:
The user {{ salt['grains.get']('user', 'larry') }} is referred to here.
The user {{ salt['pillar.get']('user', 'larry') }} is referred to here.
Jinja perminte includerea definiri de variabile similar cu alte template engines:
{% set mylist = ['mere', 'portocale', 'banane'] %}
{% set mydict = {'placinta favorita': 'placinta cu mere', 'favorite 'prajitura favorita' 'diplomat'} %}
sau inserare de logica:
{% if grains['os_family'] == 'Debian' %}
apache2:
{% elif grains['os_family'] == 'RedHat' %}
httpd:
{% endif %}
pkg.installed : []
service.running:
- enabled: True
Articolul face parte din seria Aplicatii pentru managementul configuratiilor