2017-11-27 3 views
-1

thorughループ:各デバイスは、辞書の構造である:Ansible - 私はいくつかの問題以下のネストされた構造のために働くのループを作成する必要があり、ネストされた辞書のリスト

1レベル:

DeviceList = [Device1, Device2, Device3, etc..] 

第二レベルを

Device1 = { 
    "description" : "string", 
    "Id": "Value", 
    "DeviceIPs": Dictionary 
} 

第3レベル:DeviceIPは、デバイスに割り当てられたIPの1つが文字列に変換された辞書です。

"DeviceIPs" = { 
    "IP1": { "description": "string1", "interface": "eth0", "mask":"subnet_mask1" }, 
    "IP2": { "description": "string2", "interface": "eth1", "mask":"subnet_mask2" }, 
    "IP3": { "description": "string3", "interface": "eth2", "mask":"subnet_mask3" }, 
    etc.. 
} 

理想的には、私が「DeviceIPs」のキーのループを作成する必要がありますおそらく一致インスタンスの内側値(に基づく 「IP1」 「IP2」 「IP3」 "interface ==" eth1 "のような条件)

私はさまざまな方法で試してみましたが、実際には動作するものはありません。

ご協力いただきましてありがとうございます。

ありがとうございました

+1

正確な質問を投稿できますか?私は 'json_query'が収まると思うが、あなたが本当に必要なものを投稿しないので、わからない。 –

+0

こんにちはコンスタンチン、 私は実際にjson_queryフィルターで動作させることができました。 私の問題は、DeviceListの指定されたDeviceListのキーとして使用されているIPをループすることでした。 DeviceDictを、次のようにjson_query使用: 私は辞書であることをDEVICELISTを変更 タスク: - デバッグ: MSG: "IP:{{項目}}" with_items:「{{DeviceDict | json_query( '*。 DeviceIPs.keys(@) ')}} " これは、DeviceDictのすべての可能なデバイスレコードをループし、実際にIPであるDeviceIPsのキーを取得します。 ありがとう! – ValerioG

答えて

0

eth1をループするように変数を再構成してみてください。例:

--- 
- name: Test 
    hosts: localhost 
    connection: local 
    gather_facts: False 

    vars: 
    - DeviceList: 
     - Device: 
      description: string 
      Id: Value1 
      DeviceIPs: 
       - eth0: { "description": "string1", "ip": "value1", "mask":"subnet_mask1" } 
       - eth1: { "description": "string2", "ip": "value2", "mask":"subnet_mask2" } 
       - eth2: { "description": "string3", "ip": "value3", "mask":"subnet_mask3" } 
     - Device: 
      description: string 
      Id: Value2 
      DeviceIPs: 
       - eth0: { "description": "string1", "ip": "value1", "mask":"subnet_mask1" } 
       - eth1: { "description": "string2", "ip": "value2", "mask":"subnet_mask2" } 
       - eth2: { "description": "string3", "ip": "value3", "mask":"subnet_mask3" } 


    tasks: 
    - debug: var=item.1.eth1.ip 
     with_subelements: 
     - "{{ DeviceList }}" 
     - Device.DeviceIPs 
+0

こんにちはChristina、 アドバイスありがとう、その構造は実際に私のために、DeviceListで、デバイス識別子(例えば、Device1、Device2、Device3など)と固定キー値ではない必要があります: "デバイスその場合、下位要素は機能しません。 – ValerioG

0

json_queryフィルタを使用して、最終的に何をしたいのかわかりました。 私はリスト(DEVICELIST)から辞書(DeviceDict)に拳レベルの構造を変更し、

tasks: 
    - debug: msg: "IP: {{ item }}" 
    with_items: "{{ DeviceDict | json_query('*.DeviceIPs.keys(@)') }} 

これはDeviceDictで可能なすべてのデバイスレコードをループしているDeviceIPsのキーを取得する@次json_queryを使用確かにIPs。

ありがとうございました!

関連する問題