我使用chef-cookbook-hostname cookbook來設置節點的主機名。我不希望我的主機名在屬性文件中被硬編碼(默認['set_fqdn'])。在廚師食譜中使用變量
而是從VM定義XML文件中讀取主機名。我想出了以下默認配方,但顯然變量fqdn沒有給定值。有什麼想法爲什麼會發生這種情況,或者更好地完成我的任務?
ruby_block "Find-VM-Hostname" do
block do
require 'rexml/document'
require 'net/http'
url = 'http://chef-workstation/services.xml'
file = Net::HTTP.get_response(URI.parse(url)).body
doc = REXML::Document.new(file)
REXML::XPath.each(doc, "service_parameters/parameter") do |element|
if element.attributes["name"].include?"Hostname"
fqdn = element.attributes["value"] #this statement does not give value to fqdn
end
end
end
action :nothing
end
if fqdn
fqdn = fqdn.sub('*', node.name)
fqdn =~ /^([^.]+)/
hostname = Regexp.last_match[1]
case node['platform']
when 'freebsd'
directory '/etc/rc.conf.d' do
mode '0755'
end
file '/etc/rc.conf.d/hostname' do
content "hostname=#{fqdn}\n"
mode '0644'
notifies :reload, 'ohai[reload]'
end
else
file '/etc/hostname' do
content "#{hostname}\n"
mode '0644'
notifies :reload, 'ohai[reload]', :immediately
end
end
它解決了這個問題,效果很好!感謝您及時的回覆。 – user3617894
然後,您應該將答案標記爲正確。 – StephenKing