class Kontena::Cli::Stacks::YAML::Opto::Resolvers::ServiceLink

Public Instance Methods

default_index(services) click to toggle source

@param [Array<Hash>] services @return [Integer]

# File lib/kontena/cli/stacks/yaml/opto/service_link_resolver.rb, line 34
def default_index(services)
  index = services.index {|s| service_link(s) == option.default }

  if index && !option.required?
    index + 2 # extra offset for the initial <none> option
  elsif index
    index + 1 # menu index starts from 1
  else
    0 # XXX: this just explodes?
  end
end
filter_by_image(services, image) click to toggle source
# File lib/kontena/cli/stacks/yaml/opto/service_link_resolver.rb, line 64
def filter_by_image(services, image)
  services.select { |s|
    s['image'].include?(image)
  }
end
filter_by_name(services, name) click to toggle source
# File lib/kontena/cli/stacks/yaml/opto/service_link_resolver.rb, line 70
def filter_by_name(services, name)
  services.select { |s|
    s['name'].include?(name)
  }
end
get_services() click to toggle source

@return [Array<Hash>]

# File lib/kontena/cli/stacks/yaml/opto/service_link_resolver.rb, line 26
def get_services
  client.get("grids/#{current_grid}/services")['services']
rescue
  []
end
resolve() click to toggle source
# File lib/kontena/cli/stacks/yaml/opto/service_link_resolver.rb, line 5
def resolve
  return nil unless current_master && current_grid
  message = hint['prompt']
  name_filter = hint['name']
  image_filter = hint['image']
  raise "prompt missing" unless message

  services = get_services
  services = filter_by_image(services, image_filter) if image_filter
  services = filter_by_name(services, name_filter) if name_filter
  return nil if services.size == 0
  prompt.select(message) do |menu|
    menu.default(default_index(services)) if option.default
    menu.choice "<none>", nil unless option.required?
    services.each do |s|
      menu.choice service_name(s), service_link(s)
    end
  end
end
service_name(service) click to toggle source

@param [Hash] service @return [String]

# File lib/kontena/cli/stacks/yaml/opto/service_link_resolver.rb, line 55
def service_name(service)
  grid, stack, service = service['id'].split('/')
  if stack == 'null'.freeze
    service
  else
    "#{stack}/#{service}"
  end
end
stack() click to toggle source
# File lib/kontena/cli/stacks/yaml/opto/service_link_resolver.rb, line 76
def stack
  ENV['STACK']
end