Skip to content

Commit 1bda6cd

Browse files
committed
Add a RequestTemplate for ConfigurationScript Provision
1 parent f51db9e commit 1bda6cd

File tree

3 files changed

+94
-16
lines changed

3 files changed

+94
-16
lines changed
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
class MiqProvisionConfigurationScriptRequestTemplate < MiqProvisionConfigurationScriptRequest
2+
def create_tasks_for_service(service_task, parent_svc)
3+
template_service_resource = ServiceResource.find_by(:id => service_task.options[:service_resource_id])
4+
scaling_min = 1
5+
6+
_log.info("create_tasks_for_service ID #{service_task.id} SCALING : #{scaling_min}")
7+
scaling_min.times.collect do |idx|
8+
create_request_task(idx) do |req_task|
9+
req_task.miq_request_id = service_task.miq_request.id
10+
req_task.userid = service_task.userid
11+
12+
task_options = req_task.options.merge(service_options(parent_svc, service_task, template_service_resource))
13+
task_options = task_options.merge(owner_options(service_task))
14+
req_task.options = task_options
15+
end
16+
end
17+
end
18+
19+
def request_task_class
20+
MiqProvisionConfigurationScriptTask
21+
end
22+
23+
def get_source_name
24+
SecureRandom.uuid # TODO
25+
end
26+
27+
def post_create(_auto_approve)
28+
update(:description => "Miq Provision ConfigurationScript Request Template for #{source.name}")
29+
self
30+
end
31+
32+
def service_template_resource_copy
33+
dup.tap(&:save!)
34+
end
35+
36+
def execute
37+
# Should not be called.
38+
raise _("Provision ConfigurationScript Request Templates do not support the execute method.")
39+
end
40+
41+
private
42+
43+
def service_options(parent_svc, service_task, template_service_resource)
44+
{
45+
:miq_force_unique_name => [true, 1],
46+
:service_guid => parent_svc.guid,
47+
:service_resource_id => template_service_resource.id,
48+
:service_template_request => false,
49+
:configuration_script_payload_id => service_task.options&.dig(:parent_configuration_script_payload_id)
50+
}
51+
end
52+
53+
# NOTE: for services, the requester is the owner
54+
def owner_options(service_task)
55+
user = User.lookup_by_userid(service_task.userid)
56+
return {} if user.nil?
57+
58+
{
59+
:requester_group => service_task.options[:requester_group],
60+
:owner_email => user.email,
61+
:owner_group => service_task.options[:requester_group],
62+
:owner_first_name => user.first_name,
63+
:owner_last_name => user.last_name
64+
}
65+
end
66+
67+
def get_root_svc(parent_svc)
68+
return nil unless parent_svc
69+
70+
parent_svc.parent || parent_svc
71+
end
72+
73+
def get_parent_task(service_task)
74+
MiqRequestTask.find_by(:id => service_task.options[:parent_task_id])
75+
end
76+
end

app/models/miq_request.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,8 @@ class MiqRequest < ApplicationRecord
124124
}.freeze
125125

126126
REQUEST_TYPES_BACKEND_ONLY = {
127-
:MiqProvisionRequestTemplate => {:template => "VM Provision Template"},
127+
:MiqProvisionRequestTemplate => {:template => "VM Provision Template"},
128+
:MiqProvisionConfigurationScriptRequestTemplate => {:configuration_script => "Configuration Script Template"}
128129
}
129130

130131
REQUEST_TYPES = MODEL_REQUEST_TYPES.values.each_with_object(REQUEST_TYPES_BACKEND_ONLY) { |i, h| i.each { |k, v| h[k] = v } }

spec/models/miq_request_spec.rb

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,22 @@
55
context "CONSTANTS" do
66
it "REQUEST_TYPES" do
77
expected_request_types = {
8-
:MiqProvisionRequest => {:template => "VM Provision", :clone_to_vm => "VM Clone", :clone_to_template => "VM Publish"},
9-
:MiqProvisionRequestTemplate => {:template => "VM Provision Template"},
10-
:MiqProvisionConfiguredSystemRequest => {:provision_via_foreman => "#{ui_lookup(:ui_title => 'foreman')} Provision"},
11-
:VmReconfigureRequest => {:vm_reconfigure => "VM Reconfigure"},
12-
:VmCloudReconfigureRequest => {:vm_cloud_reconfigure => "VM Cloud Reconfigure"},
13-
:VmMigrateRequest => {:vm_migrate => "VM Migrate"},
14-
:VmRetireRequest => {:vm_retire => "VM Retire"},
15-
:ServiceRetireRequest => {:service_retire => "Service Retire"},
16-
:OrchestrationStackRetireRequest => {:orchestration_stack_retire => "Orchestration Stack Retire"},
17-
:AutomationRequest => {:automation => "Automation"},
18-
:MiqProvisionConfigurationScriptRequest => {:provision_via_automation_manager => "Automation Manager Provision"},
19-
:ServiceTemplateProvisionRequest => {:clone_to_service => "Service Provision"},
20-
:ServiceReconfigureRequest => {:service_reconfigure => "Service Reconfigure"},
21-
:PhysicalServerProvisionRequest => {:provision_physical_server => "Physical Server Provision"},
22-
:PhysicalServerFirmwareUpdateRequest => {:physical_server_firmware_update => "Physical Server Firmware Update"},
8+
:MiqProvisionRequest => {:template => "VM Provision", :clone_to_vm => "VM Clone", :clone_to_template => "VM Publish"},
9+
:MiqProvisionRequestTemplate => {:template => "VM Provision Template"},
10+
:MiqProvisionConfiguredSystemRequest => {:provision_via_foreman => "#{ui_lookup(:ui_title => 'foreman')} Provision"},
11+
:VmReconfigureRequest => {:vm_reconfigure => "VM Reconfigure"},
12+
:VmCloudReconfigureRequest => {:vm_cloud_reconfigure => "VM Cloud Reconfigure"},
13+
:VmMigrateRequest => {:vm_migrate => "VM Migrate"},
14+
:VmRetireRequest => {:vm_retire => "VM Retire"},
15+
:ServiceRetireRequest => {:service_retire => "Service Retire"},
16+
:OrchestrationStackRetireRequest => {:orchestration_stack_retire => "Orchestration Stack Retire"},
17+
:AutomationRequest => {:automation => "Automation"},
18+
:MiqProvisionConfigurationScriptRequest => {:provision_via_automation_manager => "Automation Manager Provision"},
19+
:MiqProvisionConfigurationScriptRequestTemplate => {:configuration_script => "Configuration Script Template"},
20+
:ServiceTemplateProvisionRequest => {:clone_to_service => "Service Provision"},
21+
:ServiceReconfigureRequest => {:service_reconfigure => "Service Reconfigure"},
22+
:PhysicalServerProvisionRequest => {:provision_physical_server => "Physical Server Provision"},
23+
:PhysicalServerFirmwareUpdateRequest => {:physical_server_firmware_update => "Physical Server Firmware Update"},
2324
}
2425

2526
expect(described_class::REQUEST_TYPES).to eq(expected_request_types)

0 commit comments

Comments
 (0)