WikiMiNET

La documentation technique et administrative

Outils pour utilisateurs

Outils du site


wiki:services:ansible

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
  • On peut spécifier un port si la connexion ssh n'est pas sur le 22
  • Entre crochet se trouve les groupes, un hote peut être dans plusieurs groupes
  • On peut definir un alias : nom_alias ansible_port=5555 ansible_host=192.168.1.50
  • On peux utiliser des motifs, numériques ou alphabetiques www[01:50].example.com ou db-[a:f].example.com
  • On peut définir des variables par hotes/groupes, mais on préferera l'usage de fichiers YAML :
/etc/ansible/group_vars/group1 
/etc/ansible/group_vars/group2
/etc/ansible/host_vars/hote1

Compatibilité Windows

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 :)

wiki/services/ansible.txt · Dernière modification: 2020/06/27 18:16 (modification externe)