由于backend.key=<%= node['key']%
&gt;我收到模板错误在源key.properties.erb
中使用,在运行shellout时没有值。
Error : Chef::Mixin::Template::TemplateError - undefined method `[]' for nil:NilClass
我有一个ruby块来获取文件cat /tmp/key.txt
的输出并指定为节点值。
Ruby块:
ruby_block "Get_key" do
block do
#tricky way to load this Chef::Mixin::ShellOut utilities
Chef::Resource::RubyBlock.send(:include, Chef::Mixin::ShellOut)
command = 'cat /tmp/key.txt'
command_out = shell_out(command)
node.set['key'] = command_out.stdout
end
action :create
end
Erb:
backend.key=<%= node['key']%>
答案 0 :(得分:0)
无需shell_out
来读取文件的内容。试试这个:
ruby_block "Get_key" do
only_if { node['key'] == "" }
block do
node.set['key'] = File.read('/tmp/key.txt')
end
end
但我认为你的实际问题是在其他地方。该错误消息表明您的模板中node
为nil
,这非常不寻常。
所以要么我是盲目的,你在发布的模板行中确实有一些拼写错误,或者你以简化错误的方式简化了代码示例。我假设您的真实模板看起来更像
backend.key=<%= node['foo']['key']%>
且foo
不是数组。检查一下。
答案 1 :(得分:0)
请不要使用此模式。它很慢并且在节点对象中放入了额外的数据,这会占用空间和RAM并使搜索索引变得悲伤。你想要的是这个:
template "whatever" do
# Other stuff ...
variables my_file: lazy { IO.read('/tmp/key.txt') }
end
这将延迟读取直到收敛时间。