Rédigé par Nerd Aucun commentaire
19 janvier 2019 Articles ansible gestion configuration linux playbook yaml
Comprendre à quoi sert Ansible, comment l'installer et effectuer un test simple comme exemple.
Ansible est un logiciel pour la gestion de la configuration d'un parc de serveurs.
Il offre des commandes permettant d'automatiser un deploiement d'infrastructure, par exemple sur un serveur d'enchainer la création d'un user avec mots de passe, installer un serveur Apache, envoyer un fichier de confguration, redémarrer le service Apache, etc
Le résultat de ces commandes est retourné au format JSON sur la sortie standard.
On peut donc executer des commandes de base, ou appeler des scenarios complets (fichier playbook) écrits en language YAML.
Dans les 2 cas on peut appliquer celà sur une machine ou un groupe de machines.
A noter qu'il est possible lors du lancement d'un playbook de spécifier un tag, seuls les blocs du Playbook ayant ce tag seront alors joués.
En lancant un scenario, vous allez par exemple faire tout ca en 2min
Imaginez que votre serveur crashe, avant vous alliez suivre le document Word pour tout réinstaller en 3h, imaginez que vous deviez le faire sur 4 serveurs web, vous allez y passer la journée.
Là, celà prendra 5 minutes, que vous ayez 1 ou 10 serveurs d'ailleurs.
C'est la même si vous voulez changer le password d'un utilisateur, vérifier le /tmp ou bien vous assurer que Apache tourne sur toutes les machines.
En gros ca remplace tout vos petits scripts maison, sauf que c'est certainement plus fiable et surtout que c'est idempotent (chose que peu d'admins gèrent dans leur scripts à mon avis!)
Je pars du principe que la machine Ansible maitre est sous Redhat / Centos (gestionnaire de package yum.)
sudo yum install -y ansible
Pour pouvoir se connecter en SSH sur les machines cibles, le user utilisé de la machine maitre (toto par exemple) doit envoyer sa clé publique sur toutes les machines cibles.
Il le fait sur un compte distant (ansible par exemple) ayant des droits sudo.
# On ajoute la clé root sur le serveur cible
ssh-copy-id -i ~/.ssh/id_rsa.pub ansible@centos01
Evidemment on peut aussi le faire sur le compte root distant mais ce n'est pas conseillé.
On teste la connexion root en installant à distance le package python.
Ce paquet est normalement déjà présent par défaut (c'est un prérequis à Ansible côté client, le seul d'ailleurs)
ssh ansible@centos01 "yum install -y python "
Voilà, Ansible est installé. Faisons un tour rapide sur les fichiers de base
/etc/ansible/ansible.cfg :Fichier de configuration par défaut, inutile d'y toucher pour le moment.
/etc/ansible/roles/* :Ce dossier contient les rôles installés, nous verrons plus tard l'intérêt d'un rôle, inutile d'y toucher pour le moment.
/etc/ansible/hosts : C'est l'inventaire contenant toutes les machines qu'on veut gérer. Il suit le format INI en gros avec des [sections]
# /etc/ansible/hosts # Machines sans groupe 192.168.0.10 # IP directe mon_serveur # si on donne un hostname, ce dernier doit etre resolvable (par DNS, /etc/hosts, etc) 192.168.0.[220:230] # l'intervalle permet d'économiser l'écriture, n'hésitez pas! db[2:8].domain.com # C'est un groupe [DB_group] 192.168.0.200 192.168.0.205:52 # Si le port SSH n'est pas standard, on peut le préciser centos09 # Ces variables s'appliqueront à tout mon groupe DB_group [DB_group:vars] ansible_user=root # indique le user distant utilisé # Un autre groupe [Webserver_group] 192.168.0.200 # une machine peut faire partie de plusieurs groupes centos50 ansible_host=192.168.0.50 ansible_user=toto # on peut appliquer des variables à un host en particulier # Ceci est pour l'exemple mais il existe deja implicitement un groupe "all" contenant tous les hosts de l'inventaire (excepté localhost) [all] DB_group Webserver_group
L'inventaire est le coeur d'Ansible, donc je vous conseille de l'écrire avec beaucoup d'intelligence, ca rendra votre travail 100X plus facile ensuite.
Ansible fonctionne à partir de modules : file, user, stats, systemd, etc
Chaque module prend différents paramètres et permet d'effectuer une action précise.
Pour tester la bonne installation, nous allons utiliser le module ping mais attention ce n'est pas un ping au sens littéral mais un ping au sens Ansible, c'est à dire qu'il teste le bon fonctionnement de la liaison SSH puis de la présence de Python côté client.
ansible -m ping centos01
centos01 | SUCCESS => {
"changed": false,
"ping": "pong"
}
N'hésitez pas à consulter le Pense-bête Ansible .