Sha256: 0c9b6d69678e1a29e67ee1fe0761fe136225d007702d6c511be231bf80526ef0
Contents?: true
Size: 1.78 KB
Versions: 1
Compression:
Stored size: 1.78 KB
Contents
require 'yaml' require 'hako/env_expander' require 'hako/error' require 'hako/front_config' require 'hako/fronts' require 'hako/schedulers' module Hako class Commander PROVIDERS_KEY = '$providers' def initialize(yaml_path) @app_id = Pathname.new(yaml_path).basename.sub_ext('').to_s @yaml = YAML.load_file(yaml_path) end def deploy(force: false) env = @yaml['env'].dup providers = load_providers(env.delete(PROVIDERS_KEY) || []) env = EnvExpander.new(providers).expand(env) front = load_front(@yaml['front']) scheduler = load_scheduler(@yaml['scheduler']) app_port = @yaml.fetch('port', nil) image_tag = @yaml['image'] # TODO: Append revision scheduler.deploy(image_tag, env, app_port, front, force: force) end def status load_scheduler(@yaml['scheduler']).status end private def load_providers(provider_configs) provider_configs.map do |config| type = config['type'] unless type raise Error.new("type must be set in each #{PROVIDERS_KEY} element") end require "hako/env_providers/#{type}" Hako::EnvProviders.const_get(camelize(type)).new(config) end end def load_scheduler(scheduler_config) type = scheduler_config['type'] unless type raise Error.new('type must be set in scheduler') end require "hako/schedulers/#{type}" Hako::Schedulers.const_get(camelize(type)).new(@app_id, scheduler_config) end def load_front(yaml) front_config = FrontConfig.new(yaml) require "hako/fronts/#{front_config.type}" Hako::Fronts.const_get(camelize(front_config.type)).new(front_config) end def camelize(name) name.split('_').map(&:capitalize).join('') end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
hako-0.1.0 | lib/hako/commander.rb |