Chef infra 具有Chef 12.5或更高版本的AWS SDK
过程: 1.将aws kms加密的密码作为默认属性存储在数组中Chef infra 具有Chef 12.5或更高版本的AWS SDK,chef-infra,aws-kms,Chef Infra,Aws Kms,过程: 1.将aws kms加密的密码作为默认属性存储在数组中 使用存储在受保护位置的凭据在运行时取消加密。aws/creds 将明文数组设置回节点数组 解析模板中的节点数组 丢弃明文密码 我试图引用在自定义文件中设置的node.runstate变量 另一个资源中的资源 自定义资源: resource_name :secrets_kms property :password, String, name_property: true property :region, String, defau
resource_name :secrets_kms
property :password, String, name_property: true
property :region, String, default: 'us-east-1'
property :nodevariable, String
property :path_to_secrets, [String, nil], default: nil
load_current_value do
if ::File.exist?("/tmp/encryptedpassword")
password IO.read("/tmp/encryptedpassword")
end
end
# Setting up the default action to be decrpyt
action :decrypt do
file '/tmp/encryptedpassword' do
content password
action :create
end
# Converge only if password is changed
converge_if_changed :password do
# Installs Chef Gem aws-sdk
chef_gem 'aws-sdk' do
compile_time true
end
# Require install aws-sdk
require 'aws-sdk'
# Detects platfrom if amazon to use IAM roles vs keys
if node['platform'] == 'amazon'
kms = Aws::KMS::Client.new(region: region)
else
# Loads secret file and connect using files access_key_id and secret_access_key provisioned at run time
creds = YAML.load(::File.read(path_to_secrets))
kms = Aws::KMS::Client.new(
region: region,
access_key_id: creds['access_key_id'],
secret_access_key: creds['secret_access_key']
)
end
# Decode password into Base64
value = Base64.strict_decode64(password)
# Decrypt the encrypted text
decrypted = kms.decrypt(ciphertext_blob: value)
node.run_state[:nodevariable] = decrypted.plaintext
end
end
在此自定义资源运行之后。我想让它将默认属性更新为纯文本值(它是数组的一部分),然后我想将这个变量传递到模板资源中 您会遇到什么错误?我假设您希望检索
节点。在运行中的其他位置运行\u state[:nodevariable]
,但自定义资源在其自己的运行上下文中运行,因此节点。运行\u state
哈希与自定义资源相关,而不是与全局上下文相关。但是在你的问题上有很多不清楚的地方。请详细说明出了什么问题。没有错误其他资源中的值我显示为空白我已更新我的帖子,使其更具描述性@tensibimove您的代码到库模块中,以便在编译时在recipe中调用它,在自定义资源中,这可能很脆弱。也许coderanger会有一个更好的选择,但我认为你在slack频道上会有更好的机会。(您可以在上找到链接)。要睡觉了。出现了什么错误?我假设您希望检索节点。在运行中的其他位置运行\u state[:nodevariable]
,但自定义资源在其自己的运行上下文中运行,因此节点。运行\u state
哈希与自定义资源相关,而不是与全局上下文相关。但是在你的问题上有很多不清楚的地方。请详细说明出了什么问题。没有错误其他资源中的值我显示为空白我已更新我的帖子,使其更具描述性@tensibimove您的代码到库模块中,以便在编译时在recipe中调用它,在自定义资源中,这可能很脆弱。也许coderanger会有一个更好的选择,但我认为你在slack频道上会有更好的机会。(您可以在上找到链接)。去睡觉。