使用 opscode chef,有没有办法查找或循环遍历所有用户帐户?
我需要在每个用户的主目录中创建一个配置文件。我不想为此循环遍历任何目录结构。
答案1
Chef 运行时,ohai 会自动检测系统上的所有用户,并在node['etc']
属性空间中可用。用户是node['etc']['passwd']
。您可以像哈希一样对其进行迭代。您可以通过比较用户的数字 ID 是否超过系统 /etc/login.defs UID_MIN 中定义的任何值来排除“系统”或“由包预先创建”。
配方中的示例用法是创建一个存储在食谱中的配置文件,每个用户都有一个不同的文件。
node['etc']['passwd'].each do |user, data|
if data['uid'].to_i > 1000
cookbook_file "#{data['dir']}/custom_config" do
source "#{user}_custom_config"
owner user
group data['gid']
mode 0644
end
end
end
将“custom_config”替换为您的配置文件的名称。
答案2
ohai 的 etc.passwd 支持似乎基于 Ruby等密码读取/etc/passwd
文件。
如果您的用户是像这样静态定义的,那么这可能没问题。如果您的服务器在 LDAP 或 NIS 等远程系统中定义了用户,那么这些用户将不会在 /etc/passwd 中。您可以使用以下命令列出它们
`getent passwd`