Ansible的YAML中变量内的循环

Ansible的YAML中变量内的循环,ansible,Ansible,所以我有一个脚本,我真的不想复制和粘贴大约50次 用{item}}建议的典型循环不起作用,因为它已经在另一个变量中。。这是不幸的 我不明白为什么循环在这种语言中如此困难 这是在Ansible Tower上实现的,但它通常应该像Ansible脚本一样工作。我可以让代码在没有循环的情况下运行,但在我放入循环的那一刻就把它搞砸了 这失败了: - name: Start Instances with Persist as "No" ec2: instance_ids: "{{hostvar

所以我有一个脚本,我真的不想复制和粘贴大约50次

用{item}}建议的典型循环不起作用,因为它已经在另一个变量中。。这是不幸的

我不明白为什么循环在这种语言中如此困难

这是在Ansible Tower上实现的,但它通常应该像Ansible脚本一样工作。我可以让代码在没有循环的情况下运行,但在我放入循环的那一刻就把它搞砸了

这失败了:

- name: Start Instances with Persist as "No"
  ec2:
     instance_ids: "{{hostvars[groups['tag_Persist_No'][{{item}}]].ec2_id}}"
     region: us-east-1
     state: running
     wait: yes
  ignore_errors: yes
  loop:
    - 0
    - 1
这成功:

- name: Start Instances with Persist as "No" 0
  ec2:
     instance_ids: "{{hostvars[groups['tag_Persist_No'][0]].ec2_id}}"
     region: us-east-1
     state: running
     wait: yes
  ignore_errors: yes
- name: Start Instances with Persist as "No" 1
  ec2:
     instance_ids: "{{hostvars[groups['tag_Persist_No'][1]].ec2_id}}"
     region: us-east-1
     state: running
     wait: yes
  ignore_errors: yes
错误是

template error while templating string: expected token ':'. got '}'. String: {{hostvars[groups['tag_Persist_No'][{{item}}]].ec2_id}}

这是在循环中使用var的正确语法:

instance_ids: "{{ hostvars[groups['tag_Persist_No'][item]].ec2_id }}"

您只是简单地添加了额外的花括号,而这些花括号与此无关,因为您已经在jinja2模板表达式中了。

效果很好-谢谢。。真不敢相信我竟然没有想到这一点。