-
Notifications
You must be signed in to change notification settings - Fork 121
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Revert "Merge pull request #569 from fdupont-redhat/v2v_state_machine…
…_transform_vm" This reverts commit 35cf513. https://bugzilla.redhat.com/show_bug.cgi?id=1767542
- Loading branch information
Showing
7 changed files
with
267 additions
and
0 deletions.
There are no files selected for viewing
59 changes: 59 additions & 0 deletions
59
content/automate/ManageIQ/Transformation/Common.class/__methods__/vmchecktransformed.rb
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,59 @@ | ||
module ManageIQ | ||
module Automate | ||
module Transformation | ||
module Common | ||
class VMCheckTransformed | ||
def initialize(handle = $evm) | ||
@handle = handle | ||
@task = ManageIQ::Automate::Transformation::Common::Utils.task(@handle) | ||
end | ||
|
||
def set_retry | ||
@handle.root['ae_result'] = 'retry' | ||
@handle.root['ae_retry_server_affinity'] = true | ||
@handle.log(:info, "Disk transformation is not finished. Checking in #{@handle.root['ae_retry_interval']}") | ||
end | ||
|
||
def update_total_percentage | ||
virtv2v_disks = @task[:options][:virtv2v_disks] | ||
converted_disks = virtv2v_disks.reject { |d| d[:percent].zero? } | ||
message, percent = nil, nil | ||
if converted_disks.empty? | ||
percent = 1 | ||
message = 'Disks transformation is initializing.' | ||
else | ||
percent = 0 | ||
converted_disks.each { |disk| percent += (disk[:percent].to_f * disk[:weight].to_f / 100.0) } | ||
message = "Converting disk #{converted_disks.length} / #{virtv2v_disks.length} [#{percent.round(2)}%]." | ||
end | ||
[message, percent] | ||
end | ||
|
||
def main | ||
@task.get_conversion_state | ||
case @task.get_option(:virtv2v_status) | ||
when 'active' | ||
message, percent = update_total_percentage | ||
@handle.set_state_var(:ae_state_progress, 'message' => message, 'percent' => percent.round(2)) | ||
set_retry | ||
when 'failed' | ||
message = @task.get_option(:virtv2v_message) | ||
raise message | ||
when 'succeeded' | ||
@handle.set_state_var(:ae_state_progress, 'message' => 'Disks transformation succeeded.', 'percent' => 100) | ||
end | ||
rescue => e | ||
if @handle.root['ae_state_retries'] > 1 | ||
@handle.set_state_var(:ae_state_progress, 'message' => e.message) | ||
raise | ||
else | ||
set_retry | ||
end | ||
end | ||
end | ||
end | ||
end | ||
end | ||
end | ||
|
||
ManageIQ::Automate::Transformation::Common::VMCheckTransformed.new.main |
15 changes: 15 additions & 0 deletions
15
content/automate/ManageIQ/Transformation/Common.class/__methods__/vmchecktransformed.yaml
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,15 @@ | ||
--- | ||
object_type: method | ||
version: 1.0 | ||
object: | ||
attributes: | ||
name: VMCheckTransformed | ||
display_name: | ||
description: | ||
scope: instance | ||
language: ruby | ||
location: inline | ||
embedded_methods: | ||
- "/Transformation/Common/Utils" | ||
options: {} | ||
inputs: [] |
27 changes: 27 additions & 0 deletions
27
content/automate/ManageIQ/Transformation/Common.class/__methods__/vmtransform.rb
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,27 @@ | ||
module ManageIQ | ||
module Automate | ||
module Transformation | ||
module Common | ||
class VMTransform | ||
def initialize(handle = $evm) | ||
@debug = false | ||
@handle = handle | ||
@task = ManageIQ::Automate::Transformation::Common::Utils.task(@handle) | ||
end | ||
|
||
def main | ||
# WARNING: Enable at your own risk, as it may lead to sensitive data leak | ||
# @handle.log(:info, "JSON Input:\n#{JSON.pretty_generate(@task.conversion_options)}") if @debug | ||
|
||
@task.run_conversion | ||
rescue => e | ||
@handle.set_state_var(:ae_state_progress, 'message' => e.message) | ||
raise | ||
end | ||
end | ||
end | ||
end | ||
end | ||
end | ||
|
||
ManageIQ::Automate::Transformation::Common::VMTransform.new.main |
15 changes: 15 additions & 0 deletions
15
content/automate/ManageIQ/Transformation/Common.class/__methods__/vmtransform.yaml
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,15 @@ | ||
--- | ||
object_type: method | ||
version: 1.0 | ||
object: | ||
attributes: | ||
name: VMTransform | ||
display_name: | ||
description: | ||
scope: instance | ||
language: ruby | ||
location: inline | ||
embedded_methods: | ||
- "/Transformation/Common/Utils" | ||
options: {} | ||
inputs: [] |
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
89 changes: 89 additions & 0 deletions
89
...tent/automate/ManageIQ/Transformation/Common.class/__methods__/vmchecktransformed_spec.rb
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,89 @@ | ||
require_domain_file | ||
require File.join(ManageIQ::Content::Engine.root, 'content/automate/ManageIQ/Transformation/Common.class/__methods__/utils.rb') | ||
|
||
describe ManageIQ::Automate::Transformation::Common::VMCheckTransformed do | ||
let(:user) { FactoryBot.create(:user_with_email_and_group) } | ||
let(:group) { FactoryBot.create(:miq_group) } | ||
let(:task) { FactoryBot.create(:service_template_transformation_plan_task) } | ||
|
||
let(:svc_model_user) { MiqAeMethodService::MiqAeServiceUser.find(user.id) } | ||
let(:svc_model_group) { MiqAeMethodService::MiqAeServiceMiqGroup.find(group.id) } | ||
let(:svc_model_task) { MiqAeMethodService::MiqAeServiceServiceTemplateTransformationPlanTask.find(task.id) } | ||
|
||
let(:root) do | ||
Spec::Support::MiqAeMockObject.new( | ||
'current' => current_object, | ||
'user' => svc_model_user, | ||
'state_machine_phase' => 'transformation' | ||
) | ||
end | ||
|
||
let(:current_object) { Spec::Support::MiqAeMockObject.new } | ||
let(:ae_service) do | ||
Spec::Support::MiqAeMockService.new(root).tap do |service| | ||
current_object = Spec::Support::MiqAeMockObject.new | ||
current_object.parent = root | ||
service.object = current_object | ||
end | ||
end | ||
|
||
before do | ||
allow(ManageIQ::Automate::Transformation::Common::Utils).to receive(:task).and_return(svc_model_task) | ||
allow(svc_model_task).to receive(:get_conversion_state) | ||
end | ||
|
||
describe "#main" do | ||
context "virtv2v has not started conversion" do | ||
let(:virtv2v_disks) do | ||
[ | ||
{ :path => '[datastore] test_vm/test_vm.vmdk', :size => 1_234_567, :percent => 0, :weight => 25 }, | ||
{ :path => '[datastore] test_vm/test_vm-2.vmdk', :size => 3_703_701, :percent => 0, :weight => 75 } | ||
] | ||
end | ||
|
||
it "returns a message stating conversion has not started" do | ||
svc_model_task[:options][:virtv2v_disks] = virtv2v_disks | ||
allow(svc_model_task).to receive(:get_option).with(:virtv2v_status).and_return('active') | ||
described_class.new(ae_service).main | ||
expect(ae_service.get_state_var(:ae_state_progress)).to eq('message' => 'Disks transformation is initializing.', 'percent' => 1.0) | ||
expect(ae_service.root['ae_result']).to eq('retry') | ||
end | ||
end | ||
|
||
context "conversion is still running" do | ||
let(:virtv2v_disks) do | ||
[ | ||
{ :path => '[datastore] test_vm/test_vm.vmdk', :size => 1_234_567, :percent => 100, :weight => 25 }, | ||
{ :path => '[datastore] test_vm/test_vm-2.vmdk', :size => 3_703_701, :percent => 25, :weight => 75 } | ||
] | ||
end | ||
|
||
it "returns a message stating conversion has not started" do | ||
svc_model_task[:options][:virtv2v_disks] = virtv2v_disks | ||
allow(svc_model_task).to receive(:get_option).with(:virtv2v_status).and_return('active') | ||
described_class.new(ae_service).main | ||
expect(ae_service.get_state_var(:ae_state_progress)).to eq('message' => 'Converting disk 2 / 2 [43.75%].', 'percent' => 43.75) | ||
expect(ae_service.root['ae_result']).to eq('retry') | ||
end | ||
end | ||
|
||
context "conversion has failed" do | ||
it "raises with a message stating conversion has failed" do | ||
errormsg = 'virtv2v failed somehow' | ||
ae_service.root['ae_state_retries'] = 2 | ||
allow(svc_model_task).to receive(:get_option).with(:virtv2v_status).and_return('failed') | ||
allow(svc_model_task).to receive(:get_option).with(:virtv2v_message).and_return(errormsg) | ||
expect { described_class.new(ae_service).main }.to raise_error(errormsg) | ||
expect(ae_service.get_state_var(:ae_state_progress)).to eq('message' => errormsg) | ||
end | ||
end | ||
|
||
context "conversion has successfuly finished" do | ||
it "returns a message stating conversion succeeded" do | ||
allow(svc_model_task).to receive(:get_option).with(:virtv2v_status).and_return('succeeded') | ||
described_class.new(ae_service).main | ||
expect(ae_service.get_state_var(:ae_state_progress)).to eq('message' => 'Disks transformation succeeded.', 'percent' => 100) | ||
end | ||
end | ||
end | ||
end |
45 changes: 45 additions & 0 deletions
45
spec/content/automate/ManageIQ/Transformation/Common.class/__methods__/vmtransform_spec.rb
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,45 @@ | ||
require_domain_file | ||
require File.join(ManageIQ::Content::Engine.root, 'content/automate/ManageIQ/Transformation/Common.class/__methods__/utils.rb') | ||
|
||
describe ManageIQ::Automate::Transformation::Common::VMTransform do | ||
let(:user) { FactoryBot.create(:user_with_email_and_group) } | ||
let(:group) { FactoryBot.create(:miq_group) } | ||
let(:task) { FactoryBot.create(:service_template_transformation_plan_task) } | ||
|
||
let(:svc_model_user) { MiqAeMethodService::MiqAeServiceUser.find(user.id) } | ||
let(:svc_model_group) { MiqAeMethodService::MiqAeServiceMiqGroup.find(group.id) } | ||
let(:svc_model_task) { MiqAeMethodService::MiqAeServiceServiceTemplateTransformationPlanTask.find(task.id) } | ||
|
||
let(:root) do | ||
Spec::Support::MiqAeMockObject.new( | ||
'current' => current_object, | ||
'user' => svc_model_user, | ||
'state_machine_phase' => 'transformation' | ||
) | ||
end | ||
|
||
let(:current_object) { Spec::Support::MiqAeMockObject.new } | ||
let(:ae_service) do | ||
Spec::Support::MiqAeMockService.new(root).tap do |service| | ||
current_object = Spec::Support::MiqAeMockObject.new | ||
current_object.parent = root | ||
service.object = current_object | ||
end | ||
end | ||
|
||
before do | ||
allow(ManageIQ::Automate::Transformation::Common::Utils).to receive(:task).and_return(svc_model_task) | ||
end | ||
|
||
it "returns 'active' if run_conversion succeeds " do | ||
allow(svc_model_task).to receive(:run_conversion).and_return('active') | ||
expect(described_class.new(ae_service).main).to eq('active') | ||
end | ||
|
||
it "raises if run_conversion fails" do | ||
errormsg = 'Unexpected error' | ||
allow(svc_model_task).to receive(:run_conversion).and_raise(errormsg) | ||
expect { described_class.new(ae_service).main }.to raise_error(errormsg) | ||
expect(ae_service.get_state_var(:ae_state_progress)).to eq('message' => errormsg) | ||
end | ||
end |