gpt4 book ai didi

variables - 在 Chef 配方中使用变量

转载 作者:行者123 更新时间:2023-12-03 22:44:53 26 4
gpt4 key购买 nike

我正在使用 Chef-cookbook-hostname Recipe 来设置节点的主机名。我不希望我的主机名在属性文件中被硬编码(默认 ['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

最佳答案

这里问题的根源在于您正在 ruby​​_block 的范围内设置变量 fqdn 并试图在编译阶段引用该变量。 ruby_block 资源允许在收敛阶段运行 ruby​​ 代码的能力。

鉴于您似乎正在使用 fqdn 来设置资源集,看来您可以从 ruby​​ 代码周围删除 ruby​​ 块。例如

fqdn = // logic to get fqdn

file '/tmp/file' do
content "fqdn=#{fqdn}"
end

关于variables - 在 Chef 配方中使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23551104/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com