URL: https://linuxfr.org/users/swilmet/journaux/kickstart-et-ansible-pour-automatiser-des-installations-configurations-de-systemes-linux Title: Kickstart et Ansible pour automatiser des installations/configurations de systèmes Linux Authors: Sébastien Wilmet Date: 2017年05月15日T14:38:30+02:00 License: CC By-SA Tags: kickstart, ansible et debian Score: 30 J'ai appris récemment [Kickstart](http://pykickstart.readthedocs.io/en/latest/kickstart-docs.html) et [Ansible](https://www.ansible.com/) et je voulais écrire un petit retour d'expérience. Ces deux outils permettent d'automatiser des tâches d'administration système. Un gros avantage est d'avoir une description dans des fichiers texte (sous forme de fichier de config ou de code) de comment installer et configurer une machine ou un ensemble de machines. Il suffit alors d'utiliser un gestionnaire de versions comme git pour garder un historique de ces fichiers texte, pouvoir créer des branches etc. Bref, c'est le « _infrastructure as code_ », les sysadmins sont de plus en plus apparentés à des programmeurs. # Kickstart # Kickstart est spécifique à la famille de distributions Red Hat : Fedora, RHEL, CentOS, ... Ça permet d'automatiser une installation de l'OS. Au lieu de démarrer sur un live USB/DVD et de répondre manuellement aux questions, on écrit un fichier de config Kickstart qui peut automatiser toute l'installation. Je m'y connais moins en Debian, mais je suppose qu'il existe un équivalent pour la famille de distributions Debian (ou toute autre distro). Si vous pouvez éclairer ma lanterne dans les commentaires... ;-) Il m'a fallu plusieurs essais avant d'arriver à réussir ma première installation Kickstart. J'aurais eu le temps de faire l'équivalent de peut-être 15 installations manuelles en série... Mais bon l'essentiel c'est que maintenant ce soit automatisé, j'ai trouvé une méthode qui marche bien pour CentOS. Comme tout outil, l'effort initial d'apprentissage est plus important, mais c'est bénéfique à plus long terme. Les pros choisiront de créer une serveur [PXE](https://en.wikipedia.org/wiki/Preboot_Execution_Environment) et de faire démarrer les machines à installer par le réseau. Pour ma part je suis un amateur (et je n'ai pas beaucoup de machines à installer), donc je mets le fichier kickstart sur une clé USB dans une partition nommée OEMDRV, je branche cette clé USB ainsi que le live USB/DVD de CentOS, je démarre la machine et c'est parti, je peux aller boire un café. * [Documentation de Kickstart](http://pykickstart.readthedocs.io/en/latest/kickstart-docs.html) * [Documentation de Kickstart pour RHEL/CentOS](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Installation_Guide/chap-kickstart-installations.html) # Ansible # Une fois que l'OS est installé, il peut y avoir plein de tâches d'administration système à faire en plus : configurer un serveur web, serveur git, base de données etc etc. Ça demande d'installer des paquets en plus, éditer certains fichiers de config, activer certains services, ... Ce que je faisais avant d'apprendre Ansible était de décrire dans un fichier de log toutes les étapes que j'ai fait, en écrivant pour certaines tâches un script shell. Si je devais réinstaller mon serveur de cette façon-là, ça me prendrait certainement une journée complète... Avec Ansible – une fois qu'on a écrit le code nécessaire – tout est automatisé ! Ansible se connecte en ssh sur la ou les machines distantes (on peut exécuter Ansible en local aussi) et exécute les tâches demandées. Il n'y a même pas besoin d'installer Ansible sur les ordinateurs distants, c'est une architecture _agentless_, en mode _push_. C'est comme si on se connectait manuellement en ssh sur une machine et qu'on exécutait certaines commandes, sauf que c'est Ansible qui le fait à notre place. On écrit ce qu'on appelle un _playbook_, dans des fichiers [YAML](https://en.wikipedia.org/wiki/YAML). Un playbook est composé de _plays_, qui est lui-même composé de _tâches_. Une tâche est un appel à un _module_ Ansible. Il faut aussi un inventaire d'hôtes. Un play définit sur quel(s) hôtes exécuter les tâches. Il y a [plein de modules](http://docs.ansible.com/ansible/modules_by_category.html). Il y a par exemple le module [package](http://docs.ansible.com/ansible/package_module.html) pour s'assurer que certains paquets soient installés ou désinstallés. Le module [service](http://docs.ansible.com/ansible/service_module.html) pour dire si un service doit être démarré et/ou activé au démarrage, ou pour redémarrer un service après avoir édité un fichier de config. Le module [lineinfile](http://docs.ansible.com/ansible/lineinfile_module.html) pour s'assurer qu'une ligne est bien présente dans un certain fichier. Et bien sûr un module [shell](http://docs.ansible.com/ansible/shell_module.html) pour exécuter une commande shell s'il n'y a pas d'autre module plus approprié. Et ce qui est génial, c'est qu'on peut écrire du code réutilisable, sous forme de _rôles_. Si on doit faire une nouvelle installation similaire mais avec quelques différences, il suffit d'écrire un nouveau playbook; si on a bien fait son travail il y a des rôles existants qu'on peut réutiliser tels quels. * [Site web d'Ansible](https://www.ansible.com/) * [Whitepaper](https://www.ansible.com/continuous-deployment-whitepaper) (le document qui m'a convaincu) # Conclusion # Je n'ai pas encore terminé de décrire mon serveur entièrement avec Ansible, mais une fois que ce sera fait, là où il fallait peut-être une journée complète pour tout réinstaller, avec Kickstart et Ansible ce sera fait en certainement moins d'une heure (incluant peut-être entre 5 et 10 min d'intervention humaine). Il y a plusieurs années je me demandais aussi comment gérer une salle informatique (par exemple une trentaine d'ordinateurs pour des étudiants). Maintenant je sais qu'avec un serveur PXE, Kickstart et Ansible, on sait gérer facilement un tel parc informatique. Faire les mises à jour sur toutes les machines, installer certains programmes, etc. Bref, je ne me vois plus administrer des ordinateurs sans ce genre d'outil. Petit bonus pour la fin : [Vagrant](https://www.vagrantup.com/) est un outil pratique pour apprendre Ansible : au lieu de tester Ansible sur une machine distante on teste sur une machine virtuelle.

AltStyle によって変換されたページ (->オリジナル) /