opennebula-cli 7.0.2 → 7.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/bin/oneacct +1 -1
  3. data/bin/oneacl +1 -1
  4. data/bin/onebackupjob +1 -1
  5. data/bin/onecluster +1 -1
  6. data/bin/onedatastore +1 -1
  7. data/bin/oneflow +1 -1
  8. data/bin/oneflow-template +1 -1
  9. data/bin/oneform +150 -0
  10. data/bin/onegroup +1 -1
  11. data/bin/onehook +1 -1
  12. data/bin/onehost +1 -1
  13. data/bin/oneimage +1 -1
  14. data/bin/oneirb +1 -1
  15. data/bin/onelog +1 -1
  16. data/bin/onemarket +1 -1
  17. data/bin/onemarketapp +4 -1
  18. data/bin/onesecgroup +1 -1
  19. data/bin/oneshowback +1 -1
  20. data/bin/onetemplate +16 -5
  21. data/bin/oneuser +3 -2
  22. data/bin/onevdc +1 -1
  23. data/bin/onevm +51 -6
  24. data/bin/onevmgroup +1 -1
  25. data/bin/onevnet +1 -1
  26. data/bin/onevntemplate +3 -2
  27. data/bin/onevrouter +1 -1
  28. data/bin/onezone +12 -6
  29. data/lib/cli_helper.rb +153 -1
  30. data/lib/command_parser.rb +1 -1
  31. data/lib/one_helper/oneacct_helper.rb +3 -1
  32. data/lib/one_helper/oneacl_helper.rb +3 -1
  33. data/lib/one_helper/onebackupjob_helper.rb +3 -1
  34. data/lib/one_helper/onecluster_helper.rb +4 -1
  35. data/lib/one_helper/onedatastore_helper.rb +4 -1
  36. data/lib/one_helper/oneflow_helper.rb +1 -1
  37. data/lib/one_helper/oneflowtemplate_helper.rb +1 -1
  38. data/lib/one_helper/oneform_helper.rb +255 -0
  39. data/lib/one_helper/onegroup_helper.rb +133 -98
  40. data/lib/one_helper/onehook_helper.rb +5 -2
  41. data/lib/one_helper/onehost_helper.rb +6 -3
  42. data/lib/one_helper/oneimage_helper.rb +3 -1
  43. data/lib/one_helper/onemarket_helper.rb +3 -1
  44. data/lib/one_helper/onemarketapp_helper.rb +4 -1
  45. data/lib/one_helper/onequota_helper.rb +105 -22
  46. data/lib/one_helper/onesecgroup_helper.rb +3 -1
  47. data/lib/one_helper/onetemplate_helper.rb +3 -2
  48. data/lib/one_helper/oneuser_helper.rb +165 -156
  49. data/lib/one_helper/onevdc_helper.rb +3 -1
  50. data/lib/one_helper/onevm_helper.rb +6 -2
  51. data/lib/one_helper/onevmgroup_helper.rb +3 -1
  52. data/lib/one_helper/onevnet_helper.rb +16 -5
  53. data/lib/one_helper/onevntemplate_helper.rb +3 -2
  54. data/lib/one_helper/onevrouter_helper.rb +3 -1
  55. data/lib/one_helper/onezone_helper.rb +16 -5
  56. data/lib/one_helper.rb +53 -18
  57. data/share/schemas/xsd/group.xsd +8 -0
  58. data/share/schemas/xsd/group_pool.xsd +8 -0
  59. data/share/schemas/xsd/opennebula_configuration.xsd +6 -10
  60. data/share/schemas/xsd/shared.xsd +8 -0
  61. data/share/schemas/xsd/user.xsd +8 -0
  62. data/share/schemas/xsd/user_pool.xsd +8 -0
  63. data/share/schemas/xsd/vm.xsd +20 -0
  64. data/share/schemas/xsd/vnet.xsd +2 -1
  65. data/share/schemas/xsd/vnet_pool.xsd +1 -0
  66. metadata +7 -4
@@ -1,5 +1,5 @@
1
1
  # -------------------------------------------------------------------------- #
2
- # Copyright 2002-2025, OpenNebula Project, OpenNebula Systems #
2
+ # Copyright 2002-2026, OpenNebula Project, OpenNebula Systems #
3
3
  # #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you may #
5
5
  # not use this file except in compliance with the License. You may obtain #
@@ -16,14 +16,18 @@
16
16
 
17
17
  require 'one_helper'
18
18
  require 'one_helper/onequota_helper'
19
+ require 'opennebula/group'
20
+ require 'opennebula/group_pool'
19
21
 
22
+ # CLI helper for onegroup command
20
23
  class OneGroupHelper < OpenNebulaHelper::OneHelper
24
+
21
25
  def self.rname
22
- "GROUP"
26
+ 'GROUP'
23
27
  end
24
28
 
25
29
  def self.conf_file
26
- "onegroup.yaml"
30
+ 'onegroup.yaml'
27
31
  end
28
32
 
29
33
  def create_resource(options, &block)
@@ -34,12 +38,12 @@ class OneGroupHelper < OpenNebulaHelper::OneHelper
34
38
  if OpenNebula.is_error?(rc)
35
39
  return -1, rc.message
36
40
  else
37
- puts "ID: #{group.id.to_s}"
41
+ puts "ID: #{group.id}"
38
42
  end
39
43
 
40
44
  puts "Creating default ACL rules: #{GROUP_DEFAULT_ACLS}" if options[:verbose]
41
45
 
42
- exit_code , msg = group.create_default_acls
46
+ exit_code, _msg = group.create_default_acls
43
47
 
44
48
  if OpenNebula.is_error?(exit_code)
45
49
  return -1, exit_code.message
@@ -60,23 +64,32 @@ class OneGroupHelper < OpenNebulaHelper::OneHelper
60
64
  return 0
61
65
  end
62
66
 
63
- def format_pool(options)
67
+ def format_pool(_options)
64
68
  config_file = self.class.table_conf
65
69
 
66
- table = CLIHelper::ShowTable.new(config_file, self) do
67
- def pool_default_quotas(path)
68
- @data.dsearch('/GROUP_POOL/DEFAULT_GROUP_QUOTAS/'+path)
70
+ # rubocop:disable Style/FormatStringToken
71
+ CLIHelper::ShowTable.new(config_file, self) do
72
+ pool_default_quotas = lambda do |path|
73
+ limit = @data.dsearch('/GROUP_POOL/DEFAULT_GROUP_QUOTAS/'+path)
74
+ limit = OneQuotaHelper::LIMIT_UNLIMITED if limit.nil? || limit.empty?
75
+ limit
69
76
  end
70
77
 
71
- def quotas
78
+ quotas_proc = lambda do
72
79
  if !defined?(@quotas)
73
80
  quotas = @data.dsearch('GROUP_POOL/QUOTAS')
74
- @quotas = Hash.new
81
+ @quotas = {}
75
82
 
76
- if (!quotas.nil?)
83
+ if !quotas.nil?
77
84
  quotas = [quotas].flatten
78
85
 
79
86
  quotas.each do |q|
87
+ # Fix rare bug, when there are multiple VM_QUOTA values
88
+ vm_quota = q['VM_QUOTA']
89
+ if vm_quota.is_a?(Array)
90
+ q['VM_QUOTA'] = vm_quota.max_by {|h| h.size }
91
+ end
92
+
80
93
  @quotas[q['ID']] = q
81
94
  end
82
95
  end
@@ -84,112 +97,141 @@ class OneGroupHelper < OpenNebulaHelper::OneHelper
84
97
  @quotas
85
98
  end
86
99
 
87
- column :ID, "ONE identifier for the Group", :size=>4 do |d|
88
- d["ID"]
100
+ column :ID, 'ONE identifier for the Group', :size=>4 do |d|
101
+ d['ID']
89
102
  end
90
103
 
91
- column :NAME, "Name of the Group", :left, :size=>29 do |d|
92
- d["NAME"]
104
+ column :NAME, 'Name of the Group', :left, :size=>29 do |d|
105
+ d['NAME']
93
106
  end
94
107
 
95
- column :USERS, "Number of Users in this group", :size=>5 do |d|
96
- ids = d["USERS"]["ID"]
108
+ column :USERS, 'Number of Users in this group', :size=>5 do |d|
109
+ ids = d['USERS']['ID']
97
110
 
98
111
  case ids
99
112
  when String
100
- "1"
113
+ '1'
101
114
  when Array
102
115
  ids.size
103
116
  else
104
- "0"
117
+ '0'
105
118
  end
106
119
  end
107
120
 
108
- column :VMS , "Number of VMS", :size=>9 do |d|
121
+ column :VMS, 'Number of VMS', :size=>9 do |d|
109
122
  begin
110
- q = quotas[d['ID']]
123
+ q = quotas_proc.call[d['ID']]['VM_QUOTA']['VM']
111
124
 
112
- if q['VM_QUOTA']['VM'].nil? && d["ID"].to_i != 0
113
- q['VM_QUOTA']['VM'] = OneQuotaHelper::DEFAULT_VM_QUOTA
125
+ if q.nil? && d['ID'].to_i != 0
126
+ q = OneQuotaHelper::DEFAULT_VM_QUOTA
114
127
  end
115
128
 
116
- limit = q['VM_QUOTA']['VM']["VMS"]
117
-
118
- if limit == OneQuotaHelper::LIMIT_DEFAULT
119
- limit = pool_default_quotas("VM_QUOTA/VM/VMS")
120
- limit = OneQuotaHelper::LIMIT_UNLIMITED if limit.nil? || limit == ""
129
+ # In case of multiple quotas, use the global quota or the first
130
+ if q.is_a?(Array)
131
+ global_h = q.find {|h| h['CLUSTER_IDS'].nil? || h['CLUSTER_IDS'].empty? }
132
+ q = global_h || q[0]
121
133
  end
122
134
 
135
+ limit = q['VMS']
136
+ limit = pool_default_quotas.call('VM_QUOTA/VM/VMS') if limit == OneQuotaHelper::LIMIT_DEFAULT
137
+
123
138
  if limit == OneQuotaHelper::LIMIT_UNLIMITED
124
- "%3d / -" % [q['VM_QUOTA']['VM']["VMS_USED"]]
139
+ format('%3d / -', q['VMS_USED'])
125
140
  else
126
- "%3d / %3d" % [q['VM_QUOTA']['VM']["VMS_USED"], limit]
141
+ format('%3d / %3d', q['VMS_USED'], limit)
127
142
  end
128
-
129
143
  rescue NoMethodError
130
- "-"
144
+ '-'
131
145
  end
132
146
  end
133
147
 
134
- column :MEMORY, "Total memory allocated to user VMs", :size=>17 do |d|
148
+ column :MEMORY, 'Total memory allocated to user VMs', :size=>15 do |d|
135
149
  begin
136
- q = quotas[d['ID']]
150
+ q = quotas_proc.call[d['ID']]['VM_QUOTA']['VM']
137
151
 
138
- if q['VM_QUOTA']['VM'].nil? && d["ID"].to_i != 0
139
- q['VM_QUOTA']['VM'] = OneQuotaHelper::DEFAULT_VM_QUOTA
152
+ if q.nil? && d['ID'].to_i != 0
153
+ q = OneQuotaHelper::DEFAULT_VM_QUOTA
140
154
  end
141
155
 
142
- limit = q['VM_QUOTA']['VM']["MEMORY"]
143
-
144
- if limit == OneQuotaHelper::LIMIT_DEFAULT
145
- limit = pool_default_quotas("VM_QUOTA/VM/MEMORY")
146
- limit = OneQuotaHelper::LIMIT_UNLIMITED if limit.nil? || limit == ""
156
+ # In case of multiple quotas, use the global quota or the first
157
+ if q.is_a?(Array)
158
+ global_h = q.find {|h| h['CLUSTER_IDS'].nil? || h['CLUSTER_IDS'].empty? }
159
+ q = global_h || q[0]
147
160
  end
148
161
 
162
+ limit = q['MEMORY']
163
+ limit = pool_default_quotas.call('VM_QUOTA/VM/MEMORY') if limit == OneQuotaHelper::LIMIT_DEFAULT
164
+
149
165
  if limit == OneQuotaHelper::LIMIT_UNLIMITED
150
- "%7s / -" % [
151
- OpenNebulaHelper.unit_to_str(q['VM_QUOTA']['VM']["MEMORY_USED"].to_i,{},"M")]
166
+ format('%6s / -',
167
+ OpenNebulaHelper.unit_to_str(q['MEMORY_USED'].to_i, {}, 'M'))
152
168
  else
153
- "%7s / %7s" % [
154
- OpenNebulaHelper.unit_to_str(q['VM_QUOTA']['VM']["MEMORY_USED"].to_i,{},"M"),
155
- OpenNebulaHelper.unit_to_str(limit.to_i,{},"M")]
169
+ format('%6s / %6s',
170
+ OpenNebulaHelper.unit_to_str(q['MEMORY_USED'].to_i, {}, 'M'),
171
+ OpenNebulaHelper.unit_to_str(limit.to_i, {}, 'M'))
156
172
  end
157
-
158
173
  rescue NoMethodError
159
- "-"
174
+ '-'
160
175
  end
161
176
  end
162
177
 
163
- column :CPU, "Total CPU allocated to user VMs", :size=>11 do |d|
178
+ column :CPU, 'Total CPU allocated to user VMs', :size=>11 do |d|
164
179
  begin
165
- q = quotas[d['ID']]
180
+ q = quotas_proc.call[d['ID']]['VM_QUOTA']['VM']
166
181
 
167
- if q['VM_QUOTA']['VM'].nil? && d["ID"].to_i != 0
168
- q['VM_QUOTA']['VM'] = OneQuotaHelper::DEFAULT_VM_QUOTA
182
+ if q.nil? && d['ID'].to_i != 0
183
+ q = OneQuotaHelper::DEFAULT_VM_QUOTA
169
184
  end
170
185
 
171
- limit = q['VM_QUOTA']['VM']["CPU"]
172
-
173
- if limit == OneQuotaHelper::LIMIT_DEFAULT
174
- limit = pool_default_quotas("VM_QUOTA/VM/CPU")
175
- limit = OneQuotaHelper::LIMIT_UNLIMITED if limit.nil? || limit == ""
186
+ # In case of multiple quotas, use the global quota or the first
187
+ if q.is_a?(Array)
188
+ global_h = q.find {|h| h['CLUSTER_IDS'].nil? || h['CLUSTER_IDS'].empty? }
189
+ q = global_h || q[0]
176
190
  end
177
191
 
192
+ limit = q['CPU']
193
+ limit = pool_default_quotas.call('VM_QUOTA/VM/CPU') if limit == OneQuotaHelper::LIMIT_DEFAULT
194
+
178
195
  if limit == OneQuotaHelper::LIMIT_UNLIMITED
179
- "%3.1f / -" % [q['VM_QUOTA']['VM']["CPU_USED"]]
196
+ format('%3.1f / -', q['CPU_USED'])
180
197
  else
181
- "%3.1f / %3.1f" % [q['VM_QUOTA']['VM']["CPU_USED"], limit]
198
+ format('%3.1f / %3.1f', q['CPU_USED'], limit)
199
+ end
200
+ rescue NoMethodError
201
+ '-'
202
+ end
203
+ end
204
+
205
+ column :PCI, 'Total PCIs allocated to user VMs', :size=>9 do |d|
206
+ begin
207
+ q = quotas_proc.call[d['ID']]['VM_QUOTA']['VM']
208
+
209
+ if q.nil? && d['ID'].to_i != 0
210
+ q = OneQuotaHelper::DEFAULT_VM_QUOTA
182
211
  end
183
212
 
213
+ # In case of multiple quotas, use the global quota or the first
214
+ if q.is_a?(Array)
215
+ global_q = q.find {|h| h['CLUSTER_IDS'].nil? || h['CLUSTER_IDS'].empty? }
216
+ q = global_q || q[0]
217
+ end
218
+
219
+ limit = q['PCI_DEV']
220
+ limit = pool_default_quotas.call('VM_QUOTA/VM/PCI_DEV') if limit == OneQuotaHelper::LIMIT_DEFAULT
221
+
222
+ if limit == OneQuotaHelper::LIMIT_UNLIMITED
223
+ format('%3s / -', q['PCI_DEV_USED'])
224
+ else
225
+ format('%3s / %3s', q['PCI_DEV_USED'], limit)
226
+ end
184
227
  rescue NoMethodError
185
- "-"
228
+ '-'
186
229
  end
187
230
  end
188
231
 
189
- default :ID, :NAME, :USERS, :VMS, :MEMORY, :CPU
232
+ default :ID, :NAME, :USERS, :VMS, :MEMORY, :CPU, :PCI
190
233
  end
191
-
192
- table
234
+ # rubocop:enable Style/FormatStringToken
193
235
  end
194
236
 
195
237
  # Parses a OpenNebula template string and turns it into a Hash
@@ -200,21 +242,21 @@ class OneGroupHelper < OpenNebulaHelper::OneHelper
200
242
  variable_reg =/\s*(#{name_reg})\s*=\s*/
201
243
  single_variable_reg =/^#{variable_reg}([^\[]+?)(#.*)?$/
202
244
 
203
- tmpl = Hash.new
204
- tmpl['user'] = Hash.new
245
+ tmpl = {}
246
+ tmpl['user'] = {}
205
247
 
206
- tmpl_str.scan(single_variable_reg) do | m |
248
+ tmpl_str.scan(single_variable_reg) do |m|
207
249
  key = m[0].strip.downcase
208
- value = m[1].strip.gsub("\"","")
250
+ value = m[1].strip.gsub('"', '')
209
251
  case key
210
- when "admin_user_name"
211
- tmpl['user']['name']=value
212
- when "admin_user_password"
213
- tmpl['user']['password']=value
214
- when "admin_user_auth_driver"
215
- tmpl['user']['auth_driver']=value
216
- else
217
- tmpl[key] = value
252
+ when 'admin_user_name'
253
+ tmpl['user']['name']=value
254
+ when 'admin_user_password'
255
+ tmpl['user']['password']=value
256
+ when 'admin_user_auth_driver'
257
+ tmpl['user']['auth_driver']=value
258
+ else
259
+ tmpl[key] = value
218
260
  end
219
261
  end
220
262
 
@@ -223,7 +265,7 @@ class OneGroupHelper < OpenNebulaHelper::OneHelper
223
265
 
224
266
  private
225
267
 
226
- def factory(id=nil)
268
+ def factory(id = nil)
227
269
  if id
228
270
  OpenNebula::Group.new_with_id(id, @client)
229
271
  else
@@ -232,39 +274,33 @@ class OneGroupHelper < OpenNebulaHelper::OneHelper
232
274
  end
233
275
  end
234
276
 
235
- def factory_pool(user_flag=-2)
236
- #TBD OpenNebula::UserPool.new(@client, user_flag)
277
+ def factory_pool(_user_flag = -2)
237
278
  @group_pool = OpenNebula::GroupPool.new(@client)
238
- return @group_pool
239
279
  end
240
280
 
241
- def format_resource(group, options = {})
242
- system = System.new(@client)
243
-
244
- str="%-15s: %-20s"
245
- str_h1="%-80s"
281
+ def format_resource(group, _options = {})
282
+ str='%-15s: %-20s'
283
+ str_h1='%-80s'
246
284
 
247
285
  CLIHelper.print_header(str_h1 % "GROUP #{group['ID']} INFORMATION")
248
- puts str % ["ID", group.id.to_s]
249
- puts str % ["NAME", group.name]
286
+ puts format(str, 'ID', group.id.to_s)
287
+ puts format(str, 'NAME', group.name)
250
288
  puts
251
289
 
252
- CLIHelper.print_header(str_h1 % "GROUP TEMPLATE",false)
290
+ CLIHelper.print_header(str_h1 % 'GROUP TEMPLATE', false)
253
291
  puts group.template_str
254
292
  puts
255
293
 
256
- admin_ids = group.admin_ids
257
-
258
294
  CLIHelper::ShowTable.new(nil, self) do
259
- column :"USER ID", "", :right, :size=>7 do |d|
295
+ column :"USER ID", '', :right, :size=>7 do |d|
260
296
  d
261
297
  end
262
298
 
263
- column :"ADMIN", "", :left, :size=>5 do |d|
264
- if (group.admin_ids.include?(d))
265
- "*"
299
+ column :ADMIN, '', :left, :size=>5 do |d|
300
+ if group.admin_ids.include?(d)
301
+ '*'
266
302
  else
267
- ""
303
+ ''
268
304
  end
269
305
  end
270
306
  end.show(group.user_ids, {})
@@ -273,11 +309,10 @@ class OneGroupHelper < OpenNebulaHelper::OneHelper
273
309
 
274
310
  default_quotas = nil
275
311
 
276
- group.each('/GROUP/DEFAULT_GROUP_QUOTAS') { |elem|
277
- default_quotas = elem
278
- }
312
+ group.each('/GROUP/DEFAULT_GROUP_QUOTAS') {|elem| default_quotas = elem }
279
313
 
280
314
  helper = OneQuotaHelper.new(@client)
281
315
  helper.format_quota(group_hash['GROUP'], default_quotas, group.id)
282
316
  end
317
+
283
318
  end
@@ -1,5 +1,5 @@
1
1
  # -------------------------------------------------------------------------- #
2
- # Copyright 2002-2025, OpenNebula Project, OpenNebula Systems #
2
+ # Copyright 2002-2026, OpenNebula Project, OpenNebula Systems #
3
3
  # #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you may #
5
5
  # not use this file except in compliance with the License. You may obtain #
@@ -15,7 +15,10 @@
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
17
  require 'one_helper'
18
- require 'rubygems'
18
+ require 'opennebula/hook'
19
+ require 'opennebula/hook_pool'
20
+ require 'opennebula/hook_log'
21
+ require 'base64'
19
22
 
20
23
  # implements onehook command
21
24
  class OneHookHelper < OpenNebulaHelper::OneHelper
@@ -1,5 +1,5 @@
1
1
  # -------------------------------------------------------------------------- #
2
- # Copyright 2002-2025, OpenNebula Project, OpenNebula Systems #
2
+ # Copyright 2002-2026, OpenNebula Project, OpenNebula Systems #
3
3
  # #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you may #
5
5
  # not use this file except in compliance with the License. You may obtain #
@@ -14,11 +14,14 @@
14
14
  # limitations under the License. #
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
+ require 'time'
18
+ require 'fileutils'
17
19
  require 'HostSyncManager'
18
20
  require 'one_helper'
19
21
  require 'one_helper/onevm_helper'
20
- require 'rubygems'
21
- require 'time'
22
+ require 'opennebula/host'
23
+ require 'opennebula/host_pool'
24
+ require 'opennebula/system'
22
25
 
23
26
  # implements onehost command
24
27
  class OneHostHelper < OpenNebulaHelper::OneHelper
@@ -1,5 +1,5 @@
1
1
  # -------------------------------------------------------------------------- #
2
- # Copyright 2002-2025, OpenNebula Project, OpenNebula Systems #
2
+ # Copyright 2002-2026, OpenNebula Project, OpenNebula Systems #
3
3
  # #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you may #
5
5
  # not use this file except in compliance with the License. You may obtain #
@@ -16,6 +16,8 @@
16
16
 
17
17
  require 'one_helper'
18
18
  require 'one_helper/onevm_helper'
19
+ require 'opennebula/image'
20
+ require 'opennebula/image_pool'
19
21
 
20
22
  # CLI helper for oneimage command
21
23
  class OneImageHelper < OpenNebulaHelper::OneHelper
@@ -1,5 +1,5 @@
1
1
  # -------------------------------------------------------------------------- #
2
- # Copyright 2002-2025, OpenNebula Project, OpenNebula Systems #
2
+ # Copyright 2002-2026, OpenNebula Project, OpenNebula Systems #
3
3
  # #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you may #
5
5
  # not use this file except in compliance with the License. You may obtain #
@@ -15,6 +15,8 @@
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
17
  require 'one_helper'
18
+ require 'opennebula/marketplace'
19
+ require 'opennebula/marketplace_pool'
18
20
 
19
21
  class OneMarketPlaceHelper < OpenNebulaHelper::OneHelper
20
22
  MARKETPLACE = {
@@ -1,5 +1,5 @@
1
1
  # -------------------------------------------------------------------------- #
2
- # Copyright 2002-2025, OpenNebula Project, OpenNebula Systems #
2
+ # Copyright 2002-2026, OpenNebula Project, OpenNebula Systems #
3
3
  # #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you may #
5
5
  # not use this file except in compliance with the License. You may obtain #
@@ -15,9 +15,12 @@
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
17
  require 'one_helper'
18
+ require 'opennebula/marketplaceapp'
19
+ require 'opennebula/marketplaceapp_pool'
18
20
  require 'opennebula/marketplaceapp_ext'
19
21
  require 'opennebula/template_ext'
20
22
  require 'opennebula/virtual_machine_ext'
23
+ require 'opennebula/flow/service_template'
21
24
  require 'opennebula/flow/service_template_ext'
22
25
 
23
26
  require 'securerandom'