我想在嵌套哈希上运行命令。我无法找到解决方案。我尝试过使用with_items
,with_dict
但我认为这不适合我的用例。
在通过ansible循环时,我认为我可以使用loop-control完成此操作。我多么无法实现它。有人可以帮帮我吗。
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 Topology不存在Kafka主题,我正在创建它。哈希结构是如何相同的,我需要使用这些项
使用实际事实(https://stackoverflow.com/questions/37182895/nested-hash-in-ansible)重新发布问题
答案 0 :(得分:3)
我的错误是我试图将loop_control与Ansible 2.0一起使用,因此无效。相反,我应该使用loops-and-includes-in-2-0和 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1"
>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:layout_gravity="left"
android:layout_marginLeft="1dp"/>
<ImageView
android:id="@+id/imageButton1"
android:layout_width="40dp"
android:layout_height="50dp"
android:layout_marginBottom="20dp"
android:layout_marginRight="40dp"
android:layout_marginTop="10dp"
android:layout_gravity="right"
/>
</FrameLayout>
<TextView
android:id="@+id/textView1"
android:layout_width="244dp"
android:layout_height="280dp"
android:layout_gravity="center"
android:layout_marginTop="30dp"
android:text="title"
android:textAppearance="?android:attr/textAppearanceSmall"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="20dp"
android:layout_gravity="center"
android:text="Klik hier voor de uitgebreide bezoektijden."
android:textAppearance="?android:attr/textAppearanceSmall"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal">
<Button
android:id="@+id/button11"
style="?android:attr/buttonStyleSmall"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginRight="5dp"
android:layout_weight="1"
android:text="Facebook" />
<Button
android:id="@+id/button12"
style="?android:attr/buttonStyleSmall"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_weight="1"
android:text="Youtube" />
<Button
android:id="@+id/button13"
style="?android:attr/buttonStyleSmall"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_alignLeft="@+id/button5"
android:layout_below="@+id/button8"
android:layout_marginLeft="5dp"
android:layout_weight="1"
android:text="Twitter" />
<Button
android:id="@+id/button14"
style="?android:attr/buttonStyleSmall"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_alignLeft="@+id/button5"
android:layout_below="@+id/button8"
android:layout_marginLeft="5dp"
android:layout_weight="1"
android:text="LinkedIn" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
。
main.yml
set_fact
kafka_topic.yml
- include: kafka_topic.yml
with_dict: project.topology
答案 1 :(得分:2)
我认为没有标准循环允许您对数据结构执行此操作。
with_dict
不会处理子元素。如果您有一个列表而不是一个字典,with_subelements
会工作。使用此数据结构:
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
循环用户和include
任务,然后在包含的文件中使用另一个with_dict
循环 access < / EM> -items。
或者以正确/干净的方式和create your own lookup plugin进行。有了很少的python知识,你可以遍历任何数据结构。