如何检索默认属性并将其用作执行资源的一部分?

时间:2017-06-29 00:30:59

标签: chef

我想取默认属性

的值
[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

2 个答案:

答案 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”错误,因为嵌套了该额外规范的属性不正确。

删除后,命令按预期运行。