2016-07-27 64 views
0

我有一個從ansible外殼任務此輸出,這是一個JSON:Ansible - 修改variable.stdout子

stdout: { 
    "override_attributes": { 
    "prod": { 
     "hosts": [ 
     "10.100.0.150", 
     "10.100.0.151" 
] 
}}} 

我想修改的IP地址是這樣的:

set_fact: variable.stdout.override_attributes.prod.hosts=groups['GROUP_A'] 

並經過我希望看到完整的json修改變量.stdout

這可能嗎?

回答

0

有一個醜陋的解決方案與combine過濾器:

--- 
- hosts: localhost 
    vars: 
    stdout: { 
     "override_attributes": { 
     "prod": { 
      "hosts": [ 
      "10.100.0.150", 
      "10.100.0.151" 
      ], 
      "users": [ 
      "user1", 
      "user2" 
      ] 
    }}} 
    new_hosts: 
     - host_name1 
     - host_name2 
    tasks: 
    # original stdout 
    - debug: var=stdout 
    # update override_attributes.prod.hosts with new_hosts 
    - set_fact: 
     stdout: "{{stdout | combine({\"override_attributes\":{\"prod\":{\"hosts\":new_hosts} } }, recursive=True)}}" 
    # updated stdout, users list unchanged 
    - debug: var=stdout 
+0

new_hosts VAR相反的,如果我嘗試使用組[ 'some_group']我得到: 「味精」:「|合併預計字典,得到了U '' 「} – ady8531

+0

@ ady8531檢查」some_group「是否真的存在。先嚐試'groups ['all']'以確保一切正常。我使用了可靠的2.1 –

+0

我用下面的代碼替換了你的new_hosts:「groups ['EH'] | map('extract',hostvars,['ansible_eth1','ipv4','address'])| list」另一個問題是:在調試時它看起來不錯,但如果我想將stdout的內容放入帶有blockinfile的文件或echo {{stdout}}重定向到文件中,它會將所有內容放到一行中。我也嘗試使用過濾器to_json或to_nice_json,並得到了相同的結果(更糟糕的是,他們剝去引號) – ady8531