2017-05-23 58 views
0

我的任務是Ansible 2.0解析JSON,並存儲在另一個變量

- name: task name 
    shell: some command --format json 
    register: result 

輸出將在下面的JSON格式

[ 
    { 
    "mac_address": "x.x.x.x.x.x", 
    "fixed_ips": "{\"subnet_id\": \"s-s-s-s\",\"ip_address\": \"172.*.*.*\"}", 
    "id": "1", 
    "name": "" 
    }, 
    { 
    "mac_address": "x.x.x.x", 
    "fixed_ips": "{\"subnet_id\": \"s-s-s-s\", \"ip_address\": \"192.*.*.*\"}", 
    "id": "2", 
    "name": "" 
    } 
] 

我想要做的是,只得到IP地址從192開始並將其存儲到變量中,以便我可以在另一個任務中使用它。

+0

post ur full json –

+0

粘貼完整的json按照你的要求 –

回答

1

如果是類型的字典列表,使用selectattr

"{{ (result.stdout | from_json | selectattr('ip_address','match','^192') | list | fist).ip_address }}" 

我假設你只需要一個元素,所以我用first從列表中獲得單個元素。

更新表達因輸入數據的修改:

- set_fact: 
    ip_address: "{{ (result.stdout | 
         from_json | 
         map(attribute='fixed_ips') | 
         map('from_json') | 
         selectattr('ip_address','match','^192') | 
         list | 
         first 
        ).ip_address }}" 

fixed_ips是一個字符串,所以你需要申請from_jsonmap到每一個項目轉換爲能夠應用selectattr過濾器。

+0

嗨發佈了完整的json。 –

+0

嗨,我新來這個,所以請解釋更多。這是什麼.ip_address在最後?我們將它存儲在一個變量中? –

+0

我再次更新了我的答案,以便獲得新的事實(變量)'ip_address',完整的playbook snippet。 –