我想要完成的是生成一个ssh-key并将公钥设置为一个节点属性,以便稍后我可以搜索该节点属性并将其添加到其他服务器/用户authorized_keys。
我的第一次尝试就是:
key = '/home/vagrant/.ssh/id_rsa'
bash "generate_key" do
user "vagrant"
code <<-EOH
ssh-keygen -f #{key} -t rsa -N ''
EOH
not_if { ::File.exists?(key) }
end
ruby_block "reload_config" do
block do
node.default['test'] = IO.read("#{key}.pub")
node.save
end
action :create
end
node.save #because i donno?
log "#{node['test']}"
这失败了,因为(我认为)在bash块之前评估ruby块,因此没有要读取的文件,或者在编译时评估node['test']
因此它是空白的(尽管它不是当文件确实存在时,第二次收敛工作。
我感到迷失在表面看似微不足道的事情上。
答案 0 :(得分:1)
我已经实施了......非常相似here
ruby_block "save keys to attributes" do
only_if { public_key.to_s == "" }
block do
private_key = File.read(ssh_key)
public_key = File.read(ssh_key + ".pub")
node.set['gerrit']['peer_keys']['private'] = private_key
node.set['gerrit']['peer_keys']['public'] = public_key
end
end
我认为您使用的优先级“默认”会导致问题,但我不确定,您的代码中的确切问题是什么。