2016-12-01 3 views
0

auf ansible 2.2 Iansible 2 Wörterbücher Kreuzung

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   

und andere json Liste mit den erwarteten Subnetze

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

Jetzt haben, würde Ich mag die beiden Listen schneiden:

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

Wie kann ich das erreichen?

Riccardo

Antwort

0

In Fällen wie diesem ziehe ich die Top-Level „Datenbank“ Wert auf ein Wörterbuch Refactoring (vermutlich verkeilt durch ID). Dieses Format erleichtert den Zugriff auf eine Teilmenge von Werten basierend auf ihren IDs oder anderen Attributen oder den Zugriff auf die gesamte Gruppe von Werten.

Dies ist auch konsistent mit Ansible's Mantra "Dinge einfach zu halten", Minimierung der Notwendigkeit für Komplikationen wie Kreuzungen und Matching.

Zum Beispiel:

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

Das ist klar. Vielen Dank! – Riccardo79