miq_dev_util 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile +1 -0
- data/README.md +77 -2
- data/lib/miq_dev_util/automate.rb +68 -25
- data/lib/miq_dev_util/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f2483591e6af4106bc28390033ee7eb5e2777a69
|
4
|
+
data.tar.gz: ed101b6f73c32ce124b2ce6da506959a9e79dde8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 348952bfb3fa0fc9fdd08e9e27e66678bcb54832458361fd69ec553207f23f3c031bb042d45deead4dc0a000f05766c2a9f11dcc0b9043bd0ce039290e29ff2f
|
7
|
+
data.tar.gz: 467a0d3fecf09f34da2c85ecc8fd387f18970b529dcae44d20fa57055d68685b67973ccf36f7215b9d41a84f0398053b8c59c0a813d325942a34c230142b3325
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -4,13 +4,87 @@ This is a set of helper classes to make developing in the ManageIQ automate
|
|
4
4
|
model less cumbersome. By putting helper code and commonly used methods in this
|
5
5
|
gem we can reduce the amount of code copied and pasted between methods.
|
6
6
|
|
7
|
+
|
7
8
|
## Installation
|
8
9
|
|
9
|
-
|
10
|
+
```
|
11
|
+
$ gem install miq_dev_util
|
12
|
+
```
|
13
|
+
|
10
14
|
|
11
15
|
## Usage
|
12
16
|
|
13
|
-
|
17
|
+
```ruby
|
18
|
+
# Pull the gem in to we can use it
|
19
|
+
require 'miq_dev_util'
|
20
|
+
```
|
21
|
+
|
22
|
+
### Logging ###
|
23
|
+
|
24
|
+
```ruby
|
25
|
+
@logger = MiqDevUtil::Logger.new($evm, 'my_method_name')
|
26
|
+
@logger.log(:info, 'Hello World')
|
27
|
+
|
28
|
+
@logger.dump_root
|
29
|
+
|
30
|
+
@logger.dump_attributes($evm.root['vm'], 'root vm')
|
31
|
+
@logger.dump_associations($evm.root['vm'], 'root vm')
|
32
|
+
@logger.dump_virtual_columns($evm.root['vm'], 'root vm')
|
33
|
+
|
34
|
+
@logger.dump_info($evm.root['vm'], 'root vm') # dumps attributes,
|
35
|
+
# associations and
|
36
|
+
# virtual_columns
|
37
|
+
```
|
38
|
+
|
39
|
+
### EMS Credentials ###
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
vm = $evm.root['vm']
|
43
|
+
credentials = MiqDevUtil::EMS.get_credentials(vm.ext_management_system)
|
44
|
+
vim = RbVmomi::VIM.connect credentials
|
45
|
+
```
|
46
|
+
|
47
|
+
### Automate Model ###
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
automate_helper = MiqDevUtil::Automate.new($evm)
|
51
|
+
|
52
|
+
# Instantiate an automate instance at path or raise an exception with the
|
53
|
+
# message provided if the instantiation returns nil (not found).
|
54
|
+
automate_helper.instantiate_or_raise(path, message)
|
55
|
+
|
56
|
+
# This is a hacky workaround used to get an instance without executing the
|
57
|
+
# methods on it. It fails if a message is passed in the path or if the
|
58
|
+
# message field on the any of the methods are *.
|
59
|
+
automate_helper.get_instance_with_attributes(path)
|
60
|
+
|
61
|
+
|
62
|
+
# Condense multiple types of VM lookups into one call. This is useful when
|
63
|
+
# making an Automate method generic enough to be used during provisioning,
|
64
|
+
# with a custom button, or as a catalog item.
|
65
|
+
#
|
66
|
+
# Lookup methods used and their order can be overridden by specifying
|
67
|
+
# :lookup_order. The default is [:rootvm, :dialog_id, :provision]
|
68
|
+
#
|
69
|
+
# * :rootvm = $evm.root['vm']
|
70
|
+
# * :dialog_id = look up the VM in vmdb using the VMDB ID from a dialog
|
71
|
+
# * :provision = $evm.root['miq_provision'].vm
|
72
|
+
#
|
73
|
+
#
|
74
|
+
# The dialog name that may hold the miq ID is specified via :dialog_name
|
75
|
+
#
|
76
|
+
|
77
|
+
vm = resolve_vm
|
78
|
+
vm = resolve_vm(lookup_order: [:dialog_id], dialog_name: 'dialog_vm_id')
|
79
|
+
```
|
80
|
+
|
81
|
+
### Generic Code ###
|
82
|
+
|
83
|
+
```ruby
|
84
|
+
# Perform a deep copy on objects that support marshalling.
|
85
|
+
MiqDevUtil::Code.deep_copy(object)
|
86
|
+
```
|
87
|
+
|
14
88
|
|
15
89
|
## Development
|
16
90
|
|
@@ -18,6 +92,7 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
|
18
92
|
|
19
93
|
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
20
94
|
|
95
|
+
|
21
96
|
## Contributing
|
22
97
|
|
23
98
|
Bug reports and pull requests are welcome on GitHub at https://github.com/ewannema/miq_dev_util.
|
@@ -1,34 +1,77 @@
|
|
1
|
-
|
2
|
-
#
|
1
|
+
module MiqDevUtil
|
2
|
+
# The Automate class is intended to hold methods that are useful when
|
3
|
+
# interacting with the ManageIQ automate system directly.
|
4
|
+
class Automate
|
5
|
+
def initialize(evm)
|
6
|
+
@evm = evm
|
7
|
+
end
|
3
8
|
|
4
|
-
|
9
|
+
# Instantiate an automate instance at path or raise an exception with the
|
10
|
+
# message provided if the instantiation returns nil (not found).
|
11
|
+
def instantiate_or_raise(path, message)
|
12
|
+
object = @evm.instantiate(path)
|
13
|
+
if object.nil?
|
14
|
+
raise message
|
15
|
+
end
|
5
16
|
|
6
|
-
|
7
|
-
|
8
|
-
end
|
17
|
+
object
|
18
|
+
end
|
9
19
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
20
|
+
# This is a hacky workaround used to get an instance without executing the
|
21
|
+
# methods on it. It fails if a message is passed in the path or if the
|
22
|
+
# message field on the any of the methods are *.
|
23
|
+
def get_instance_with_attributes(path)
|
24
|
+
if path =~ /#/
|
25
|
+
raise "Does not work with messages in the path."
|
26
|
+
end
|
27
|
+
fake_message = "callingWithAFakeMessage"
|
28
|
+
empty_instance = @evm.instantiate("#{path}##{fake_message}")
|
29
|
+
instance_name = empty_instance.name
|
30
|
+
@evm.instance_get(instance_name)
|
16
31
|
end
|
17
32
|
|
18
|
-
|
19
|
-
|
33
|
+
# Condense multiple types of VM lookups into one call. This is useful when
|
34
|
+
# making an Automate method generic enough to be used during provisioning,
|
35
|
+
# with a custom button, or as a catalog item.
|
36
|
+
#
|
37
|
+
# Lookup methods used and their order can be overridden by specifying
|
38
|
+
# :lookup_order
|
39
|
+
#
|
40
|
+
# The dialog name that may hold the miq ID is specified via :dialog_name
|
41
|
+
def resolve_vm(lookup_order: [:rootvm, :dialog_id, :provision],
|
42
|
+
dialog_name: 'dialog_target_server')
|
43
|
+
|
44
|
+
vm = nil
|
45
|
+
lookup_order.each do |lu_method|
|
46
|
+
vm = vm_lookup_by(lu_method, dialog_name)
|
47
|
+
|
48
|
+
# If we found a VM we can stop looking
|
49
|
+
break unless vm.nil?
|
50
|
+
end
|
51
|
+
|
52
|
+
vm
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def vm_lookup_by(lu_method, dialog_name = nil)
|
58
|
+
case lu_method
|
59
|
+
when :rootvm then @evm.root['vm']
|
60
|
+
when :dialog_id then vm_by_id(@evm.root[dialog_name])
|
61
|
+
when :provision then provision_vm
|
62
|
+
else fail "unknown lookup method #{lu_method}"
|
63
|
+
end
|
64
|
+
end
|
20
65
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
66
|
+
def vm_by_id(vm_id)
|
67
|
+
@evm.vmdb('vm_or_template', vm_id)
|
68
|
+
rescue StandardError
|
69
|
+
nil
|
70
|
+
end
|
71
|
+
|
72
|
+
def provision_vm
|
73
|
+
return nil unless @evm.root['miq_provision'].respond_to?('vm')
|
74
|
+
@evm.root['miq_provision'].vm
|
27
75
|
end
|
28
|
-
fake_message = "callingWithAFakeMessage"
|
29
|
-
empty_instance = @evm.instantiate("#{path}##{fake_message}")
|
30
|
-
instance_name = empty_instance.name
|
31
|
-
@evm.instance_get(instance_name)
|
32
76
|
end
|
33
77
|
end
|
34
|
-
|
data/lib/miq_dev_util/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: miq_dev_util
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Wannemacher
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|