A Ansible Introduction et mise en place Ansible A Plan de formation Introduction Configuration du nœud de contrôle Ansible Installation à partir des référentiels Debian Installation à partir de python3 Autres installations Exigences de gestion avec Ansible Accès à distance Mise en place de l’environnement de travail Configuration de base Versions d’Ansible Ansible A Introduction 01 de 11 Ansible est un outil de gestion de la configuration, et en tant que tel, il remplace le besoin pour les opérateurs d'ajuster manuellement les fichiers de configuration. L'idée de base est l'automatisation. Il existe plusieurs avantages pour faire les choses automatiquement sur beaucoup, beaucoup d'hôtes dans un environnement en réseau. On peut donc l'utiliser pour gérer la configuration d'une infrastructure pré-déployée. Ansible est utilisé afin de s'assurer que l'état actuel de l'actif géré correspond à l'état souhaité, tel que défini par Ansible. La gestion de l'état, voilà ce qu'est Ansible. Ansible Introduction Il existe des solutions comparables, car Ansible n'est pas la seule solution qui permet de gérer des configurations. Parmi les solutions comparables, on retrouve Puppet, Chef et SaltStack. Ansible se distingue par le fait qu'il a été conçu dans un souci de facilité d'utilisation. 02 de 11 Ansible Introduction 02 de 11 Cycles de publication Ansible propose une mise à jour à tous les six mois (environ). Pendant ce court cycle de publication, il y a normalement … de nombreux changements ; des corrections de bogues mineurs aux bogues majeurs ; de nouvelles fonctionnalités et même parfois des changements fondamentaux dans le langage. À la fin de chaque cycle de publication, une nouvelle version du paquet de la communauté Ansible et une version correspondante du paquet ansible-core. Ansible Introduction 03 de 11 Ansible est aussi un outil DevOps. Ansible est un outil DevOps parce qu'il gère la configuration en tant que code, ce qui facilite la mise en œuvre de la même configuration dans l'ensemble d'un environnement. Et pour ce faire, des manuels de jeux (playbooks) YAML sont typiquement utilisés. Afin de garantir la cohérence, les manuels de jeux sont souvent fournis par Git. Ansible Introduction Versions d'Ansible À mesure que la popularité d'ansible et son adoption par la communauté, le nombre de modules (l'élément principal d'Ansible, qui effectuent les tâches d'automatisation réelles) se comptait par milliers. Les publier avec le logiciel principal d'Ansible signifiait que si un bogue était découvert dans un module, ou peut-être qu'une nouvelle version avec de nouvelles fonctionnalités était disponible, il devait alors y avoir une nouvelle version d'Ansible avant que les utilisateurs puissent en profiter. Cela ralentissait les versions du nouveau code du module. 03 de 11 Ansible Introduction 03 de 11 Versions d'Ansible (suite) En conséquence, Ansible a été divisé en deux paquets distincts. Le premier s'appelle ansible-core et contient uniquement le code d'exécution Ansible ainsi que certaines fonctionnalités intégrées qui sont au cœur des commandes ad hoc et de tous les manuels de jeux. Tous les modules et greffons (plugins) qui fournissent les fonctionnalités d'Ansible sont contenus dans la version du paquet de la communauté Ansible. Afin de permettre cette gestion séparée d'ansible-core et des modules, greffons, ..., une implémentation nommée collections a été créée. Les collections sont des ensembles individuellement regroupés de modules, de greffons et de rôles destinés à un objectif spécifique. Ansible Installation à partir des référentiels Debian Pour installer la dernière version stable d'ansible ... >> sudo apt install --yes ansible Le logiciel Ansible est installé avec quelques dépendances. Toutes les dépendances sont des paquets basés sur Python 3, pour la simple raison qu'Ansible est développé au-dessus de Python. On a donc besoin d'une pile Python pour travailler avec Ansible. Pour vérifier la version d'Ansible >> ansible --version En plus de la version installée, la sortie affiche des renseignements supplémentaires utiles concernant sur l'environnement Ansible actuel. 04 de 11 Ansible Installation à partir de python3 L'installation d'Ansible se fait à l'aide de l'utilitaire pip. Pour vérifier si python3 est installé ... >> sudo apt list python3 Si tel n'est le cas, pour l'installation de python3 ... >> sudo apt install python3 Pour vérifier si pip (Python Package Index) est installé ... >> sudo apt list python3-pip Pour installer la dernière version d'ansible ... >> sudo pip3 install ansible ou >> python3 -m pip install Ansible 05 de 11 Ansible Installation à partir de python3 06 de 11 L'installation d'Ansible se fait à l'aide de l'utilitaire pip. (suite) Remarque ... pip possède un inconvénient ... on installe des logiciels indépendamment des mécanismes normaux d'installation de logiciels. Si on installe Ansible en utilisant pip les mise-à-jour ne se font pas à partir des référentiels Debian. Pour mettre à jour Ansible à l'aide de pip ... >> pip3 install --upgrade ansible Ansible Autres installations 06 de 11 L'installation d'Ansible peut se faire également de deux autres manières. On peut installer Ansible dans un environnement virtuel python (venv). Ce type d’installation permet d’installer plusieurs versions d’Ansible sur le même hôte de contrôle. Enfin, on peut installer la version de développement d’Ansible à partir du github. Ce type d’installation est intéressante car il permet d’avoir une idée des nouvelles fonctionnalités en développement par la communauté Ansible. Toutefois, qui dit développement dit . Ansible Exigences de gestion avec Ansible 07 de 11 Le nœud de contrôle est un nœud où le logiciel Ansible est installé. Le nœud de contrôle est une distribution de Linux standard. Ce n'est en fait qu'un poste de travail d'un l'opérateur, qui utilise les commandes Ansible. Outre le logiciel Ansible, le nœud de contrôle a besoin de Python et d'un accès aux manuels de jeux Ansible, qui est généralement fourni par Git dans un environnement DevOps. Il n'est pas nécessaire de fournir les manuels de jeux à partir de Git, mais si on veut développer des manuels de jeux que tout le monde peut utiliser dans toute l'entreprise, il est vraiment logique de les fournir à l'aide de Git. Cela permet à tout le monde de travailler avec les mêmes versions. Ansible Exigences de gestion avec Ansible 08 de 11 Ensuite, il y a les nœuds gérés et les nœuds gérés sont des actifs qui sont gérés avec Ansible et qui peuvent être des hôtes qui fonctionnent sous … des hôtes Linux (toutes distributions); des hôtes Windows ; des instances infonuagique (cloud) ; des machines virtuelles ; des conteneurs ; ... Ansible Accès à distance 09 de 11 Dans un premier temps, on a besoin d’un accès à distance où l'interpréteur de commande (shell) sécurisé est la valeur par défaut On a également besoin d'un compte utilisateur dédié (habituellement nommé ansible). Pour des raisons de commodité, il est préférable d'utiliser le même compte d'utilisateur partout, mais il est possible d'avoir un compte d'utilisateur dédié sur chaque hôte géré. Toutefois, cela rend très difficile la gestion d'un large éventail de machines différentes. Cela est donc déconseillé. Ansible Accès à distance 10 de 11 De plus, on a besoin d'une escalade des privilèges pour … l’installation de logiciels ; la modification des fichiers de configuration et La réalisation d'autres tâches nécessitant des privilèges d’administration (root). Ansible Accès à distance 10 de 11 Clés SSH Il est pratique de configurer des clés SSH (Secure Shell) pour une connexion sans mot de passe vers des hôtes distants. Cela est utile pour l'utilisation de l'escalade de privilèges sans mot de passe. Remarque ... Pour une gestion sécurisée, on peut adopter une approche différente. Pour créer une clé asymétrique … >> ssh-keygen Ansible Accès à distance 10 de 11 Alternative à l’utilisation des clés SSH Les clés SSH sont normalement le moyen le plus simple de procéder car elles évitent aux utilisateurs d'avoir à saisir le mot de passe d'authentification à chaque fois qu’un manuel de jeux est exécuté. Ce n'est pas très pratique, car il faut saisir le mot de passe à plusieurs reprises, mais cela rend la procédure plus sûr. Toutefois, cela n'est en aucun cas obligatoire et Ansible prend en charge l'authentification par mot de passe à l’aide de l'utilisation du commutateur --ask-pass. (forme courte -k). Ansible Accès à distance 10 de 11 Alternative à l’utilisation des clés SSH (suite) Si on se connecte à un compte non privilégié sur les nœuds gérés et que l'on doit exécuter l'équivalent Ansible de l'exécution de commandes sous sudo avec un mot de passe, on peut également ajouter le commutateur --ask-become-pass (forme courte -K) lors de l'exécution du manuel de jeux. Cela permet que le mot de passe sudo ne soit spécifié qu'au moment de l'exécution de la commande ad hoc. Ansible Accès à distance ssh-agent Au lieu de s’authentfier à l’aide de sa clé clé privée, on peut avoir revours à l’utilitaire ssh-agent. Pour démarrer ssh-agent et d'y ajouter sa clé privée … >> eval $(ssh-agent) Agent pid 2089 >> ssh-add ~/.ssh/id_ed25519 ou >> ssh-add ~/.ssh/id_rsa Identity added: /home/ansible/.ssh/id_ed25519 (ansible@srv-ansible) 10 de 11 Ansible Mise en place de l’environnement de travail 11 de 11 Prérequis Quatre hôtes seront configurés pour l'automatisation à l’aide d’Ansible …, Les serveurs srv01 (192.168.1.101) et srv02 (192.168.1.102) sont des hôtes Debian ; Les serveurs srv03 (192.168.1.103) et srv04 (192.168.1.104) sont des hôtes Alma Linux. Ils seront identifiés comme nœuds gérés. Ansible sera installé sur un hôte Debian nommé srv-ansible (192.168.1.100). il sera identifié comme le nœud de contrôle. Ce dernier permet d’automatiser différentes actions vers les serveurs Debian srv01, srv02, srv03 et srv04. Ansible Mise en place de l’environnement de travail Mise en place Les étapes pour une configuration simple sont … Modification du fichier /etc/hosts (srv-ansible et srv01-04) ; Modification des fichiers /etc/hostname (srv01-04) ; Création de l'utilisateur ansible (srv-ansible et srv01-04) ; Escalade de l'utilisateur ansible comme sudo (srv-ansible et srv01-04) Activation du service SSH (srv-ansible et srv01-04) Génération d’une clé SSH (srv-ansible) ; Copie de la clé SSH vers les nœuds gérés (srv01-04) ; Sécurisation des nœuds gérés (srv01-04) ; Création d’un fichier d’inventaire (srv-ansible) ; Création d’un fichier d’inventaire (srv-ansible). 12 de 11 Ansible Mise en place de l’environnement de travail Mise en place Étape 01 Modification du fichier /etc/hosts (srv-ansible et srv01-04) >> sudo nano /etc/hosts <Adresse IP> srv-ansible <Adresse IP> srv01 <Adresse IP> srv02 <Adresse IP> srv03 <Adresse IP> srv04 Remarque ... Il est prudent de valider les communications à l’aide de requêtes ping. 12 de 11 Ansible Mise en place de l’environnement de travail Mise en place Étape 02 Modification des fichiers /etc/hostname (srv01-04) >> sudo hostnamectl set-hostname srv01 >> sudo hostnamectl set-hostname srv02 >> sudo hostnamectl set-hostname srv03 >> sudo hostnamectl set-hostname srv04 Modification des fichiers /etc/hostname et /etc/hosts (srv-ansible) >> sudo hostnamectl set-hostname srv-ansible 12 de 11 Ansible Mise en place de l’environnement de travail 12 de 11 Mise en place Étape 03 Création de l'utilisateur ansible (srv-ansible et srv01-04) Il faut créer un utilisateur ansible … >> sudo adduser --shell /bin/bash --gecos "" ansible >> sudo adduser --shell /bin/bash --gecos "" ansible L’utilitaire adduser demande la saisie d’un mot de passe pour l'utilisateur ansible. Ansible Mise en place de l’environnement de travail Mise en place Étape 04 Escalade de l'utilisateur ansible comme sudo (srv-ansible et srv01-04) Pour autoriser un accès sudo sans mot de passe pour l'utilisateur ansible, on ajout l’utilisateur ansible comme sudo ... >> sudo echo "ansible ALL=(ALL) NOPASSWD:ALL" | sudo tee --append /etc/sudoers.d/ansible >> sudo echo "ansible ALL=(ALL) NOPASSWD:ALL" | sudo tee --append /etc/sudoers.d/ansible 12 de 11 Ansible Mise en place de l’environnement de travail 12 de 11 Mise en place Étape 05 Activation du service SSH (srv-ansible et srv01-04) On doit s’assurer, dans un premier temps, que l’utilitaire openssh est installé et en cours d’exécution (démarré) sur la station de travail … >> sudo apt list openssh-server >> sudo apt list openssh-server Ansible Mise en place de l’environnement de travail Mise en place Étape 05 (suite) Activation du service SSH (srv-ansible et srv01-04) Le nœud de contrôle et les nœuds gérés doivent avoir le paquet openSSH préinstallé. Si tel n’est pas le cas … >> sudo apt update && sudo apt upgrade –yes >> sudo apt install openssh-server >> sudo apt update && sudo apt upgrade –yes >> sudo apt install openssh-server 12 de 11 Ansible Mise en place de l’environnement de travail Mise en place Étape 05 (suite) Activation du service SSH (srv-ansible et srv01-04) On peut vérifier que le service sshd est en cours d'exécution … >> sudo systemctl status sshd.service >> sudo systemctl status sshd.service Si le service sshd n'est pas en cours d’exécution (en cours d'exécution), il faut le démarrer et l’activer (ajouté au démarrage du système) … >> sudo systemctl enable –now sshd.service >> sudo systemctl enable –now sshd.service 12 de 11 Ansible Mise en place de l’environnement de travail 12 de 11 Mise en place Étape 06 Génération d’une clé SSH (srv-ansible) Les étapes suivantes doivent se faire en tant qu’utilisateur ansible … >> su - ansible Pour générer la clé SSH … >> ssh-keygen -t ed25519 ou >> ssh-keygen -t rsa -b 4096 On appuie sur <Entrée> plusieurs fois afin de compléter l’opération de création de la clé. Ansible Mise en place de l’environnement de travail 12 de 11 Mise en place Étape 06 (suite) Génération d’une clé SSH (srv-ansible) Lors de la demande de saisie de mot de passe, on appuie sur <Entrée>. Il est préférable de ne pas donner de mot de passe pour l’utilisation de la clé. Remarque … Pour plus de sécurité, on pourrait donner un mot de passe. Toutefois, il faudrait saisir ce mot de passe à chaque fois que l’on exécute une commande ad hoc ou un manuel de jeux. La clé SSH est générée. On peut vérifier si tel est le cas … >> ls -la .ssh Ansible Mise en place de l’environnement de travail 12 de 11 Mise en place Étape 07 Copie de la clé SSH vers les nœuds gérés (srv-ansible) Afin d’éviter de saisir le mot de passe de connexion lors d’envoi de commandes vers les nœuds gérés. Toujours en tant qu’utilisateur ansible, on doit copier la clé SSH du nœud de contrôle vers les nœuds gérés … >> ssh-copy-id -i ~/.ssh/id_ed25519.pub ansible@srv-01 ou >> ssh-copy-id -i ~/.ssh/id_rsa.pub ansible@srv-01 On doit répéter cette commande pour tous les nœuds gérés. Ansible Mise en place de l’environnement de travail 12 de 11 Mise en place Étape 07 (suite) Copie de la clé SSH vers les nœuds gérés (srv-ansible) La clé SSH publique doit être copiée sur l'hôte Ansible vers les quatre noeuds. Il est possible de le vérifier (srv01-04) … >> sudo cat /home/ansible/.ssh/authorized_keys Ansible Mise en place de l’environnement de travail Mise en place Étape 07 (suite) Copie de la clé SSH vers les nœuds gérés (srv-ansible) On doit maintenant pouvoir se connecter en SSH aux noeuds gérés en tant qu'utilisateur ansible sans aucun mot de passe ... >> ssh ansible@<srv01>|<srv02>|<srv03>|<srv04> srv01>> sudo ls / srv01>> exit 12 de 11 Ansible Mise en place de l’environnement de travail 12 de 11 Mise en place Étape 08 Sécurisation des nœuds gérés (srv01-04) Pour améliorer la sécurité, il est possible de désactiver l’ouverture de session pour l'utilisateur ansible … >> sudo usermod --lock ansible ou >> sudo usermod -L ansible Remarque … Pour réactiver la connexion par mot de passe … >> sudo usermod --unlock ansible ou >> sudo usermod -U ansible Ansible Mise en place de l’environnement de travail 12 de 11 Mise en place Étape 09 Création d’un fichier d’inventaire (srv-ansible) On crée un nouveau répertoire de projet /srv/ansible/projet/ sur le nœud de contrôle … >> sudo mkdir --parents --verbose /srv/ansible/projet On bascule vers le répertoire /srv/ansible/projet/ … >> cd /srv/ansible/projet Remarque … Il est important de modifier les droits d’accès du répertoire pour que l’utilisateur ansible pour 0666. Ansible Mise en place de l’environnement de travail Mise en place Étape 09 (suite) Création d’un fichier d’inventaire (srv-ansible) On crée un nouveau fichier d’inventaire dans le répertoire courant… >> sudo nano ./hosts On identifie les noms d’hôtes des nœuds gérés dans ce fichier … [web] srv01 srv02 [bd] srv03 srv04 12 de 11 Ansible Mise en place de l’environnement de travail Mise en place Étape 10 Test de la connexion Ansible (srv-ansible) Pour vérifier la liste des nœuds gérés … >> ansible all --inventory ./hosts --list-hosts 12 de 11 Ansible Mise en place de l’environnement de travail 12 de 11 Mise en place Étape 10 (suite) Test de la connexion Ansible (srv-ansible) Pour effectuer un test, on essaie d’envoyer une requête ping vers tous les nœuds gérés … >> ansible all--inventory ./hosts --module-name ansible.builtin.ping \ --user ansible ou >> ansible all -i ./hosts -m ping -u ansible srv01 | SUCCESS => { "changed": false, "ping": "pong“ } … Ansible Mise en place de l’environnement de travail Mise en place Étape 10 (suite) Test de la connexion Ansible (srv-ansible) Pour effectuer un test, on essaie d’envoyer une requête ping vers un nœud spécifique … >> ansible all --inventory ./hosts --module-name ansible.builtin.ping \ --user ansible --limit srv01 ou >> ansible all --inventory ./hosts --module-name ansible.builtin.ping \ --user ansible --limit srv01,srv02 ou >> ansible all --inventory ./hosts --module-name ansible.builtin.ping \ --user ansible --limit web 12 de 11 Ansible Mise en place de l’environnement de travail Mise en place Étape 10 (suite) Test de la connexion Ansible (srv-ansible) Pour obtenir les faits facts) de l’hôte géré nommé srv01, on utilise le module ansible.builtin.setup … >> ansible all --inventory ./hosts --module-name ansible.builtin.setup Il est possible d,obtenir des faits spécifiques à l’aide d’un filtre … >> ansible all --inventory ./hosts --module-name ansible.builtin.setup \ --args 'filter=ansible_distribution_release’ ou >> ansible all --inventory ./hosts --module-name ansible.builtin.setup \ --args 'filter=ansible_all_ipv4_addresses' 12 de 11 Ansible Configuration de base 12 de 11 Ansible dispose de mécanisme afin d'organiser les variables. Ces variables n’ont pas besoin de toutes les mettre au même endroit. Un de ces mécanismes est le fichier ansible.cfg. Ce fichier permet de définir certaines valeurs par défaut afin simplifier les commandes ad hoc et les manuels de jeux. Ansible recherche le fichier ansible.cfg aux endroits suivants, dans cet ordre … Fichier spécifié par la variable d'environnement ANSIBLE_CONFIG ; ./ansible.cfg (ansible.cfg du répertoire courant) ; ~/.ansible.cfg (.ansible.cfg dans le répertoire personnel de l’utilisateur) ; /etc/ansible/ansible.cfg. Ansible Configuration de base 12 de 11 Cela est une bonne pratique de placer le fichier ansible.cfg dans le répertoire courant. De cette manière, on peut l'archiver dans le même référentiel de contrôle de version que celui dans lequel se trouvent ses manuels de jeux. Cela ajoute également la possibilité d'avoir un fichier de configuration basé sur un projet. Ansible Versions d’Ansible 12 de 11 Le nombre de modules (l'élément vital d'Ansible) se compte aujourd’hui par milliers. La publication des modules, avec le logiciel principal d'Ansible, signifie que si un bogue est découvert dans le code d’un module, ou qu’un nouveau module avec de nouvelles fonctionnalités est disponible, ralentit le développement des modules disponibles. Puisque les responsables du projet Ansible proposent une mise à jour importante à tous les 6 mois (environ), la mise à jour et l’ajout de nouveaux modules peuvent être long. Ansible Versions d’Ansible 12 de 11 Afin de palier à cette situation, Ansible a été divisé en deux paquets distincts ... le premier paquet s'appelle ansible-core et contient uniquement le code d'exécution Ansible ainsi que certaines fonctionnalités intégrées qui sont au cœur de tous les manuels de jeux ; le second est proposé par la communauté (paquet Ansible community) et contient les modules et greffons (plugins) qui fournissent les fonctionnalités d’Ansible. C'est pourquoi, on note qu'Ansible possède deux numéros de version. Remarque … Le paquet ansible-core a été renommé ansible-base depuis la version 2.11.