0
我試圖在安裝JDK後更新某些用戶.bashrc JAVA_HOME環境變量。我得到這個我不明白的奇怪錯誤。這是有問題的代碼塊。廚師更新某些用戶的.bashrc
node['etc']['passwd'].each do |user, data|
only_if {data['uid'] > 9000}
jdk_dir_array = Dir.entries('/usr/java/').select {|entry| File.directory? File.join('/usr/java/',entry) and !(entry =='.' || entry == '..') }
jdk_dir_name = jdk_dir_array.shift
file = Chef::Util::FileEdit.new("#{data['dir']}/.bashrc")
file.search_file_replace(/JAVA_HOME=.*/,"JAVA_HOME=/usr/java/#{jdk_dir_name}")
file.write_file
end
我得到的錯誤是這樣的:
NoMethodError
-------------
No resource or method named `only_if' for `Chef::Recipe "install_jdk"'
我不明白爲什麼它認爲「only_if」是配方的方法,當我宣佈它node.each內塊。
我應該指出,如果我把它放在一個ruby_block中並且硬編碼到單個用戶的主目錄的路徑,代碼將按預期工作。我試圖更新多個用戶,這就是我陷入困境的地方。
謝謝,事情是,我更新了JDK後調用了這個配方,所以模板看起來不合適。我非常感謝幫助和鏈接。 – user3481957
你可能想要一個標準的shell init模板,然後創建一些類似'〜/ .env.d /'的地方,你可以在其中放入所有源於該主模板的額外文件。 – coderanger