class Diplomat::Service

Methods for interacting with the Consul service API endpoint.

Public Instance Methods

deregister(service_name, options = {}) click to toggle source

De-register a service @param service_name [String] Service name to de-register @param options [Hash] options parameter hash @return [Boolean]

# File lib/diplomat/service.rb, line 72
def deregister(service_name, options = {})
  deregister = send_put_request(@conn, ["/v1/agent/service/deregister/#{service_name}"], options, nil)
  deregister.status == 200
end
deregister_external(definition, options = {}) click to toggle source

Deregister an external service @param definition [Hash] Hash containing definition of service @param options [Hash] options parameter hash @return [Boolean]

# File lib/diplomat/service.rb, line 90
def deregister_external(definition, options = {})
  deregister = send_put_request(@conn, ['/v1/catalog/deregister'], options, definition)
  deregister.status == 200
end
get(key, scope = :first, options = {}, meta = nil) click to toggle source

Get a service by it's key @param key [String] the key @param scope [Symbol] :first or :all results @param options [Hash] options parameter hash @param meta [Hash] output structure containing header information about the request (index) @return [OpenStruct] all data associated with the service rubocop:disable PerceivedComplexity

# File lib/diplomat/service.rb, line 13
def get(key, scope = :first, options = {}, meta = nil)
  custom_params = []
  custom_params << use_named_parameter('wait', options[:wait]) if options[:wait]
  custom_params << use_named_parameter('index', options[:index]) if options[:index]
  custom_params << use_named_parameter('dc', options[:dc]) if options[:dc]
  if options[:tag]
    # tag can be either a String, or an array of strings
    # by splatting it is guaranteed to be an array of strings
    [*options[:tag]].each do |value|
      custom_params << use_named_parameter('tag', value)
    end
  end

  # We have to provide a custom params encoder here because Faraday - by default - assumes that
  # list keys have [] as part of their name. This is however not the case for consul tags, which
  # just use repeated occurences of the same key.
  #
  # So faraday reduces this: http://localhost:8500?a=1&a=2 to http://localhost:8500?a=2 unless you
  # explicitly tell it not to.
  options[:params_encoder] = Faraday::FlatParamsEncoder

  ret = send_get_request(@conn, ["/v1/catalog/service/#{key}"], options, custom_params)
  if meta && ret.headers
    meta[:index] = ret.headers['x-consul-index'] if ret.headers['x-consul-index']
    meta[:knownleader] = ret.headers['x-consul-knownleader'] if ret.headers['x-consul-knownleader']
    meta[:lastcontact] = ret.headers['x-consul-lastcontact'] if ret.headers['x-consul-lastcontact']
  end

  if scope == :all
    JSON.parse(ret.body).map { |service| OpenStruct.new service }
  else
    OpenStruct.new JSON.parse(ret.body).first
  end
end
get_all(options = {}) click to toggle source

Get all the services @param options [Hash] :dc Consul datacenter to query @return [OpenStruct] the list of all services

# File lib/diplomat/service.rb, line 52
def get_all(options = {})
  custom_params = options[:dc] ? use_named_parameter('dc', options[:dc]) : nil
  ret = send_get_request(@conn, ['/v1/catalog/services'], options, custom_params)
  OpenStruct.new JSON.parse(ret.body)
end
maintenance(service_id, options = { enable: true }) click to toggle source

Enable or disable maintenance for a service @param service_id [String] id of the service @param options [Hash] opts the options for enabling or disabling maintenance for a service @options opts [Boolean] :enable (true) whether to enable or disable maintenance @options opts [String] :reason reason for the service maintenance @raise [Diplomat::PathNotFound] if the request fails @return [Boolean] if the request was successful or not

# File lib/diplomat/service.rb, line 102
def maintenance(service_id, options = { enable: true })
  custom_params = []
  custom_params << ["enable=#{options[:enable]}"]
  custom_params << ["reason=#{options[:reason].split(' ').join('+')}"] if options[:reason]
  maintenance = send_put_request(@conn, ["/v1/agent/service/maintenance/#{service_id}"],
                                 options, nil, custom_params)
  maintenance.status == 200
end
register(definition, options = {}) click to toggle source

Register a service @param definition [Hash] Hash containing definition of service @param options [Hash] options parameter hash @return [Boolean]

# File lib/diplomat/service.rb, line 62
def register(definition, options = {})
  url = options[:path] || ['/v1/agent/service/register']
  register = send_put_request(@conn, url, options, definition)
  register.status == 200
end
register_external(definition, options = {}) click to toggle source

Register an external service @param definition [Hash] Hash containing definition of service @param options [Hash] options parameter hash @return [Boolean]

# File lib/diplomat/service.rb, line 81
def register_external(definition, options = {})
  register = send_put_request(@conn, ['/v1/catalog/register'], options, definition)
  register.status == 200
end