2014-06-23 26 views
1

我正在使用gather事實變量從ansible_devices variable獲取大小。對於某些主機我變得"ansible_devices": { "sda"和少數服務器變得"ansible_devices": { "cciss!c0d0"如果密鑰中的特殊字符無法從ansible_devices變量中提取值

問題: -當我使用ansible變量{{ ansible_devices.sda.size }}其工作完美。但是當我試圖訪問我的劇本中的​​的值時,它不會返回任何值,而在json ansible_devices變量中存在​​的值。

 { 
     "ansible_devices": { 
      "cciss!c0d0": { 
       "holders": [], 
       "host": "RAID bus controller: Hewlett-Packard Company Smart Array Controller (rev 03)", 
       "model": "LOGICAL VOLUME", 
       "partitions": {}, 
       "removable": "0", 
       "rotational": "1", 
       "scheduler_mode": "cfq", 
       "sectors": "143299800", 
       "sectorsize": "512", 
       "size": "68.33 GB", 
       "support_discard": "0", 
       "vendor": "HP" 
      } 
     }, 
     "item": "" 
    } 

這可能是在ansible變量JSON的關鍵,這就是爲什麼我無法獲取其價值的情況下,特殊字符。
任何人都可以建議我如何在這裏訪問​​值?

回答

0

使用ansible_devices ansible變量從它的邊緣hostvars[inventory_hostname]["ansible_devices"]然後它會給我正確的值。我不知道背後的確切原因是什麼,但這是這個問題的竅門。

{{ hostvars[inventory_hostname]["ansible_devices"]["cciss!c0d0"]["size"] }} 

Ansible Project Google Group

1

如果您在JavaScript中工作,還可以獲取JSON數據:

ansible_devices["cciss!c0d0"] 

它會顯示整個對象下CCISS c0d0鍵,然後你可以使用像大小inbuild功能! , 一般。

因此嘗試使用:

ansible_devices["cciss!c0d0"].size 
+1

得到這個解決方案這個問題並不涉及到的JavaScript。 – Roopendra

+0

您是否嘗試過解決方案,但您從未提及任何必須解析數據的語言。請在對其他答案進行投票表決之前編輯您的問題。 – turtle

+0

我沒有downvoted sumit。正如我在此添加了一個'ansible'標籤,所以它明顯的問題與'ansible'有關。還有我提到我在一本完美的劇本中面對這個問題。 – Roopendra