#ansible #yaml #wiki #ansible-template
#ansible #yaml #Вики #ansible-шаблон
Вопрос:
Я новичок в Ansible и пытаюсь сделать несколько практических заданий. Я пишу руководство по развертыванию контейнера Docker следующим образом. Я пишу задачу в разделе блоков, если произошла ошибка, запустите задачу в разделе восстановления на основе содержимого сообщения об ошибке. Например, я хочу запустить конкретную задачу для удаления существующего контейнера, если сообщение о сбое выглядит примерно так:
сбой: [192.168.1.140] (item= stderr_lines) => {«изменено»: true, «cmd»: [«docker», «run», «-itd», «—name», «h1», «-p», «80:80», «httpd»], «дельта»: «0:00:00.016385″, » конец»: «2021-01-04 03:00:55.403364″, » failed_when_result»: true, «item»: «stderr_lines», «msg»: «ненулевой код возврата», «rc»: 125, «запуск»: «2021-01-04 03:00:55.386979″, » stderr»: «/usr/bin/docker-current: ответ об ошибке от демона: конфликт. Имя контейнера «/h1″ уже используется контейнером bc5cc803a5f4321358992d06097ce271f3a63b8eba19900cfc0d23e321a4e243. Вы должны удалить (или переименовать) этот контейнер, чтобы иметь возможность повторно использовать это имя..nSee ‘/usr/bin/docker-текущий запуск —help’.», «stderr_lines»: [«/usr/bin/docker-current: ответ об ошибке от демона: конфликт. Имя контейнера «/h1″ уже используется контейнером bc5cc803a5f4321358992d06097ce271f3a63b8eba19900cfc0d23e321a4e243. Вы должны удалить (или переименовать) этот контейнер, чтобы иметь возможность повторно использовать это имя ..», «См. ‘/usr/bin/ docker-текущий запуск —help’.»], «stdout»: «», «stdout_lines»: []}»
Мой план действий выглядит следующим образом, но он не работал правильно. Иногда ошибка в чтении словаря или «Произошла непредвиденная ошибка типа шаблона». Может кто-нибудь подсказать мне, что я должен написать?
- name: run a container
vars:
- run_container: docker run -itd --name h1 -p 80:80 httpd
- rm_container: docker stop h1 amp;amp; docker rm h1
hosts: 192.168.x.x
tasks:
- name: check docker container
block:
- name: run a container httpd
command: "{{run_container}}"
register: rss
with_items:
- "stderr_lines"
failed_when: "'Error' in rss.stderr"
rescue:
- name: iterate over list
debug:
msg: "{{item.value}}"
loop: "{{rss | dict2items}}"
- name: remove the exited container
command: "{{rm_container}}"
register: rs
with_items:
- "{{rss | dict2items}}"
when: item.value is search("The container name .* is already in use")
Комментарии:
1. изучите yaml .
2. Вам нужен
docker_container
модуль вместо этого? Это будет знать, чтобы не запускать контейнер, если он уже запущен.3. Спасибо, Дэвид, я об этом не знал.