[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