【问题标题】:How to enable Ohai Plugin to produce ['etc']['passwd']?如何启用 Ohai 插件生成 ['etc']['passwd']?
【发布时间】:2019-11-16 03:49:06
【问题描述】:

我已将我的 Chef Client 从 14.0 升级到 15.3.14,但每当我在节点 (macOS Mojave) 上执行 chef-client 时,问题就会出现。
客户端输出为:

-------------
undefined method `[]' for nil:NilClass

Cookbook Trace:
---------------
  /var/chef/cache/cookbooks/macos/recipes/mac_init.rb:62:in `from_file'

Relevant File Content:
----------------------
/var/chef/cache/cookbooks/macos/recipes/mac_init.rb:

 55:    action :create
 56:    owner 'administrator'
 57:    group 'localaccounts'
 58:    mode  '0775'
 59:  end
 60:
 61:  # Template for bash history
 62>>   node['etc']['passwd'].each do |user, data|
 63:
 64:    template "/Users/#{user}/.bash_profile" do
 65:      source '/default/bash_profile.erb'
 66:      owner 'administrator'
 67:      group 'staff'
 68:      ignore_failure true
 69:    end
 70:  end

node['etc']['passwd'] 似乎不再可读,导致值为nil
我检查了另一台新启动的机器并在 Chef Server UI 上进行了验证,但结果是,属性选项卡中没有“等”。

【问题讨论】:

    标签: chef-infra


    【解决方案1】:

    阅读release notes of ohai 上面写着:

    可选的 Ohai 插件

    Ohai 现在包含将插件标记为可选的功能,默认情况下会跳过这些插件。这允许我们发布额外的插件,一些用户可能会觉得这些插件很有用,但并非所有用户都希望将其写入他们的 Chef 服务器。该更改引入了两个新的配置选项; run_all_plugins 运行所有内容,包括可选插件,optional_plugins 允许您运行标记为可选的插件。

    默认情况下,我们现在将lspcisessionspasswd 插件标记为可选。 Passwd 对于连接 LDAP 或 AD 的节点尤其成问题,它试图将整个目录写入节点。如果您之前通过 Ohai 配置禁用了此插件,则不再需要。万岁!

    但你总是可以enable back the optional plugins:

    启用可选插件

    可以在client.rb 配置文件中启用可选插件: ohai.optional_plugins = [ :Sessions, :Lspci ]

    在您的具体情况下:

    ohai.optional_plugins = [
      :Passwd
    ]
    

    假设您使用 bundler 安装了 ohai,那么您可以通过执行来检查 passwd 是否存在

    $ bundle exec ohai etc
    

    配置

    经常有这样的行为,那么:

    • 如果在调用chef-client时使用chef-zero,则可以使用client.rb,可以存储在存储库中。
    • 使用ohai resource。就像是:
      ohai 'reload_passwd' do
        action :reload
        plugin 'etc'
      end
      
    • 贡献于chef-client cookbook,以获得对node['ohai']['disabled_plugins']的免费支持

    更新: 对此的支持已被引入到 chef-client 食谱中:

    • node['ohai']['disabled_plugins'] - 要禁用的 ohai 插件数组,默认为空,如果指定,则必须是数组。 Ohai 6 插件应指定为字符串(即“dmi”)。 Ohai 7+ 插件应指定为引号内的符号(即“:Passwd”)。
    • node['ohai']['optional_plugins'] - 要启用的可选 ohai 插件数组,默认为空,如果指定,则必须是数组。 Ohai 6 插件应指定为字符串(即“dmi”)。 Ohai 7+ 插件应指定为引号内的符号(即“:Passwd”)。

    【讨论】:

    • 一个很好解释的答案。非常感谢您回答我的问题。
    • 如果你有空闲,我也想问一下如何在多个节点上有效地应用这个配置。
    • 哦,在挖掘一些线程和文档时,我看到了用于重新加载插件的 ohai 资源。但不幸的是,该插件似乎仍然被禁用。我可能会在 chef-client cookbook repo 上为启用的插件提交功能请求。
    • 这是我已经向 Chef-client 发送的关于此事的请求,并顺利回答了 github.com/chef-cookbooks/chef-client/issues/…
    • @GilroyToledano:太棒了!
    猜你喜欢
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    相关资源
    最近更新 更多