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_nestedwith_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 嵌套循环 - 如何遍历循环项?的主要内容,如果未能解决你的问题,请参考以下文章

Ansible嵌套循环,如何基于外部变量设置内部循环变量

使用 Vuejs 嵌套 v-for 循环

急! jquery $.each 嵌套循环遍历

外循环遍历每一行,嵌套循环遍历每个字符

在 Swift 5.1 中循环遍历多维/嵌套 JSON 数据

如何在 Nightwatch 测试的自定义命令中添加嵌套函数 javascript - forEach - 循环遍历元素