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