Skip to content

Commit

Permalink
Create subtasks for bundled bundles
Browse files Browse the repository at this point in the history
  • Loading branch information
d-m-u committed Jan 3, 2019
1 parent c00ddee commit 54cdfa5
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 64 deletions.
4 changes: 0 additions & 4 deletions app/models/service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -218,10 +218,6 @@ def composite?
children.present?
end

def retireable?
type.present?
end

def atomic?
children.empty?
end
Expand Down
5 changes: 3 additions & 2 deletions app/models/service_retire_task.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ def task_active

def after_request_task_create
update_attributes(:description => get_description)
parent_svc = Service.find_by(:id => options[:src_ids])
_log.info("- creating service tasks for service <#{self.class.name}:#{id}>")
parent_svc = Service.find_by(:id => options[:src_id] || options[:src_ids])
_log.info("- creating service tasks for service task <#{self.class.name}:#{id}>, service <#{parent_svc.id}>")
create_retire_subtasks(parent_svc, self)
end

Expand All @@ -43,6 +43,7 @@ def create_retire_subtasks(parent_service, parent_task)
nh['options'][:dialog] = {}
new_task = create_task(svc_rsc, parent_service, nh, parent_task)
create_retire_subtasks(svc_rsc.resource, new_task) if svc_rsc.resource.kind_of?(Service)
new_task.after_request_task_create
miq_request.miq_request_tasks << new_task
new_task.tap(&:deliver_to_automate)
end.compact!
Expand Down
19 changes: 3 additions & 16 deletions spec/models/mixins/ci_feature_mixin_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,23 +19,10 @@
expect(service.service_resources.first.resource.retireable?).to eq(false)
end

context "service" do
context "with type" do
let(:service1) { FactoryBot.create(:service_ansible_tower, :type => ServiceAnsibleTower) }
it "is retireable" do
FactoryBot.create(:service_resource, :service => service, :resource => service1)
it "service is retireable" do
FactoryBot.create(:service_resource, :service => service, :resource => FactoryBot.create(:service_ansible_tower, :type => ServiceAnsibleTower))

expect(service.service_resources.first.resource.retireable?).to eq(true)
end
end

context "without type" do
it "is not retireable" do
FactoryBot.create(:service_resource, :service => service, :resource => FactoryBot.create(:service))

expect(service.service_resources.first.resource.retireable?).to eq(false)
end
end
expect(service.service_resources.first.resource.retireable?).to eq(true)
end
end
end
52 changes: 10 additions & 42 deletions spec/models/service_retire_task_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,6 @@
let(:approver) { FactoryBot.create(:user_miq_request_approver) }
let(:zone) { FactoryBot.create(:zone, :name => "fred") }

shared_context "service_bundle" do
let(:zone) { FactoryBot.create(:small_environment) }
let(:service_c1) { FactoryBot.create(:service, :service => service) }

before do
allow(MiqServer).to receive(:my_server).and_return(zone.miq_servers.first)
@miq_request = FactoryBot.create(:service_retire_request, :requester => user)
@miq_request.approve(approver, reason)
end
end

it "should initialize properly" do
expect(service_retire_task).to have_attributes(:state => 'pending', :status => 'Ok')
end
Expand Down Expand Up @@ -69,48 +58,27 @@
end

context "bundled service retires all children" do
include_context "service_bundle"
let(:vm1) { FactoryBot.create(:vm_vmware) }
let(:service_c2) { FactoryBot.create(:service, :service => service_c1) }
let(:service_c1) { FactoryBot.create(:service) }

before do
service_c1 << vm
service_c2 << vm1
service.save
service_c1.save
service_c2.save
service.add_resource!(service_c1)
service.add_resource!(FactoryBot.create(:service_template))
@miq_request = FactoryBot.create(:service_retire_request, :requester => user)
@miq_request.approve(approver, reason)
@service_retire_task = FactoryBot.create(:service_retire_task, :source => service, :miq_request => @miq_request, :options => {:src_ids => [service.id] })
end

it "creates subtask" do
@service_retire_task = FactoryBot.create(:service_retire_task, :source => service, :miq_request_task_id => nil, :miq_request_id => @miq_request.id, :options => {:src_ids => [service.id] })
service.service_resources << FactoryBot.create(:service_resource, :resource_type => "VmOrTemplate", :service_id => service_c1.id, :resource_id => vm.id)
service.service_resources << FactoryBot.create(:service_resource, :resource_type => "VmOrTemplate", :service_id => service_c1.id, :resource_id => vm1.id)
service.service_resources << FactoryBot.create(:service_resource, :resource_type => "Service", :service_id => service_c1.id, :resource_id => service_c1.id)
service.service_resources << FactoryBot.create(:service_resource, :resource_type => "ServiceTemplate", :service_id => service_c1.id, :resource_id => service_c1.id)

it "creates subtask for services but not templates" do
@service_retire_task.after_request_task_create
expect(VmRetireTask.count).to eq(2)
expect(VmRetireTask.all.pluck(:message)).to eq(["Automation Starting", "Automation Starting"])
expect(ServiceRetireTask.count).to eq(1)

expect(ServiceRetireTask.count).to eq(2)
expect(ServiceRetireRequest.count).to eq(1)
end

it "doesn't creates subtask for ServiceTemplates" do
@service_retire_task = FactoryBot.create(:service_retire_task, :source => service, :miq_request_task_id => nil, :miq_request_id => @miq_request.id, :options => {:src_ids => [service.id] })
service.service_resources << FactoryBot.create(:service_resource, :resource_type => "ServiceTemplate", :service_id => service_c1.id, :resource_id => service_c1.id)

@service_retire_task.after_request_task_create
expect(ServiceRetireTask.count).to eq(1)
expect(ServiceRetireRequest.count).to eq(1)
end

it "doesn't creates subtask for service resources whose resources are nil" do
@service_retire_task = FactoryBot.create(:service_retire_task, :source => service, :miq_request_task_id => nil, :miq_request_id => @miq_request.id, :options => {:src_ids => [service.id] })
service.service_resources << FactoryBot.create(:service_resource, :resource_type => "ServiceTemplate", :service_id => service_c1.id, :resource => nil)

@service_retire_task.after_request_task_create
expect(ServiceRetireTask.count).to eq(1)
expect(ServiceRetireRequest.count).to eq(1)
expect(ServiceRetireTask.count).to eq(2)
end
end
end
Expand Down

0 comments on commit 54cdfa5

Please sign in to comment.