Ansible:'item'未定义

时间:2016-02-08 12:45:48

标签: docker ansible ansible-playbook

我正在尝试使用with_itemsdelegate_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”:“错误!'项目未定义”}

我做错了什么?

提前致谢

1 个答案:

答案 0 :(得分:17)

你需要注意缩进。 delegate_towith_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: alwaysstate: reloaded一起使用时,我遇到了docker模块的问题。与docker-compose不同,无论是否拉出更新的图像,docker模块都将始终重新启动容器。

- hosts: localhost
  tasks:
    - download nexus
    - build image
    - upload to registry
    - ...
- hosts: test
  tasks:
    - docker: ...