salt stack
TRANSCRIPT
SaltStack
Quoi qu’est ce ?
Exécution a distance
Gestion d’état du système
Gestion de configuration
Philosophie ?
Simple
Flow
Solid State
Architecture
Master & Minions
Master 0MQ - PubKey Auth - Pub/Sub - Push
MinionMaster less - Does everything - Controlled Machine
MinionSyndic
Master
salt '*' grains.itemscibles
commandesalt master
En ligne de commande
salt '*' cmd.run 'ls -aulh /'
Grainsdonnées récentes collectées sur les minions
ModulesFournissent les fonctionnalités
ssh
iptables files
package
servicesystemd
S3
mongo
apache
redis
ntp
aliases
mysql
mount
npm
coffee
StatesExécution conditionnel décrite en YAML
States
Décrire ce qu’il faut gérer ou configurer sur vos machines.
Uniquement par des données YAML et des Template
basic state
apache: pkg.installed: [] service.running: - require: - pkg: apache
apache.sls
state & configurationapache: pkg.installed: [] service.running: - watch: - pkg: apache - file: /etc/httpd/conf/httpd.conf - user: apache
/etc/httpd/conf/httpd.conf: file.managed: - source: salt://apache/httpd.conf - user: root - group: root - mode: 644
Appliquer les State
salt ‘webserver’ state.sls apache
salt '*' state.highstate
appliquer un state
Appliquer tous les states
top.sls
base: '*': - redis.server - java8 - tomcat - haproxy
TemplatingJinja partout
apache: pkg.installed: {% if grains['os'] == 'RedHat'%} - name: httpd {% endif %} service.running: {% if grains['os'] == 'RedHat'%} - name: httpd {% endif %}
{% for mnt in salt['cmd.run']('ls /dev/data/moose*').split() %} /mnt/moose{{ mnt[-1] }}: mount.mounted: - device: {{ mnt }} - fstype: xfs - mkmnt: True file.directory: - user: mfs - group: mfs - require: - user: mfs - group: mfs {% endfor %}
/etc/redis/redis.conf: file.managed: - template: jinja - source: salt://redis/files/redis.conf
Pillar
• Des fichiers YAML contenant les paramètres
• Un fichier top.sls pour cibler les minions
• Peuvent être utilisés dans les states
tomcat: shutdown_port: 8005 http_port: 8080 http_timeout: 2000 version: '8.0.21'
{% set default_settings = { 'tomcat': { 'shutdown_port': '8005', 'http_port': 8080, 'http_timeout': 2000, 'version': '8.0.21' } }%}
{# Update settings defaults from pillar data #} {% set tomcat_settings = salt['pillar.get']('tomcat', default=default_settings.tomcat) %}
{% from "tomcat/map.jinja" import tomcat_settings with context %}
base: '*': - redis.server - java8 - tomcat - haproxy
top.sls
Salt MineDonnées récentes
• Les minions ajoutent des données à la mine
• Le master les rends disponibles
• Un state peut utiliser les données de la mine pour assurer la configuration
• Attention il ne s’agit pas de données en temps réel
mine_functions: network.ip_addrs: cidr: 192.168.0.0/16
Ajoute les ip du minion à la mine
{% for server, addrs in salt['mine.get']('roles:redis-tomcat', 'network.ip_addrs', expr_form='grain').items() %} server {{ server }} {{ addrs[0] }}:{{salt['pillar.get']('tomcat').http_port}} check {% endfor %}
Utilise la mine pour HAProxy
ReturnersPersister le résultat des minions
• MongoDB
• Redis
• SQL
• Graphite
• Custom
Les données peuvent-être utilisées via ext_pillar
Event ReactorRéagir aux évènements
Et plus encore
• Scheduling
• Orchestration
• Master API
• SaltCloud
• SaltSsh
• SaltVirt
• bootstrap
Quelques liens
• docs.saltstack.com
• https://github.com/saltstack-formulas
• http://saltstack.com/saltconf15-video/
Questions ?