Sha256: 350375966a2d02906df05d8d56963752fa70e84f32857d1c50f62a9abca83705

Contents?: true

Size: 1.95 KB

Versions: 4

Compression:

Stored size: 1.95 KB

Contents

require 'json'
require 'uri'
require 'yaml'

module OctocatalogDiff
  module CatalogUtil
    class ENC
      class PE
        # Support the Puppet Enterprise classification API.
        # Documentation: https://docs.puppet.com/pe/latest/nc_index.html
        # This is version 1 of the API
        class V1
          # Constructor
          # @param options [Hash] All input options
          def initialize(options)
            @options = options
          end

          # Return the URL to the API
          # @return [String] API URL
          def url
            "#{@options[:pe_enc_url]}/v1/classified/nodes/#{@options[:node]}"
          end

          # Headers
          # @return [Hash] Headers for request
          def headers
            result = {
              'Accept' => 'application/json',
              'Content-Type' => 'application/json'
            }
            result['X-Authentication'] = @options[:pe_enc_token] if @options[:pe_enc_token]
            result
          end

          # POST body
          # @return [String] POST body data
          def body
            raise ":facts required (got #{@options[:facts].class})" unless @options[:facts].is_a?(OctocatalogDiff::Facts)
            { 'fact' => @options[:facts].facts }.to_json
          end

          # Parse response from ENC and return the final ENC data
          # @param parsed [Parsed response] Parsed response from ENC
          # @param logger [Logger] Logger.object
          # @return [String] ENC data as text
          def result(parsed, logger)
            %w(classes parameters).each do |required_key|
              next if parsed[required_key]
              logger.debug parsed.keys.inspect
              raise OctocatalogDiff::CatalogUtil::ENC::PE::ClassificationError, "Response missing: #{required_key}"
            end

            obj = { 'classes' => parsed['classes'], 'parameters' => parsed['parameters'] }
            obj.to_yaml
          end
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
octocatalog-diff-0.5.6 lib/octocatalog-diff/catalog-util/enc/pe/v1.rb
octocatalog-diff-0.5.4 lib/octocatalog-diff/catalog-util/enc/pe/v1.rb
octocatalog-diff-0.5.3 lib/octocatalog-diff/catalog-util/enc/pe/v1.rb
octocatalog-diff-0.5.1 lib/octocatalog-diff/catalog-util/enc/pe/v1.rb