Skip to content

Manager les paquets avec Salt

salt-logo-Dans cet article, nous allons voir comment manager les paquets de nos serveurs avec Saltstack. Que ce soit APT ou RPM en passant par les paquets Python, Salt permet de tout gérer très facilement. Nous verrons en premier le management par fichier (States) puis en temps réel via la command-line  (Modules).

I – Configuration persistante (States)

Une des principale fonction de Salt et de permettre d’écrire des States (état d’une configuration) qu’on pourra ensuite déployer sur n’importe quel système. C’est l’une des fonctions principale d’un gestionnaire de configuration (en principe). Nous allons donc voir comment gérer nos paquets dans un fichier YAML, la syntaxe avec Salt ne diffère pas selon le gestionnaire de paquet (APT, RPM, Pacman …) tant que les paquets ont le même nom.

Voici un exemple pour avoir le paquet apache2 d’installé :

apache2:
  pkg.installed

Il suffit d’appliquer cette State au serveur pour avoir un service web d’installé.

Pour installer plusieurs paquets, on peut faire comme ceci :

php.packages:
  pkg.installed:
    - pkgs:
      - php5-fpm
      - php5-cli
      - php5-curl

Si l’on souhaite être sûr que le paquet est toujours dans sa dernière version, on utilise pkg.latest :

openssl:
  pkg.latest:

On peut également ajouter facilement un dépôt, exemple pour Logstash :

base:
  pkgrepo.managed:
    - humanname: Logstash PPA
    - name: ppa:wolfnet/logstash
    - dist: precise
    - file: /etc/apt/sources.list.d/logstash.list
    - keyid: 28B04E4A
    - keyserver: keyserver.ubuntu.com

logstash:
  pkg.installed
    - fromrepo: ppa:wolfnet/logstash

Si l’on souhaite installer un paquet Python, on utilise pip.install :

django:
  pip.installed:
    - name: django >= 1.6, <= 1.7
    - require:
      - pkg: python-pip

La dernière ligne permet de vérifier que python-pip est installé avant d’installer Django.

Des fois, les paquets n’ont pas le même nom selon les distributions, par exemple Apache2 s’appelle « apache2 » sous Debian et « httpd » sous RHEL. Pour régler ce problème on va utiliser du JINJA dans notre state en fonction de l’OS du serveur (contenu dans le Grains) :

{% if grains['os_family']=="Debian" %}
{%- set apache = apache2 -%}
{% elif grains['os_family']=="RedHat" %}
{%- set apache = httpd -%}
{{ apache }}
  pkg.installed

Grâce à ces bouts de codes, vous pouvez facilement « construire » votre gestion de paquets dans des States et la déployer avec Saltstack.

II – Gestion en temps réel (Modules)

Nous allons voir dans cette deuxième partie comment gérer nos paquets en temps réel, ce qui est une fonction très pratique avec Salt, de pouvoir lancer des commandes simultanément sur tous nos serveurs.

Pour installer un paquet, rien de plus simple :

salt '*' pkg.install apache2

(L’étoile entre ‘ ‘ représente tous les serveurs)

On peut également lui envoyer une liste de paquets :

salt '*' pkg.install pkgs='["vim", "emac", "nano"]'

Pour ma part, j’installe rarement des paquets depuis le module, cependant je l’utilise principalement pour mettre à jour mes serveurs, pour cela on peut les lister avec :

salt '*' pkg.list_upgrades

Ensuite, on a plus qu’à mettre à jour tous les paquets avec la commande suivante :

salt '*' pkg.upgrade

Voici d’autres commandes utiles pour gérer vos paquets :

salt '*' pkg.refresh_db # Apt-get update
salt '*' pkg.autoremove # Apt-get autoremove
salt '*' pkg.version <package name> # Connaître la version du paquet

On peut bien sûr installer des paquets Python depuis le module pip :

salt '*' pip.install Glances

Exemple concret, pour mettre à jour des serveurs contre la faille HeartBleed (CVE-2014-0160) avec Salt, rien de plus simple :

salt '*' pkg.install openssl refresh=True; salt '*' service.restart nginx;

En mélangeant States et utilisation en temps réel, votre gestion de paquets sur vos serveurs ne peut qu’être simplifier avec Salt. Si une faille apparaît sur un paquet, vous pouvez facilement le mettre à jour sur vos milliers de serveurs en quelques secondes.

Si vous avez la moindre question n’hésitez pas.

Published inCLI ToolsDevOpsLinuxSaltstackTutoriel

Be First to Comment

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Proudly hosted with Open-sources Softwares.