【问题标题】:How do i define variable within a template cookbook如何在模板说明书中定义变量
【发布时间】: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


【解决方案1】:

不幸的是,Ruby 没有给我们足够的信息来检查哪个是未定义的,但是 node[:testcookbook]node[:testcookbook][:testusers] 是未设置/未定义的。仔细检查您设置 sudoer_group 值的位置,因为它可能格式错误或未上传到 Chef 服务器。

【讨论】:

  • 知道如何在属性中正确定义它吗?我现在有这样的default['testcookbookr']['testusers']['sudoer_group'] = [ 'sysadmin', 'wheel', 'admin' ]
  • testcookbookr 打错了,可能是这样 :)
【解决方案2】:

这是我为最终解决问题所做的。

我在 attributes/default.rb 中添加了以下内容作为我的变量的一部分。

default['testcookbook']['testusers']['sudoer_group'] = [ {"name" => "admin", "sudo_pwdless" => false, "command" => "ALL"}, {"name" => "wheel", "sudo_pwdless" => false, "command" => "ALL"}, {"name" => "sysadmin", "sudo_pwdless" => true, "command" => "ALL"} ]`

【讨论】:

    猜你喜欢
    • 2019-06-24
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 2015-02-14
    • 2011-05-06
    相关资源
    最近更新 更多