Ansible Playbook中的Debug语句的行为与Ansible Role中的不同

时间:2019-04-24 14:39:49

标签: ansible

在角色中运行调试语句时,我似乎无法在循环中获得Ansible调试语句来显示各个项目的值。为了进行比较,给定这本名为./test.yaml的剧本:

- hosts: localhost
  tasks:
  - name: test
    debug:
      var: item
    loop:
      - 1
      - 2

此命令:

ansible-playbook test.yaml

产生此结果:

PLAY [localhost] *****...
TASK [test] ****...
ok: [localhost] => (item=1) => {
    "item": 1
}
ok: [localhost] => (item=2) => {
   "item": 2
}

但是给定此文件:./roles/TestRole/tasks/main.yaml:

- name: test
  debug:
    var: item
  loop:
    - 1
    - 2

此命令:

ansible localhost -m include_role -a name=TestRole

产生此结果:

localhost | SUCCESS => {
    "changed": false,
    "include_variables": {
        "name": "FooRole"
    }
}
localhost | SUCCESS => {
    "msg" "All items completed"
}

因此-角色中的debug语句仅显示“所有项目已完成”,而不是显示项目值。看起来角色中的循环调试语句的行为与剧本中的循环调试语句的行为不同。难道我做错了什么?在python 2.7.5上运行Ansible 2.7.9。

1 个答案:

答案 0 :(得分:1)

这实际上是您从adhoc命令获得的信息(我完全不知道为什么)。同时,这是使用它的一个相当极端的情况。您宁愿在剧本中加入角色。下面的两个剧本示例都可以为您带来预期的结果:

经典角色执行

---
- name: test1 for role
  hosts: localhost
  gather_facts: false
  roles:
    - role: TestRole

包含角色

---
- name: test2 for roles
  hosts: localhost
  gather_facts: false
  tasks:
    - name: include role
      include_role:
        name: TestRole