This commit is contained in:
Matteo Basile
2026-07-16 08:58:32 +02:00
parent f27f9388e5
commit 5ccfc7f322
4 changed files with 51 additions and 18 deletions

View File

@@ -16,26 +16,56 @@
name: "{{ container_name }}"
state: absent
- name: Scarica immagine ML app (platform-aware)
block:
- name: Pull immagine Docker da registry
ansible.builtin.command: >-
docker pull{% if image_platform | default('') | length > 0 %} --platform {{ image_platform }}{% endif %} {{ container_image_ref }}
register: image_pull
changed_when: image_pull.rc == 0
- name: Calcola platform effettiva
ansible.builtin.set_fact:
effective_image_platform: >-
{{
(image_platform | default(''))
if (image_platform | default('')) != 'auto'
else
('linux/amd64' if ansible_architecture in ['x86_64', 'amd64']
else ('linux/arm64' if ansible_architecture in ['aarch64', 'arm64'] else ''))
}}
rescue:
- name: Errore pull immagine con suggerimenti
ansible.builtin.fail:
msg: >-
Pull fallito per {{ container_image_ref }} su platform {{ image_platform | default('default') }}.
Verifica che il registry pubblichi un manifest compatibile con l'architettura host
(esempio linux/amd64) oppure ricostruisci l'immagine come multi-arch.
- name: Pull immagine primaria (digest o tag)
ansible.builtin.command: >-
docker pull{% if effective_image_platform | length > 0 %} --platform {{ effective_image_platform }}{% endif %} {{ container_image_ref }}
register: primary_pull
changed_when: primary_pull.rc == 0
failed_when: false
- name: Fallback pull tramite tag se digest non compatibile
ansible.builtin.command: >-
docker pull{% if effective_image_platform | length > 0 %} --platform {{ effective_image_platform }}{% endif %} {{ container_image }}:{{ image_tag }}
register: fallback_pull
changed_when: fallback_pull.rc == 0
failed_when: false
when:
- primary_pull.rc != 0
- image_digest | default('') | length > 0
- name: Valida esito pull immagine
ansible.builtin.assert:
that:
- primary_pull.rc == 0 or (fallback_pull is defined and fallback_pull.rc == 0)
fail_msg: >-
Pull fallito sia per {{ container_image_ref }} sia per {{ container_image }}:{{ image_tag }}
su platform {{ effective_image_platform | default('default') }}.
Verifica manifest compatibile con l'architettura host oppure pubblica immagine multi-arch.
- name: Seleziona riferimento immagine effettivo
ansible.builtin.set_fact:
pulled_image_ref: >-
{{
container_image_ref
if primary_pull.rc == 0
else (container_image ~ ':' ~ image_tag)
}}
- name: Avvia container ML app
community.docker.docker_container:
name: "{{ container_name }}"
image: "{{ container_image_ref }}"
image: "{{ pulled_image_ref }}"
state: started
restart_policy: unless-stopped
ports: