Skip to content

Commit ff6d84d

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

File tree

7 files changed

+113
-0
lines changed

7 files changed

+113
-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: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class ManageIQ::Providers::TerraformEnterprise::AutomationManager::Provision < MiqProvisionTask
2+
include StateMachine
3+
4+
TASK_DESCRIPTION = N_("Terraform Enterprise Workspace Provision")
5+
6+
def my_role(*)
7+
"ems_operations"
8+
end
9+
10+
def my_queue_name
11+
source.manager&.queue_name_for_ems_operations
12+
end
13+
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: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class ManageIQ::Providers::TerraformEnterprise::AutomationManager::ProvisionWorkflow < MiqProvisionConfigurationScriptWorkflow
2+
def self.default_dialog_file
3+
'miq_provision_configuration_script_dialogs'
4+
end
5+
6+
def validate(*)
7+
true
8+
end
9+
10+
def allowed_configuration_scripts(_options = {})
11+
@allowed_configuration_scripts ||= begin
12+
::ConfigurationScript.where(:id => @values[:src_configuration_script_ids]).collect do |cs|
13+
build_ci_hash_struct(cs, [:name])
14+
end
15+
end
16+
end
17+
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)