Ansible: Ecrire son premier Playbook

Etant familier avec Puppet, je me suis decidé à apprendre un autre outil d'orchestration pour les besoins de configuration dans le Cloud.
En passant au peigne fin les outils autre que Puppet , c'est Ansible qui a retenu mon attention. Facile à utiliser et ne nécessite pas de connaissance avéré en programmation.

Qu'est ce que ANSIBLE ?

Ansible est une plate-forme logicielle libre pour la configuration et la gestion des ordinateurs. Elle combine le déploiement de logiciels multi-nœuds, l'exécution des tâches ad-hoc, et la gestion de configuration. Elle gère les différents nœuds par dessus SSH et ne nécessite l'installation d'aucun logiciel supplémentaire à distance sur eux. Les modules fonctionnent grâce à JSON et à la sortie standard et peuvent être écrits dans n'importe quel langage de programmation. Le système utilise YAML pour exprimer des descriptions réutilisables de systèmes (cf Wikipedia)

une Tache ?
La tache est simplement l'utilisation des modules Ansible. Les modules ont des fonctionnalités spécifique. Et avec la sortie de la version 2 de Ansible, plusieurs modules sont venus enrichir la bibliothèque bien fournie de module existant.

- name: Ensure icecast2 is installed
  yum: name=icecast2 state=present

Un Playbook
le playbook est un fichier avec pour extension yml qui permet d'envoyer les instructions à une machine distante. Au lieu d'utiliser des commandes a distance pour envoyer des instructions, il est possible de configurer une plateforme entière en passant par ce fichier de configuration.
Les playbooks sont écrient dans le format de sérialisation de données YAML.
JSON est un autre format de sérialisation de données, mais YAML est beaucoup plus facile à lire.

Pourquoi Ansible ?

Il existe plusieurs outils d'orchestration pour la gestion des configurations ( Puppet, Chef, cfengine ) , le déploiement de serveur (Capistrano, Fabric) et l'exécution de la tâche (Func, plain SSH) . Ansible regroupe ces trois catégories d'outils , il est plus simple et plus cohérent que tout les autres selon Michael DeHaan (@laserllama).
Vous trouverez ces infos dans le livre de Jeff Geerling disponible https://leanpub.com/ansible-for-devops

Installation

Plusieurs solution sont disponible pour installer Ansible:
- Via les packages natifs .rpm ou .deb
- Via Pip install de Python
- Enfin via le code sources.

je suis sous RHEL/CentOS 7

yum install epel-release
yum install ansible

La dernière version à l’écriture de ce article est la version 2.0.0.2

[sanogo@sanogo ansible]$ ansible --version
ansible 2.0.0.2
  config file = /home/sanogo/ansible/ansible.cfg
  configured module search path = Default w/o overrides

Avant de commencer nos configurations , il faut un minimum de paramétrage au niveau de Ansible.
Par défaut Ansible est installé dans /etc/ansible.
Vous pouvez changer ces paramètres dans le fichier de config /etc/ansible/ansible.cfg

Nous allons créer un fichier hosts dans /etc/ansible si non disponible.
Le mien ressemble a ceci :

[local]
localhost

[webserver]
192.168.20.100

[bdd]
192.168.20.200

Nous rappelons que Ansible n'utilise pas d'agent sur les nodes clients. Si le node a un accès ssh configuré , alors il peut être manager par Ansible.
Les clés publiques ont été déjà généré et envoyé aux serveurs "bdd" et "webserver".
Pour le localhost, nous procédons comme ceci :

<codessh-copy-id localhost

Pour la première commande, nous allons faire un ping sur toute notre infrastructure:

[sanogo@sanogo ansible]$ ansible all -m ping
localhost | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
192.168.20.100 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
192.168.20.200 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Voila notre première commande Ansible.
Nous allons maintenant écrire le premier Playbook qui va contenir une succession de commande. Pour ce test nous allons installer apache sur le serveur "webserver"
Le playbook apache.yml est crée avec pour contenu :

---
- hosts: webserver
  sudo: yes
  tasks:
    - name: ma première installation de apache
      yum: name=httpd  state=latest

On excecute le fichier avec ansible-playbook comme ceci:

[sanogo@sanogo ansible]$ ansible-playbook apache.yml

PLAY ***************************************************************************

TASK [setup] *******************************************************************
ok: [192.168.20.100]

TASK [ma première installation de apache] **************************************
changed: [192.168.20.100]

PLAY RECAP *********************************************************************
192.168.20.100             : ok=2    changed=1    unreachable=0    failed=0  

Apache est installé sur le serveur 192.168.20.100

Ceci est une partie vraiment basic de la puissance de Ansible.

Rubriques:

Add new comment

Filtered HTML

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.