我正在尝试实现一个通过读取属性文件中的密码来创建用户的食谱(非散列密码ex:root @ 123)
为此,我的食谱如下:
属性文件的内容(attributes / attr.rb)
default['my']['instance']['users'] = [
{uid: 1004,user_name:'m1',homedir:'/home/m1',password:'root@111'}
{uid: 1003,user_name:'m2',homedir:'/home/m2',password:'root@222'},
{uid: 1002, user_name:'m3',homedir:'/home/m3',password:'root@333'}
]
食谱:
password_hash=''
node['my']['instance']['users'].each do |each_user|
ruby_block "Generating hash password" do
block do
require 'digest/sha2'
password=each_user['password']
salt=rand(36**8).to_s(36)
shadow_hash=password.crypt("$6$" + salt)
password_hash=shadow_hash
end
end
user each_user['user_name'] do
password "#{password_hash}"
home each_user['homedir']
system true
action :create
manage_home true
uid each_user['uid']
end
end
执行食谱后,相应地创建了相应的用户,但密码被设置为空白。
看起来我尝试在用户资源的密码属性中访问的变量不正确。
请让我如何解决这个问题。
注意:在我的情况下,我不想使用数据库。
答案 0 :(得分:1)
您不需要将该代码放在ruby_block中,只需将其置于正常循环中即可。
答案 1 :(得分:0)
我认为使用ruby_bloque是一种很好的做法。您只需通知提供者更改变量。 例如
password_hash=''
node['my']['instance']['users'].each do |each_user|
ruby_block "Generating hash password" do
block do
require 'digest/sha2'
password=each_user['password']
salt=rand(36**8).to_s(36)
shadow_hash=password.crypt("$6$" + salt)
password_hash=shadow_hash
user_resource = resources("user[#{each_user['user_name']}]")
user_resource.password password_hash
end
end
user each_user['user_name'] do
password "#{password_hash}"
home each_user['homedir']
system true
action :create
manage_home true
uid each_user['uid']
end
end
抱歉我的英语。
最好的问候。
答案 2 :(得分:0)
password_hash变量是ruby块的本地范围,因此无法在用户块中访问。您实际上可以将所有ruby用于直接创建哈希到用户块中。