Skip to content

Commit 8ef6396

Browse files
committed
Add workflows provisioning for EmbeddedAnsible
1 parent 808eded commit 8ef6396

File tree

8 files changed

+390
-1
lines changed

8 files changed

+390
-1
lines changed

app/models/manageiq/providers/embedded_ansible/automation_manager.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ def self.description
1111
end
1212

1313
def self.catalog_types
14-
{"generic_ansible_playbook" => N_("Ansible Playbook")}
14+
{"generic_ansible_playbook" => N_("Ansible Playbook (deprecated)"), "embedded_ansible" => N_("Ansible Playbook")}
1515
end
1616
end
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class ManageIQ::Providers::EmbeddedAnsible::AutomationManager::Provision < ManageIQ::Providers::AutomationManager::Provision
2+
include StateMachine
3+
4+
TASK_DESCRIPTION = N_("Ansible Playbook Provision")
5+
end
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
module ManageIQ::Providers::EmbeddedAnsible::AutomationManager::Provision::StateMachine
2+
def run_provision
3+
signal :provision
4+
end
5+
6+
def provision
7+
opts = %i[become_enabled cloud_credential_id credential_id execution_ttl extra_vars hosts network_credential_id vault_credential_id verbosity].to_h do |key|
8+
[key, get_option(key)]
9+
end
10+
11+
opts[:hosts] ||= %w[localhost]
12+
stack = stack_klass.create_stack(source.parent, opts)
13+
14+
phase_context[:stack_id] = stack.id
15+
connect_to_service!(stack, :name => "Provision")
16+
17+
save!
18+
19+
signal :check_provisioned
20+
end
21+
22+
def check_provisioned
23+
if running?
24+
requeue_phase
25+
else
26+
signal :post_provision
27+
end
28+
end
29+
30+
def post_provision
31+
if succeeded?
32+
signal :mark_as_completed
33+
else
34+
abort_job("Failed to provision playbook", "error")
35+
end
36+
end
37+
38+
def running?
39+
!stack.raw_status.completed?
40+
end
41+
42+
def succeeded?
43+
stack.raw_status.succeeded?
44+
end
45+
46+
def mark_as_completed
47+
update_and_notify_parent(:state => "finished", :message => "Playbook provision is complete")
48+
signal :finish
49+
end
50+
51+
def finish
52+
mark_execution_servers
53+
end
54+
55+
def stack_klass
56+
ManageIQ::Providers::EmbeddedAnsible::AutomationManager::Job
57+
end
58+
59+
def stack
60+
@stack ||= stack_klass.find(phase_context[:stack_id])
61+
end
62+
end
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
class ManageIQ::Providers::EmbeddedAnsible::AutomationManager::ProvisionWorkflow < ManageIQ::Providers::AutomationManager::ProvisionWorkflow
2+
def self.default_dialog_file
3+
"miq_provision_configuration_script_embedded_ansible_dialogs".freeze
4+
end
5+
6+
def dialog_name_from_automate(message = 'get_dialog_name', extra_attrs = {})
7+
extra_attrs['platform'] ||= 'embedded_ansible'
8+
super
9+
end
10+
11+
def allowed_configuration_scripts(*_args)
12+
self.class.module_parent::ConfigurationScript.all.map do |cs|
13+
build_ci_hash_struct(cs, %w[name description manager_name])
14+
end
15+
end
16+
17+
def allowed_machine_credentials(*_args)
18+
self.class.module_parent::MachineCredential.all.to_h do |mc|
19+
[mc.id, mc.name]
20+
end
21+
end
22+
23+
def allowed_vault_credentials(*_args)
24+
self.class.module_parent::VaultCredential.all.to_h do |vc|
25+
[vc.id, vc.name]
26+
end
27+
end
28+
29+
def allowed_cloud_credentials(*_args)
30+
self.class.module_parent::CloudCredential.all.to_h do |cc|
31+
[cc.id, "#{cc.name} - #{cc.type}"]
32+
end
33+
end
34+
end
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class ServiceEmbeddedAnsible < ServiceAutomation
2+
def job(action = "Provision")
3+
service_resources.find_by(:name => action, :resource_type => 'OrchestrationStack').try(:resource)
4+
end
5+
end
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
class ServiceTemplateEmbeddedAnsible < ServiceTemplateAutomation
2+
end
Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
1+
---
2+
:name: miq_provision_configuration_script_embedded_ansible_dialogs
3+
:description: Sample Configuration Script Embedded Ansible 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_manager_phone:
74+
:description: Phone
75+
:required: false
76+
:display: :hide
77+
:data_type: :string
78+
:owner_state:
79+
:description: State
80+
:required: false
81+
:display: :hide
82+
:data_type: :string
83+
:owner_office:
84+
:description: Office
85+
:required: false
86+
:display: :hide
87+
:data_type: :string
88+
:owner_zip:
89+
:description: Zip code
90+
:required: false
91+
:display: :hide
92+
:data_type: :string
93+
:owner_email:
94+
:description: E-Mail
95+
:required_method: :validate_regex
96+
:required_regex: !ruby/regexp /\A[\w!#$\%&'*+\/=?`\{|\}~^-]+(?:\.[\w!#$\%&'*+\/=?`\{|\}~^-]+)*@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}\Z/i
97+
:required: true
98+
:display: :edit
99+
:data_type: :string
100+
:request_notes:
101+
:description: Notes
102+
:required: false
103+
:display: :edit
104+
:data_type: :string
105+
:display: :show
106+
:field_order:
107+
:purpose:
108+
:description: Purpose
109+
:fields:
110+
:tag_ids:
111+
:required_method: :validate_tags
112+
:description: Tags
113+
:required: false
114+
:options:
115+
:include: []
116+
:order: []
117+
:single_select: []
118+
:exclude: []
119+
:display: :edit
120+
:required_tags: []
121+
:data_type: :integer
122+
:display: :show
123+
:field_order:
124+
:provision:
125+
:description: Provision
126+
:fields:
127+
:verbosity:
128+
:description: Verbosity
129+
:values:
130+
0: Normal
131+
1: Verbose
132+
2: More Verbose
133+
3: Debug
134+
4: Connection Debug
135+
5: WinRM Debug
136+
:notes:
137+
:required: false
138+
:display: :edit
139+
:default: 0
140+
:data_type: :integer
141+
:log_output:
142+
:description: Log Output
143+
:values:
144+
on_error: On Error
145+
always: Always
146+
never: Never
147+
:notes:
148+
:required: false
149+
:display: :edit
150+
:default: on_error
151+
:data_type: :string
152+
:execution_ttl:
153+
:description: Max TTL (mins)
154+
:notes:
155+
:required: false
156+
:display: :edit
157+
:data_type: :integer
158+
:machine_credential_id:
159+
:values_from:
160+
:method: :allowed_machine_credentials
161+
:description: Machine Credential
162+
:required: true
163+
:display: :edit
164+
:data_type: :integer
165+
:vault_credential_id:
166+
:values_from:
167+
:method: :allowed_vault_credentials
168+
:description: Vault Credential
169+
:required: false
170+
:display: :edit
171+
:data_type: :integer
172+
:cloud_credential_id:
173+
:values_from:
174+
:method: :allowed_cloud_credentials
175+
:description: Cloud Credential
176+
:required: false
177+
:display: :edit
178+
:data_type: :integer
179+
:display: :show
180+
:service:
181+
:description: Catalog
182+
:fields:
183+
:src_configuration_script_id:
184+
:values_from:
185+
:method: :allowed_configuration_scripts
186+
:description: Configuration Script
187+
:required: true
188+
:notes:
189+
:display: :edit
190+
:data_type: :integer
191+
:notes_display: :show
192+
:display: :show
193+
:schedule:
194+
:description: Schedule
195+
:fields:
196+
:schedule_type:
197+
:values:
198+
schedule: Schedule
199+
immediately: Immediately on Approval
200+
:description: When to Provision
201+
:required: false
202+
:display: :edit
203+
:default: immediately
204+
:data_type: :string
205+
:schedule_time:
206+
:values_from:
207+
:options:
208+
:offset: 1.day
209+
:method: :default_schedule_time
210+
:description: Provision on
211+
:required: false
212+
:display: :edit
213+
:data_type: :time
214+
:display: :show
215+
:dialog_order:
216+
- :requester
217+
- :purpose
218+
- :service
219+
- :provision
220+
- :schedule

0 commit comments

Comments
 (0)