然后从文件厨师生成然后读取内容

时间:2014-05-07 18:36:25

标签: chef

我想要完成的是生成一个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']因此它是空白的(尽管它不是当文件确实存在时,第二次收敛工作。

我感到迷失在表面看似微不足道的事情上。

1 个答案:

答案 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

我认为您使用的优先级“默认”会导致问题,但我不确定,您的代码中的确切问题是什么。