# Environnement Python pour Ansible & Molecule (venv)

<div id="bkmrk-objectif-%3A-standardi" style="border: 1px solid #2d7ff9; padding: 10px; background: #eef5ff;">**Objectif :** Standardiser un environnement Python isolé pour Ansible et Molecule afin de garantir stabilité, reproductibilité et compatibilité en environnement LXC / serveur / homelab.</div>---

## 1. Architecture recommandée

<div id="bkmrk-principe-%3Aun-environ" style="border: 1px solid #ccc; padding: 10px;">**Principe :**  
Un environnement Python isolé (venv) par stack.</div>- `/opt/ansible-venv` → Ansible + Molecule
- Pas d’installation pip globale
- Pas de mélange apt + pip pour Ansible

---

## 2. Pré-requis système

```
sudo apt update
sudo apt install -y python3 python3-venv python3-pip \
gcc git build-essential
```

<div id="bkmrk-attention-%3Ane-jamais" style="border: 1px solid #ffcc00; padding: 10px; background: #fff8e1;">**ATTENTION :**  
Ne jamais utiliser `sudo pip install` sur le système hôte.</div>---

## 3. Création du venv Ansible

```
python3 -m venv /opt/ansible-venv
```

### Correction des permissions (important en LXC)

```
sudo chown -R $USER:$USER /opt/ansible-venv
```

---

## 4. Activation du venv

```
source /opt/ansible-venv/bin/activate
```

### Alias recommandé

```
echo 'alias avenv="source /opt/ansible-venv/bin/activate"' >> ~/.bashrc
echo 'alias dvenv="deactivate"' >> ~/.bashrc
source ~/.bashrc
```

<div id="bkmrk-usage-%3A-avenv-pour-a" style="border: 1px solid #2d7ff9; padding: 10px; background: #eef5ff;">**Usage :** `avenv` pour activer l’environnement.</div>---

## 5. Installation Ansible (core)

```
pip install --upgrade pip setuptools wheel
pip install ansible
```

### Validation

```
ansible --version
ansible-config --version
```

---

## 6. Installation Molecule

### Installation standard

```
pip install molecule
```

### Drivers recommandés

```
# Docker
pip install molecule molecule-docker

# Podman
pip install molecule molecule-podman
```

---

## 7. Vérification globale

```
which ansible-config
which molecule
ansible --version
molecule --version
```

<div id="bkmrk-r%C3%A9sultat-attendu-%3Ato" style="border: 1px solid #2d7ff9; padding: 10px; background: #eef5ff;">**Résultat attendu :**  
Tous les binaires doivent pointer vers `/opt/ansible-venv/bin/`</div>---

## 8. Maintenance et mises à jour

### Voir les paquets obsolètes

```
pip list --outdated
```

### Mettre à jour pip

```
pip install --upgrade pip
```

### Mise à jour globale du venv

```
pip install pip-review
pip-review --auto
```

<div id="bkmrk-attention-%3Ales-mises" style="border: 1px solid #ffcc00; padding: 10px; background: #fff8e1;">**ATTENTION :**  
Les mises à jour automatiques peuvent casser la compatibilité Ansible/Molecule. À utiliser uniquement en environnement non production.</div>---

## 9. Sauvegarde / reproductibilité

### Exporter l’environnement

```
pip freeze > requirements.txt
```

### Restaurer

```
pip install -r requirements.txt
```

---

## 10. Dépannage (RUNBOOK)

### ❌ ansible-config introuvable

```
pip install ansible
```

### ❌ Permission denied dans /opt/ansible-venv

```
sudo chown -R $USER:$USER /opt/ansible-venv
```

### ❌ Molecule ne trouve pas Ansible

```
pip install ansible molecule
```

### ❌ Mauvais PATH (pipx / system conflict)

```
which ansible
which molecule
echo $PATH
```

---

## 11. Commandes opérationnelles

```
avenv               # activer venv
dvenv               # désactiver venv
ansible-playbook    # exécuter playbooks
molecule test       # tests infra
pip list            # paquets installés
pip list --outdated # audit
```

---

## 12. Recommandations d’architecture

- 1 venv = 1 stack (Ansible / CI / dev)
- éviter pip global système
- préférer /opt pour environnements partagés serveur
- préférer ~/venvs pour dev utilisateur

---

<div id="bkmrk-conclusion-%3Aun-envir" style="border: 1px solid #2d7ff9; padding: 10px; background: #eef5ff;">**Conclusion :**  
Un environnement venv propre garantit stabilité, reproductibilité et compatibilité avec Ansible &amp; Molecule en environnement LXC / homelab.</div>