-
Notifications
You must be signed in to change notification settings - Fork 15
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #81 from Autosde/add_physical_server_profile_template
add physical server profile template
- Loading branch information
Showing
7 changed files
with
499 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
43 changes: 43 additions & 0 deletions
43
...models/manageiq/providers/cisco_intersight/physical_infra_manager/ems_refresh_workflow.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
class ManageIQ::Providers::CiscoIntersight::PhysicalInfraManager::EmsRefreshWorkflow < ManageIQ::Providers::EmsRefreshWorkflow | ||
def run_native_op | ||
queue_signal(:poll_native_task) | ||
end | ||
alias start run_native_op | ||
|
||
def poll_native_task | ||
wf_api = ext_management_system.connect(:service=>'WorkflowApi') | ||
native_object_response = wf_api.get_workflow_workflow_info_list({:filter => "Input.workflowContext.WorkflowType eq 'serverconfig' and Input.workflowContext.WorkflowSubtype eq 'Deploy' and Input.workflowContext.InitiatorCtx.InitiatorMoid eq '#{options[:native_task_id]}'", :select => "Status"}) | ||
native_object = native_object_response.results[0] | ||
|
||
case native_object.status | ||
when "FAILED" | ||
signal(:abort, "Task failed") | ||
when "TIME_OUT" | ||
signal(:abort, "Task time out") | ||
when "COMPLETED" | ||
queue_signal(:refresh) | ||
else | ||
queue_signal(:poll_native_task, :deliver_on => Time.now.utc + options[:interval]) | ||
end | ||
rescue => err | ||
_log.log_backtrace(err) | ||
signal(:abort, err.message, "error") | ||
end | ||
|
||
def refresh | ||
task_ids = EmsRefresh.queue_refresh_task(ext_management_system) | ||
if task_ids.blank? | ||
process_error("Failed to queue refresh", "error") | ||
queue_signal(:error) | ||
else | ||
context[:refresh_task_ids] = task_ids | ||
update!(:context => context) | ||
|
||
queue_signal(:poll_refresh) | ||
end | ||
end | ||
|
||
def ext_management_system | ||
@ext_management_system ||= ExtManagementSystem.find(options[:ems_id]) | ||
end | ||
end |
64 changes: 64 additions & 0 deletions
64
...eiq/providers/cisco_intersight/physical_infra_manager/physical_server_profile_template.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
module ManageIQ::Providers::CiscoIntersight | ||
class PhysicalInfraManager::PhysicalServerProfileTemplate < ::PhysicalServerProfileTemplate | ||
def self.display_name(number = 1) | ||
n_('Physical Server Profile Template (CiscoIntersight)', 'Physical Server Profile Template (CiscoIntersight)', number) | ||
end | ||
|
||
def provider_object(connection) | ||
connection.find!(ems_ref) | ||
end | ||
|
||
def deploy_server_from_template(server_id, profile_name) | ||
# Load the gem | ||
require 'intersight_client' | ||
|
||
bulk = ext_management_system.connect(:service=>'BulkApi') | ||
cloner = IntersightClient::BulkMoCloner.new({:sources => [{"Moid" => ems_ref, "ObjectType" => 'server.ProfileTemplate'}], :targets => [{"Name" => profile_name, :ObjectType => 'server.Profile'}]}) | ||
|
||
# create a new server profile from server profile template | ||
|
||
result = bulk.create_bulk_mo_cloner(cloner) | ||
new_profile_moid = result.responses[0].body.moid | ||
|
||
server_profile_updated = IntersightClient::ServerProfile.new( | ||
{ | ||
:assigned_server => {"Moid" => server_id, "ObjectType" => "compute.Blade"}, | ||
:server_assignment_mode => "Static", | ||
:target_platform => nil, | ||
:uuid_address_type => nil | ||
} | ||
) | ||
# assign the profile server to the selected server | ||
server_api = ext_management_system.connect(:service=>'ServerApi') | ||
begin | ||
result = server_api.patch_server_profile(new_profile_moid, server_profile_updated, {}) | ||
_log.info("Server profile successfully assigned with server #{server_id} (ems_ref #{result.assigned_server.moid})") | ||
rescue IntersightClient::ApiError => e | ||
_log.error("Assign server failed for server profile (ems_ref #{new_profile_moid}) server (ems_ref #{server_id})") | ||
raise MiqException::Error, "Assign server failed: #{e.response_body}" | ||
end | ||
|
||
server_profile_updated = {'Action' => "Deploy"} | ||
# deploy the server | ||
begin | ||
result = server_api.patch_server_profile(new_profile_moid, server_profile_updated, {}) | ||
_log.info("Server profile #{result.config_context.control_action} initiated successfully") | ||
rescue IntersightClient::ApiError => e | ||
_log.error("#{action} server failed for server profile (ems_ref #{new_profile_moid})") | ||
raise MiqException::Error, "#Deploy server failed: #{e.response_body}" | ||
end | ||
|
||
# create a job to refresh the cisco intersight provider after the deployment finished | ||
options = { | ||
:target_class => self.class.name, | ||
:target_id => id, | ||
:ems_id => ext_management_system.id, | ||
:native_task_id => new_profile_moid, | ||
:interval => 30.seconds, | ||
:target_option => "deploy" | ||
} | ||
|
||
ManageIQ::Providers::CiscoIntersight::PhysicalInfraManager::EmsRefreshWorkflow.create_job(options).tap(&:signal_start) | ||
end | ||
end | ||
end |
Oops, something went wrong.