【发布时间】:2016-08-28 14:16:24
【问题描述】:
我正在尝试编辑超市中现有的 user_management 食谱以包含 sudoers。我似乎在模板中正确定义 sudoers_groups 变量时遇到问题。
链接到默认食谱 https://github.com/FFIN/user_management/blob/master/recipes/default.rb
这是我的保险库的样子。
knife vault show testusers john
action: create
comment: John Smith
dbpass: secret
gid: john
id: john
password: $1$d$xKNtrFrifo6f7tLFW1xh750
shell: /bin/bash
sudo_pwdless: true
sudoer: false
sudoer_group:
command: ALL
name: admin
sudo_pwdless: false
command: ALL
name: wheel
sudo_pwdless: false
command: ALL
name: sysadmin
sudo_pwdless: true
uid: 1002
username: john`
这是我食谱的模板部分
sudoer_users = Array.new()
if user['sudoer']
command = user['command'] ? user['command'] : 'ALL'
hash = { :uname => user['username'], :command => command, :sudo_pwdless => user['sudo_pwdless'] }
sudoer_users.push(hash)
end
template "/etc/sudoers" do
source 'sudoers.erb'
mode '0440'
owner 'root'
group node['root_group']
variables(
:sudoers_users => sudoer_users,
:sudoers_groups => node[:testcookbook][:testusers][:sudoer_group]
)
only_if { sudoer_users }
end
当我运行配方时,我收到以下错误
Recipe Compile Error in /var/chef/cache/cookbooks/newuser/recipes/default.rb ============================================. ==================================== NoMethodError
-------------`
undefined method [] for nil:NilClass
template "/etc/sudoers" do
61: source 'sudoers.erb'
62: mode '0440'
63: owner 'root'
64: group node['root_group']
65: variables(
66: :sudoers_users => sudoer_users,
67>> :sudoers_groups => node[ :testcookbook][ :testusers][ :sudoer_group]
68: )
69: only_if { sudoer_users }
70: end
我的问题是如何定义 sudoers_group 变量,以便它只迭代保险库中的 sudoer_group 部分?
【问题讨论】:
-
为什么不使用超市的 sudo 食谱也这样做呢?
-
您在输出中的问题是由于输出中使用>>,
node[ :testcookbook][ :testusers][ :sudoer_group]指示的行 - 默认情况下在您的食谱的属性中定义为空数组吗? -
我在我的属性
default['testcookbook']['testusers']['sudoer_group'] = [ 'sysadmin', 'wheel', 'admin' ]中定义了这个。仍然出现同样的错误。
标签: ruby chef-infra chef-recipe cookbook