我使用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发布于 2014-05-09 04:15:09
这里的问题根源在于,您在ruby_block的作用域中设置了变量fqdn,并试图在编译阶段引用该变量。ruby_block资源允许在收敛阶段运行ruby代码。
鉴于您似乎正在使用fqdn来设置资源集,看起来您可以从ruby代码周围删除ruby块。例如:
fqdn = // logic to get fqdn
file '/tmp/file' do
content "fqdn=#{fqdn}"
end发布于 2014-11-03 04:24:34
我在厨师文档里找到了这个。我遇到了类似的问题。我要试试node.run_state。此信息位于此页面https://docs.chef.io/recipes.html的底部
在chef-client运行期间使用
node.run_state来隐藏瞬态数据。这些数据可以在资源之间传递,然后在执行阶段进行评估。run_state是一个空的散列,它总是在chef-client运行结束时被丢弃。
例如,下面的方法将安装Apache web服务器,随机选择PHP或Perl作为脚本语言,然后安装该脚本语言:
package "httpd“执行操作:install end ruby_block "randomly_choose_language”do block do if Random.rand > 0.5 node.run_state‘’scripting_language‘= 'php’else node.run_state‘’scripting_language‘= 'perl’end end package "scripting_language“do package_name lazy {node.run_state‘’scripting_language‘}操作:安装end
发布于 2017-02-03 15:05:59
请点击此链接,您可以使用node.run_state:variables将一个变量解析为另一个菜谱
这是我的代码::file.rb
node.run_state:script_1 = "foo“include_recipe 'provision::copy‘
并在其他copy.rb文件中放入以下代码:
copy.rb
filename = node.run_state:script_1放入“名称是#{filename}”
https://stackoverflow.com/questions/23551104
复制相似问题