Skip to content

Commit 8bce36f

Browse files
committed
MiqProvisionTask based provisioning
1 parent 8fc3cfc commit 8bce36f

File tree

7 files changed

+106
-0
lines changed

7 files changed

+106
-0
lines changed

app/models/manageiq/providers/terraform_enterprise/automation_manager/configuration_script.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ def self.stack_type
99
"OrchestrationStack"
1010
end
1111

12+
def my_zone
13+
manager&.my_zone
14+
end
15+
1216
def run(options = {})
1317
variables = options[:variables] || []
1418

app/models/manageiq/providers/terraform_enterprise/automation_manager/orchestration_stack/status.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ def canceled?
1616
%w[discarded canceled force_canceled].include?(status)
1717
end
1818

19+
def running?
20+
!succeeded? && !failed? && !canceled?
21+
end
22+
1923
# Lookup table of run state descriptions
2024
# https://developer.hashicorp.com/terraform/cloud-docs/api-docs/run#run-states
2125
def self.run_state_to_description(status)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class ManageIQ::Providers::TerraformEnterprise::AutomationManager::Provision < MiqProvisionTask
2+
include StateMachine
3+
4+
TASK_DESCRIPTION = N_("Terraform Enterprise Workspace Provision")
5+
6+
def self.request_class
7+
MiqProvisionConfigurationScriptRequest
8+
end
9+
10+
def my_role(*)
11+
"ems_operations"
12+
end
13+
14+
def my_queue_name
15+
source.manager&.queue_name_for_ems_operations
16+
end
17+
end
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
module ManageIQ::Providers::TerraformEnterprise::AutomationManager::Provision::StateMachine
2+
def run_provision
3+
signal :provision
4+
end
5+
6+
def provision
7+
stack_class = "#{source.class.module_parent}::#{source.class.stack_type}".constantize
8+
stack = stack_class.create_stack(source)
9+
10+
phase_context[:stack_id] = stack.id
11+
save!
12+
13+
signal :check_provisioned
14+
end
15+
16+
def check_provisioned
17+
if running?
18+
stack.refresh_ems
19+
requeue_phase
20+
else
21+
signal :post_provision
22+
end
23+
end
24+
25+
def post_provision
26+
signal :mark_as_completed
27+
end
28+
29+
def running?
30+
stack.raw_status.running?
31+
end
32+
33+
def mark_as_completed
34+
update_and_notify_parent(:state => 'provisioned')
35+
signal :finish
36+
end
37+
38+
def finish
39+
mark_execution_servers
40+
end
41+
42+
def stack
43+
@stack ||= source.manager.orchestration_stacks.find(phase_context[:stack_id])
44+
end
45+
end
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class ManageIQ::Providers::TerraformEnterprise::AutomationManager::ProvisionWorkflow < ManageIQ::Providers::AutomationManager::ProvisionWorkflow
2+
def dialog_name_from_automate(message = 'get_dialog_name', extra_attrs = {})
3+
extra_attrs['platform_category'] ||= 'terraform_enterprise'
4+
super
5+
end
6+
end

spec/factories/miq_request_task.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
FactoryBot.define do
2+
factory :miq_provision_terraform_enterprise, :parent => :miq_provision, :class => "ManageIQ::Providers::TerraformEnterprise::AutomationManager::Provision"
3+
end
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
describe ManageIQ::Providers::TerraformEnterprise::AutomationManager::Provision do
2+
let(:admin) { FactoryBot.create(:user_admin) }
3+
let(:ems) { FactoryBot.create(:ems_terraform_enterprise) }
4+
let(:workspace) { FactoryBot.create(:configuration_script_terraform_enterprise, :manager => ems) }
5+
let(:miq_request) { FactoryBot.create(:miq_provision_request, :requester => admin, :source => workspace)}
6+
let(:options) { {:source => [workspace.id, workspace.name]} }
7+
let(:subject) do
8+
FactoryBot.create(
9+
:miq_provision_terraform_enterprise,
10+
:userid => admin.userid,
11+
:miq_request => miq_request,
12+
:source => workspace,
13+
:request_type => 'template',
14+
:state => 'pending',
15+
:status => 'Ok',
16+
:options => options
17+
)
18+
end
19+
20+
it ".my_role" do
21+
expect(subject.my_role).to eq("ems_operations")
22+
end
23+
24+
it ".my_queue_name" do
25+
expect(subject.my_queue_name).to eq(ems.queue_name_for_ems_operations)
26+
end
27+
end

0 commit comments

Comments
 (0)