Результат, который вы получите, абсолютно ожидаем.Цитирование add_host
документации
Этот модуль обходит цикл хоста воспроизведения и запускается только один раз для всех хостов в игре, если вам нужно его итерировать, используйтеконструкция цикла.
то есть вы не можете полагаться на цикл хостов для add_host
и вам нужно сделать цикл самостоятельно.
Более того, вам определенно нужно иметь разные имена (т.е.inventory_hostname
) для ваших динамически создаваемых хостов, но поскольку все ваши контейнеры-докеры имеют одинаковые имена, их ansible_host
должно быть одинаковым.
Если все ваши хост-машины докеров находятся в группе dockerhosts
,следующий playbook должен сделать работу.В настоящее время я не нахожусь в ситуации, когда я могу проверить это сам, поэтому вам, возможно, придется немного подстроиться.Дайте мне знать, помогло ли это вам, и если мне нужно отредактировать свой ответ.
Обратите внимание, что хотя задача add_host
не будет проходить естественным образом, я оставил хосты в вашей исходной группе в первой игре, чтобыфакты собраны правильно и правильно заполнены в магической переменной hostvars
---
- name: Create dynamic inventory for docker containers
hosts: dockerhosts
tasks:
- name: Add web container to inventory
add_host:
name: "web_{{ item }}"
groups:
- dockercontainers
ansible_connection: docker
ansible_host: web
ansible_docker_extra_args: "-H=tcp://{{ hostvars[item].ansible_host }}:2375"
ansible_user: root
loop: "{{ groups['dockerhosts'] }}"
- name: Play needed commands on containers
hosts: dockercontainers
tasks:
- name: Remove old logging directory
file:
state: absent
path: /var/log/old_logs