Перезапустите несколько Docker контейнеров, используя Ansible - PullRequest
0 голосов
/ 22 апреля 2020

как мне динамически перезапустить все мои docker контейнеры с Ansible? Я имею в виду, что знаю способ, которым я могу определить свои контейнеры в переменной и l oop через них, но я хочу добиться этого -

Извлечь работающие в данный момент контейнеры и перезапустить все или некоторые из них по одному от одного до некоторого l oop.

Как этого добиться, используя Ansible?

1 Ответ

1 голос
/ 22 апреля 2020

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}}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...