0
我對廚師食譜的收斂/編譯階段有些困惑。來自Ruby_Block的變量
我想更新/創建一個java密鑰庫,only_if提供在保險庫中的證書不同於密鑰庫中的證書。
因此,我從系統上的Vault寫入臨時文件,使用ruby_block計算md5,並在管理密鑰庫的execute塊的only_if條件中使用此md5。
這裏是最後的代碼,我曾嘗試:
ruby_block "get private cert md5" do
block do
vault_md5 = Mixlib::ShellOut.new("openssl x509 -in /tmp/mycerrt.crt -fingerprint -md5 | head -1 | sed -e 's/MD5 Fingerprint=//'")
vault_md5.run_command
# get dynamically the only_if statement to update it.
exec_r = run_context.resource_collection.find(:execute => "create p12 store")
exec_r.only_if "[ \"#{cur_md5.stdout}\" -ne \"#{vault_md5.stdout}\" ]"
end
end
execute "create p12 store" do
command "openssl pkcs12 -export -in /tmp/mycerrt.crt -inkey /tmp/myKey -certfile /tmp/mycerrt.crt -name priv -out /tmp/keystore.p12 -password pass:#{key['PrivateKeystorePassword']}"
only_if "[ \"#{cur_md5.stdout}\" -eq '']"
notifies :run, 'execute[convert keystore]', :immediately
action :run
end
這段代碼的執行塊,如果總是由於only_if跳過。 感謝您的幫助
Mixlib :: ShellOut不需要被包裹在一個ruby_block,另外cur_md5 run_command在哪裏? –
嗨,我想在我的情況下Mixlib :: ShellOut需要被包裝,因爲否則它將在編譯階段執行,並且此時/tmp.mycerrt.crt文件不存在。 cur_md5在之前運行,不包含在ruby塊中,因爲它測試了始終存在的密鑰庫。 –