Skip to content

Commit e0e4a60

Browse files
committed
Add a RequestTemplate for ConfigurationScript Provision
1 parent 5c00764 commit e0e4a60

File tree

5 files changed

+100
-20
lines changed

5 files changed

+100
-20
lines changed

app/models/miq_provision_configuration_script_request.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@ class MiqProvisionConfigurationScriptRequest < MiqRequest
44
TASK_DESCRIPTION = N_('Automation Manager Provisioning')
55
SOURCE_CLASS_NAME = 'ConfigurationScript'
66

7-
default_value_for(:source_id) { |r| r.get_option(:source_id) }
8-
default_value_for :source_type, "ConfigurationScript"
7+
default_value_for(:source_id) { |r| r.get_option(:source_id) }
8+
default_value_for :source_type, "ConfigurationScript"
99
validates :source, :presence => true
1010
validate :must_have_user
1111

1212
def self.request_task_class_from(attribs)
13-
configuration_script = ::ConfigurationScript.find_by(:id => attribs["source_id"])
13+
source_id = MiqRequestMixin.get_option(:source_id, nil, attribs['options'])
14+
configuration_script = ::ConfigurationScript.find_by(:id => source_id)
1415
return if configuration_script.nil?
1516

1617
configuration_script.manager.class.provision_class(nil)
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 => {:provision_via_automation_manager => "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 } }

app/models/service_template.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ class ServiceTemplate < ApplicationRecord
2020
:fqname,
2121
:configuration_template,
2222
:configuration_template_id,
23-
:configuration_template_type].freeze
23+
:configuration_template_type,
24+
:configuration_script_id].freeze
2425

2526
include CustomActionsMixin
2627
include ServiceMixin

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 => {:provision_via_automation_manager => "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)