Salt - management prin states

Postat la Sun 27 January 2019 in tutoriale

Salt dispune de un format simplu si puternic de fisiere ce ne permite descrierea configuratiei dorite (numita state) ce este si simplu de aplicat. Multiple states pot fi combinate pentru realizarea unor configuratii complexe.

Lista completa a modulelor state incluse in Salt gasiti aici.

Putem descrie un state prin fisiere de state in YAML cu extensia .sls. Un exemplu simplu este existenta unui cont pe sisteme:

user_mihai:
  user.present:
    - name: mihai
    - fullname: Mihai Andrei
    - uid: 2001
    - home: /home/mihai

Im acest exemplu utilizama modulul user cu metoda present si atributele dorite. Daca salt gaseste userul pe sistem cu atributele specificate atunci nu face nimic iar in caz contrar aplica cerintele comenzii.

Mai multi parametrii ai comenzii ii puteti gasi cu comanda sys.state_doc:

# salt-call sys.state_doc user.present
local:
    ----------
    user:

        Management of user accounts
        ===========================

        The user module is used to create and manage user settings, users can be set
        as either absent or present
        ...

Puteti lista modulele de state incluse cu comanda sys.list_state_modules si metodele incluse intr-un modul cu sys.list_state_modules

# salt-call sys.list_state_modules
local:
    - acl
    ...
    - user
    ...

#salt-call sys.list_state_functions user
local:
    - user.absent
    - user.present

Pentru a fi executate de master trebuie specificata calea lor prin variabile file_roots. Calea implicita este setata in /srv/salt. Dar poate fi extinsa printr-un fisier pus in /etc/salt/master.d/.

file_roots:
  base:
   - /srv/salt/base
  dev:
    - /srv/salt/dev
    - /srv/salt/base
  prod:
    - /srv/salt/prod
    - /srv/salt/base

Aplicarea unui state la minioni se face cu comanda state.apply (sau state.highstate, state.sls). In output sunt prezentate modificarile survenite:

salt minion1.domeniu.meu state.apply user_mihai
minion1.domeniu.meu:
----------
  ID: user_mihai
Function: user.present
Name: mihai
Result: True
Comment: New user mihai created
Started: 13:10:01.685930
Duration: 427.877 ms
Changes:
      ----------
      fullname:
          Mihai Andrei
      gid:
          2001
      groups:
          - mihai
      home:
          /home/mihai
      homephone:
      name:
          mihai
      other:
      passwd:
          x
      roomnumber:
      shell:
      uid:
          2001
      workphone:

Summary for minion1.domeniu.meu
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time: 427.877 ms

Fisierul top.sls

Descriere unor state (configuratii) complexe se face de obicei in fiserul top de obicei numit top.sls situat in radacina direcorului specificat in file_roots.

base:
  '*':
    - ssh
    - utils
  'minion1.domeniul.meu':
    - users.mihai

La cel mai inalt nivel se afla environment-ul, aici numit base. Pentru toti minionii se aplica state-ul pentru ssh si utils iar pentru minion1.domeniul.meu se creaza userul mihai.

Salt cauta dupa fisiere in radacina environment-ului , pentru ssh astfel: cauta un fisier ssh.sls sau un fisier ssh/init.sls. Pentru user se va uita dupa fisierul users/mihai.sls

Deci structura directorului ar fi:

├── ssh
│   ├── files
│   │   ├── ca_user_key.pub
│   │   └── sshd_config
│   ├── init.sls
│   └── stop.sls
├── top.sls
├── users
│   ├── files
│   │   ├── devel
│   │   └── zshrc
│   ├── init.sls
│   └── mihai.sls
└── utils
    └── init.sls

Pentru aplicarea configurarii dorite rulam comanda state.highstate

salt "*" state.highstate

iar in output vedem rezultatul comenzilor rulate.

Targetarea minionilor poate fi facut dupa mai multe criterii: - nume (complet, partial sau cautare regulata) - atribute minion (grains): rol, OS etc - combinat

base:
  '*':
    - ssh
    - utils
  'minion*':
    - users.mihai
  'os:CentOS':
    - match: grain
    - default.vim-enhanced
  'role:db':
    - match: grain
    - mysql

Articolul face parte din seria Aplicatii pentru managementul configuratiilor