Ansible L'essentiels d'ansible Introduction Dans cette procédure nous allons apprendre les bases d'ansible. Nous suivons le cours linkedin suivant : https://www.linkedin.com/learning/l-essentiel-d-ansible De Samir Lakhdari. Pratique Installation Dans un premier temps nous allons créer un user ansible sur l'ensemble des serveurs, et le placer en sudo user. cat > /etc/sudoers.d/ansible ansible ALL=(ALL) NOPASSWD: ALL Création de clé SSH pour se connecter sans mot de passe sur l'ensemble des serveurs. ssh-keygen Si nous utilisation la résolution de nom dans le fichier d'inventaire de ansible, les hôtes doivents être déclaré dans le fichiers hosts de la machine /etc/hosts.  192.168.14.131 control 192.168.14.132 web1 192.168.14.133 web2 192.168.14.134 haproxy Si FQDN déclarer dans le fichiers hosts alors vous pouvez mettre le FQDN de l'host.  Permet de copier la clé SSH vers un serveur distant ssh-copy-id @IP ou FQDN Extra packet nécessaire pour ansible  yum install -y python3 yum install -y epel-release Mise à jour de Python avant l'installation de ansible pip3 install --upgrade pip Update de Python 3.6 vers 3.8 car déprécié pour ansible et remplacement de l'alias lors de l'utilisation de la commande  dnf module enable python38 dnf install python38 alias python3=python3.8 alternatives --set python3 /usr/bin/python3.8 Installation de ansible avec python3 pip3 install ansible Vérification de l'installation ansible --version Permet de ping la machine local ansible localhost -m ping Permet de tester la connexion au hôte définis dans le fichier d'inventaire de ansible. L'argument ALL à la place de WEB, fait référence à l'ensemble des machines présentes dans les inventaires. ansible web -m ping -i hosts Créer un fichier vide sur l'ensemble des hosts dans un repertoire spécifique. ansible all -m command -a "touch /root/fic1" -i hosts all : Envoie la commande sur l'ensemble des hosts -m command : Stipule le module, ici une commande -a : correspect à l'argument du module, ici la commande ssh pour créer un fichier -i hosts : par rapport au fichier d'inventaire "hosts" Si l'utilisateur de l'hosts n'a pas les droits utilisateurs, alors dans la commande ansible nous pouvons ajouter l'arguement -b ou --become pour effectuer une élévation de privilège. Gestion des hôtes Il existe différente méthode pour ciblé une ou plusieurs machine, sois en appliquand le nom du groupe, le nom de la machine ou en utilisant des syntaxes générique. Il est également possible d'exclure des machines. Ping sur le groupe web et ha ansible web:ha -m ping -i hosts Ping sur plusieurs machines. ansible web1:web2:haproxy -m ping -i hosts Ping plusieurs machines avec une syntaxe commune. ansible 'web*' -m ping -i hosts Exclure la machine web1 avec le symbole "!". ansible 'all:!web1' -m ping -i hosts Ping uniquement les machines communes à plusieurs groupe. ansible 'web:&ha' -m ping -i hosts Ping la première machine de la liste du groupe, les groupes étant des tableaux à une seul colonne dans la configuration. ansible 'web[0]' -m ping -i hosts Cela va ping la première machine déclaré dans le groupe web. Nous pouvons églament utiliser une ranger, de la ligne X à la ligne X. ansible 'web[0:1]' -m ping -i hosts Utilisation des balises Une commande ad hoc est un moyen d'exécuter rapidement une tâche Ansible, une tâche que vous n'avez pas besoin d'enregistrer pour la ré-exécuter ultérieurement. Ces commandes sont utiles pour des tests ponctuels et faire des changements rapides. Vous pouvez utiliser une commande ad hoc pour vous assurer qu'une certaine ligne existe dans un fichier de configuration. Mais dès le moment où vous avez beaucoup de commandes à exécuter, vous devez les ancrer dans un fichier descriptif qu'on va appeler « le playbook ». Un playbook est un fichier yml, avec en fait un ensemble de plays, donc de jeux d'action. Notre playbook avec plusieurs petites tâches. --- - name: play1 hosts: all tasks: - name: create   file:     dest: /root/fic2     state: touch   tags:     - create - name: play2 hosts: all:!haproxy tags:   - delete tasks: - name: delete   file:     dest: /root/fic2     state: absent - name: play3 hosts: haproxy tasks: - name: delete   file:     dest: /root/fic2     state: absent   tags:     - delete Pour l'exectuer, il faut effectuer la commande ci-dessous. ansible-playbook -i hosts 02_03.yml 02_03.yml étant le nom du fichier playbook. Si nous exécutons la même commande alors l'arguement supplémentaire tag, nous allons ciblé uniquement les tâches dans le playbook associé avec le tag en question. ansible-playbook -i hosts 02_03.yml --tags create A l'inverse, nous pouvons utiliser l'option skip-tags pour outrepasser les tâches avec un tag spécifique. ansible-playbook -i hosts 02_03.yml --skip-tags create Nous pouvons également lister les tags des différentes tâches sans que cela n'execute les tâches avec la commande suivante. ansible-playbook -i hosts 02_03.yml --list-tags Executer une tâche sur un hôte local. Pour se faire nous allons utiliser un playbook différent :  --- - name: play1 hosts: localhost connection: local tasks: - name: creation via connexion locale   file:     dest: /root/Chapitre_02/fic3     state: touch Dans la section hosts, il est bien spécifié que l'hôte correspond à lui même. Le chemins d'accès doit exister pour que le fichier soit créée.