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

What is the best way to get UID from user within Chef?

我正在使用 "user" 资源在 Chef 中定义用户。 现在,我想为同一用户检索 UIDGID 的值。

这可以使用 chef 中的 ruby 代码来完成吗?

现在,我正在尝试使用 bash 资源和 运行 以下命令:

id -u $USERNAME

为此,您可以使用 Ruby 的 Etc class: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

您可以使用 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 运行 中访问其信息,您可能必须触发负责人 [=] 的 reload 23=]ohai 插件。 (这可能会自动触发,但我不希望如此。)

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

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