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

时间:2016-09-15 17:34:44

标签: ruby chef chef-recipe

我正在使用“user”资源来定义Chef内的用户。 现在,我想为同一个用户检索UIDGID的值。

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

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

id -u $USERNAME

2 个答案:

答案 0 :(得分:4)

您可以使用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

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

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

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

答案 1 :(得分:3)

为此,您可以使用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