Ruby 厨师长用户资源(检查是否存在?)

Ruby 厨师长用户资源(检查是否存在?),ruby,chef-infra,Ruby,Chef Infra,我知道如何创建用户资源: 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客户端运行期间,

我知道如何创建用户资源:

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客户端运行期间,我查看了检查节点[:users],但只有节点[:current_user]对我可用。在厨师食谱中,有没有一种方法可以询问是否存在一个普通用户


我的情况是,我不应该/不能创建用户(根据公司规定,但我绝对不应该继续安装我的食谱中定义的其他东西,除非已经存在xyz用户。)

Ohai为您查询系统上的用户:

if node['etc']['passwd']['random']
  # Do deploy
end

Ohai为您查询系统上的用户:

if node['etc']['passwd']['random']
  # Do deploy
end

这仅适用于本地帐户,但如果帐户由LDAP或AD管理,则上述情况不适用。我建议使用:

"getent group #{mygroup}" 
"getent passwd #{myuser}" 

在ruby块中。

仅适用于本地帐户,但如果帐户由LDAP或AD管理,则上述内容不适用。我建议使用:

"getent group #{mygroup}" 
"getent passwd #{myuser}" 

在ruby块中。

如果帐户不是本地帐户,则此操作不起作用:

if node['etc']['passwd']['random']
  # Do deploy
end
我的nsswitch.conf中有“passwd:files sss”,因为帐户在IPA中。
我想只有SorinS的解决方案才有效。

如果帐户不是本地帐户,则这不起作用:

if node['etc']['passwd']['random']
  # Do deploy
end
我的nsswitch.conf中有“passwd:files sss”,因为帐户在IPA中。
我想只有SorinS的解决方案有效。

我得到的是与nil:NilClass相同的
未定义方法“[]”的错误消息。我怀疑那些解决方案有问题的人禁用了passwd-Ohai插件

对于我们这些拥有大型目录环境的人来说,在
client.rb
中禁用passwd插件是非常常见的,以避免在客户端报告运行时出现413错误(“请求实体太大”)。检查
/etc/chef/client.rb
以了解:

ohai.disabled\u插件[:Passwd]


禁用此插件后,
node['etc']['passwd']
将添加到您的食谱中,因此会出现错误。在我的环境中,重新启用插件修复了此错误。

我得到了与nil:NilClass相同的
未定义方法“[]”错误消息。我怀疑那些解决方案有问题的人禁用了passwd-Ohai插件

对于我们这些拥有大型目录环境的人来说,在
client.rb
中禁用passwd插件是非常常见的,以避免在客户端报告运行时出现413错误(“请求实体太大”)。检查
/etc/chef/client.rb
以了解:

ohai.disabled\u插件[:Passwd]


禁用此插件后,
node['etc']['passwd']
将添加到您的食谱中,因此会出现错误。在我的环境中,重新启用插件可修复此错误。

这仅适用于本地帐户,但如果帐户由LDAP或AD管理,则上述情况不适用。我建议使用:如果您的
nsswitch.conf
是针对LDAP的,这将解决一个常见的问题,即运行的进程无法看到对该文件的更改,因为它缓存在libc的深处。如果您在进行nsswitch更改后强制Chef进程重新启动,ohai将按预期工作。它在使用vas对AD进行身份验证的我的机器上不起作用。我不知道vas是什么,但如果它使用nsswitch模块,那么这将起作用。这在kitchen中起作用,但对于prod中的某些服务器,这会因
未定义方法“[]而失败'对于nil:NilClass
。知道为什么吗?这只适用于本地帐户,但如果帐户由LDAP或AD管理,则上述情况不适用。我建议使用:如果您的
nsswitch.conf
是针对LDAP的,这将解决一个常见的问题,即运行的进程无法看到对该文件的更改,因为它缓存在libc的深处。如果您在进行nsswitch更改后强制Chef进程重新启动,ohai将按预期工作。它在使用vas对AD进行身份验证的我的机器上不起作用。我不知道vas是什么,但如果它使用nsswitch模块,那么这将起作用。这在kitchen中起作用,但对于prod中的某些服务器,这会因
未定义方法“[]而失败'对于nil:NilClass
。知道为什么吗?这和Ohai内部的做法是一样的(除了它直接使用API)。这和Ohai内部的做法是一样的(除了它直接使用API)。