Salt - gestionare states si pillar prin git

Postat la Fri 03 January 2020 in tutoriale

O optiune foarte utila oferita de Salt este includerea fisierelor de configurare (states) si a secretelor (pillar) din repository git (sau gitfs).

Pentru asta trebuie instalata libraria pygit2 sau GitPython, prima fiind preferata in cazul ca exista pe server.

Pe sisteleme CentOS 7.x aceasta se instaleaza:

yum install python-pygit2

Activarea backend-ului pentru states se face prin includerea in fiserul de configurare al master-ului:

fileserver_backend:
  - root
  - gitfs

Repository-urile se adauga fie din cele publice (ca de exemplu formulele salt de pe Github) ori private folosind protocoalele git://, https://, file://, ssh://

gitfs_remotes:
  - git@github.com:user/repo.git
  - ssh://user@domain.tld/path/to/repo.git

Optiuni globale pe care se pot seta (mai multe aici):

  • gitfs_user - userul utilizat la conectare
  • gitfs_password - parola de conectare
  • gitfs_insecure_auth
  • gitfs_pubkey - cheia publica ssh
  • gitfs_privkey - cheia privata ssh
  • gitfs_passphrase - parola cheii private
  • gitfs_update_interval - intervalul la care se preiau modificarile din repo (in secunde)
  • gitfs_root - directorul folosit din repo

Sau aceste optiuni pot fi specificate la nivel de repo adaugat:

gitfs_remotes:
  - http://foo.com/baz.git:
    - root: salt/states
    - user: joe
    - password: mysupersecretpassword
    - insecure_auth: True
  - git@git.lxd:cristi/salt-states.git:
    - pubkey: /root/.ssh/id_rsa.pub
    - privkey: /root/.ssh/id_rsa
    - update_interval: 30

Actualizarea manuala a fisierelor din repo poate fi facuta:

salt-run fileserver.update
salt-run fileserver.update backend=roots,git

Pentru pillar configurarea de face la ext_pillar

ext_pillar:
  - git:
    # Use 'prod' instead of the branch name 'production' as the environment
    - production https://gitserver/git-pillar.git:
      - env: prod
    # Use 'dev' instead of the branch name 'develop' as the environment
    - develop https://gitserver/git-pillar.git:
      - env: dev
    # No per-remote config parameters (and no trailing colon), 'qa' will
    # be used as the environment
    - qa https://gitserver/git-pillar.git
    # SSH key authentication
    - master git@other-git-server:pillardata-ssh.git:
      # Pillar SLS files will be read from the 'pillar' subdirectory in
      # this repository
      - root: pillar
      - privkey: /path/to/key
      - pubkey: /path/to/key.pub
      - passphrase: CorrectHorseBatteryStaple
    # HTTPS authentication
    - master https://other-git-server/pillardata-https.git:
      - user: git
      - password: CorrectHorseBatteryStap

Cerinta este ca fiecare branch/tag din repo trebuie sa aibe asociat un environment in salt. Branch-ul master este asociat environment-ului base.

Actualizarea manuala a informatiilor din repo pentru pillar se poate face cu comanda:

salt-run git_pillar.update

Putem verifica preluarea modificarilor prin listarea datelor din pillar:

salt "consul-server.*" pillar.items
consul-server.lxd:
    ----------
        consul:
            ----------
            server:
                True
            servers:
                - consul-server.lxd
                - consul-server2.lxd
                - consul-server3.lxd
            tokens:
                ----------
                agent:
                    1ae89bc3-a33e-238e-371f-fdd5c3e2577b
                service:
                ----------
                web:
                    aaaa
    environment:
        lxd
    master_key:
        123456
    roles:
        - base
        - salt-minion

Articolul face parte din seria Aplicatii pentru managementul configuratiilor.