Sha256: 5fb7b15a419f691512b1b9ff7f82b469f00beec7203199a12da5127af9c2862a

Contents?: true

Size: 1.66 KB

Versions: 1

Compression:

Stored size: 1.66 KB

Contents

class Etcdv3
  class Connection

    NAMESPACE_HANDLERS = {
      kv: Etcdv3::Namespace::KV,
      watch: Etcdv3::Namespace::Watch,
      lock: Etcdv3::Namespace::Lock,
    }

    HANDLERS = {
      auth: Etcdv3::Auth,
      kv: Etcdv3::KV,
      maintenance: Etcdv3::Maintenance,
      lease: Etcdv3::Lease,
      watch: Etcdv3::Watch,
      lock: Etcdv3::Lock,
    }

    attr_reader :endpoint, :hostname, :handlers, :credentials, :namespace

    def initialize(url, timeout, namespace, metadata={})
      @endpoint = URI(url)
      @hostname = "#{@endpoint.hostname}:#{@endpoint.port}"
      @namespace = namespace
      @credentials = resolve_credentials
      @timeout = timeout
      @handlers = handler_map(metadata)
    end

    def call(stub, method, method_args=[])
      @handlers.fetch(stub).send(method, *method_args)
    end

    def refresh_metadata(metadata)
      @handlers = handler_map(metadata)
    end

    private

    def handler_map(metadata={})
      handlers = Hash[
        HANDLERS.map do |key, klass|
          [key, klass.new(@hostname, @credentials, @timeout, metadata)]
        end
      ]
      # Override any handlers that are namespace compatable.
      if @namespace
        NAMESPACE_HANDLERS.each do |key, klass|
          handlers[key] = klass.new(@hostname, @credentials, @timeout, @namespace, metadata)
        end
      end
      
      handlers
    end

    def resolve_credentials
      case @endpoint.scheme
      when 'http'
        :this_channel_is_insecure
      when 'https'
        # Use default certs for now.
        GRPC::Core::ChannelCredentials.new
      else
        raise "Unknown scheme: #{@endpoint.scheme}"
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
etcdv3-0.11.3 lib/etcdv3/connection.rb