来自 Ruby_Block 的变量
Variables from Ruby_Block
我对厨师食谱的 converge/compile 阶段有些挣扎。
我想要 update/create 一个 java 密钥库,only_if 保管库中提供的证书与密钥库中的证书不同。
所以我从系统上的保管库写入临时文件,使用 ruby_block 计算 md5,并在管理密钥库的执行块上的 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 而总是跳过执行块。
感谢您的帮助
我找到了解决问题的方法,所以我真的不知道这是否是处理此类问题的最佳方法。
我没有动态尝试更改 only_statement,而是专注于 运行。
ruby_block "get private cert md5" do
block do
vault_md5 = Mixlib::ShellOut.new("openssl x509 -in /tmp/cert.crt -fingerprint -md5 | head -1 | sed -e 's/MD5 Fingerprint=//'")
vault_md5.run_command
exec_r = run_context.resource_collection.find(:execute => "create p12 store")
if ( cur_md5.stdout != vault_md5.stdout )
exec_r.action "run"
end
end
因此,执行块是由这个 ruby_block 驱动的,它可以处理编译阶段生成的数据(这里是我生成的本地文件)
我对厨师食谱的 converge/compile 阶段有些挣扎。
我想要 update/create 一个 java 密钥库,only_if 保管库中提供的证书与密钥库中的证书不同。
所以我从系统上的保管库写入临时文件,使用 ruby_block 计算 md5,并在管理密钥库的执行块上的 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 而总是跳过执行块。 感谢您的帮助
我找到了解决问题的方法,所以我真的不知道这是否是处理此类问题的最佳方法。
我没有动态尝试更改 only_statement,而是专注于 运行。
ruby_block "get private cert md5" do
block do
vault_md5 = Mixlib::ShellOut.new("openssl x509 -in /tmp/cert.crt -fingerprint -md5 | head -1 | sed -e 's/MD5 Fingerprint=//'")
vault_md5.run_command
exec_r = run_context.resource_collection.find(:execute => "create p12 store")
if ( cur_md5.stdout != vault_md5.stdout )
exec_r.action "run"
end
end
因此,执行块是由这个 ruby_block 驱动的,它可以处理编译阶段生成的数据(这里是我生成的本地文件)