在嵌套循环中的Ansible抛出错误 - 计数器问题

时间:2016-06-21 08:46:42

标签: ansible

我们正在尝试在shell命令中使用嵌套循环。计数器部分(从0到5循环)没有在线上被替换,并且由于哪个ansible抛出错误。

任务如下

- name: debug
  debug: var=output.results.{{item}}.stdout.split('|').1
  with_items:
    - 0
    - 1
    - 2
    - 3
    - 4
    - 5

- name: Remove Groups
  shell: echo neutron port-update {{ output.results.{{item}}.stdout.split("|").1 }} --no-security-groups > /tmp/test.txt
  with_items:
    - 0
    - 1
    - 2
    - 3
    - 4
    - 5

只是为了显示调试输出

changed: [1.1.1.1] => (item=2.2.2.2)
changed: [1.1.1.1] => (item=3.3.3.3)
changed: [1.1.1.1] => (item=4.4.4.4)
changed: [1.1.1.1] => (item=5.5.5.5)
changed: [1.1.1.1] => (item=6.6.6.6)
changed: [1.1.1.1] => (item=7.7.7.7)

当我们将任务命名为

output.results.0.stdout.split('|').1
or 
output.results.1.stdout.split('|').1

我们正在获取corrspondin IP。

但是当我们循环它5次时,项目不会被替换,导致以下错误

fatal: [1.1.1.1]: FAILED! => {"failed": true, "msg": "template error while templating string: expected name or number. String: echo neutron port-update {{ output.results.[item].stdout.split(\"|\").1 }} --no-security-groups > /tmp/test.txt"}

1 个答案:

答案 0 :(得分:1)

var部分已被解释为jinja变量/表达式。因此,您不能在其中放置带花括号的变量。此外,您不能将表达式嵌套在一起。 {{ foo {{ bar }} }}语法无效。

这应该有效:

debug: msg="{{ output.results[item].stdout.split('|').1 }}"
...
shell: echo neutron port-update {{ output.results[item].stdout.split("|").1 }} --no-security-groups > /tmp/test.txt