Ansible-4 Création d'un playbook et d'un role 👨‍🔬

Objectifs:
🎯 créer un playbook.
🎯 créer un role.
🎯 exécuter un playbook.

Prérequis:
💡 connaître ubuntu, windows.
💡 connaître docker.


logo d'ansible, outil devops d'autimatisation de deploiement d'application et de configurations.

Pour faire suite au chapitre Ansible-3 Configuration., nous allons créer un playbook pour automatiser certaines tâches du chapitre précédent. Supposons que nous avons déjà en place les actions de 1 à 5 du chapitre précédent. Il nous reste donc à gérer les clés dans etc/hosts, ~/.ssh/known_hosts de la machine hôte et dans ~/.ssh/authorized_keys des serveurs (sous le user ansible).

sudo docker ps


Résultat de la commande docker ps.

* Les serveurs sont up et ont openssh installé sous le user ansible.

1) Création du playbook de gestion des clés.

Résultat de la commande ls du home du user ansible.

vim playbooks/update_knownhosts.yml;

Playbook qui automatise la gestion des clé publiques.

* Cible localhost.
* Déclaration de server1 et server2 dans /etc/hosts.
* Néttoyage puis déclaration des clés des serveurs dans ~/.ssh/known_hosts
* Déclaration de la clé de la machine hôte dans ~/.ssh/authorized_keys des serveurs.
* Boucles sur le groupe docker définit dans l'inventaire ansible.

2) Création du playbook de mise à jour du fichier de config ssh des serveurs.

vim playbooks/ssh-config.yml;

Playbook qui automatise la désactivation de la connexion avec mot de passe de ssh.

* Cible le groupe docker (server1 et server2)
* Utilise ansible comme user distant.
* Appel du role ssh-config

3) Initialiser un role ssh-config.

cd $ANSIBLE_ROLES_PATH;
ansible-galaxy init ssh-config;

initialisation du role instal-openssh avec ansible-galaxy.

* tasks: dossier des manifestes .yml des taches à exécuter sont stockés.
* handlers: taches que l'on peut déclencher dans d'autres taches en utilisant le mot clé 'notify'
* vars: possibilité de surcharger des vars au niveau du role.

4) Configuration de la tâche principale.

vim ./roles/ssh-config/tasks/main.yml;

Appel de la tâche principale.

* Appel de la tâche block-pwd-auth

5) Création de la tâche block-pwd-auth.

vim ./roles/ssh-config/tasks/block-pwd-auth.yml;

Appel de la tâche block-pwd-auth.

* Utilisation du module ansible copy
* Utilisation de notre fichier sshd_config_2
* Notification du handler "Test and restart SSHD"

6) Création du handler pour restart ssh sur les serveurs.

vim ./roles/ssh-config/files/sshd_config_2;

Manifest du handler qui restart ssh.

* Utilisation du module ansible service

7) Création du fichier sshd_config_2.

vim ./roles/ssh-config/handlers/main.yml;

* Modifier la config par défaut pour avoir la ligne "PasswordAuthentication no"
* Cela permet de bloquer l'authentification ssh par mot de passe.

8) Exécution du playbook de gestion des clés et hosts.

ansible-playbook ./playbooks/update_knownhosts.yml ;

Exécution du playbook de gestion des clés.

* Modifier la config par défaut pour avoir la ligne "PasswordAuthentication no"
* Cela permet de bloquer l'authentification ssh par mot de passe.

9) Exécution du playbook de la désactivation de la connexion par mot de passe.

ansible-playbook ./playbooks/ssh-config -K;

Exécution du playbook ssh-config.

* L'option -K permet de fournir un mot de passe pour l'escalade de privilèges lors de certaines tâches

10) Tester la connexion ssh par clé sans mot de passe.

ssh ansible@server1;

Résultat de la commande ssh.

* Aucun mot de passe ou fingerprint ne m'est demandé.


Conclusion:
Vous avez maintenant des playbooks pour les tâches 6 à 12 du chapitre précédent. Vous pouvez tout de même y apporter des améliorations. Par exemple le nommage de certaines tâches, le formatage de certains fichiers, le module shell utilisé trop souvent.

De plus vos serveurs docker peuvent vous servir de labo pour créer et tester vos prochains playbooks. C'est terminé pour ce chapitre à bientôt dans une autre rubrique.