Actualiser prestashop.yml

This commit is contained in:
l.covela 2026-01-20 09:42:27 +01:00
parent 2d6f6080d7
commit c35a91af5d
1 changed files with 42 additions and 33 deletions

View File

@ -1,35 +1,42 @@
---
- name: Create a test Portainer stack via SSH tunnel
- name: Deploy Prestashop stack via Portainer through SSH tunnel
hosts: localhost
connection: local
gather_facts: false
vars:
# Bastion SSH
bastion_host: bdc.cci17.fr
bastion_port: 17100
bastion_user: ansible
# Portainer (via tunnel local)
portainer_url: https://127.0.0.1:9443
portainer_internal_ip: 10.30.0.151
portainer_internal_port: 9443
# Stack test
stack_name: test-stack-semaphore
stack_type: 2 # 2 = Docker standalone, 1 = Swarm
# Tunnel SSH
ssh_control_socket: /tmp/ssh-tunnel-portainer-9443.sock
# Compose minimal de test
stack_compose: |
services:
web:
image: nginx:alpine
restart: unless-stopped
stack_type: 2 # 2 standalone, 1 swarm
stack_name_prefix: ps-
template_src: templates/prestashop-stack.yml.j2
rendered_compose_path: /tmp/prestashop-stack-rendered.yml
tasks:
- block:
- name: Ensure SITE_NAME provided
assert:
that:
- SITE_NAME is defined
- SITE_NAME | length > 0
fail_msg: "SITE_NAME doit etre fourni dans Semaphore (Options avancees)."
- name: Ensure PORTAINER_API_KEY provided
assert:
that:
- PORTAINER_API_KEY is defined
- PORTAINER_API_KEY | length > 10
fail_msg: "PORTAINER_API_KEY doit etre fourni via Groupe de variables Semaphore."
- block:
- name: Check local port 9443 is free
shell: ss -lnt | grep -q ':9443 '
register: port_in_use
@ -44,7 +51,7 @@
-o UserKnownHostsFile=/dev/null
-M -S {{ ssh_control_socket }}
-f -N
-L 127.0.0.1:9443:10.30.0.151:9443
-L 127.0.0.1:9443:{{ portainer_internal_ip }}:{{ portainer_internal_port }}
{{ bastion_user }}@{{ bastion_host }}
changed_when: true
@ -54,14 +61,15 @@
port: 9443
timeout: 20
- name: Check Portainer API
uri:
url: "{{ portainer_url }}/api/status"
method: GET
validate_certs: false
headers:
X-API-Key: "{{ lookup('env','PORTAINER_API_KEY') }}"
status_code: [200]
- name: Render docker-compose from template (Jinja2)
template:
src: "{{ template_src }}"
dest: "{{ rendered_compose_path }}"
- name: Read rendered compose content
slurp:
src: "{{ rendered_compose_path }}"
register: compose_b64
- name: Get Portainer endpoints
uri:
@ -69,25 +77,26 @@
method: GET
validate_certs: false
headers:
X-API-Key: "{{ lookup('env','PORTAINER_API_KEY') }}"
X-API-Key: "{{ PORTAINER_API_KEY }}"
status_code: [200]
register: endpoints_resp
- name: Select first endpoint
set_fact:
endpoint_id: "{{ endpoints_resp.json[0].Id }}"
- name: Create test stack
- name: Create stack in Portainer
uri:
url: "{{ portainer_url }}/api/stacks?type={{ stack_type }}&method=string&endpointId={{ endpoint_id }}"
method: POST
validate_certs: false
headers:
X-API-Key: "{{ lookup('env','PORTAINER_API_KEY') }}"
X-API-Key: "{{ PORTAINER_API_KEY }}"
Content-Type: application/json
body_format: json
body:
Name: "{{ stack_name }}"
StackFileContent: "{{ stack_compose }}"
Name: "{{ stack_name_prefix }}{{ SITE_NAME }}"
StackFileContent: "{{ compose_b64.content | b64decode }}"
Env: []
status_code: [200, 201, 409]
register: create_stack
@ -95,8 +104,8 @@
- name: Result
debug:
msg: >
Stack creation HTTP status {{ create_stack.status }}
(409 means the stack already exists)
Stack '{{ stack_name_prefix }}{{ SITE_NAME }}' creation status {{ create_stack.status }}
(409 means it already exists)
always:
- name: Close SSH tunnel