Table des matières

Ansible

Introduction

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.

Liens utiles

Partie 1 : Installation et configuration

Installation

  1. Installer python-dev et python-pip
  2. Le mettre à jour : pip install -U pip
  3. Installer ansible via pip : pip install ansible
  4. Installer ecdsa : pip install ecdsa
  5. Installer markupsafe : pip install markupsafe
  6. Générer les clefs ssh : ssh-keygen
  7. Copier la clef publique sur les clients : ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.103.??? (pensez à activer le sshrootlogin temporairement)
  8. Creer /etc/ansible/hosts et y placer l'ip d'un client (pour le test)
  9. Tester avec : ansible all -m ping -u root

Fichier de configuration

Hosts et groupes

Le fichier /etc/ansible/hosts est au format suivant :

mail.example.com

[webservers]
foo.example.com
bar.example.com

[dbservers]
one.example.com
two.example.com:5309
three.example.com
/etc/ansible/group_vars/group1 
/etc/ansible/group_vars/group2
/etc/ansible/host_vars/hote1

Compatibilité Windows

http://docs.ansible.com/ansible/intro_windows.html#windows-how-does-it-work

Partie 2 :Utilisation

Commandes Ad-hoc

Ansible peux executer des commandes en direct, cela peux être utile, pour, par exemple, executer des taches simples sur toutes les machines d'un groupe (ici la dev) :

Action Commande
Rebooter (10 en paralleles) ansible dev -a “/sbin/reboot” -f 10
Copier un fichier ansible dev -m copy -a “src=/etc/hosts dest=/tmp/hosts”
Changer les propriétés d'un fichier ansible dev -m file -a “dest=/srv/foo/b.txt mode=600 owner=mdehaan group=mdehaan”
Creer un dossier ansible dev -m file -a “dest=/path/to/c mode=755 owner=mdehaan group=mdehaan state=directory”
Supprimer un dossier ansible dev -m file -a “dest=/path/to/c state=absent”
S'assurer qu'un paquet est a jour ansible dev -m apt -a “name=acme state=latest”
Demarrer un service ansible dev -m service -a “name=httpd state=started”
Supprimer un utilisateur ansible dev -m user -a “name=foo state=absent”
Obtenir des informations ansible dev -m setup

Playbooks

Exemple de playbook :

---
- hosts: dev
  vars:
    http_port: 80
    max_clients: 200
  remote_user: root
  tasks:
  - name: ensure apache is at the latest version
    yum: name=httpd state=latest
  - name: write the apache config file
    template: src=/srv/httpd.j2 dest=/etc/httpd.conf
    notify:
    - restart apache
  - name: ensure apache is running (and enable it at boot)
    service: name=httpd state=started enabled=yes
  handlers:
    - name: restart apache
      service: name=httpd state=restarted

Plus d'infos sur : http://docs.ansible.com/ansible/playbooks.html

Nos playbooks et notre inventaire

Vous pouvez trouver le tout sur notre gitlab dans le repo ansible/ansible

Le repo n'est pas en public mais en internal, attention tout de même à ne pas mettre de mot de passe dans les playbooks, vous pouvez laisser les champs vides ou alors faire des

vars_prompt

Notre inventaire

Il se trouve dans le dossier hosts à la racine du projet, les fichiers sont numérotés : l'ordre de déclaration des groupes à de l'importance.

Vous pouvez créér le fichier 30-switch_secrets.hosts dans le dossier hosts avec ansible-vault pour stocker les identifiants de connexion aux switchs (c'est notamment très utile si vous avez choisi un mot de passe différent de votre mot de passe LDAP pour se connecter aux machines):

ansible-vault create 30-switch_secrets.host

et d'y mettre :

[switchs:vars]
ansible_user=VOTRE_USERNAME_LDAP
ansible_password=VOTRE_PASSWORD_LDAP

Les différents projets

Les différents projets sont organisés par branche (qui sont mergées dans master).

MiNET_base qui permet de configurer une machine debian selon nos standards (proxy, zabbix, etc)

MiNET_infra qui permet de redéployer l'infra MiNET en ayant le minimum (quelques dépôts gitlabs)

switchs qui permet de configurer … des switchs :)