2016-12-01 9 views
0
私は

Ansible 2の辞書交差点

all_subnets: 
id | subnet   | mask | sectionId 
-----+----------------+------+----------- 
4831 | 172.31.0.0  | 16 | 19   
4832 | 192.168.0.0 | 24 | 19   
4858 | 192.168.248.0 | 21 | 19   
4859 | 192.168.248.0 | 27 | 19   
4860 | 192.168.248.32 | 28 | 19   

を持ってAnsible 2.2に

my_subnets: 
    - subnet: "192.168.0.0" 
    mask: "24" 
    - subnet: "192.168.248.32" 
    mask: "28" 

今期待のサブネットを含む別のJSONリスト、私は2つのリストを交差したいと思います:

id | subnet   | mask | sectionId 
-----+----------------+------+----------- 
4832 | 192.168.0.0 | 24 | 19   
4860 | 192.168.248.32 | 28 | 19   

どうすればいいですか?このようなケースでは

リカルド

答えて

0

私は(おそらく、IDをキー)辞書にトップレベル「データベース」値をリファクタリングすることを好みます。この形式では、IDやその他の属性に基づいて値のサブセットにアクセスしたり、値のセット全体にアクセスしたりすることが容易になります。

これはまた、「事をシンプルにする」というアナッシブのマントラと一致し、交差点やマッチングのような合併症の必要性を最小限に抑えます。例えば

--- 
all_subnets: 
    4831: { id: 4831, subnet: "172.31.0.0",  mask: 16, sectionId: 19, } 
    4832: { id: 4832, subnet: "192.168.0.0", mask: 24, sectionId: 19, } 
    4858: { id: 4858, subnet: "192.168.248.0", mask: 21, sectionId: 19, } 
    4859: { id: 4859, subnet: "192.168.248.0", mask: 27, sectionId: 19, } 
    4860: { id: 4860, subnet: "192.168.248.32", mask: 28, sectionId: 19, } 

# Your use-case 
my_subnets: ["{{ all_subnets[4832] }}", "{{ all_subnets[4860] }}"] 

# Getting subnets matching a value 
my_subnets: "{{ all_subnets | selectattr('subnet', 'equalto', '192.168.248.0') | list }}" 

# Getting all subnets 
my_subnets: "{{ all_subnets.values() }}" 
+0

明らかです。ありがとう! – Riccardo79