====== 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 ===== * Le portail de documentation :[[http://docs.ansible.com/ansible/index.html]] * Le portail de la communauté :[[https://galaxy.ansible.com]] ===== Partie 1 : Installation et configuration ===== ==== Installation ==== - Installer python-dev et python-pip - Le mettre à jour : pip install -U pip - Installer ansible via pip : pip install ansible - Installer ecdsa : pip install ecdsa - Installer markupsafe : pip install markupsafe - Générer les clefs ssh : ssh-keygen - Copier la clef publique sur les clients : ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.103.??? (pensez à activer le sshrootlogin temporairement) - Creer /etc/ansible/hosts et y placer l'ip d'un client (pour le test) - Tester avec : ansible all -m ping -u root ==== Fichier de configuration ==== * Si configuration générale à changer : ~/.ansible.cfg * A creer depuis https://raw.githubusercontent.com/ansible/ansible/devel/examples/ansible.cfg * Description des options : http://docs.ansible.com/ansible/intro_configuration.html#getting-the-latest-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 ==== 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 [[https://gitlab.minet.net/ansible/ansible|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 :)