Chef infra 具有Chef 12.5或更高版本的AWS SDK

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

过程: 1.将aws kms加密的密码作为默认属性存储在数组中

  • 使用存储在受保护位置的凭据在运行时取消加密。aws/creds

  • 将明文数组设置回节点数组

  • 解析模板中的节点数组
  • 丢弃明文密码
  • 我试图引用在自定义文件中设置的node.runstate变量 另一个资源中的资源

    自定义资源:

    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频道上会有更好的机会。(您可以在上找到链接)。去睡觉。