厨师从用户获取UID的最佳方式是什么?
问题描述:
我正在使用“用户”资源来定义Chef中的用户。 现在,我想为同一个用户检索UID
和GID
的值。厨师从用户获取UID的最佳方式是什么?
这可以使用厨师内的ruby代码来完成吗?
现在,我尝试使用bash资源,运行以下命令:
id -u $USERNAME
答
您可以使用自动属性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
答
为此,您可以使用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