2016-12-01 49 views
0

上Ansible 2.2我有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   

和含有期望的子网现在

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

另一个JSON名单,我想相交的两个列表:

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

我该如何做到这一点?

的Riccardo

回答

0

在这样情况下,我宁愿重构顶层“数据库”值到一个字典(据推测,由ID键控)。这种格式可以轻松地根据ID或其他属性访问值的子集,或访问整个值集。

这与Ansible的“保持简单”的口头禅一致,最大限度地减少了对交叉点和匹配等并发症的需求。

例如:

--- 
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