miq_utilities 0.2.7 → 0.2.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 38443c65cffa17096f599e60fc8ec410bdbfc2681a441aa2edbcb0fddc8cd4e7
4
- data.tar.gz: 87d89ffb19b71ffc72450d30802f95ef73ec01af90b0e9283567acb08766cf77
3
+ metadata.gz: f69b2aecab6ae7d25b391d9244cd67fd62612b7be714dfe27c2e20358c50f483
4
+ data.tar.gz: ff8ce2ff4a17f63855f97c6d9571ff0b21bf7f87a298294df866d82237dd2df0
5
5
  SHA512:
6
- metadata.gz: fa02bb0c15c9669fe33c794eb3d343e91cea6c97ffb64107892b0cb8429892c35f2b2031162a7f681ff70c5abbd374bf908295f2bc47a34d8fb386689d6f2e41
7
- data.tar.gz: 98223d6a3dcd8c53a0467bd9a957abd518f78e1f9a898c5055d6b433a688d2a1de5c8e892af976ffec2f2ef90f08fd7696b436e17f19549d34a2d19b4865cd31
6
+ metadata.gz: 86eeb522972b75989b5a3a3ea5bb17335901aa9ef29c4335e91b96b6645e49fc953aacbdc5604e4dc801cff5fcbf2a2cf7b30f0e18c3a6dbeab1d012fd38828f
7
+ data.tar.gz: 0cbb9dfacd7b597e3b407aa1f38fcc7de44a05328fb5f0212fa49d7083829c820c42bbb841466da9e9bd3d10245882a9b6b845a2464a37ada428858d76fb78cf
@@ -1,7 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # .SYNOPSIS
4
+ # This Class is used as a wrapper class for the chef interactions
5
+ #
6
+ # Methods Summary:
7
+ # > Name > Description/Params
3
8
  #
4
- # This Class is used wrap the chef methods used
5
9
  #
6
10
 
7
11
  require_relative 'logging.rb'
@@ -33,6 +37,8 @@ class ChefClass
33
37
  rescue => timeout
34
38
  @logger.log(level: 'error', message: "Error executing chef: #{timeout.class} #{timeout} #{timeout.backtrace.join("\n")}")
35
39
  return false
40
+ rescue => err
41
+ raise("\n Class:<#{self.class}>\n Method:<#{__method__}>\n Error:<#{err} - #{err.backtrace.join("\n")}>")
36
42
  end
37
43
  end
38
44
 
@@ -1,12 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- #
3
+ # .SYNOPSIS
4
4
  # This Class is used to hold general methods used within this GEM
5
5
  #
6
6
  # Methods Summary:
7
- # > Name > Description/Params
7
+ # > Name > Description/Params
8
8
  #
9
-
10
9
  require_relative 'logging.rb'
11
10
 
12
11
  # Wrapper class to interact with linux machines via ssh
@@ -4,37 +4,11 @@
4
4
  # This Class utilises the rest-client (version => 1.8.0 x64-mingw32) & json (version => 2.0.4) Ruby Gems
5
5
  #
6
6
  # Methods Summary:
7
- # > Name > Description/Params
8
- # process_args - Process Arguments
9
- # inargs - Hash : Hash Table of key value pairs of arguments to process i.e. { 'name' => some_fdqn }
10
- # inurl - String : The url to append to
11
- #
12
- # process_extattrs - Process extra attributes
13
- # inargextattrs - Hash : Hash table of key value pairs of the extra attributes to process i.e. { 'Country' => 'UK' }
14
- # inurl - String : The url to append to
15
- # args - Boolean : Identifies if arguments were processed, if so an ampersand needs to be appended
16
- #
17
- # process_returnfields - Process return fields
18
- # inurl - String : The url to append to
19
- # returnfields - String : A string listing the return fields, delimited by commas (CSV)
20
- # args - Boolean (Default:Flase): Identifies if arguments were processed, if so an ampersand needs to be appended
21
- #
22
- # call_infoblox - Process the inputs and make the API call to infoblox
23
- # action - String : The Action being preformed i.e. GET, DELETE
24
- # resource - String : The resource being used i.e. record:host
25
- # ibobj - Object : Custom object created to hold the extra attributes, arguments and return fields.
26
- # Examples: * vars are suffixed with @ *
27
- # infobloxobj = { 'args' => nil, 'returnfields' => nil, 'argextattrs' => { 'Country' => @ib_cmdb_country, '*VLAN Number' => @ib_cmdb_vlan, '*Site' => @ib_site } } or;
28
- # infobloxobj = { 'args' => { 'name' => @ib_fdqn }, 'returnfields' => nil, 'argextattrs' => nil } or;
29
- # infobloxobj = { 'args' => { 'name' => @ib_fdqn }, 'returnfields' => 'ipv4addrs', 'argextattrs' => nil }......
30
- #
31
- # body_type - String (Default json) : The body type
32
- # body - String : The body to use in the call, if there is one
33
- # servername - String : The server name to connect to
34
- # username - String : The username to connect with
35
- # password - String : The password for the user
36
- # baseurl - String (Default: https://[SERVERNAME]/wapi/v2.3.1/): the base URL to use
37
- #
7
+ # > Name > Description/Params
8
+ # process_args - Process Arguments
9
+ # process_extattrs - Process extra attributes
10
+ # process_returnfields - Process return fields
11
+ # call_infoblox - Process the inputs and make the API call to infoblox
38
12
  #
39
13
  require 'rest-client'
40
14
  require 'json'
@@ -78,7 +52,7 @@ class InfobloxClass
78
52
  end
79
53
 
80
54
  def call_infoblox(action:, resource:, ibobj:, body_type: :json, body: nil, servername: nil, username: nil, password: nil, baseurl: 'https://[SERVERNAME]/wapi/v2.3.1/')
81
- @logger = LoggingClass.new('Infoblox')
55
+ @logger = LoggingClass.new("#{self.class}:(#{__method__})")
82
56
 
83
57
  servername ||= $evm.object['InfobloxServername']
84
58
  username ||= $evm.object['InfobloxUsername']
@@ -39,6 +39,6 @@ class LoggingClass
39
39
  # Notify - Only if flag (notify) is set to TRUE
40
40
  @notification.notify(event_level: level, event_message: message, email_to: email_to, email_from: email_from, signature: signature, webhookurl: webhookurl, subjecttype: subjecttype) if notify
41
41
  rescue => err
42
- raise("Oopps! Something went wrong.\nError:<#{err}>")
42
+ raise("Oopps! Something went wrong.\nDetails:<#{err}>")
43
43
  end
44
44
  end
@@ -4,100 +4,72 @@
4
4
  # This Class utilises the slack-notifier Ruby Gem (version => 2.3.2).
5
5
  #
6
6
  # Methods Summary:
7
- # > Name > Description/Params
7
+ # > Name > Description/Params
8
8
  # notify - based on the params passed, process through and notify in the appropriate ways
9
- # event_level - String : info, warn, error, debug, note
10
- # event_message - String : The message to be used
11
- # email_to - String : Who to send an email to
12
- # email_from - String : Sent from which email address
13
- # signature - String : Who the emails from
14
- # webhookurl - String : The slcak channel to send the message to
15
- #
16
9
  # send_email - Sends an email to the specified user
17
- # message - String : The message to be used
18
- # subject - String : The Subject to be used
19
- # from_email - String : Sender email
20
- # signature - String : Who the emails from
21
- # to_email - String : Recipient email
22
- #
23
10
  # send_slack_message - Sends a Slcak message
24
- # message - String : The message to be used
25
- # webhookurl - String : The webhook to be used
26
- #
27
11
  # on_screen_message - Sends an on-screen notification
28
- # level - String : info, warn, error
29
- # message - String : The message to be used
30
- # subject - String : The Subject to be used
31
- # WIP
12
+ #
13
+ #
14
+ #
32
15
  require 'slack-notifier'
33
16
 
34
17
  # Wrapper class to notify stakeholders
35
18
  class NotificationClass
36
19
  def notify(event_level:, event_message:, email_to: nil, email_from: nil, signature: nil, webhookurl: nil, subjecttype: nil)
37
- @logger = LoggingClass.new('NotifyCLass')
20
+ @logger = LoggingClass.new(self.class.to_s)
38
21
  signature ||= 'ManageIQ'
39
- @logger.log(level: 'info', message: 'Notify Class started.....')
40
- @logger.log(level: 'info', message: "case = #{event_level.upcase}")
41
22
  case event_level.upcase
42
23
  when 'WARN', 'WARNING'
43
- @logger.log(level: 'info', message: 'Hit Case WARNING')
44
24
  subject = 'ManageIQ Warning'
45
- send_email(message: event_message, subject: subject, from_email: email_from, signature: signature, to_email: email_to)
46
25
  send_slack_message(message: event_message, webhookurl: webhookurl)
26
+ if $evm.nil?
27
+ @logger.log(level: 'warn', message: 'The $evm object is null. Unable to send email notification.')
28
+ else
29
+ send_email(message: event_message, subject: subject, from_email: email_from, signature: signature, to_email: email_to)
30
+ end
47
31
  when 'ERR', 'ERROR'
48
- @logger.log(level: 'info', message: 'Hit Case ERROR')
49
32
  subject = 'ManageIQ Error'
50
- send_email(message: event_message, subject: subject, from_email: email_from, signature: signature, to_email: email_to)
51
33
  send_slack_message(message: event_message, webhookurl: webhookurl)
52
- on_screen_message(level: event_level, message: event_message, type: subjecttype)
34
+ if $evm.nil?
35
+ @logger.log(level: 'warn', message: 'The $evm object is null. Unable to send email or on-screen notifications.')
36
+ else
37
+ on_screen_message(level: event_level, message: event_message, type: subjecttype)
38
+ send_email(message: event_message, subject: subject, from_email: email_from, signature: signature, to_email: email_to)
39
+ end
53
40
  when 'NOTE'
54
- @logger.log(level: 'info', message: 'Hit Case NOTE')
55
- on_screen_message(level: event_level, message: event_message, type: subjecttype)
41
+ if $evm.nil?
42
+ @logger.log(level: 'warn', message: 'The $evm object is null. Unable to on-screen notification.')
43
+ else
44
+ on_screen_message(level: event_level, message: event_message, type: subjecttype)
45
+ end
56
46
  end
57
47
  rescue => err
58
- raise("Oopps! Something went wrong trying to notify. Error:<#{err}>")
48
+ raise("<#{err}>")
59
49
  end
60
50
 
61
51
  def send_email(message:, subject:, from_email:, signature:, to_email: nil)
62
- @logger.log(level: 'info', message: 'Sending mail....')
63
- # Look in the current object for a VM
64
- vm = $evm.object['vm']
65
- if vm.nil?
66
- vm_id = $evm.object['vm_id'].to_i
67
- vm = $evm.vmdb('vm', vm_id) unless vm_id.zero?
68
- end
69
-
70
- # Look in the Root Object for a VM
71
- if vm.nil?
72
- vm = $evm.root['vm']
73
- if vm.nil?
74
- vm_id = $evm.root['vm_id'].to_i
75
- vm = $evm.vmdb('vm', vm_id) unless vm_id.zero?
76
- end
52
+ to = nil
53
+ if to_email.nil?
54
+ vm = nil
55
+ owner = nil
56
+ # Look in the Root Object for a Provision/Request
57
+ prov = $evm.root['miq_provision_request'] || $evm.root['miq_provision']
58
+ vm = prov.vm if prov && vm.nil?
59
+ # Get VM Owner ID and then Email
60
+ evm_owner_id = vm.attributes['evm_owner_id']
61
+ owner = $evm.vmdb('user', evm_owner_id) unless evm_owner_id.nil?
62
+ # to_email_address from owner.email then from model if nil
63
+ to = if owner
64
+ owner.email.to_s.strip
65
+ else
66
+ $evm.object['to_email_address'].to_s.strip unless $evm.nil?
67
+ end
68
+ # Look at the Event Type in the Current Object or in the Root Object
69
+ event_type = $evm.object['event'] || $evm.root['event_type']
77
70
  end
78
-
79
- # Look in the Root Object for a Provision/Request
80
- prov = $evm.root['miq_provision_request'] || $evm.root['miq_provision']
81
- vm = prov.vm if prov && vm.nil?
82
-
83
- raise 'VM details not found!' if vm.nil?
84
-
85
- # Look at the Event Type in the Current Object or in the Root Object
86
- event_type = $evm.object['event'] || $evm.root['event_type']
87
-
88
- # Get VM Owner Name and Email
89
- evm_owner_id = vm.attributes['evm_owner_id']
90
- owner = nil
91
- owner = $evm.vmdb('user', evm_owner_id) unless evm_owner_id.nil?
92
-
93
- # to_email_address from owner.email then from model if nil
94
- to = if owner
95
- owner.email.to_s.strip
96
- else
97
- $evm.object['to_email_address'].to_s.strip
98
- end
99
-
100
- to ||= to_email unless to_email.nil?
71
+ event_type ||= 'MIQ Event'
72
+ to ||= to_email
101
73
 
102
74
  subject += " - #{event_type}"
103
75
  body = 'Hello, '
@@ -107,14 +79,14 @@ class NotificationClass
107
79
 
108
80
  $evm.execute(:send_email, to, from_email, subject, body)
109
81
  rescue => err
110
- raise("Oopps! Something went wrong trying to send an email to:<#{to}>. Error:<#{err}>")
82
+ raise("\n Class:<#{self.class}>\n Method:<#{__method__}>\n Error:<#{err} - #{err.backtrace.join("\n")}>")
111
83
  end
112
84
 
113
85
  def send_slack_message(message:, webhookurl:)
114
86
  notifier = Slack::Notifier.new webhookurl
115
87
  notifier.ping message
116
88
  rescue => err
117
- raise("Oopps! Something went wrong trying to send a Slack notification. Error:<#{err}>")
89
+ raise("\n Class:<#{self.class}>\n Method:<#{__method__}>\n Error:<#{err} - #{err.backtrace.join("\n")}>")
118
90
  end
119
91
 
120
92
  def on_screen_message(level:, message:, subject: nil, type: nil)
@@ -136,7 +108,7 @@ class NotificationClass
136
108
  $evm.create_notification(type: type, subject: subject)
137
109
  end
138
110
  rescue => err
139
- raise("Oopps! Something went wrong trying to display on-screen notification. Error:<#{err}>")
111
+ raise("\n Class:<#{self.class}>\n Method:<#{__method__}>\n Error:<#{err} - #{err.backtrace.join("\n")}>")
140
112
  end
141
113
  end
142
114
  end
@@ -6,18 +6,8 @@
6
6
  # Methods Summary:
7
7
  # > Name > Description/Params
8
8
  # initialize - Create the connection to the client
9
- # user - String : Username
10
- # password - String : Password
11
- # host - String : The host name to connect to
12
- # database - String : The database name to connect to
13
- # azure - Boolean : Set to true when connecting to Azure
14
- # port - String : The port to use, default (nil) 1433
15
- #
16
9
  # get_client - returns the client to utilise the tiny_tds functionality
17
- #
18
10
  # run_sql_query - runs the specified sql query against the client when the class was instantiated
19
- # sql - String : Sql query to be run
20
- #
21
11
  # close_connection - closes the connection to the client
22
12
  #
23
13
  require 'tiny_tds'
@@ -28,7 +18,7 @@ class SqlClass
28
18
  # Initialize Class
29
19
  def initialize(user:, password:, host:, database:, azure:, port: nil)
30
20
  # Logging
31
- @logger = LoggingClass.new('SQL')
21
+ @logger = LoggingClass.new(self.class.to_s)
32
22
 
33
23
  # Default port
34
24
  unless port.nil?
@@ -1,15 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  #
4
- # This Class is used to handle the logging for ManageIQ and an IDE
4
+ # This Class is used to handle the running ssh scripts and utilises the net-ssh Ruby Gem (version => 4.2.0)
5
5
  #
6
6
  # Methods Summary:
7
7
  # > Name > Description/Params
8
8
  # ssh_run - Run script via ssh
9
- # script - String : The script to run
10
- # ipaddress - String : The message
11
- # linux_user - String : User to login as
12
- # linux_password - String : password to use
13
9
  #
14
10
 
15
11
  require 'net/ssh'
@@ -18,16 +14,19 @@ require_relative 'logging.rb'
18
14
  # This wrapper class is used to run ssh commands on linux machines
19
15
  class SshClass
20
16
  def ssh_run(ipaddr, script, linux_user = nil, linux_password = nil)
21
- @logger = LoggingClass.new('ssh_run')
17
+ @logger = LoggingClass.new("#{self.class}:(#{__method__})")
22
18
  linux_password ||= $evm.object.decrypt('linux_password').to_s
23
19
  linux_user ||= 'root'
24
-
25
- Net::SSH.start(ipaddr, linux_user, password: linux_password, paranoid: Net::SSH::Verifiers::Null.new) do |ssh|
26
- command = script
27
- output = ssh.exec!(command)
28
- @logger.log(level: 'info', message: "ssh command being run on #{ipaddr}")
29
- @logger.log(level: 'info', message: "ssh script being run is #{script}")
30
- @logger.log(level: 'info', message: "SSH output = #{output}")
20
+ begin
21
+ Net::SSH.start(ipaddr, linux_user, password: linux_password, paranoid: Net::SSH::Verifiers::Null.new) do |ssh|
22
+ command = script
23
+ output = ssh.exec!(command)
24
+ @logger.log(level: 'info', message: "ssh command being run on #{ipaddr}")
25
+ @logger.log(level: 'info', message: "ssh script being run is #{script}")
26
+ @logger.log(level: 'info', message: "SSH output = #{output}")
27
+ end
28
+ rescue
29
+ raise("\n Class:<#{self.class}>\n Method:<#{__method__}>\n Error:<#{err} - #{err.backtrace.join("\n")}>")
31
30
  end
32
31
  end
33
32
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MiqUtilities
4
- VERSION = '0.2.7'
4
+ VERSION = '0.2.8'
5
5
  end
@@ -4,23 +4,13 @@
4
4
  # This Class is used to handle some of the heavily used VMWare utilities
5
5
  #
6
6
  # Methods Summary:
7
- # > Name > Description/Params
8
- # initialize - Assign the host name
9
- # host_name - String : The name of the host being utilised
10
- #
11
- # get_vsphere_connection - returns the client connection
12
- # user - String : The user to connect with
13
- # password - String : The users password
14
- #
7
+ # > Name > Description/Params
8
+ # initialize - Assign the host name
9
+ # get_vsphere_connection - returns the client connection
15
10
  # retrieve_data_center - returns the datacenter based on the connection and datacenter
16
- #
17
- #
18
11
  # find_vm - Get the VM details from vmware
19
- # datacenter - String : retrieve_data_center return value
20
- # vmname - String : The vmname
21
- #
22
12
  # upg_tools - Get the VM details from vmware
23
- # vmobj - Object : find_vm return value
13
+ #
24
14
  require 'rbvmomi'
25
15
 
26
16
  # Wrapper class to interact with vmware
@@ -4,12 +4,8 @@
4
4
  # This Class utilises the winrm Ruby Gem (version => 2.2.3) and is used to handle the running of powershell scripts using winrm
5
5
  #
6
6
  # Methods Summary:
7
- # > Name > Description/Params
8
- # winrm_run - Run a specified PowerShell script
9
- # ps_script - String : The name of the script to run (including path to the file)
10
- # host - String : The name of the host to connect to
11
- # user - String : The user to connect with
12
- # password - String : The users password
7
+ # > Name > Description/Params
8
+ # winrm_run - Run a specified PowerShell script
13
9
  #
14
10
  require 'winrm'
15
11
  require 'logging.rb'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: miq_utilities
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.7
4
+ version: 0.2.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron McCatty