Skip to content

Commit

Permalink
Moving RedHat Automate domain content for Namespace "Integration" to …
Browse files Browse the repository at this point in the history
…ManageIQ.

Namespace "Integration" which includes ServiceNow and VMware components NOT found currently in ManageIQ domain.
  • Loading branch information
billfitzgerald0120 committed Dec 20, 2019
1 parent 0c84a7f commit 4498156
Show file tree
Hide file tree
Showing 32 changed files with 864 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
---
object_type: class
version: 1.0
object:
attributes:
description:
display_name:
name: CMDB
type:
inherits:
visibility:
owner:
schema:
- field:
aetype: attribute
name: snow_server
display_name:
datatype: string
priority: 1
owner:
default_value:
substitute: true
message: create
visibility:
collect:
scope:
description:
condition:
on_entry:
on_exit:
on_error:
max_retries:
max_time:
- field:
aetype: attribute
name: snow_user
display_name:
datatype: string
priority: 2
owner:
default_value:
substitute: true
message: create
visibility:
collect:
scope:
description:
condition:
on_entry:
on_exit:
on_error:
max_retries:
max_time:
- field:
aetype: attribute
name: snow_password
display_name:
datatype: password
priority: 3
owner:
default_value:
substitute: true
message: create
visibility:
collect:
scope:
description:
condition:
on_entry:
on_exit:
on_error:
max_retries:
max_time:
- field:
aetype: attribute
name: sys_id
display_name:
datatype: string
priority: 4
owner:
default_value:
substitute: true
message: create
visibility:
collect:
scope:
description:
condition:
on_entry:
on_exit:
on_error:
max_retries:
max_time:
- field:
aetype: attribute
name: table_name
display_name:
datatype: string
priority: 5
owner:
default_value: cmdb_ci_server
substitute: true
message: create
visibility:
collect:
scope:
description:
condition:
on_entry:
on_exit:
on_error:
max_retries:
max_time:
- field:
aetype: method
name: execute
display_name:
datatype: string
priority: 6
owner:
default_value:
substitute: true
message: create
visibility:
collect:
scope:
description:
condition:
on_entry:
on_exit:
on_error:
max_retries:
max_time:
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
#
# Description: Create ServiceNow CMDB Record
#

require 'rest-client'
require 'json'
require 'base64'

def log(level, message)
method = '----- Create ServiceNow CMDB Record -----'
$evm.log(level, "#{method} - #{message}")
end

def get_virtual_column_value(vm, virtual_column_name)
virtual_column_value = vm.send(virtual_column_name)
return virtual_column_value unless virtual_column_value.nil?
nil
end

def hostname(vm)
vm.hostnames.first.presence || vm.name
end

snow_server = $evm.object['snow_server']
snow_user = $evm.object['snow_user']
snow_password = $evm.object.decrypt('snow_password')
table_name = $evm.object['table_name']
uri = "https://#{snow_server}/api/now/table/#{table_name}"

headers = {
:content_type => 'application/json',
:accept => 'application/json',
:authorization => "Basic #{Base64.strict_encode64("#{snow_user}:#{snow_password}")}"
}

# Grab the VM object
log(:info, "vmdb_object_type => <#{$evm.root['vmdb_object_type']}>")
case $evm.root['vmdb_object_type']
when 'miq_provision'
prov = $evm.root['miq_provision']
vm = prov.vm unless prov.nil?
when 'service_template_provision_task'
# Added for generic catalogue item scenario
vm_host_name = $evm.root['service_template_provision_task'].options[:dialog][:dialog_option_0_vm_host_name]
vm = $evm.vmdb('vm').find_by_name(vm_host_name)
else
vm = $evm.root['vm']
end
log(:warn, 'VM object is empty') if vm.nil?

# Extend payload attributes as required
virtual = $evm.object['virtual'] || true
name = $evm.object['name'] || vm.name
description = $evm.object['description'] || "CloudForms GUID <#{vm.guid}>"
host_name = $evm.object['host_name'] || hostname(vm)
cpu_count = $evm.object['cpu_count'] || get_virtual_column_value(vm, :num_cpu)
memory = $evm.object['memory'] || get_virtual_column_value(vm, :mem_cpu)
vendor = $evm.object['vendor'] || vm.vendor

payload = {
:virtual => virtual,
:name => name,
:short_description => description,
:host_name => host_name,
:cpu_count => cpu_count,
:ram => memory,
:vendor => vendor
}
log(:info, "uri => #{uri}")
log(:info, "payload => #{payload}")

request = RestClient::Request.new(
:method => :post,
:url => uri,
:headers => headers,
:payload => payload.to_json
)
rest_result = request.execute
log(:info, "Return code <#{rest_result.code}>")

json_parse = JSON.parse(rest_result)
result = json_parse['result']
log(:info, "sys_id => <#{result['sys_id']}>")

# Add sys_id to VM object
vm.custom_set(:servicenow_sys_id, result['sys_id'])
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
object_type: method
version: 1.0
object:
attributes:
name: create
display_name:
description:
scope: instance
language: ruby
location: inline
inputs: []
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#
# Description: Delete ServiceNow CMDB Record
#

require 'rest-client'
require 'base64'

def log(level, message)
method = '----- Delete ServiceNow CMDB Record -----'
$evm.log(level, "#{method} - #{message}")
end

snow_server = $evm.object['snow_server']
snow_user = $evm.object['snow_user']
snow_password = $evm.object.decrypt('snow_password')
table_name = $evm.object['table_name']
uri = "https://#{snow_server}/api/now/table/#{table_name}"

headers = {
:content_type => 'application/json',
:accept => 'application/json',
:authorization => "Basic #{Base64.strict_encode64("#{snow_user}:#{snow_password}")}"
}

# Grab the VM object
log(:info, "vmdb_object_type => <#{$evm.root['vmdb_object_type']}>")
case $evm.root['vmdb_object_type']
when 'miq_provision'
prov = $evm.root['miq_provision']
vm = prov.vm unless prov.nil?
else
vm = $evm.root['vm']
end
log(:warn, 'VM object is empty') if vm.nil?

sys_id = $evm.object['sys_id'] || vm.custom_get(:servicenow_sys_id)
raise 'ServiceNow sys_id is empty' if sys_id.nil?

uri = "#{uri}/#{sys_id}"
log(:info, "uri => #{uri}")

request = RestClient::Request.new(
:method => :delete,
:url => uri,
:headers => headers,
)
rest_result = request.execute
log(:info, "Return code <#{rest_result.code}>")
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
object_type: method
version: 1.0
object:
attributes:
name: delete
display_name:
description:
scope: instance
language: ruby
location: inline
inputs: []
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#
# Description: Get ServiceNow CMDB Record
#

require 'rest-client'
require 'json'
require 'base64'

def log(level, message)
method = '----- Get ServiceNow CMDB Record -----'
$evm.log(level, "#{method} - #{message}")
end

snow_server = $evm.object['snow_server']
snow_user = $evm.object['snow_user']
snow_password = $evm.object.decrypt('snow_password')
table_name = $evm.object['table_name']
uri = "https://#{snow_server}/api/now/table/#{table_name}"

headers = {
:content_type => 'application/json',
:accept => 'application/json',
:authorization => "Basic #{Base64.strict_encode64("#{snow_user}:#{snow_password}")}"
}

# Grab the VM object
log(:info, "vmdb_object_type => <#{$evm.root['vmdb_object_type']}>")
case $evm.root['vmdb_object_type']
when 'miq_provision'
prov = $evm.root['miq_provision']
vm = prov.vm unless prov.nil?
else
vm = $evm.root['vm']
end
log(:warn, 'VM object is empty') if vm.nil?

sys_id = $evm.object['sys_id'] || vm.custom_get(:servicenow_sys_id)
raise 'ServiceNow sys_id is empty' if sys_id.nil?

uri = "#{uri}/#{sys_id}"
log(:info, "uri => #{uri}")

request = RestClient::Request.new(
:method => :get,
:url => uri,
:headers => headers
)
rest_result = request.execute
log(:info, "Return code <#{rest_result.code}>")

json_parse = JSON.parse(rest_result)
result = json_parse['result']
log(:info, "Item <#{result['name']}> attributes:")
result.sort.each do | k, v |
log(:info, " #{k} => <#{v}>")
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
object_type: method
version: 1.0
object:
attributes:
name: get
display_name:
description:
scope: instance
language: ruby
location: inline
inputs: []
Loading

0 comments on commit 4498156

Please sign in to comment.