premier playbook Ansible !

🧭 L’objectif est d’écrire un petit playbook qui permettra de faire un ping de lab.lenorcy.fr depuis le node manager (noeud d’administration) sur lequel nous avons installé Ansible.


🔑 Connexion SSH avec clés depuis le node manager#

Sur la machine lab.lenorcy.fr, créer l’utilisateur ansible :

sudo adduser ansible

Rajouter l’utilisateur au groupe sudo (pas nécessaire pour notre premier playbook)

sudo usermod -aG sudo ansible

Sur le node manager, générer une paire de clés et copier la clé publique sur le noeud distant :

ssh-keygen -f ~/.ssh/ansible-home
ssh-copy-id -i ~/.ssh/ansible-home.pub ansible@lab.lenorcy.fr

🧰 Préparation de l’environnement#

📁 Arborescence de travail sur le node manager :#

├── ansible.cfg (f)
├── ping.yml (f)
├── connexion-ansible.yml (f)
├── group_vars (d)
│   └── all (d)
│   └── ansible_account_vault.yml (f)
└── inventories (d)
    └── hosts (f)

📝 Fichiers à créer#

FichierEmplacementRôle
ansible.cfgRacine du projet AnsibleFichier de configuration principale d’Ansible : inventaire par défaut, options SSH, chemins des rôles, etc.
ping.ymlRacine du projet AnsiblePlaybook exécutant un test de connectivité (ping) sur les hôtes cibles.
inventories/hostsDossier inventoriesListe des machines gérées (groupes et hôtes).
inventories/connexion-ansible.ymlDossier inventoriesVariables globales définissant la méthode de connexion (ansible_user, ansible_become, etc.).
inventories/group_vars/all/ansible_account_vault.ymlDossier inventories/group_vars/allContient les secrets chiffrés via Ansible Vault (mot de passe sudo, tokens, etc.).

📁 Création des dossiers :#

mkdir -p inventories/group_vars/all

📦 Fichier de configuration ansible.cfg#

cat > ansible.cfg <<EOL
[defaults]
inventory = inventories
ask_vault_pass = true
roles_path = roles
interpreter_python = /usr/bin/python3

[ssh_connection]
pipelining = True
EOL

📂 Fichier d’inventaire hosts#

cat > inventories/hosts <<EOL
[lab]
lab.lenorcy.fr
EOL

🔧 Variables de connexion dans le fichier connexion-ansible.yml#

cat > inventories/connexion-ansible.yml <<EOL
all:
vars:
ansible_user: ansible
ansible_become: yes
ansible_become_method: sudo
ansible_become_pass: "{{ ansible_account_password }}"
EOL

Seul ansible_user n’est véritablement nécessaire pour ce simple premier playbook


🔐 Vault pour le mot de passe#

Créer le fichier Vault :

ansible-vault edit inventories/group_vars/all/ansible_account_vault.yml

Ajouter le mot de passe :

ansible_account_password: "censured"

Le vault n’est pas nécessaire pour ce premier playbook. Nous aurons rapidement besoin de privilèges pour exécuter certaines opérations.


📝 Création du premier playbook ping.yml#

cat > ping.yml <<EOL

    hosts: all
    vars:
    ansible_become: no # ping n'a pas besoin d'être root
    tasks:

        ping:
EOL

🚀 Exécution du playbook#

ansible-playbook ping.yml -l lab


Entrer le mot de passe du Vault si demandé.  
Exemple de sortie :

PLAY [all] **********************************************************************************************

TASK [Gathering Facts] **********************************************************************************
ok: [lab.lenorcy.fr]

TASK [ping] *********************************************************************************************
ok: [lab.lenorcy.fr]

PLAY RECAP **********************************************************************************************
lab.lenorcy.fr : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

💡 Alternative : module ping directement#

Il existe un module ping évitant la création d’un playbook :

ansible -m ping lab.lenorcy.fr -e ansible_become=no

Exemple de sortie :

lab.lenorcy.fr | SUCCESS => {
"changed": false,
"ping": "pong"
}

Très pratique pour tester rapidement la connectivité Ansible.