module Kontena::Cli::Apps::Common

Public Instance Methods

abort_on_validation_errors(errors) click to toggle source
# File lib/kontena/cli/apps/common.rb, line 133
def abort_on_validation_errors(errors)
  $stderr.puts "YAML validation failed! Aborting.".colorize(:red)
  display_notifications(errors, :red)
  abort
end
app_json() click to toggle source

@return [Hash]

# File lib/kontena/cli/apps/common.rb, line 101
def app_json
  if !@app_json && File.exist?('app.json')
    @app_json = JSON.parse(File.read('app.json'))
  end
  @app_json ||= {}
end
create_yml(services, file = 'kontena.yml') click to toggle source

@param [Hash] services @param [String] file

# File lib/kontena/cli/apps/common.rb, line 94
def create_yml(services, file = 'kontena.yml')
  yml = File.new(file, 'w')
  yml.puts services.to_yaml
  yml.close
end
current_dir() click to toggle source

@return [String]

# File lib/kontena/cli/apps/common.rb, line 82
def current_dir
  File.basename(Dir.getwd)
end
display_notifications(messages, color = :yellow) click to toggle source
# File lib/kontena/cli/apps/common.rb, line 108
def display_notifications(messages, color = :yellow)
  messages.each do |files|
    files.each do |file, services|
      $stderr.puts "#{file}:".colorize(color)
      services.each do |service|
        service.each do |name, errors|
          $stderr.puts "  #{name}:".colorize(color)
          if errors.is_a?(String)
            $stderr.puts "    - #{errors}".colorize(color)
          else
            errors.each do |key, error|
              $stderr.puts "    - #{key}: #{error.to_json}".colorize(color)
            end
          end
        end
      end
    end
  end
end
generate_services(yaml_services, version) click to toggle source

@param [Hash] yaml @param [String] version @return [Hash]

# File lib/kontena/cli/apps/common.rb, line 35
def generate_services(yaml_services, version)
  services = {}
  if version.to_i == 2
    generator_klass = ServiceGeneratorV2
  else
    generator_klass = ServiceGenerator
  end
  yaml_services.each do |service_name, config|
    exit_with_error("Image is missing for #{service_name}. Aborting.") unless config['image']
    services[service_name] = generator_klass.new(config).generate
  end
  services
end
hint_on_validation_notifications(errors) click to toggle source
# File lib/kontena/cli/apps/common.rb, line 128
def hint_on_validation_notifications(errors)
  $stderr.puts "YAML contains the following unsupported options and they were rejected:".colorize(:yellow)
  display_notifications(errors)
end
prefixed_name(name) click to toggle source

@param [String] name @return [String]

# File lib/kontena/cli/apps/common.rb, line 76
def prefixed_name(name)
  return name if service_prefix.strip == ""
  "#{service_prefix}-#{name}"
end
project_name_from_yaml(file) click to toggle source
# File lib/kontena/cli/apps/common.rb, line 64
def project_name_from_yaml(file)
  reader = YAML::Reader.new(file, true)
  reader.stack_name
end
read_yaml(filename) click to toggle source
# File lib/kontena/cli/apps/common.rb, line 49
def read_yaml(filename)
  reader = YAML::Reader.new(filename)
  outcome = reader.execute
  outcome
end
require_config_file(filename) click to toggle source
# File lib/kontena/cli/apps/common.rb, line 11
def require_config_file(filename)
  exit_with_error("File #{filename} does not exist") unless File.exists?(filename)
end
service_exists?(name) click to toggle source

@param [String] name @return [Boolean]

# File lib/kontena/cli/apps/common.rb, line 88
def service_exists?(name)
  get_service(token, prefixed_name(name)) rescue false
end
service_prefix() click to toggle source
# File lib/kontena/cli/apps/common.rb, line 60
def service_prefix
  @service_prefix ||= project_name || project_name_from_yaml(filename) || current_dir
end
services_from_yaml(filename, service_list, prefix, skip_validation = false) click to toggle source

@param [String] filename @param [Array<String>] service_list @param [String] prefix @param [TrueClass|FalseClass] skip_validation @return [Hash]

# File lib/kontena/cli/apps/common.rb, line 20
def services_from_yaml(filename, service_list, prefix, skip_validation = false)
  set_env_variables(prefix, current_grid)
  reader = YAML::Reader.new(filename, skip_validation)
  outcome = reader.execute
  hint_on_validation_notifications(outcome[:notifications]) if outcome[:notifications].size > 0
  abort_on_validation_errors(outcome[:errors]) if outcome[:errors].size > 0
  kontena_services = generate_services(outcome[:services], outcome[:version])
  kontena_services.delete_if { |name, service| !service_list.include?(name)} unless service_list.empty?
  kontena_services
end
set_env_variables(project, grid) click to toggle source
# File lib/kontena/cli/apps/common.rb, line 55
def set_env_variables(project, grid)
  ENV['project'] = project
  ENV['grid'] = grid
end
token() click to toggle source

@return [String]

# File lib/kontena/cli/apps/common.rb, line 70
def token
  @token ||= require_token
end
valid_addons(prefix=nil) click to toggle source
# File lib/kontena/cli/apps/common.rb, line 139
def valid_addons(prefix=nil)
  if prefix
    prefix = "#{prefix}-"
  end

  {
      'openredis' => {
          'image' => 'redis:latest',
          'environment' => ["REDIS_URL=redis://#{prefix}openredis:6379"]
      },
      'redis' => {
          'image' => 'redis:latest',
          'environment' => ["REDIS_URL=redis://#{prefix}redis:6379"]
      },
      'rediscloud' => {
          'image' => 'redis:latest',
          'environment' => ["REDISCLOUD_URL=redis://#{prefix}rediscloud:6379"]
      },
      'postgresql' => {
          'image' => 'postgres:latest',
          'environment' => ["DATABASE_URL=postgres://#{prefix}postgres:@postgresql:5432/postgres"]
      },
      'mongolab' => {
          'image' => 'mongo:latest',
          'environment' => ["MONGOLAB_URI=#{prefix}mongolab:27017"]
      },
      'memcachedcloud' => {
          'image' => 'memcached:latest',
          'environment' => ["MEMCACHEDCLOUD_SERVERS=#{prefix}memcachedcloud:11211"]
      }
  }
end