lib/simple_deploy/stack.rb in simple_deploy-0.4.5 vs lib/simple_deploy/stack.rb in simple_deploy-0.4.6

- old
+ new

@@ -1,9 +1,7 @@ require 'stackster' require 'simple_deploy/stack/deployment' -require 'simple_deploy/stack/stack_reader' -require 'simple_deploy/stack/stack_lister' require 'simple_deploy/stack/stack_attribute_formater' module SimpleDeploy class Stack @@ -13,66 +11,33 @@ @config = Config.new :logger => args[:logger] @logger = @config.logger end def create(args) - stack.create :attributes => stack_attribute_formater.updated_attributes(args[:attributes]), - :template => args[:template] + attributes = stack_attribute_formater.updated_attributes args[:attributes] + stack.create :attributes => attributes, + :template => args[:template] end def update(args) @logger.info "Updating #{@name}." - stack.update :attributes => stack_attribute_formater.updated_attributes(args[:attributes]) + attributes = stack_attribute_formater.updated_attributes args[:attributes] + stack.update :attributes => attributes @logger.info "Update complete for #{@name}." end - # To Do: Abstract deployment into it's own class - # Pass in required stack objects for attribut mgmt def deploy(force = false) - @logger.info "Deploying to #{@name}." - @logger.debug "Checking deployment status for #{@name}." - if deployment_in_progress? - @logger.info "Deployment in progress for #{@name}." - @logger.info "Started by #{attributes['deployment_user']}@#{attributes['deployment_datetime']}." - if force - @logger.info "Forcing. Clearing deployment status." - clear_deployment_status - else - @logger.error "Exiting due to existing deployment." - @logger.error "Use -f to override." - exit 1 - end - else - @logger.debug "No other deployments in progress for #{@name}." - end - set_deployment_in_progress - deployment.execute - clear_deployment_status - @logger.info "Deploy completed succesfully for #{@name}." + deployment.create_deployment + deployment.execute force end def ssh deployment.ssh end - def deployment_in_progress? - attributes['deployment_in_progress'] == 'true' - end - - def set_deployment_in_progress - @logger.debug "Setting deployment in progress by #{ssh_user} for #{@name}." - stack.update :attributes => [ { 'deployment_in_progress' => 'true', - 'deployment_user' => ssh_user, - 'deployment_datetime' => Time.now.to_s } ] - end - - def clear_deployment_status - @logger.debug "Clearing deployment status for #{@name}." - stack.update :attributes => [ { 'deployment_in_progress' => '' } ] - end - def destroy + deployment.create_deployment stack.destroy @logger.info "#{@name} destroyed." end def events(limit) @@ -86,14 +51,13 @@ def resources stack.resources end def instances - stack.instances.map do |i| - if i['instancesSet'].first['privateIpAddress'] - i['instancesSet'].first['privateIpAddress'] - end + stack.instances.map do |instance| + info = instance['instancesSet'].first + info['vpcId'] ? info['privateIpAddress'] : info['ipAddress'] end end def status stack.status @@ -112,13 +76,14 @@ end private def stack + stackster_config = @config.environment @environment @stack ||= Stackster::Stack.new :environment => @environment, :name => @name, - :config => @config.environment(@environment), + :config => stackster_config, :logger => @logger end def stack_attribute_formater @saf ||= StackAttributeFormater.new :config => @config, @@ -126,11 +91,12 @@ end def deployment @deployment ||= Stack::Deployment.new :config => @config, :environment => @environment, + :name => @name, + :stack => stack, :instances => instances, - :attributes => attributes, :ssh_user => ssh_user, :ssh_key => ssh_key end def ssh_key