我正在尝试使用with_items
和delegate_to
在多个主机中运行Docker容器。我在test
中有一个小组/etc/ansible/hosts
:
[test]
my_machine1
my_machine2
这项任务:
- name: Run app container
docker:
name: "{{artifact_id}}"
insecure_registry: true
image: "{{image}}:{{version}}"
pull: always
state: reloaded
ports:
- "{{port_mapping}}"
delegate_to: '{{item}}'
with_items:
- "{{groups['test']}}"
但是当我运行它时,我收到了这个错误:
{“失败”:是的,“msg”:“错误!'项目未定义”}
我做错了什么?
提前致谢
答案 0 :(得分:17)
你需要注意缩进。 delegate_to
和with_items
是任务的一部分,而不是docker模块。
- name: Run app container
docker:
name: "{{artifact_id}}"
insecure_registry: true
image: "{{image}}:{{version}}"
pull: always
state: reloaded
ports:
- "{{port_mapping}}"
delegate_to: '{{item}}'
with_items: "{{groups['test']}}"
虽然我不确定你的代表团会在这里工作。您首先需要委托它的背景是什么?通常的方法是将游戏应用于组test
的主机。我想你是否反对在本地主机上运行游戏?
另一个不相关的事情:当pull: always
与state: reloaded
一起使用时,我遇到了docker模块的问题。与docker-compose不同,无论是否拉出更新的图像,docker模块都将始终重新启动容器。
- hosts: localhost
tasks:
- download nexus
- build image
- upload to registry
- ...
- hosts: test
tasks:
- docker: ...