opennebula 5.8.5 → 5.9.80.pre

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
  SHA1:
3
- metadata.gz: 06fd52885b4ac9a83d900172dc8625ff912aba51
4
- data.tar.gz: 7fa11854188fba2ce445964b4a4e35d19b8b1565
3
+ metadata.gz: 321f13bb3966469aa1b7b07f8b83287985be6841
4
+ data.tar.gz: 204f2304bdecee1142c845ee78d6c676de6c4456
5
5
  SHA512:
6
- metadata.gz: 5a578dff3928c681eb3628dde9f8caa21d9e129b3fdeef6645d87c2f1bd19c7caac63d81a23a80b7d92a3f8c7ac6c901a54a07c4ac9a58e6f5736e6220d0fe16
7
- data.tar.gz: 7d3ec63493e2f8dc81bf5cb82f00c12d6f76fd769d640f7de55367d28b7961e579351a657d59134bec9781a484eab6ccab4abb2e90a751829feb0447dc1e099f
6
+ metadata.gz: e358e112f2e6f689f45d8aaab0608b972b15165bf1e17e66346df051027faa676d6ed69355f2305832ae024c7088d243d38206248dd709df6d6557520492dd2c
7
+ data.tar.gz: a299a7153acfb2a60d3dd7731d23c33bd4e2f7685e4e40459ca8f77275c9b42d42dfbef87aa53a9439f72d569f3554be45741f30ee74601ba818ad4ddb7eb607
@@ -17,6 +17,7 @@
17
17
  require 'pp'
18
18
  require 'open3'
19
19
  require 'timeout'
20
+ require 'base64'
20
21
 
21
22
  # Generic command executor that holds the code shared by all the command
22
23
  # executors.
@@ -106,6 +107,18 @@ class GenericCommand
106
107
  tmp[0].join(' ').strip
107
108
  end
108
109
 
110
+ def to_xml
111
+ stdout = @stdout.nil? ? '' : @stdout
112
+ stderr = @stderr.nil? ? '' : @stderr
113
+
114
+ '<EXECUTION_RESULT>' \
115
+ "<COMMAND>#{@command}</COMMAND>" \
116
+ "<STDOUT>#{Base64.encode64(stdout)}</STDOUT>" \
117
+ "<STDERR>#{Base64.encode64(stderr)}</STDERR>" \
118
+ "<CODE>#{@code}</CODE>" \
119
+ '</EXECUTION_RESULT>'
120
+ end
121
+
109
122
  private
110
123
 
111
124
  # Low level command execution. This method has to be redefined
@@ -51,7 +51,8 @@ class VirtualMachineDriver < OpenNebulaDriver
51
51
  :detach_nic => "DETACHNIC",
52
52
  :disk_snapshot_create => "DISKSNAPSHOTCREATE",
53
53
  :resize_disk => "RESIZEDISK",
54
- :update_sg => "UPDATESG"
54
+ :update_sg => "UPDATESG",
55
+ :update_conf => "UPDATECONF"
55
56
  }
56
57
 
57
58
  POLL_ATTRIBUTE = OpenNebula::VirtualMachine::Driver::POLL_ATTRIBUTE
@@ -96,6 +97,7 @@ class VirtualMachineDriver < OpenNebulaDriver
96
97
  register_action(ACTION[:disk_snapshot_create].to_sym, method("disk_snapshot_create"))
97
98
  register_action(ACTION[:resize_disk].to_sym, method("resize_disk"))
98
99
  register_action(ACTION[:update_sg].to_sym, method("update_sg"))
100
+ register_action(ACTION[:update_conf].to_sym, method("update_conf"))
99
101
  end
100
102
 
101
103
  # Decodes the encoded XML driver message received from the core
@@ -220,6 +222,11 @@ class VirtualMachineDriver < OpenNebulaDriver
220
222
  send_message(ACTION[:cleanup],RESULT[:failure],id,error)
221
223
  end
222
224
 
225
+ def update_conf(id, drv_message)
226
+ error = "Action not implemented by driver #{self.class}"
227
+ send_message(ACTION[:update_conf],RESULT[:failure],id,error)
228
+ end
229
+
223
230
  private
224
231
 
225
232
  # Interface to handle the pending events from the ActionManager Interface
@@ -50,7 +50,7 @@ end
50
50
  module CloudClient
51
51
 
52
52
  # OpenNebula version
53
- VERSION = '5.8.5'
53
+ VERSION = '5.9.80'
54
54
 
55
55
  # #########################################################################
56
56
  # Default location for the authentication file
@@ -67,9 +67,12 @@ require 'opennebula/vm_group'
67
67
  require 'opennebula/vm_group_pool'
68
68
  require 'opennebula/vntemplate'
69
69
  require 'opennebula/vntemplate_pool'
70
+ require 'opennebula/hook'
71
+ require 'opennebula/hook_pool'
72
+ require 'opennebula/hook_log'
70
73
 
71
74
  module OpenNebula
72
75
 
73
76
  # OpenNebula version
74
- VERSION = '5.8.5'
77
+ VERSION = '5.9.80'
75
78
  end
@@ -64,8 +64,8 @@ module OpenNebula
64
64
  #######################################################################
65
65
 
66
66
  # Retrieves the information of the given Cluster.
67
- def info()
68
- super(CLUSTER_METHODS[:info], 'CLUSTER')
67
+ def info(decrypt = false)
68
+ super(CLUSTER_METHODS[:info], 'CLUSTER', decrypt)
69
69
  end
70
70
 
71
71
  alias_method :info!, :info
@@ -76,8 +76,8 @@ module OpenNebula
76
76
  #######################################################################
77
77
 
78
78
  # Retrieves the information of the given Datastore.
79
- def info()
80
- super(DATASTORE_METHODS[:info], 'DATASTORE')
79
+ def info(decrypt = false)
80
+ super(DATASTORE_METHODS[:info], 'DATASTORE', decrypt)
81
81
  end
82
82
 
83
83
  alias_method :info!, :info
@@ -0,0 +1,161 @@
1
+ # -------------------------------------------------------------------------- #
2
+ # Copyright 2002-2019, OpenNebula Project, OpenNebula Systems #
3
+ # #
4
+ # Licensed under the Apache License, Version 2.0 (the "License"); you may #
5
+ # not use this file except in compliance with the License. You may obtain #
6
+ # a copy of the License at #
7
+ # #
8
+ # http://www.apache.org/licenses/LICENSE-2.0 #
9
+ # #
10
+ # Unless required by applicable law or agreed to in writing, software #
11
+ # distributed under the License is distributed on an "AS IS" BASIS, #
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
13
+ # See the License for the specific language governing permissions and #
14
+ # limitations under the License. #
15
+ #--------------------------------------------------------------------------- #
16
+
17
+ require 'opennebula/pool_element'
18
+
19
+ module OpenNebula
20
+
21
+ # Class for representing a Hook object.
22
+ class Hook < PoolElement
23
+
24
+ #######################################################################
25
+ # Constants and Class Methods
26
+ #######################################################################
27
+ HOOK_METHODS = {
28
+ :allocate => 'hook.allocate',
29
+ :delete => 'hook.delete',
30
+ :update => 'hook.update',
31
+ :rename => 'hook.rename',
32
+ :info => 'hook.info',
33
+ :lock => 'hook.lock',
34
+ :unlock => 'hook.unlock',
35
+ :retry => 'hook.retry'
36
+ }
37
+
38
+ # Creates a Hook description with just its identifier
39
+ # this method should be used to create plain Hook objects.
40
+ # +id+ the id of the user
41
+ #
42
+ # Example:
43
+ # hook = Hook.new(Hook.build_xml(3),rpc_client)
44
+ #
45
+ def self.build_xml(pe_id = nil)
46
+ if pe_id
47
+ obj_xml = "<HOOK><ID>#{pe_id}</ID></HOOK>"
48
+ else
49
+ obj_xml = '<HOOK></HOOK>'
50
+ end
51
+
52
+ XMLElement.build_xml(obj_xml, 'HOOK')
53
+ end
54
+
55
+ # Class constructor
56
+ def initialize(xml, client)
57
+ super(xml, client)
58
+
59
+ @client = client
60
+ end
61
+
62
+ #######################################################################
63
+ # XML-RPC Methods for the Template Object
64
+ #######################################################################
65
+
66
+ # Retrieves the information of the given Hook.
67
+ def info
68
+ return Error.new('ID not defined') unless @pe_id
69
+
70
+ rc = @client.call(HOOK_METHODS[:info], @pe_id, false)
71
+
72
+ if !OpenNebula.is_error?(rc)
73
+ initialize_xml(rc, 'HOOK')
74
+ rc = nil
75
+
76
+ @pe_id = self['ID'].to_i if self['ID']
77
+ @name = self['NAME'] if self['NAME']
78
+ end
79
+
80
+ rc
81
+ end
82
+
83
+ alias :info! info
84
+
85
+ # Allocates a new Hook in OpenNebula
86
+ #
87
+ # @param template [String] The contents of the Hook template.
88
+ #
89
+ # @return [nil, OpenNebula::Error] nil in case of success, Error
90
+ # otherwise
91
+ def allocate(template)
92
+ super(HOOK_METHODS[:allocate], template)
93
+ end
94
+
95
+ # Deletes the Hook
96
+ #
97
+ # @return [nil, OpenNebula::Error] nil in case of success, Error
98
+ # otherwise
99
+ def delete
100
+ call(HOOK_METHODS[:delete], @pe_id)
101
+ end
102
+
103
+ # Replaces the Hook contents
104
+ #
105
+ # @param new_template [String] New Hook contents
106
+ # @param append [true, false] True to append new attributes instead of
107
+ # replace the whole template
108
+ #
109
+ # @return [nil, OpenNebula::Error] nil in case of success, Error
110
+ # otherwise
111
+ def update(new_template, append = false)
112
+ super(HOOK_METHODS[:update], new_template, append ? 1 : 0)
113
+ end
114
+
115
+ # Renames this Hook
116
+ #
117
+ # @param name [String] New name for the Hook.
118
+ #
119
+ # @return [nil, OpenNebula::Error] nil in case of success, Error
120
+ # otherwise
121
+ def rename(name)
122
+ call(HOOK_METHODS[:rename], @pe_id, name)
123
+ end
124
+
125
+ # Retry a previous execution of the hook.
126
+ #
127
+ # @param exec_id [int] Hook execution id.
128
+ #
129
+ # @return [nil, OpenNebula::Error] nil in case of success, Error
130
+ # otherwise
131
+ def retry(exec_id)
132
+ call(HOOK_METHODS[:retry], @pe_id, exec_id)
133
+ end
134
+
135
+ #######################################################################
136
+ # Helpers to get Hook information
137
+ #######################################################################
138
+
139
+ # Returns the group identifier
140
+ # [return] _Integer_ the element's group ID
141
+ def gid
142
+ self['GID'].to_i
143
+ end
144
+
145
+ def owner_id
146
+ self['UID'].to_i
147
+ end
148
+
149
+ # Lock a Hook
150
+ def lock(level)
151
+ call(HOOK_METHODS[:lock], @pe_id, level)
152
+ end
153
+
154
+ # Unlock a Hook
155
+ def unlock
156
+ call(HOOK_METHODS[:unlock], @pe_id)
157
+ end
158
+
159
+ end
160
+
161
+ end
@@ -0,0 +1,69 @@
1
+ # -------------------------------------------------------------------------- #
2
+ # Copyright 2002-2019, OpenNebula Project, OpenNebula Systems #
3
+ # #
4
+ # Licensed under the Apache License, Version 2.0 (the "License"); you may #
5
+ # not use this file except in compliance with the License. You may obtain #
6
+ # a copy of the License at #
7
+ # #
8
+ # http://www.apache.org/licenses/LICENSE-2.0 #
9
+ # #
10
+ # Unless required by applicable law or agreed to in writing, software #
11
+ # distributed under the License is distributed on an "AS IS" BASIS, #
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
13
+ # See the License for the specific language governing permissions and #
14
+ # limitations under the License. #
15
+ #--------------------------------------------------------------------------- #
16
+
17
+ require 'opennebula/xml_utils'
18
+
19
+ module OpenNebula
20
+
21
+ # Class representing the HookLog
22
+ class HookLog < XMLElement
23
+
24
+ #######################################################################
25
+ # Constants and Class attribute accessors
26
+ #######################################################################
27
+
28
+ HOOK_LOG_METHODS = {
29
+ :info => 'hooklog.info'
30
+ }
31
+
32
+ ROOT_NAME = 'HOOKLOG'
33
+
34
+ #######################################################################
35
+ # Class constructor & Methods
36
+ #######################################################################
37
+
38
+ # +client+ a Client object that represents an XML-RPC connection
39
+ def initialize(client)
40
+ super(nil)
41
+
42
+ @client = client
43
+ end
44
+
45
+ #######################################################################
46
+ # XML-RPC Methods for the HookLog object
47
+ #######################################################################
48
+
49
+ def info(min_ts, max_ts, hook_id, rc)
50
+ rc = @client.call(HOOK_LOG_METHODS[:info],
51
+ min_ts,
52
+ max_ts,
53
+ hook_id,
54
+ rc)
55
+
56
+ if !OpenNebula.is_error?(rc)
57
+ initialize_xml(rc, ROOT_NAME)
58
+
59
+ rc = nil
60
+ end
61
+
62
+ rc
63
+ end
64
+
65
+ alias :info! info
66
+
67
+ end
68
+
69
+ end
@@ -0,0 +1,82 @@
1
+ # -------------------------------------------------------------------------- #
2
+ # Copyright 2002-2019, OpenNebula Project, OpenNebula Systems #
3
+ # #
4
+ # Licensed under the Apache License, Version 2.0 (the "License"); you may #
5
+ # not use this file except in compliance with the License. You may obtain #
6
+ # a copy of the License at #
7
+ # #
8
+ # http://www.apache.org/licenses/LICENSE-2.0 #
9
+ # #
10
+ # Unless required by applicable law or agreed to in writing, software #
11
+ # distributed under the License is distributed on an "AS IS" BASIS, #
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
13
+ # See the License for the specific language governing permissions and #
14
+ # limitations under the License. #
15
+ #--------------------------------------------------------------------------- #
16
+
17
+ require 'opennebula/pool'
18
+
19
+ module OpenNebula
20
+
21
+ # Class representing a HookPool
22
+ class HookPool < Pool
23
+
24
+ #######################################################################
25
+ # Constants and Class attribute accessors
26
+ #######################################################################
27
+
28
+ HOOK_POOL_METHODS = {
29
+ :info => 'hookpool.info'
30
+ }
31
+
32
+ #######################################################################
33
+ # Class constructor & Pool Methods
34
+ #######################################################################
35
+
36
+ # +client+ a Client object that represents an XML-RPC connection
37
+ # +user_id+ used to refer to a Pool with Templates from that user
38
+ def initialize(client, user_id = -1)
39
+ super('HOOK_POOL', 'HOOK', client)
40
+
41
+ @user_id = user_id
42
+ end
43
+
44
+ # Factory method to create Template objects
45
+ def factory(element_xml)
46
+ OpenNebula::Hook.new(element_xml, @client)
47
+ end
48
+
49
+ #######################################################################
50
+ # XML-RPC Methods for the Template Object
51
+ #######################################################################
52
+
53
+ # Retrieves all or part of the Templates in the pool.
54
+ def info(*args)
55
+ case args.size
56
+ when 0
57
+ info_filter(HOOK_POOL_METHODS[:info], @user_id, -1, -1)
58
+ when 3
59
+ info_filter(HOOK_POOL_METHODS[:info], args[0], args[1], args[2])
60
+ end
61
+ end
62
+
63
+ def info_all
64
+ super(HOOK_POOL_METHODS[:info])
65
+ end
66
+
67
+ def info_mine
68
+ super(HOOK_POOL_METHODS[:info])
69
+ end
70
+
71
+ def info_group
72
+ super(HOOK_POOL_METHODS[:info])
73
+ end
74
+
75
+ alias :info! info
76
+ alias :info_all! info_all
77
+ alias :info_mine! info_mine
78
+ alias :info_group! info_group
79
+
80
+ end
81
+
82
+ end
@@ -86,8 +86,8 @@ module OpenNebula
86
86
  #######################################################################
87
87
 
88
88
  # Retrieves the information of the given Host.
89
- def info()
90
- super(HOST_METHODS[:info], 'HOST')
89
+ def info(decrypt = false)
90
+ super(HOST_METHODS[:info], 'HOST', decrypt)
91
91
  end
92
92
 
93
93
  alias_method :info!, :info
@@ -65,10 +65,10 @@ module OpenNebula
65
65
  #
66
66
  # @return [nil, OpenNebula::Error] nil in case of success, Error
67
67
  # otherwise
68
- def info(xml_method, root_element)
68
+ def info(xml_method, root_element, decrypt = false)
69
69
  return Error.new('ID not defined') if !@pe_id
70
70
 
71
- rc = @client.call(xml_method, @pe_id)
71
+ rc = @client.call(xml_method, @pe_id, decrypt)
72
72
 
73
73
  if !OpenNebula.is_error?(rc)
74
74
  initialize_xml(rc, root_element)
@@ -15,7 +15,7 @@
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
17
  require 'openssl'
18
- require 'digest/sha1'
18
+ require 'digest/sha2'
19
19
 
20
20
  require 'base64'
21
21
  require 'fileutils'
@@ -40,7 +40,7 @@ class OpenNebula::ServerCipherAuth
40
40
 
41
41
  if !srv_passwd.empty?
42
42
  # truncate token to 32-bytes for Ruby >= 2.4
43
- @key = Digest::SHA1.hexdigest(@srv_passwd)[0..31]
43
+ @key = Digest::SHA256.hexdigest(@srv_passwd)[0..31]
44
44
  else
45
45
  @key = ""
46
46
  end
@@ -69,10 +69,10 @@ module OpenNebula
69
69
  # Retrieves the information of the given Template.
70
70
  # @param extended [true,false] optional flag to process the template and
71
71
  # include extended information, such as the SIZE for each DISK
72
- def info(extended=false)
72
+ def info(extended=false, decrypt=false)
73
73
  return Error.new('ID not defined') if !@pe_id
74
74
 
75
- rc = @client.call(TEMPLATE_METHODS[:info], @pe_id, extended)
75
+ rc = @client.call(TEMPLATE_METHODS[:info], @pe_id, extended, decrypt)
76
76
 
77
77
  if !OpenNebula.is_error?(rc)
78
78
  initialize_xml(rc, 'VMTEMPLATE')
@@ -98,10 +98,10 @@ module OpenNebula
98
98
  end
99
99
 
100
100
  # Deletes the Template
101
- #
101
+ #
102
102
  # @param recursive [true,false] optional, deletes the template plus
103
103
  # any image defined in DISK.
104
- #
104
+ #
105
105
  # @return [nil, OpenNebula::Error] nil in case of success, Error
106
106
  # otherwise
107
107
  def delete(recursive=false)
@@ -277,8 +277,8 @@ module OpenNebula
277
277
  #######################################################################
278
278
 
279
279
  # Retrieves the information of the given VirtualMachine.
280
- def info()
281
- super(VM_METHODS[:info], 'VM')
280
+ def info(decrypt = false)
281
+ super(VM_METHODS[:info], 'VM', decrypt)
282
282
  end
283
283
 
284
284
  alias_method :info!, :info
@@ -468,7 +468,7 @@ module OpenNebula
468
468
  # overcommited. Defaults to false
469
469
  # @param ds_id [Integer] The System Datastore where to migrate the VM.
470
470
  # To use the current one, set it to -1
471
- # @param mtype [Integer] How to perform the cold migration:
471
+ # @param mtype [Integer] How to perform the cold migration:
472
472
  # - 0: save - restore,
473
473
  # - 1: power off - boot
474
474
  # - 2: power off hard - boot
@@ -50,13 +50,6 @@ module OpenNebula
50
50
  @user_id = user_id
51
51
  end
52
52
 
53
- # Get info extended VM
54
- def get_hash_extended
55
- rc = info_search(:extended => true)
56
- return rc if OpenNebula.is_error?(rc)
57
- to_hash
58
- end
59
-
60
53
  # Default Factory Method for the Pools
61
54
  def factory(element_xml)
62
55
  OpenNebula::VirtualMachine.new(element_xml,@client)
@@ -70,8 +70,8 @@ module OpenNebula
70
70
  #######################################################################
71
71
 
72
72
  # Retrieves the information of the given VirtualNetwork.
73
- def info()
74
- super(VN_METHODS[:info], 'VNET')
73
+ def info(decrypt = false)
74
+ super(VN_METHODS[:info], 'VNET', decrypt)
75
75
  end
76
76
 
77
77
  alias_method :info!, :info
@@ -68,10 +68,10 @@ module OpenNebula
68
68
 
69
69
  # Retrieves the information of the given VNTemplate.
70
70
  # include extended information, such as the SIZE for each DISK
71
- def info()
71
+ def info(decrypt = false)
72
72
  return Error.new('ID not defined') if !@pe_id
73
73
 
74
- rc = @client.call(TEMPLATE_METHODS[:info], @pe_id, false)
74
+ rc = @client.call(TEMPLATE_METHODS[:info], @pe_id, decrypt)
75
75
 
76
76
  if !OpenNebula.is_error?(rc)
77
77
  initialize_xml(rc, 'VNTEMPLATE')
@@ -97,7 +97,7 @@ module OpenNebula
97
97
  end
98
98
 
99
99
  # Deletes the Template
100
- #
100
+ #
101
101
  # @return [nil, OpenNebula::Error] nil in case of success, Error
102
102
  # otherwise
103
103
  def delete()
@@ -21,19 +21,25 @@
21
21
  ONE_LOCATION = ENV['ONE_LOCATION'] unless defined?(ONE_LOCATION)
22
22
 
23
23
  if !ONE_LOCATION
24
- BIN_LOCATION = '/usr/bin' unless defined?(BIN_LOCATION)
25
- LIB_LOCATION = '/usr/lib/one' unless defined?(LIB_LOCATION)
26
- ETC_LOCATION = '/etc/one/' unless defined?(ETC_LOCATION)
27
- VAR_LOCATION = '/var/lib/one' unless defined?(VAR_LOCATION)
24
+ BIN_LOCATION = '/usr/bin' unless defined?(BIN_LOCATION)
25
+ LIB_LOCATION = '/usr/lib/one' unless defined?(LIB_LOCATION)
26
+ ETC_LOCATION = '/etc/one/' unless defined?(ETC_LOCATION)
27
+ VAR_LOCATION = '/var/lib/one' unless defined?(VAR_LOCATION)
28
+ GEMS_LOCATION = '/usr/share/one/gems' unless defined?(GEMS_LOCATION)
28
29
  else
29
- BIN_LOCATION = ONE_LOCATION + '/bin' unless defined?(BIN_LOCATION)
30
- LIB_LOCATION = ONE_LOCATION + '/lib' unless defined?(LIB_LOCATION)
31
- ETC_LOCATION = ONE_LOCATION + '/etc/' unless defined?(ETC_LOCATION)
32
- VAR_LOCATION = ONE_LOCATION + '/var/' unless defined?(VAR_LOCATION)
30
+ BIN_LOCATION = ONE_LOCATION + '/bin' unless defined?(BIN_LOCATION)
31
+ LIB_LOCATION = ONE_LOCATION + '/lib' unless defined?(LIB_LOCATION)
32
+ ETC_LOCATION = ONE_LOCATION + '/etc/' unless defined?(ETC_LOCATION)
33
+ VAR_LOCATION = ONE_LOCATION + '/var/' unless defined?(VAR_LOCATION)
34
+ GEMS_LOCATION = ONE_LOCATION + '/share/gems' unless defined?(GEMS_LOCATION)
33
35
  end
34
36
 
35
37
  ENV['LANG'] = 'C'
36
38
 
39
+ if File.directory?(GEMS_LOCATION)
40
+ Gem.use_paths(GEMS_LOCATION)
41
+ end
42
+
37
43
  $LOAD_PATH << LIB_LOCATION + '/ruby/vendors/rbvmomi/lib'
38
44
  $LOAD_PATH << LIB_LOCATION + '/ruby'
39
45
  $LOAD_PATH << LIB_LOCATION + '/ruby/vcenter_driver'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opennebula
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.8.5
4
+ version: 5.9.80.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenNebula
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-24 00:00:00.000000000 Z
11
+ date: 2019-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -79,6 +79,9 @@ files:
79
79
  - lib/opennebula/error.rb
80
80
  - lib/opennebula/group.rb
81
81
  - lib/opennebula/group_pool.rb
82
+ - lib/opennebula/hook.rb
83
+ - lib/opennebula/hook_log.rb
84
+ - lib/opennebula/hook_pool.rb
82
85
  - lib/opennebula/host.rb
83
86
  - lib/opennebula/host_pool.rb
84
87
  - lib/opennebula/image.rb
@@ -139,9 +142,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
139
142
  version: '0'
140
143
  required_rubygems_version: !ruby/object:Gem::Requirement
141
144
  requirements:
142
- - - '>='
145
+ - - '>'
143
146
  - !ruby/object:Gem::Version
144
- version: '0'
147
+ version: 1.3.1
145
148
  requirements: []
146
149
  rubyforge_project:
147
150
  rubygems_version: 2.0.14.1