在由chef-solo / vagrant调用的厨师食谱中,我试图从用户的对象中编写.htpasswd文件。
我在vagrantfile
中指定了这样的用户......
chef.json = {
:apache => {
...
:my_users => {
:john => "test",
:matt => "test2"
}
...
我的厨师食谱现在看起来像这样:
file "/etc/apache2/.htpasswd" do
content "john:n5MfEoHOIQkKg"
owner "#{node['apache']['user']}"
group "#{node['apache']['group']}"
mode '0644'
action :create
end
正如你所看到的,我在那里编写了John的硬编码凭证 - 然而,我不是Ruby开发者,而且我在这里缺少一些非常基本的知识...
如何将node['apache']['my_users']
属性(在chef.json中定义)中的所有用户凭据循环写入文件,而为每个明文密码创建密码哈希?
注意:我试图避免在此简单文件中使用模板。
答案 0 :(得分:2)
我使用the LWRP Charlie suggested完成了这项工作。
第一步是将用户的定义修改为正确的数组:
chef.json = {
:apache => {
...
:my_users => [
{ :username => "john", :password => "test1" },
{ :username => "matt", :password => "test2" }
]
...
我将htpasswd依赖项包含在元数据和bershelf中。 然后在我的配方中,我使用htpasswd调用在循环中创建用户:
node[:apache][:my_users].each do |user|
htpasswd "/etc/apache2/.htpasswd" do
user user['username']
password user['password']
end
end
答案 1 :(得分:0)
htpasswd手册页看起来像是在密码上使用MD5哈希。
也许你可以在食谱的Ruby代码中generate md5 hashes?
答案 2 :(得分:0)
您可以采用原生方式进行,需要安装htpasswd
:
execute 'set password' do
sensitive true
command "htpasswd -cb /etc/htpasswd.users #{user} #{password}"
creates '/etc/htpasswd.users'
end
file '/etc/htpasswd.users' do
owner 'www-data'
group 'www-data'
mode 0o600
end