Qu'est-ce que Salt ? – –



Qu'est-ce que Salt ? – –

0 0


slides_salt

Small presentation (in french) about Salt-stack

On Github ldidry / slides_salt

Qu'est-ce que Salt ?

C'est un gestionnaire de configuration, à l'instar de :

Salt possède un certain nombre d'avantages par rapport à ses concurrents :

  • syntaxe claire (comparé à Puppet ou Cfengine)
  • rapidité
  • possibilité d'exécuter des commandes salt sur une machine distante sans pour autant :
    • installer salt sur la machine distante
    • modifier les fichiers de description de Salt

Pas d'interrogation

Envoi

Le master envoie les

instructions

aux minions pour leur indiquer quoi faire.

ØMQ

PUB/SUB sur le port 4505

REP sur le port 4506

Un diagramme simple comme bonjour

MessagePack

pour sérialiser les messages

  • format binaire
  • structures de données simples
  • compact
Tout est

chiffré

Il utilise d'abord des

clés publiques

pour l'authentification

Le master doit connaître les clés publiques des minions

Puis, il utilise

AES

pour la communication

(symétrique, plus rapide)

Comment accepter les clés des minions ?

# salt-key -L
Accepted Keys:
Unaccepted Keys:
minion_1
Rejected Keys:
# salt-key -a minion_1
The following keys are going to be accepted:
Unaccepted Keys:
minion_1
Proceed? [n/Y] y
Key for minion minion_1 accepted.
# salt 'minion_1' test.ping
minion_1:
    True

Machines sous contrôle

Elles recoivent leurs intructions via

PUB/SUB ZeroMQ

Possibilité de configuration

sans master

(avec salt-call)

Ils fournissent les

fonctionnalités

pip, aliases, ssh, pam, mount, upstart, apt, iptables, mysql, quota, file

Exécutez les modules en CLI !

# salt '*' cmd.run 'ls /'
 …
# salt '*' state.highstate
 …

C'est ce qu'on

gère

ou

configure

sur les

minions

Les states ne sont que des

données

habituellement en YAML

Ils correspondent généralement à des fonctions des

modules

Comprendre les states

/etc/munin/munin.conf:
  file:
    - managed
    - source: salt://munin/files/munin.conf
    - template: jinja
    - user: root
    - require: pkg.munin
munin-node:
  pkg.installed:
    - name: munin-node
  file:
    - managed
    - name: /etc/munin/munin-node.conf
    - source: salt://munin/files/munin.conf
    - template: jinja
    - user: root
    - require:
      - pkg: munin
  service:
    - running
    - enable: True
    - watch:
      - file: /etc/munin/munin-node.conf

Il y a un paquet de directives !

  • require
  • extend
  • watch
  • include

sauver

ce que

retournent

les

minions ?

  • STDOUT
  • MongoDB
  • Redis
  • SQL DB

Langage

de la

configuration

des states

  • YAML
  • JSON
  • python

Configuration de la machine

peuplée au début

Utilisation des grains

{% if grains["os"] == 'RedHat' %}
httpd:
  pkg:
    - installed
{% elif grains["os"] == 'Debian' %}
apache2:
  pkg:
    - installed
{% endif %}

Liste des grains

$ salt '*' grains.ls
…

On peut les utiliser n'importe où

dev:
  'os:Debian':
    - match: grain
    - python_server

Pensez aux pillar comme à des

ensembles de variables

Ce sont des

données

tout comme les states

Créer un pillar pour salt…

{% if grains['os'] == 'RedHat' %}
apache: httpd
git: git
{% elif grains['os'] == 'Debian' %}
apache: apache2
git: git-core
{% endif %}

et son utilisation !

apache:
  pkg:
    - installed
    - name: {{ pillar['apache'] }}

  • salt-bootstrap

  • salt-cloud

  • salt-vagrant

  • halite

Possibilité de développer ses propres

modules

comme des modules

python

Pareil pour les

states

Questions ?

http://github.com/ldidry

http://twitter.com/framasky

http://slides.fiat-tux.fr

Honteusement pompé sur la présentation de Jose Ignacio Galarza

Pour imprimer