module Kontena::Plugin::Cloud::Platform::Common

Public Instance Methods

cached_platforms() click to toggle source
# File lib/kontena/plugin/cloud/platform/common.rb, line 7
def cached_platforms
  @cached_platforms ||= []
end
current_organization() click to toggle source

@return [String, NilClass]

# File lib/kontena/plugin/cloud/platform/common.rb, line 41
def current_organization
  @current_organization || ENV['KONTENA_ORGANIZATION']
end
current_platform() click to toggle source
# File lib/kontena/plugin/cloud/platform/common.rb, line 45
def current_platform
  self.current_grid
end
fetch_platforms() click to toggle source
# File lib/kontena/plugin/cloud/platform/common.rb, line 11
def fetch_platforms
  all = []
  organizations = cloud_client.get('/organizations')['data']
  organizations.each do |org|
    all = all + fetch_platforms_for_org(org['id'])
  end
  all
end
fetch_platforms_for_org(org_id) click to toggle source

@param [String] org_id @return [Array<Kontena::Cli::Models::Platform>]

# File lib/kontena/plugin/cloud/platform/common.rb, line 22
def fetch_platforms_for_org(org_id)
  platforms = cloud_client.get("/organizations/#{org_id}/platforms")['data']
  platforms.map do |p|
    platform = Kontena::Cli::Models::Platform.new(p)
    cached_platforms << platform if cached_platforms.none?{|cached| platform.id == cached.id }
    platform
  end
end
find_platform_by_name(name, org, cache = true) click to toggle source

@param name [String] @param org [String] @param cache [Boolean] @return [Kontena::Cli::Models::Platform, NilClass]

# File lib/kontena/plugin/cloud/platform/common.rb, line 84
def find_platform_by_name(name, org, cache = true)
  if cache && platform = cached_platforms.find{|p| p.name == name && p.organization == org }
    platform
  else
    data = cloud_client.get("/organizations/#{org}/platforms/#{name}")['data']
    if data
      platform = Kontena::Cli::Models::Platform.new(data)
      cached_platforms << platform
      platform
    end
  end
end
login_to_platform(name, url) click to toggle source
# File lib/kontena/plugin/cloud/platform/common.rb, line 97
def login_to_platform(name, url)
  organization, platform = name.split('/')
  platform = find_platform_by_name(platform, organization)
  authorization = cloud_client.post("/organizations/#{organization}/masters/#{platform.master_id}/authorize", {})
  exchanger = Kontena::Cli::MasterCodeExchanger.new(platform.url)
  code = exchanger.exchange_code(authorization['code'])

  login = Kontena::Cli::Master::LoginCommand.new('kontena')
  cmd = [
    '--silent', '--no-login-info', '--skip-grid-auto-select',
    '--name', name, '--code', code, url
  ]
  login.run(cmd)
rescue => e
  error e.message
end
parse_platform_name(name) click to toggle source

@param [String] name @return [Array<String>] organization, platform

# File lib/kontena/plugin/cloud/platform/common.rb, line 65
def parse_platform_name(name)
  unless name.include?('/')
    name = "#{current_organization}/#{name}"
  end
  org, platform = name.split('/')

  raise ArgumentError, "Organization missing" unless org

  [org, platform]
end
platform_config_exists?(name) click to toggle source
# File lib/kontena/plugin/cloud/platform/common.rb, line 76
def platform_config_exists?(name)
  !self.config.find_server_by(name: name).nil?
end
prompt_platform() click to toggle source
# File lib/kontena/plugin/cloud/platform/common.rb, line 31
def prompt_platform
  platforms = fetch_platforms_for_org(current_organization)
  prompt.select("Choose platform") do |menu|
    platforms.each do |p|
      menu.choice p.name, p
    end
  end
end
require_platform(name) click to toggle source

@param [String] name

# File lib/kontena/plugin/cloud/platform/common.rb, line 50
def require_platform(name)
  org, platform = parse_platform_name(name)
  @current_organization = org
  p = find_platform_by_name(platform, org)
  exit_with_error("Platform not found") unless p
  unless platform_config_exists?(p.to_path)
    login_to_platform("#{current_organization}/#{platform}", p.url)
  end
  self.current_master = "#{current_organization}/#{platform}"
  self.current_grid = p.grid_id
  p
end