我想取默认属性
的值[node][forwarder][username]
并将其作为参数传递给执行资源。例如
execute 'set-up-boot-start' do
command "/opt/splunkforwarder/bin/splunk enable boot-start -user <username attribute> --accept-license"
user "root"
end
Chef文档没有说明如何检索您在attributes / default.rb中设置的值。我试过了
execute 'set-up-boot-start' do
command "/opt/splunkforwarder/bin/splunk enable boot-start -user [node][forwarder][username] --accept-license"
user "root"
end
但是我得到一个错误,说我的Docker实例中没有这样的用户(在这种情况下,用户是'nobody',我认为所有Linux系统都默认使用)。
或者如果我使用这种表示法(我假设称为'get'方法)
execute 'set-up-boot-start' do
command "/opt/splunkforwarder/bin/splunk enable boot-start -user "#{username}" --accept-license"
user "root"
end
然后我收到有关
的错误NoMethodError ------------- Chef :: Resource :: Execute
的未定义方法`username'
我显然是厨师的新手,我一直在倾注他们的文件,但无济于事。
编辑:
我尝试了RaquelGuimarães的建议,该建议适用于我在有问题的行上方使用的目录资源,但不幸的是,当我尝试在执行资源中使用它时,它失败了:
38: execute 'set-up-boot-start' do
39>> command "/opt/splunkforwarder/bin/splunk enable boot-start -user #{node['node']['dspe_splunk_forwarder']['username']} --accept-license"
40: user "root"
41: end
我现在收到的错误消息是
NoMethodError ------------- undefined method `[]' for nil:NilClass
答案 0 :(得分:0)
使用#{node['forwarder']['username']}
应该可以解决问题。
execute 'set-up-boot-start' do
command "/opt/splunkforwarder/bin/splunk enable boot-start -user #{node['node']['forwarder']['username']} --accept-license"
user "root"
end
答案 1 :(得分:0)
拉奎尔基本上是正确的,但额外的
['node']
导致出现“Nilmethod”错误,因为嵌套了该额外规范的属性不正确。
删除后,命令按预期运行。