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']对您的配方不可用 ,因此会出错。 在我的环境中,重新启用插件可以修复此错误。