Sha256: 3619ab4c45ea4eb9e47362e2052bfa2683f034cc759594ed109cb4d1fca58585

Contents?: true

Size: 1.55 KB

Versions: 7

Compression:

Stored size: 1.55 KB

Contents

require 'jackal-cfn'

module Jackal
  module Cfn
    # Extract value from hash
    #
    # Expected resource:
    #   {
    #     "Type": "Custom::HashExtractor",
    #     "Properties": {
    #       "Parameters": {
    #         "Key": "path.to.value.in.hash",
    #         "Value": JSON
    #       }
    #     }
    #   }
    class HashExtractor < Jackal::Cfn::Resource

      # Process message, send value back to CFN
      #
      # @param message [Carnivore::Message]
      def execute(message)
        failure_wrap(message) do |payload|
          cfn_resource = rekey_hash(payload.get(:data, :cfn_resource))
          properties = rekey_hash(cfn_resource[:resource_properties])
          parameters = rekey_hash(properties[:parameters])
          cfn_response = build_response(cfn_resource)
          key = parameters[:key].split('.')
          value = parameters[:value]
          unless(value.is_a?(String))
            unless(cfn_resource[:request_type].to_sym == :delete)
              raise TypeError.new("Expecting `String` value but received `#{value.class}`")
            end
            return_value = nil
          else
            value = MultiJson.load(value).to_smash
            return_value = value.get(*key)
            if(return_value.is_a?(Enumerable))
              return_value = MultiJson.dump(return_value)
            end
          end
          cfn_response['Data']['Payload'] = return_value
          respond_to_stack(cfn_response, cfn_resource[:response_url])
          job_completed(:jackal_cfn, payload, message)
        end
      end

    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
jackal-cfn-0.2.28 lib/jackal-cfn/resource/hash_extractor.rb
jackal-cfn-0.2.26 lib/jackal-cfn/resource/hash_extractor.rb
jackal-cfn-0.2.24 lib/jackal-cfn/resource/hash_extractor.rb
jackal-cfn-0.2.22 lib/jackal-cfn/resource/hash_extractor.rb
jackal-cfn-0.2.20 lib/jackal-cfn/resource/hash_extractor.rb
jackal-cfn-0.2.18 lib/jackal-cfn/resource/hash_extractor.rb
jackal-cfn-0.2.16 lib/jackal-cfn/resource/hash_extractor.rb