Chef Users资源(检查是否存在?)
我知道如何创建用户资源:
user "random" do supports :manage_home => true comment "Random User" uid 1234 gid "users" home "/home/random" shell "/bin/bash" password "$1$JJsvHslV$szsCjVEroftprNn4JHtDi." end
但我不确定如何使用Chef查找当前节点上所有用户的列表。 我查看了在chef-client运行期间检查node [:users],但只有node [:current_user]可供我使用。 在Chef配方中,有没有办法询问普通用户是否存在?
我的情况是我不应该/不能创建用户(由于公司规定,但我绝对不应该继续安装我的食谱中定义的其他东西,除非xyz用户已经存在。)
Ohai为您查询系统上的用户:
if node['etc']['passwd']['random'] # Do deploy end
这仅适用于本地帐户,但如果帐户由LDAP或AD管理,则上述帐户不成立。 我建议使用:
"getent group #{mygroup}" "getent passwd #{myuser}"
在ruby块。
如果帐户不是本地帐户,则不起作用:
if node['etc']['passwd']['random'] # Do deploy end
我的nsswitch.conf中有“passwd:files sss”,因为帐户是在IPA中。
(我很乐意将此作为对代码发布者post的评论添加,但我没有足够的声誉……)。
我想只有SorinS的解决方案才有效。
(我很想投票赞成索林的post,但我没有足够的声誉……)。
我得到了与undefined method '[]' for nil:NilClass
相同的undefined method '[]' for nil:NilClass
错误消息为Tom Klino 。 我怀疑那些遇到coderanger解决方案问题的人已经禁用了passwd Ohai插件。
对于我们这些拥有大型目录环境的人来说,在客户端报告运行时禁用client.rb
的passwd插件以避免413错误(“请求实体太大”)是很常见的。 检查/etc/chef/client.rb
:
ohai.disabled_plugins [:Passwd]
禁用此插件后, node['etc']['passwd']
对您的配方不可用 ,因此会出错。 在我的环境中,重新启用插件可以修复此错误。