Skip to content

Commit 1b9ec7b

Browse files
committed
Add MiqProvision* classes for ConfigurationScripts
1 parent a575c05 commit 1b9ec7b

8 files changed

+296
-14
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class ManageIQ::Providers::AutomationManager::ProvisionWorkflow < MiqProvisionConfigurationScriptWorkflow
2+
def dialog_name_from_automate(message = 'get_dialog_name', extra_attrs = {})
3+
extra_attrs['platform_category'] ||= 'automation_manager'
4+
super(message, %i[request_type], extra_attrs)
5+
end
6+
end
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
class MiqProvisionConfigurationScriptRequest < MiqRequest
2+
delegate :my_zone, :to => :source
3+
4+
TASK_DESCRIPTION = N_('Automation Manager Provisioning')
5+
SOURCE_CLASS_NAME = 'ConfigurationScript'
6+
7+
default_value_for(:source_id) { |r| r.get_option(:source_id) }
8+
default_value_for :source_type, "ConfigurationScript"
9+
validates :source, :presence => true
10+
validate :must_have_user
11+
12+
def self.default_dialog_file
13+
'miq_provision_configuration_script_dialogs'
14+
end
15+
16+
def self.request_task_class_from(attribs)
17+
source_id = MiqRequestMixin.get_option(:source_id, nil, attribs['options'])
18+
configuration_script = ::ConfigurationScript.find_by(:id => source_id)
19+
return if configuration_script.nil?
20+
21+
configuration_script.manager.class.provision_class(nil)
22+
end
23+
24+
def self.new_request_task(attribs)
25+
request_task_class_from(attribs).new(attribs)
26+
end
27+
28+
def requested_task_idx
29+
[-1] # we are only using one task per request
30+
end
31+
32+
def originating_controller
33+
"configuration_scripts"
34+
end
35+
36+
def event_name(mode)
37+
"configuration_script_provision_request_#{mode}"
38+
end
39+
end
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
class MiqProvisionConfigurationScriptTask < MiqRequestTask
2+
def self.get_description(*)
3+
end
4+
end
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class MiqProvisionConfigurationScriptWorkflow < MiqProvisionWorkflow
2+
def self.base_model
3+
MiqProvisionConfigurationScriptWorkflow
4+
end
5+
6+
def self.automate_dialog_request
7+
'UI_CONFIGURATION_SCRIPT_PROVISION_INFO'
8+
end
9+
10+
def self.request_class
11+
MiqProvisionConfigurationScriptRequest
12+
end
13+
end

app/models/miq_request.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ class MiqRequest < ApplicationRecord
8282
:MiqProvisionConfiguredSystemRequest => {
8383
:provision_via_foreman => N_("%{config_mgr_type} Provision") % {:config_mgr_type => ui_lookup(:ui_title => 'foreman')}
8484
},
85+
:MiqProvisionConfigurationScriptRequest => {
86+
:provision_via_automation_manager => N_("Automation Manager Provision")
87+
},
8588
:MiqProvisionRequest => {
8689
:template => N_("VM Provision"),
8790
:clone_to_vm => N_("VM Clone"),
Lines changed: 193 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,193 @@
1+
---
2+
:name: miq_provision_configuration_script_dialogs
3+
:description: Sample Configuration Script Provisioning Dialog
4+
:dialog_type: MiqProvisionConfigurationScriptWorkflow
5+
:content:
6+
:buttons:
7+
- :submit
8+
- :cancel
9+
:dialogs:
10+
:requester:
11+
:description: Request
12+
:fields:
13+
:owner_phone:
14+
:description: Phone
15+
:required: false
16+
:display: :hide
17+
:data_type: :string
18+
:owner_country:
19+
:description: Country/Region
20+
:required: false
21+
:display: :hide
22+
:data_type: :string
23+
:owner_phone_mobile:
24+
:description: Mobile
25+
:required: false
26+
:display: :hide
27+
:data_type: :string
28+
:owner_title:
29+
:description: Title
30+
:required: false
31+
:display: :hide
32+
:data_type: :string
33+
:owner_first_name:
34+
:description: First Name
35+
:required: false
36+
:display: :edit
37+
:data_type: :string
38+
:owner_manager:
39+
:description: Name
40+
:required: false
41+
:display: :edit
42+
:data_type: :string
43+
:owner_address:
44+
:description: Address
45+
:required: false
46+
:display: :hide
47+
:data_type: :string
48+
:owner_company:
49+
:description: Company
50+
:required: false
51+
:display: :hide
52+
:data_type: :string
53+
:owner_last_name:
54+
:description: Last Name
55+
:required: false
56+
:display: :edit
57+
:data_type: :string
58+
:owner_manager_mail:
59+
:description: E-Mail
60+
:required: false
61+
:display: :hide
62+
:data_type: :string
63+
:owner_city:
64+
:description: City
65+
:required: false
66+
:display: :hide
67+
:data_type: :string
68+
:owner_department:
69+
:description: Department
70+
:required: false
71+
:display: :hide
72+
:data_type: :string
73+
:owner_load_ldap:
74+
:pressed:
75+
:method: :retrieve_ldap
76+
:description: Look Up LDAP Email
77+
:required: false
78+
:display: :show
79+
:data_type: :button
80+
:owner_manager_phone:
81+
:description: Phone
82+
:required: false
83+
:display: :hide
84+
:data_type: :string
85+
:owner_state:
86+
:description: State
87+
:required: false
88+
:display: :hide
89+
:data_type: :string
90+
:owner_office:
91+
:description: Office
92+
:required: false
93+
:display: :hide
94+
:data_type: :string
95+
:owner_zip:
96+
:description: Zip code
97+
:required: false
98+
:display: :hide
99+
:data_type: :string
100+
:owner_email:
101+
:description: E-Mail
102+
:required_method: :validate_regex
103+
:required_regex: !ruby/regexp /\A[\w!#$\%&'*+\/=?`\{|\}~^-]+(?:\.[\w!#$\%&'*+\/=?`\{|\}~^-]+)*@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}\Z/i
104+
:required: true
105+
:display: :edit
106+
:data_type: :string
107+
:request_notes:
108+
:description: Notes
109+
:required: false
110+
:display: :edit
111+
:data_type: :string
112+
:display: :show
113+
:field_order:
114+
:purpose:
115+
:description: Purpose
116+
:fields:
117+
:tag_ids:
118+
:required_method: :validate_tags
119+
:description: Tags
120+
:required: false
121+
:options:
122+
:include: []
123+
:order: []
124+
:single_select: []
125+
:exclude: []
126+
:display: :edit
127+
:required_tags: []
128+
:data_type: :integer
129+
:display: :show
130+
:field_order:
131+
:customize:
132+
:description: Customize
133+
:fields:
134+
:root_password:
135+
:description: Root Password
136+
:required: false
137+
:display: :edit
138+
:data_type: :string
139+
:notes: Minimum 8 characters or blank
140+
:hostname:
141+
:description: Host Name
142+
:required: false
143+
:display: :edit
144+
:data_type: :string
145+
:ip_addr:
146+
:description: IP Address
147+
:required: false
148+
:notes: (Enter starting IP address)
149+
:display: :edit
150+
:data_type: :string
151+
:notes_display: :hide
152+
:display: :show
153+
:service:
154+
:description: Catalog
155+
:fields:
156+
:source_id:
157+
:values_from:
158+
:method: :allowed_configuration_scripts
159+
:description: Workspaces
160+
:required: true
161+
:notes:
162+
:display: :show
163+
:data_type: :integer
164+
:notes_display: :show
165+
:display: :show
166+
:schedule:
167+
:description: Schedule
168+
:fields:
169+
:schedule_type:
170+
:values:
171+
schedule: Schedule
172+
immediately: Immediately on Approval
173+
:description: When to Provision
174+
:required: false
175+
:display: :edit
176+
:default: immediately
177+
:data_type: :string
178+
:schedule_time:
179+
:values_from:
180+
:options:
181+
:offset: 1.day
182+
:method: :default_schedule_time
183+
:description: Provision on
184+
:required: false
185+
:display: :edit
186+
:data_type: :time
187+
:display: :show
188+
:dialog_order:
189+
- :requester
190+
- :purpose
191+
- :service
192+
- :customize
193+
- :schedule
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
describe MiqProvisionConfigurationScriptRequest do
2+
let(:admin) { FactoryBot.create(:user) }
3+
let(:ems) { FactoryBot.create(:ems_terraform_enterprise) }
4+
let(:configuration_script) { FactoryBot.create(:configuration_script_terraform_enterprise, :manager => ems) }
5+
let(:request) { FactoryBot.create(:miq_provision_configuration_script_request, :requester => admin, :options => {:src_configuration_script_ids => [configuration_script.id]}) }
6+
7+
describe ".request_task_class_from" do
8+
it "retrieves the request task class" do
9+
options = {:source_id => configuration_script.id}
10+
11+
expect(described_class.request_task_class_from("options" => options)).to eq(ems.class::Provision)
12+
end
13+
end
14+
15+
describe ".new_request_task" do
16+
it "returns the provision task" do
17+
options = {:source_id => configuration_script.id}
18+
19+
request_task = described_class.new_request_task("options" => options)
20+
expect(request_task).to have_attributes(:options => options, :state => "pending", :type => "#{ems.class}::Provision")
21+
end
22+
end
23+
end

spec/models/miq_request_spec.rb

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,21 @@
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-
:ServiceTemplateProvisionRequest => {:clone_to_service => "Service Provision"},
19-
:ServiceReconfigureRequest => {:service_reconfigure => "Service Reconfigure"},
20-
:PhysicalServerProvisionRequest => {:provision_physical_server => "Physical Server Provision"},
21-
: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+
: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"},
2223
}
2324

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

0 commit comments

Comments
 (0)