我已将 Chef 客户端从 升级为 ,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
Run Code Online (Sandbox Code Playgroud)
似乎node['etc']['passwd']不再可读哪个结果的值为nil。
我检查了另一台新引导的机器,并在 Chef Server UI 上验证它,但结果是,属性选项卡中没有“etc”。
阅读ohai 的发行说明,它说:
可选的 Ohai 插件
Ohai 现在包含将插件标记为可选的功能,默认情况下会跳过这些插件。这使我们能够提供额外的插件,一些用户可能会发现这些插件很有用,但并非所有用户都希望被写入他们的 Chef 服务器。此更改引入了两个新的配置选项;
run_all_plugins它运行所有内容,包括可选插件,并optional_plugins允许您运行标记为可选的插件。默认情况下,我们现在将
lspci、sessions和passwd插件标记为可选。Passwd 对于连接 LDAP 或 AD 的节点尤其有问题,因为它试图将整个目录写入节点。如果您之前通过 Ohai 配置禁用了此插件,则不再需要。欢呼!
但您始终可以启用可选插件:
启用可选插件
可以在配置文件中启用可选插件
client.rb:ohai.optional_plugins = [ :Sessions, :Lspci ]
在您的具体情况下:
ohai.optional_plugins = [
:Passwd
]
Run Code Online (Sandbox Code Playgroud)
假设您使用bundler安装了ohai,那么您可以passwd通过执行来检查是否存在
$ bundle exec ohai etc
Run Code Online (Sandbox Code Playgroud)
不断地有这样的行为,那么:
chef-client, client.rb则可以使用,它可以存储在存储库中。ohai资源。就像是:
$ bundle exec ohai etc
Run Code Online (Sandbox Code Playgroud)node['ohai']['disabled_plugins']更新: 厨师-客户食谱中已引入对此的支持:
node['ohai']['disabled_plugins']- 要禁用的 ohai 插件数组,默认为空,如果指定则必须是数组。Ohai 6 插件应指定为字符串(即“dmi”)。Ohai 7+ 插件应指定为引号内的符号(即“:Passwd”)。node['ohai']['optional_plugins']- 要启用的可选 ohai 插件数组,默认为空,如果指定则必须是数组。Ohai 6 插件应指定为字符串(即“dmi”)。Ohai 7+ 插件应指定为引号内的符号(即“:Passwd”)。