ruby 在Chef中从用户获取UID的最佳方法是什么?

laximzn5  于 2023-05-28  发布在  Ruby
关注(0)|答案(2)|浏览(97)

我使用“user”资源来定义Chef中的用户。现在,我想为同一个用户检索UIDGID的值。
这可以使用chef中的ruby代码来完成吗?
现在,我正在尝试使用bash资源并运行以下命令:

id -u $USERNAME
nx7onnlm

nx7onnlm1#

您可以使用Ohai提供的自动属性。
该信息可通过

# uid
node['etc']['passwd']['$USERNAME']['uid']
# gid
node['etc']['passwd']['$USERNAME']['gid']

在命令行中,可以按如下方式浏览属性:

$ ohai etc/passwd/vagrant
{
  "dir": "/home/vagrant",
  "gid": 900,
  "uid": 900,
  "shell": "/bin/bash",
  "gecos": "vagrant,,,"
}

$ ohai etc/passwd/vagrant/uid
900

如果您在chef运行期间创建了一个用户,并希望在同一chef运行中访问其信息,则可能必须触发负责的 ohai 插件的reload。(这可能会自动触发,但我不希望如此。

ohai 'reload passwd' do
  plugin 'passwd'
  action :reload
end

user 'john' do
  notifies :reload, 'ohai[reload passwd]', :immediately
end

从Chef 15开始,the etc plugin is optional

cfh9epnr

cfh9epnr2#

为此,您可以使用Ruby的Etc类:http://ruby-doc.org/stdlib-2.1.2/libdoc/etc/rdoc/Etc.html#method-c-getpwnam

[15] pry(main)> Etc.getpwnam('david').uid
=> 501
[16] pry(main)> Etc.getpwnam('david').gid
=> 20

相关问题