Ansible中的嵌套哈希

Ansible中的嵌套哈希,ansible,ansible-2.x,Ansible,Ansible 2.x,我想在嵌套哈希上运行命令。我无法找到解决办法。我试过使用with_items,with_dict,但我认为这不适合我的用例 继续通过ansible循环,我想我可以使用。我怎么也做不到。有人能帮帮我吗 Ansible版本:2.0.2.0 我的杂烩 users: ankit: name: ankit access: opt: /opt/data tmp: /tmp gupta: name: gupta access: dat

我想在嵌套哈希上运行命令。我无法找到解决办法。我试过使用with_items,with_dict,但我认为这不适合我的用例

继续通过ansible循环,我想我可以使用。我怎么也做不到。有人能帮帮我吗

Ansible版本:2.0.2.0

我的杂烩

users:
  ankit:
    name: ankit
    access:
      opt: /opt/data
      tmp: /tmp
  gupta:
    name: gupta
    access:
      data: /opt/data/gupta
预期执行将使用上述哈希在循环中运行

- file: path=/opt/data state=directory owner:ankit mode=0755
- file: path=/tmp state=directory owner:ankit mode=0755
- file: path=/opt/data/gupta state=directory owner:gupta mode=0755
注意:这是一个修改后的示例。我没有在实际任务中创建文件夹。如果基于Storm拓扑不存在卡夫卡主题,我将创建它。哈希结构是否相同,以及我是否需要使用这些项


用实际情况重新发布问题

我认为没有标准循环允许您对数据结构执行此操作

with_dict将不处理子元素。如果您有一个列表而不是目录,则with_子元素可以工作。使用此数据结构:

users:
  - name: ankit
    access:
      - /opt/data
      - /tmp
  - name: gupta
    access:
      - /opt/data/gupta
。。。你可以这样做:

- file: "path={{ item.1 }} state=directory owner={{ item.0.name }} mode=0755"
  with_subelements:
     - "{{ users }}"
     - access
如果不能更改数据结构,它将变得更加复杂。您可以使用一些难看的解决方法,例如首先使用with_dict与包含任务一起在用户上循环,然后在包含的文件中使用另一个with_dict循环访问项


或者以正确/干净的方式进行。只要很少了解python,您就可以在任何数据结构上循环。

我认为没有标准的循环允许您对数据结构进行循环

with_dict将不处理子元素。如果您有一个列表而不是目录,则with_子元素可以工作。使用此数据结构:

users:
  - name: ankit
    access:
      - /opt/data
      - /tmp
  - name: gupta
    access:
      - /opt/data/gupta
。。。你可以这样做:

- file: "path={{ item.1 }} state=directory owner={{ item.0.name }} mode=0755"
  with_subelements:
     - "{{ users }}"
     - access
如果不能更改数据结构,它将变得更加复杂。您可以使用一些难看的解决方法,例如首先使用with_dict与包含任务一起在用户上循环,然后在包含的文件中使用另一个with_dict循环访问项


或者以正确/干净的方式进行。在几乎没有python知识的情况下,您可以循环任何数据结构。

我的错误是,我试图使用Ansible 2.0,因此它不起作用。相反,我应该使用并设定事实

main.yml

- include: kafka_topic.yml
  with_dict: project.topology
卡夫卡主题

- set_fact:
    outer_item: "{{item}}"

- debug:
    msg: "inner item={{item.value}}"
    with_dict: outer_item.value.kafka_topic

我的错误是我试图使用Ansible 2.0,因此它不起作用。相反,我应该使用并设定事实

main.yml

- include: kafka_topic.yml
  with_dict: project.topology
卡夫卡主题

- set_fact:
    outer_item: "{{item}}"

- debug:
    msg: "inner item={{item.value}}"
    with_dict: outer_item.value.kafka_topic

我无法更改结构,因为我对其他需要基于工作的文件夹名称的任务使用相同的哈希。i、 e在我的模板文件中,我使用users.ankit.access.opt、users.gupta.access.data等。注意:这是一个修改过的示例。我没有在实际任务中创建文件夹。如果基于Storm拓扑不存在卡夫卡主题,我将创建它。不管散列结构如何相同,我都需要使用这些项。最好的选择是自定义查找插件。谢谢您的帮助。我的错误是我试图使用Ansible 2.0,因此它不起作用。相反,我应该使用并设置_fact。我不能更改结构,因为我在其他需要基于工作的文件夹名称的任务中使用相同的哈希。i、 e在我的模板文件中,我使用users.ankit.access.opt、users.gupta.access.data等。注意:这是一个修改过的示例。我没有在实际任务中创建文件夹。如果基于Storm拓扑不存在卡夫卡主题,我将创建它。不管散列结构如何相同,我都需要使用这些项。最好的选择是自定义查找插件。谢谢您的帮助。我的错误是我试图使用Ansible 2.0,因此它不起作用。相反,我应该使用并设定事实。