Ansible 嵌套循环 - 如何遍历循环项?
Posted
技术标签:
【中文标题】Ansible 嵌套循环 - 如何遍历循环项?【英文标题】:Ansible Nested Loops - How to loop over a loop item? 【发布时间】:2017-07-19 09:50:09 【问题描述】:我正在尝试从 github 下载密钥并创建 aws 密钥对。目前我正在使用这些任务。
- name: download keys from github
get_url:
url: "https://github.com/ item .keys"
dest: "/tmp/ item "
with_items:
- foo
- bar
- name: create ec2 keys
ec2_key: name=foo key_material=" item " state=present
with_lines: cat /tmp/foo
- name: create ec2 keys
ec2_key: name=bar
with_lines: cat /tmp/bar
但是,这不是 DRY。如何实现这样的目标?
- name: create ec2 keys
ec2_key: name=foo key_material=" line " state=present
with_lines: cat /tmp/item
with_items:
- foo
- bar
【问题讨论】:
【参考方案1】:有with_nested
和with_together
,但实际上你不需要它们。
试试:
---
- hosts: localhost
gather_facts: no
tasks:
- uri:
url: https://github.com/ item .keys
return_content: yes
with_items:
- user1
- user2
- user3
register: github_keys
- debug:
msg: "user= item.item first_key= item.content.split('\n')[0] "
with_items: " github_keys.results "
请注意,您可能在 github user.keys 中有多个密钥,因此 ec2_key
将在您的情况下覆盖它们。我只是在我的示例中拉出第一个。
更新:如果您想添加所有具有索引名称的键
---
- hosts: localhost
gather_facts: no
tasks:
- uri:
url: https://github.com/ item .keys
return_content: yes
with_items:
- user1
- user2
- user3
register: github_keys
- set_fact:
github_name: " item.item "
github_keys: " lookup('indexed_items',item.content.split('\n')[:-1],wantlist=True) "
with_items: " github_keys.results "
register: github_keys_split
- debug:
msg: "name= item[0].github_name _ item[1][0] key= item[1][1] "
with_subelements:
- " github_keys_split.results | map(attribute='ansible_facts') | list "
- github_keys
【讨论】:
你会如何命名它们? 添加了多个键的示例 here,结合知识"Loops其实就是用+lookup()组合的东西,所以任何lookup插件都可以作为循环的来源,'items ' 是查找。”.以上是关于Ansible 嵌套循环 - 如何遍历循环项?的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 5.1 中循环遍历多维/嵌套 JSON 数据
如何在 Nightwatch 测试的自定义命令中添加嵌套函数 javascript - forEach - 循环遍历元素