Sha256: b072062be85c0e73e98258f65c19576505064e38fa70eb631adb132f6d00c1e0

Contents?: true

Size: 1.96 KB

Versions: 1

Compression:

Stored size: 1.96 KB

Contents

require 'hako'
require 'hako/error'
require 'hako/script'
require 'net/http'
require 'uri'

module Hako
  module Scripts
    class SwitchHitter < Script

      # @param [Hash] options
      def configure(options)
        @options = options
      end

      # @param [Hash<String, Container>] containers
      # @return [nil]
      def deploy_finished(containers)
        hit_switch
      end

      alias_method :rollback, :deploy_finished

      private

      # @return [Hash]
      def endpoint
        raise Error.new("Switch hitter endpoint is not configured") unless @options['endpoint']
        @options['endpoint']
      end

      # @return [URI]
      def endpoint_uri
        @uri ||= URI.parse(endpoint)
      end

      # @return [String]
      def endpoint_scheme
        raise Error.new("Switch hitter endpoint scheme must be http or https") unless %w/http https/.include?(endpoint_uri.scheme)
        endpoint_uri.scheme
      end

      # @return [String]
      def endpoint_host
        endpoint_uri.host
      end

      # @return [Fixnum]
      def endpoint_port
        endpoint_uri.port
      end

      # @return [String]
      def endpoint_path
        endpoint_uri.path
      end

      # @return [Net::HTTP]
      def http(host, port)
        Net::HTTP.new(host, port)
      end

      # @return [nil]
      def hit_switch
        Hako.logger.info("Switch endpoint #{endpoint}")

        net_http = http(endpoint_host, endpoint_port)
        net_http.use_ssl = endpoint_scheme == 'https'

        if @dry_run
          Hako.logger.info("Switch hitter will request #{endpoint} [dry-run]")
          return
        end

        net_http.start do
          req = Net::HTTP::Get.new(endpoint_uri.request_uri)
          res = net_http.request(req)
          unless res.code == '200'
            raise Error.new("Switch hitter HTTP Error: #{res.code}: #{res.body}")
          end
          Hako.logger.info("Enabled #{endpoint} at #{res.body}")
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
hako-switch-hitter-0.1.3 lib/hako/scripts/switch_hitter.rb