【发布时间】:2014-06-26 09:30:38
【问题描述】:
我正在使用 chef-cookbook-hostname 食谱来设置节点的主机名。我不希望我的主机名在属性文件中被硬编码(默认 ['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
【问题讨论】:
标签: variables chef-infra recipe