Docker объяснение
Извлечение имени / изображения для всего работающего контейнера:
docker container ls -a --format '{{.Names}} {{.Image}}'
Вы также можете отфильтровать вывод команды docket container
до указанного c имя изображения, благодаря опции --filter ancestor=image_name
:
docker container ls -a --filter ancestor=alpine --format '{{.Names}} {{.Image}}'
Ansible интеграция:
Сначала я бы определил некоторые фильтры как Ansible переменные:
vars:
- image_v1: '--filter ancestor=my_image:v1'
- image_v2: '--filter ancestor=my_image:v2'
Я выполню команду docker container
в выделенной задаче и сохраню вывод команды в переменную Ansible:
- name: Get images name
command: docker container ls -a {{ image_v1 }} {{ image_v2 }} --format "{{ '{{' }}.Names {{ '}}' }} {{ '{{' }}.Image {{ '}}' }}"
register: docker_images
Наконец, я переберу ее и использую в docker_container
ansible модуль:
- name: Restart images
docker_container:
name: "{{ item.split(' ')[0]}}"
image: "{{ item.split(' ')[1]}}"
state: started
restart: yes
loop: "{{ docker_images.stdout_lines}}"
окончательный playbook.yml
---
- hosts: localhost
gather_facts: no
vars:
- image_v1: '--filter ancestor=my_image:v1'
- image_v2: '--filter ancestor=my_image:v2'
tasks:
- name: Get images name
command: docker container ls -a {{ image_v1 }} {{ image_v2 }} --format "{{ '{{' }}.Names {{ '}}' }} {{ '{{' }}.Image {{ '}}' }}"
register: docker_images
- name: Restart images
docker_container:
name: "{{ item.split(' ')[0]}}"
image: "{{ item.split(' ')[1]}}"
state: started
restart: yes
loop: "{{ docker_images.stdout_lines}}"