Я пытаюсь остановить все запущенные контейнеры в качестве первого шага, а затем удалить их.
Я знаю, что могу сделать это с помощью пакета оболочки Anslible и выполнить эту команду:
docker container stop $(docker container ls -aq)
В качестве второго шага я могу сделать то же самое с пакетом оболочки и очистить мертвые контейнеры / изображения / тома:
docker system prune -a -f --volumes
Я пробовал что-то вроде этого (пример кода):
- name: Stop all containers:
shell: "docker container stop $(docker container ls -aq)"
ignore_errors: yes
К сожалению, когда контейнеры равны 0, это выдает ошибку, которую я хотел бы обработать.
Я мог бы улучшить ее, добавив следующее:
- name: Get info on docker host and list images
docker_host_info:
containers: yes
register: result
- name: Stop all containers
shell: "docker container stop $(docker container ls -aq)"
when: result.host_info.Containers != 0
Я хотел бы сделать это сиспользуя только пакет Ansible, например ( docker_host_info ). Я могу извлечь сложный список с контейнерами, которые включают всю информацию, но я не могу найти способ получить ни Id, ни имя контейнеров.
Я планирую сделать цикл после сИдентификаторы или имена и их остановка по одному.
Мне удалось извлечь количество контейнеров (строковый формат), но я не могу найти способ преобразовать его в индекс, чтобы выполнить цикл.
Образец кода:
- name: Get info on docker host and list images
docker_host_info:
containers: yes
register: result
- name: Debug dockerInfo
debug:
var: result.containers
# var: result.host_info.Containers
# loop: "{{ result.host_info.Containers }}"
# loop: "{{ range(0, 4)|list }}"
when: result.host_info.Containers != 0
Можно ли преобразовать возвращенную строку в индекс и выполнить итерацию по этому индексу, например (поддельный образец кода):
- name: Debug dockerInfo
debug:
var: "{{ result.containers[item].Id }}
loop: result.host_info.Containers
when: result.host_info.Containers != 0