2016-04-25 75 views
1

fingreprint.txt在位置"#{node['abc.d']}/fingreprint.txt"如何分配的文件內容廚師節點屬性

該文件的內容如下:
time="2015-03-25T17:53:12C" level=info msg="SHA1 Fingerprint=7F:D0:19:C5:80:42:66"

現在我想要檢索指紋的價值和分配它廚師屬性
我使用下面的紅寶石塊

ruby_block "retrieve_fingerprint" do 
    block do 
     path="#{node['abc.d']}/fingreprint.txt" 
     Chef::Resource::RubyBlock.send(:include, Chef::Mixin::ShellOut) 
     command = 'grep -Po '(?<=Fingerprint=)[^"]*' path ' 
     command_out = shell_out(command) 
     node.default['fingerprint'] = command_out.stdout 
    end 
    action :create 
end 

它似乎並沒有被工作因爲在command = 'grep -Po '(?<=Fingerprint=)[^"]*' path '中缺少轉義字符。 請讓我知道,如果有指定的文件內容節點屬性

回答

1

兩種方式來回答這個的一些其他的方式:在Ruby中首先我會做的讀取(IO.read)和解析(RegExp.new和朋友),而不是脫殼而出到grep

if IO.read("#{node['abc.d']}/fingreprint.txt") =~ /Fingerprint=([^"]+)/ 
    node.default['fingerprint'] = $1 
end 

其次,不要這樣做,因爲它可能不會表現出您的期望。您將不得不考慮兩次加載過程以及每次運行時重置默認屬性的事實。如果你正在嘗試製作一個Ohai插件,那就改爲做。如果你想在後面的資源中使用這些數據,你可能需要將它存儲在一個全局變量中,並且大量使用幫助器lazy {}

+0

我從未使用Ohai Plugin。請建議如何將上述ruby_block轉換爲OHAI插件。也。與IO.read我得到編譯錯誤,因爲文件不存在,直到運行時間。 – meallhour

+1

你知道Google的事嗎? – StephenKing