[PATCH conductor] RM#3877 Implement deployment destroy and multidestroy actions in background

Jozef Zigmund jzigmund at redhat.com
Thu Oct 25 16:39:56 UTC 2012


On Tue, 2012-10-23 at 18:31 +0200, Tomáš Hrčka wrote:
> ---
>  src/app/controllers/deployments_controller.rb |   28 ++++++++++++++----------
>  src/app/jobs/deployment_destroy.rb            |   15 +++++++++++++
>  src/app/models/deployment.rb                  |    5 ----
>  src/config/locales/en.yml                     |    1 +
>  4 files changed, 32 insertions(+), 17 deletions(-)
>  create mode 100644 src/app/jobs/deployment_destroy.rb
> 
> diff --git a/src/app/controllers/deployments_controller.rb b/src/app/controllers/deployments_controller.rb
> index 3327bb5..3abfd86 100644
> --- a/src/app/controllers/deployments_controller.rb
> +++ b/src/app/controllers/deployments_controller.rb
> @@ -278,13 +278,16 @@ class DeploymentsController < ApplicationController
>      errors = []
>      begin
>        require_privilege(Privilege::MODIFY, deployment)
> -      deployment.stop_instances_and_destroy!
> -    rescue Aeolus::Conductor::Base::NotStoppableDeployment
> -      cant_stop = true
> -      errors = deployment.not_stoppable_or_destroyable_instances.map {|i|
> -                 t('deployments.errors.instance_state',
> -                   :name => i.name,
> -                   :state => i.state)}
> +      if deployment.not_stoppable_or_destroyable_instances.empty?
> +        Delayed::Job.enqueue DeploymentDestroy.new(deployment)
> +      else
> +        cant_stop = true
> +        errors = deployment.not_stoppable_or_destroyable_instances.map {|i|
> +          t('deployments.errors.instance_state',
> +            :name => i.name,
> +            :state => i.state)}
> +
> +      end
>      rescue
>        errors = t('deployments.flash.error.not_deleted',
>                   :name => deployment.name,
> @@ -322,15 +325,16 @@ class DeploymentsController < ApplicationController
>  
>      ids = Array(params[:deployments_selected])
>      Deployment.find(ids).each do |deployment|
> -      begin
> -        require_privilege(Privilege::MODIFY, deployment)
> -        deployment.stop_instances_and_destroy!
> +      require_privilege(Privilege::MODIFY, deployment)
> +      if deployment.not_stoppable_or_destroyable_instances.empty?
> +        Delayed::Job.enqueue DeploymentDestroy.new(deployment)
>          destroyed << deployment.name
> -      rescue
> +      else
>          errors << t('deployments.flash.error.not_deleted',
>                      :name => deployment.name,
> -                    :error => $!.message)
> +                    :error => t("deployments.errors.all_stopped"))
>        end
> +
>      end
>      respond_to do |format|
>        format.html do
> diff --git a/src/app/jobs/deployment_destroy.rb b/src/app/jobs/deployment_destroy.rb
> new file mode 100644
> index 0000000..931844e
> --- /dev/null
> +++ b/src/app/jobs/deployment_destroy.rb
> @@ -0,0 +1,15 @@
> +class DeploymentDestroy < Struct.new(:deployment)
> +
> +  def perform
> +    deployment.stop_instances_and_destroy!
> +  end
> +
> +
> +  def error(job,exception)
> +    deployment.events << Event.create(
> +                          :source => deployment,
> +                          :event_time => DateTime.now,
> +                          :status_code => 'destroy_failed',
> +                          :summary => I18n.t("deployments.events.destroy_failed", :deployment => deployment.name, :exception => exception.message))
> +  end
> +end
> \ No newline at end of file
> diff --git a/src/app/models/deployment.rb b/src/app/models/deployment.rb
> index a6426ab..19241c6 100644
> --- a/src/app/models/deployment.rb
> +++ b/src/app/models/deployment.rb
> @@ -176,11 +176,6 @@ class Deployment < ActiveRecord::Base
>    end
>  
>    def stop_instances_and_destroy!
> -    unless not_stoppable_or_destroyable_instances.empty?
> -      raise Aeolus::Conductor::Base::NotStoppableDeployment,
> -            I18n.t("deployments.errors.all_stopped")
> -    end
> -
>      if destroyable?
>        destroy
>      else
> diff --git a/src/config/locales/en.yml b/src/config/locales/en.yml
> index 79698b1..2201c4d 100644
> --- a/src/config/locales/en.yml
> +++ b/src/config/locales/en.yml
> @@ -421,6 +421,7 @@ en:
>      events:
>        launch_attempt: "Attempting to launch this deployment on provider account %{account}"
>        state_changed: "State changed to %{state}"
> +      destroy_failed: "Destroy of %{deployment} failed with exception: %{exception}"
>      preset_filters:
>        all_deployments: All Deployments
>        other_than_stopped: "Non-stopped Deployments"

ACK, it works fine.





More information about the aeolus-devel mailing list