厨师从用户获取UID的最佳方式是什么?

问题描述:

我正在使用“用户”资源来定义Chef中的用户。 现在,我想为同一个用户检索UIDGID的值。厨师从用户获取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