2016-01-06 63 views
0

我想在我的廚師食譜中稍後使用私人IP地址,我該如何在變量中捕獲它。我的代碼看起來像......在廚師如何捕捉變量中執行資源的命令輸出?

execute 'privateip' do 
command 'curl http://169.254.169.254/latest/meta-data/local-ipv4' 
action :run 
end 

我要趕curl命令中的變量類似的輸出..

privip = 'curl http://169.254.169.254/latest/meta-data/local-ipv4' 

,然後使用在配置文件中值或有什麼辦法獲取aws實例的私有ipaddresses,因爲ohai不支持privateip屬性。任何幫助將不勝感激。

+0

可能重複[如何將廚師'執行資源的輸出'放入一個變量](http://stackoverflow.com/questions/16309808/how-can-i-put-the-output-of- a-chef-execute-resource-into-a-variable) – StephenKing

回答

1

您可以閱讀node['ec2']['local_ipv4']屬性中的local-ipv4值。 IIRC全部EC2 元數據包含在node['ec2']下。

如果你還是喜歡運行一個命令,你可以使用shell_out!幫手:

output = shell_out!('mycommand --some --arguments').stdout 

當他們在評論中表示,對於這種特殊的情況下,你還可以使用Chef::HTTP類:

http = Chef::HTTP.new('http://169.254.169.254') 
privip = http.get('/latest/meta-data/local-ipv4') 
+0

爲什麼不使用ruby的HTTP庫直? – StephenKing

+0

所以幾個級別的「實際上不這樣做」。首先,如上所述,你應該使用'Chef :: HTTP'來進行HTTP請求。其次,應儘可能使用'shell_out!'包裝器。我會編輯答案。 – coderanger

+0

使用'shell_out!'的唯一限制是它不適用於Chef 11.您需要Chef 12.但它看起來更簡單。當然,在這種特殊情況下,如果你知道如何使用HTTP庫,會更好。謝謝諾亞! – zuazo