-
Notifications
You must be signed in to change notification settings - Fork 897
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add skeleton task and request for vm migrate
- Loading branch information
Showing
7 changed files
with
139 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
class VmRetireRequest < MiqRequest | ||
TASK_DESCRIPTION = 'VM Retire'.freeze | ||
SOURCE_CLASS_NAME = 'Vm'.freeze | ||
ACTIVE_STATES = %w(retired) + base_class::ACTIVE_STATES | ||
|
||
validates :request_state, :inclusion => { :in => %w(pending finished) + ACTIVE_STATES, :message => "should be pending, #{ACTIVE_STATES.join(", ")} or finished" } | ||
validate :must_have_user | ||
|
||
def my_zone | ||
vm = Vm.find_by(:id => options[:src_ids]) | ||
vm.nil? ? super : vm.my_zone | ||
end | ||
|
||
def my_role | ||
'ems_operations' | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
class VmRetireTask < MiqRequestTask | ||
alias_attribute :vm, :source | ||
|
||
validate :validate_request_type, :validate_state | ||
|
||
AUTOMATE_DRIVES = true | ||
|
||
def self.base_model | ||
VmRetireTask | ||
end | ||
|
||
def self.get_description(req_obj) | ||
name = nil | ||
if req_obj.source.nil? | ||
# Single source has not been selected yet | ||
if req_obj.options[:src_ids].length == 1 | ||
v = Vm.find_by(:id => req_obj.options[:src_ids].first) | ||
name = v.nil? ? "" : v.name | ||
else | ||
name = "Multiple VMs" | ||
end | ||
else | ||
name = req_obj.source.name | ||
end | ||
|
||
new_settings = [] | ||
"#{request_class::TASK_DESCRIPTION} for: #{name} - #{new_settings.join(", ")}" | ||
end | ||
|
||
def after_request_task_create | ||
update_attribute(:description, get_description) | ||
end | ||
|
||
def after_ae_delivery(ae_result) | ||
_log.info("ae_result=#{ae_result.inspect}") | ||
reload | ||
|
||
return if ae_result == 'retry' | ||
return if miq_request.state == 'finished' | ||
|
||
if ae_result == 'ok' | ||
update_and_notify_parent(:state => "finished", :status => "Ok", :message => display_message("#{request_class::TASK_DESCRIPTION} completed")) | ||
else | ||
mark_pending_items_as_finished | ||
update_and_notify_parent(:state => "finished", :status => "Error", :message => display_message("#{request_class::TASK_DESCRIPTION} failed")) | ||
end | ||
end | ||
|
||
def deliver_to_automate(req_type = request_type, zone = nil) | ||
task_check_on_delivery | ||
|
||
_log.info("Queuing #{request_class::TASK_DESCRIPTION}: [#{description}]...") | ||
|
||
if self.class::AUTOMATE_DRIVES | ||
args = { | ||
:object_type => self.class.name, | ||
:object_id => id, | ||
:attrs => {"request" => req_type}, | ||
:instance_name => "AUTOMATION", | ||
:user_id => get_user.id, | ||
:miq_group_id => get_user.current_group.id, | ||
:tenant_id => get_user.current_tenant.id, | ||
} | ||
|
||
args[:attrs].merge!(MiqAeEngine.create_automation_attributes(source.class.base_model.name => source)) | ||
|
||
zone ||= source.respond_to?(:my_zone) ? source.my_zone : MiqServer.my_zone | ||
MiqQueue.put( | ||
:class_name => 'MiqAeEngine', | ||
:method_name => 'deliver', | ||
:args => [args], | ||
:role => 'automate', | ||
:zone => options.fetch(:miq_zone, zone), | ||
:tracking_label => my_task_id, | ||
) | ||
update_and_notify_parent(:state => "pending", :status => "Ok", :message => "Automation Starting") | ||
else | ||
execute_queue | ||
end | ||
end | ||
|
||
def before_ae_starts(_options) | ||
reload | ||
if state.to_s.downcase.in?(%w(pending queued)) | ||
_log.info("Executing #{request_class::TASK_DESCRIPTION} request: [#{description}]") | ||
update_and_notify_parent(:state => "active", :status => "Ok", :message => "In Process") | ||
end | ||
end | ||
|
||
def update_and_notify_parent(*args) | ||
prev_state = state | ||
super | ||
task_finished if state == "finished" && prev_state != "finished" | ||
end | ||
|
||
def task_finished | ||
end | ||
|
||
def mark_pending_items_as_finished | ||
miq_request.miq_request_tasks.each do |s| | ||
if s.state == 'pending' | ||
s.update_and_notify_parent(:state => "finished", :status => "Warn", :message => "Error in Request: #{miq_request.id}. Setting pending Task: #{id} to finished.") unless id == s.id | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
FactoryGirl.define do | ||
factory :vm_retire_request | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
FactoryGirl.define do | ||
factory :vm_retire_task | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters