feat: Implement container customization and add Portainer installation/removal playbooks.
Tests / Backend Tests (Python) (3.10) (push) Has been cancelled
Tests / Backend Tests (Python) (3.11) (push) Has been cancelled
Tests / Backend Tests (Python) (3.12) (push) Has been cancelled
Tests / Frontend Tests (JS) (push) Has been cancelled
Tests / Integration Tests (push) Has been cancelled
Tests / All Tests Passed (push) Has been cancelled

This commit is contained in:
2025-12-27 11:02:24 -05:00
parent 661d005fc7
commit 8affa0f8b7
30 changed files with 1767 additions and 22 deletions
@@ -0,0 +1,67 @@
---
# Playbook pour l'installation et la configuration de Portainer CE
# Utilise l'approche basée sur les scripts init.sh et maj.sh du dépôt Git
- name: "Déploiement de Portainer CE"
hosts: all
become: true
vars:
# Configuration du dépôt Git
portainer_repo_url: "https://git.dracodev.net/Dockers/portainer.git"
portainer_repo_dir: "{{ ansible_user_dir }}/dev/git/outils/dockers/portainer"
repo_user: "bruno"
repo_pwd: "chab30"
# Option de mise à jour (true/false)
portainer_update: true
tasks:
# Créer le répertoire parent
- name: "Créer le répertoire parent pour le dépôt Portainer"
file:
path: "{{ portainer_repo_dir | dirname }}"
state: directory
mode: '0755'
recurse: true
# Cloner le dépôt Git
- name: "Cloner le dépôt Portainer"
git:
repo: "https://{{ repo_user }}:{{ repo_pwd }}@git.dracodev.net/Dockers/portainer.git"
dest: "{{ portainer_repo_dir }}"
version: main
update: yes
force: yes
# Installation initiale
- name: "Exécuter le script d'initialisation Portainer"
command: "bash ./init.sh"
args:
chdir: "{{ portainer_repo_dir }}"
when: not portainer_update
# Mise à jour
- name: "Exécuter le script de mise à jour Portainer"
command: "bash ./maj.sh"
args:
chdir: "{{ portainer_repo_dir }}"
when: portainer_update
# Vérification finale
- name: "Vérifier que Portainer est en cours d'exécution"
command: "docker ps --filter name=portainer --format {% raw %}'table {{.Names}}\t{{.Status}}\t{{.Ports}}'{% endraw %}"
register: portainer_status
changed_when: false
- name: "Afficher le statut de Portainer"
debug:
msg: "{{ portainer_status.stdout_lines }}"
- name: "Message de succès"
debug:
msg: |
Portainer CE a été déployé avec succès !
Le script maj.sh a configuré automatiquement le firewall (UFW/Firewalld/iptables).
Interface Web HTTPS : https://{{ ansible_default_ipv4.address }}:9443
Interface Web HTTP : http://{{ ansible_default_ipv4.address }}:9000
Edge Agent : {{ ansible_default_ipv4.address }}:8000
@@ -0,0 +1,156 @@
---
# Playbook pour la suppression de Portainer CE
# Ce playbook annule les actions du playbook d'installation
- name: "Suppression de Portainer CE"
hosts: all
become: true
vars:
# Configuration identique au playbook d'installation
portainer_repo_dir: "dev/git/outils/dockers/portainer"
portainer_data_dir: "/DOCKER_CONFIG/portainer"
# Ports à fermer dans le firewall
firewall_ports:
- 8000
- 9000
- 9443
tasks:
# Arrêter et supprimer le conteneur Portainer
- name: "Vérifier si le conteneur Portainer existe"
command: "docker ps -a --filter name=portainer --format {% raw %}'{{.Names}}'{% endraw %}"
register: portainer_containers
changed_when: false
ignore_errors: true
- name: "Arrêter le conteneur Portainer s'il est en cours d'exécution"
command: "docker stop portainer"
when: portainer_containers.stdout | length > 0
ignore_errors: true
- name: "Supprimer le conteneur Portainer"
command: "docker rm portainer"
when: portainer_containers.stdout | length > 0
ignore_errors: true
- name: "Vérifier si l'image Portainer existe"
command: "docker images -q portainer/portainer-ce:latest"
register: portainer_images
changed_when: false
failed_when: false
- name: "Supprimer l'image Portainer (optionnel)"
command: "docker rmi portainer/portainer-ce:latest"
when: portainer_images.stdout | length > 0
ignore_errors: true
# Supprimer les règles firewall
# Support pour UFW (Ubuntu/Debian)
- name: "Détecter si UFW est installé"
command: "which ufw"
register: ufw_check
changed_when: false
failed_when: false
- name: "Supprimer les règles UFW pour Portainer"
ufw:
rule: reject
port: "{{ item }}"
proto: tcp
delete: yes
loop: "{{ firewall_ports }}"
when: ufw_check.rc == 0
ignore_errors: true
- name: "Recharger UFW"
ufw:
state: reloaded
when: ufw_check.rc == 0
# Support pour Firewalld (CentOS/RHEL/Fedora)
- name: "Détecter si Firewalld est installé"
command: "which firewall-cmd"
register: firewalld_check
changed_when: false
failed_when: false
- name: "Supprimer les règles Firewalld pour Portainer"
firewalld:
port: "{{ item }}/tcp"
permanent: true
state: disabled
loop: "{{ firewall_ports }}"
when: firewalld_check.rc == 0
ignore_errors: true
- name: "Recharger Firewalld"
command: "firewall-cmd --reload"
when: firewalld_check.rc == 0
ignore_errors: true
# Support pour iptables (fallback générique)
- name: "Détecter si iptables est disponible"
command: "which iptables"
register: iptables_check
changed_when: false
failed_when: false
- name: "Vérifier si la règle iptables existe pour Portainer"
command: "iptables -C INPUT -p tcp --dport {{ item }} -j DROP"
register: iptables_rule_check
loop: "{{ firewall_ports }}"
when: iptables_check.rc == 0 and ufw_check.rc != 0 and firewalld_check.rc != 0
changed_when: false
failed_when: false
- name: "Supprimer les règles iptables pour Portainer"
command: "iptables -D INPUT -p tcp --dport {{ item.item }} -j DROP"
loop: "{{ iptables_rule_check.results | default([]) }}"
when:
- iptables_check.rc == 0
- ufw_check.rc != 0
- firewalld_check.rc != 0
- item.rc == 0
changed_when: true
failed_when: false
# Supprimer les répertoires et fichiers
- name: "Supprimer le répertoire du dépôt Git Portainer"
file:
path: "{{ portainer_repo_dir }}"
state: absent
ignore_errors: true
- name: "Supprimer le répertoire de données Portainer"
file:
path: "{{ portainer_data_dir }}"
state: absent
ignore_errors: true
- name: "Supprimer le répertoire parent s'il est vide"
file:
path: "{{ portainer_repo_dir | dirname }}"
state: absent
ignore_errors: true
# Vérification finale
- name: "Vérifier que Portainer a été complètement supprimé"
command: "docker ps -a --filter name=portainer --format {% raw %}'{{.Names}}'{% endraw %}"
register: final_check
changed_when: false
ignore_errors: true
- name: "Message de confirmation de suppression"
debug:
msg: |
Portainer CE a été complètement supprimé !
- Conteneur arrêté et supprimé
- Règles firewall supprimées (UFW/Firewalld/iptables)
- Répertoires de données supprimés
- Dépôt Git supprimé
{% if final_check.stdout | length == 0 %}
[SUCCESS] Suppression réussie : Aucun conteneur Portainer trouvé
{% else %}
[WARNING] Attention : Certains conteneurs Portainer peuvent encore exister
{% endif %}