2014-05-07 54 views
1

我想要完成的是生成一個ssh密鑰並將公鑰設置爲節點屬性,以便稍後可以搜索該節點屬性並將其添加到其他服務器/用戶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塊前的紅寶石塊進行評估,所以沒有文件的讀取和或node['test']在編譯時計算所以它是空白的(儘管它不適用於第二次收斂,當文件存在時)。

我感覺迷失在表面看起來微不足道的東西上。

回答

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 

我認爲優先級「默認」您使用是造成問題,但我不能確定,確切的問題是在你的代碼是什麼。

+0

從默認更改爲設置沒有辦法。但是使用你的代碼,我試圖理解爲什麼。是因爲一切都是在收斂時間完成的,而不是編譯時間? – erichelgeson

+0

不確定,你是否嘗試刪除'ruby_block'中的'only_if'來查看它是否仍然有效? – StephenKing