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
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:
@@ -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 %}
|
||||
Reference in New Issue
Block a user