ansible - 在 YAML 中为 Ansible 循环内部变量
问题描述
所以我有一个脚本,我真的不想复制和粘贴大约 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 模板表达式中,因此您只需在此处添加无关紧要的额外花括号。
推荐阅读
- sql - SQL - 按一列计数和排序
- oracle-cloud-infrastructure - 默认用户的 Oracle Cloud shell 密码是什么
- android - 如何根据约束布局中的内容创建视图?
- jquery - 在 asp.net 核心中使用 jQuery 动态创建选择并从数据库中添加选择选项
- c++ - C++ 的 UML 序列图:对象的功能有哪些生命线?
- php - 如何自动处理表单中的所有字段并将它们传递给 php?
- javascript - JSX 花括号内的 if 和 else if 语句
- elasticsearch - 弹性搜索仅根据其字段值对某些文档应用提升
- kubernetes-pod - Pod 崩溃时如何恢复用户数据
- python - Kivy call SELF method from another class