# ⚡ Ansible Cheat Sheet

Cette page regroupe les commandes Ansible les plus utilisées pour administrer la plateforme Homelab.

---

## 🎯 Objectif

Cette documentation sert de référence rapide lors des opérations quotidiennes.

- Gestion des secrets
- Exécution des playbooks
- Commandes Ad-Hoc
- Débogage
- Mise à jour du cluster Kubernetes

---

## 🔐 Gestion des secrets (Ansible Vault)

Le mot de passe du coffre est automatiquement lu depuis :

```
/config/.vault/vault_password.txt
```

### Chiffrer une variable

Permet d'insérer une valeur chiffrée directement dans un fichier YAML.

```bash
ansible-vault encrypt_string --stdin-name 'my_variable'

```

**Procédure :**

1. Taper la valeur à chiffrer
2. Appuyer sur **Entrée**
3. Faire **Ctrl+D** deux fois
4. Copier le bloc `!vault` obtenu dans le fichier YAML

### Modifier un fichier Vault

```bash
ansible-vault edit infra/ansible/vars/my_secrets.yml

```

### Chiffrer un fichier

```bash
ansible-vault encrypt mon_fichier_clair.yml

```

### Déchiffrer un fichier

```bash
ansible-vault decrypt mon_fichier_chiffre.yml

```

**⚠ Attention :** le fichier reste en clair sur le disque après déchiffrement.

---

## ▶ Exécution des Playbooks

### Préparer l'environnement

```bash
export ANSIBLE_ROLES_PATH=$(pwd)/infra/ansible/roles
export ANSIBLE_HOST_KEY_CHECKING=False

```

### Lancer un playbook

```bash
ansible-playbook \
-i infra/ansible/inventory.yml \
infra/ansible/playbooks/MON_PLAYBOOK.yml

```

---

## 🐞 Options de Debug

<table id="bkmrk-option-description--"><thead><tr><th>Option</th><th>Description</th></tr></thead><tbody><tr><td>`--check`</td><td>Simulation sans modification (Dry Run)</td></tr><tr><td>`--diff`</td><td>Affiche les différences sur les fichiers modifiés</td></tr><tr><td>`--limit <host>`</td><td>Exécute uniquement sur un hôte ou un groupe</td></tr><tr><td>`-vvv`</td><td>Mode très verbeux pour le diagnostic</td></tr></tbody></table>

### Exemples

```bash
ansible-playbook ... --check

ansible-playbook ... --limit "squall"

ansible-playbook ... -vvv

```

---

## ⚡ Commandes Ad-Hoc

### Tester la connectivité

Toutes les machines

```bash
ansible all \
-i infra/ansible/inventory.yml \
-m ping

```

Cluster Kubernetes

```bash
ansible kubernetes_nodes \
-i infra/ansible/inventory.yml \
-m ping

```

---

### Exécuter une commande

Afficher l'uptime des LXC

```bash
ansible proxmox_lxcs \
-i infra/ansible/inventory.yml \
-a "uptime"

```

---

### Redémarrer un service

```bash
ansible web-server \
-i infra/ansible/inventory.yml \
-b \
-m service \
-a "name=apache2 state=restarted"

```

---

## ☸ Upgrade du Cluster Kubernetes

### Playbook Ansible

```bash
ansible-playbook \
-i infra/ansible/inventory.yml \
infra/ansible/playbooks/upgrade-cluster.yml \
-e "target_version=1.3x.x-1.1"

```

### Via Moon

```bash
moon run :upgrade-k8s-cluster -- \
-e "target_version=1.3x.x-1.1"

```

---

## 💡 Bonnes pratiques

- Toujours exécuter un `--check` avant un changement important.
- Utiliser `--limit` pour tester sur une seule machine.
- Préférer les playbooks aux commandes Ad-Hoc pour les modifications permanentes.
- Ne jamais stocker un secret en clair dans Git.
- Privilégier les variables Vault ou les Sealed Secrets selon le contexte.

```