class KumoDockerCloud::Stack
Attributes
app_name[R]
options[R]
stack_name[R]
Public Class Methods
new(app_name, env_name, options = {})
click to toggle source
# File lib/kumo_dockercloud/stack.rb, line 7 def initialize(app_name, env_name, options = {}) @app_name = app_name @stack_name = "#{app_name}-#{env_name}" @options = options end
Public Instance Methods
deploy(service_name, version, checker = ServiceChecker.new)
click to toggle source
# File lib/kumo_dockercloud/stack.rb, line 13 def deploy(service_name, version, checker = ServiceChecker.new) validate_params(service_name, 'Service name') validate_params(version, 'Version') service = Service.new(stack_name, service_name, docker_cloud_api) service.deploy(version) checker.verify(service) end
deploy_blue_green(service_names, version, checker = ServiceChecker.new)
click to toggle source
# File lib/kumo_dockercloud/stack.rb, line 26 def deploy_blue_green(service_names, version, checker = ServiceChecker.new) haproxy_service = HaproxyService.new(@stack_name, docker_cloud_api) services = service_names.map { |name| Service.new(stack_name, name, docker_cloud_api) } ordered_deployment(services).each do |service| begin ConsoleJockey.write_line("Attempting to put #{service.name} into maintenance mode in HAProxy") haproxy_service.disable_service(service) unless service.state == "Stopped" ConsoleJockey.write_line("Deploying version #{version} to #{service.name}") service.deploy(version) ConsoleJockey.write_line("Verifying that #{service.name} was successfully deployed") checker.verify(service) ConsoleJockey.write_line("Attempting to reenable #{service.name} in HAProxy") haproxy_service.enable_service(service) rescue HAProxyStateError => e raise ServiceDeployError.new("Unable to place service #{service.name} into maintainance mode on HAProxy with message: #{e.message}") rescue ServiceDeployError => e haproxy_service.disable_service(service) raise ServiceDeployError.new("Deployment or verification of service #{service.name} failed with message: #{e.message}") end end end
exists?()
click to toggle source
# File lib/kumo_dockercloud/stack.rb, line 22 def exists? !docker_cloud_stack.nil? end
services()
click to toggle source
# File lib/kumo_dockercloud/stack.rb, line 49 def services services = docker_cloud_api.services_by_stack_name(stack_name) services.map { |service| Service.new(stack_name, service.name) } end
Private Instance Methods
docker_cloud_api()
click to toggle source
# File lib/kumo_dockercloud/stack.rb, line 69 def docker_cloud_api dockercloud_api_options = {} if @options[:encrypted_dockercloud_user] && @options[:encrypted_dockercloud_apikey] dockercloud_api_options.merge! KumoDockerCloud::CredentialsDecrypter.new.decrypt(@options) end @docker_cloud_api ||= DockerCloudApi.new(dockercloud_api_options) end
docker_cloud_stack()
click to toggle source
# File lib/kumo_dockercloud/stack.rb, line 78 def docker_cloud_stack @docker_cloud_stack ||= docker_cloud_api.stack_by_name(@stack_name) end
kms()
click to toggle source
# File lib/kumo_dockercloud/stack.rb, line 65 def kms @kms ||= KumoKi::KMS.new end
ordered_deployment(services)
click to toggle source
# File lib/kumo_dockercloud/stack.rb, line 56 def ordered_deployment(services) services.sort { |service_a, service_b| service_b.state <=> service_a.state } end
validate_params(param_value, param_name)
click to toggle source
# File lib/kumo_dockercloud/stack.rb, line 60 def validate_params(param_value, param_name) raise KumoDockerCloud::Error.new("#{param_name} cannot be nil") unless param_value raise KumoDockerCloud::Error.new("#{param_name} cannot be empty") if param_value.empty? end