opennebula 6.10.3 → 6.99.85.pre

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 (131) hide show
  1. checksums.yaml +4 -4
  2. data/lib/cloud/CloudClient.rb +3 -3
  3. data/lib/models/role.rb +349 -823
  4. data/lib/models/service.rb +156 -80
  5. data/lib/models/vmrole.rb +703 -0
  6. data/lib/models/vrrole.rb +284 -0
  7. data/lib/models.rb +3 -1
  8. data/lib/opennebula/acl.rb +1 -1
  9. data/lib/opennebula/acl_pool.rb +1 -1
  10. data/lib/opennebula/backupjob.rb +1 -1
  11. data/lib/opennebula/backupjob_pool.rb +1 -1
  12. data/lib/opennebula/client.rb +1 -1
  13. data/lib/opennebula/cluster.rb +45 -2
  14. data/lib/opennebula/cluster_pool.rb +1 -1
  15. data/lib/opennebula/datastore.rb +1 -1
  16. data/lib/opennebula/datastore_pool.rb +1 -1
  17. data/lib/opennebula/document.rb +1 -1
  18. data/lib/opennebula/document_json.rb +1 -1
  19. data/lib/opennebula/document_pool.rb +1 -1
  20. data/lib/opennebula/document_pool_json.rb +1 -1
  21. data/lib/opennebula/error.rb +1 -1
  22. data/lib/opennebula/flow/grammar.rb +1 -1
  23. data/lib/opennebula/flow/service_pool.rb +1 -1
  24. data/lib/opennebula/flow/service_template.rb +353 -97
  25. data/lib/opennebula/flow/service_template_ext.rb +3 -3
  26. data/lib/opennebula/flow/service_template_pool.rb +1 -1
  27. data/lib/opennebula/flow/validator.rb +458 -410
  28. data/lib/opennebula/flow.rb +1 -1
  29. data/lib/opennebula/group.rb +1 -1
  30. data/lib/opennebula/group_pool.rb +1 -1
  31. data/lib/opennebula/hook.rb +1 -1
  32. data/lib/opennebula/hook_log.rb +1 -1
  33. data/lib/opennebula/hook_pool.rb +1 -1
  34. data/lib/opennebula/host.rb +1 -60
  35. data/lib/opennebula/host_pool.rb +1 -1
  36. data/lib/opennebula/image.rb +1 -1
  37. data/lib/opennebula/image_pool.rb +1 -1
  38. data/lib/opennebula/ldap_auth.rb +1 -1
  39. data/lib/opennebula/ldap_auth_spec.rb +1 -1
  40. data/lib/opennebula/lockable_ext.rb +1 -1
  41. data/lib/opennebula/marketplace.rb +1 -1
  42. data/lib/opennebula/marketplace_pool.rb +1 -1
  43. data/lib/opennebula/marketplaceapp.rb +1 -1
  44. data/lib/opennebula/marketplaceapp_ext.rb +14 -211
  45. data/lib/opennebula/marketplaceapp_pool.rb +1 -1
  46. data/lib/opennebula/oneflow_client.rb +11 -9
  47. data/lib/opennebula/pool.rb +1 -1
  48. data/lib/opennebula/pool_element.rb +1 -1
  49. data/lib/opennebula/security_group.rb +1 -1
  50. data/lib/opennebula/security_group_pool.rb +1 -1
  51. data/lib/opennebula/server_cipher_auth.rb +1 -1
  52. data/lib/opennebula/server_x509_auth.rb +1 -1
  53. data/lib/opennebula/ssh_auth.rb +1 -1
  54. data/lib/opennebula/system.rb +1 -1
  55. data/lib/opennebula/template.rb +1 -1
  56. data/lib/opennebula/template_ext.rb +1 -1
  57. data/lib/opennebula/template_pool.rb +1 -1
  58. data/lib/opennebula/user.rb +1 -1
  59. data/lib/opennebula/user_pool.rb +1 -1
  60. data/lib/opennebula/utils.rb +2 -2
  61. data/lib/opennebula/vdc.rb +1 -1
  62. data/lib/opennebula/vdc_pool.rb +1 -1
  63. data/lib/opennebula/virtual_machine.rb +3 -12
  64. data/lib/opennebula/virtual_machine_ext.rb +2 -31
  65. data/lib/opennebula/virtual_machine_pool.rb +1 -1
  66. data/lib/opennebula/virtual_network.rb +1 -1
  67. data/lib/opennebula/virtual_network_pool.rb +1 -1
  68. data/lib/opennebula/virtual_router.rb +1 -1
  69. data/lib/opennebula/virtual_router_pool.rb +1 -1
  70. data/lib/opennebula/vm_group.rb +1 -1
  71. data/lib/opennebula/vm_group_pool.rb +1 -1
  72. data/lib/opennebula/vntemplate.rb +1 -1
  73. data/lib/opennebula/vntemplate_pool.rb +1 -1
  74. data/lib/opennebula/wait_ext.rb +1 -1
  75. data/lib/opennebula/x509_auth.rb +1 -1
  76. data/lib/opennebula/xml_element.rb +2 -2
  77. data/lib/opennebula/xml_pool.rb +1 -1
  78. data/lib/opennebula/xml_utils.rb +1 -1
  79. data/lib/opennebula/zone.rb +1 -1
  80. data/lib/opennebula/zone_pool.rb +1 -1
  81. data/lib/opennebula.rb +2 -2
  82. metadata +6 -67
  83. data/lib/ActionManager.rb +0 -280
  84. data/lib/CommandManager.rb +0 -328
  85. data/lib/DriverExecHelper.rb +0 -213
  86. data/lib/HostSyncManager.rb +0 -111
  87. data/lib/OpenNebulaDriver.rb +0 -223
  88. data/lib/VirtualMachineDriver.rb +0 -404
  89. data/lib/datacenter.rb +0 -1319
  90. data/lib/datastore.rb +0 -1049
  91. data/lib/distributed_firewall.rb +0 -293
  92. data/lib/file_helper.rb +0 -374
  93. data/lib/host.rb +0 -1518
  94. data/lib/logical_port.rb +0 -50
  95. data/lib/logical_switch.rb +0 -77
  96. data/lib/memoize.rb +0 -74
  97. data/lib/network.rb +0 -705
  98. data/lib/nsx_client.rb +0 -157
  99. data/lib/nsx_component.rb +0 -28
  100. data/lib/nsx_constants.rb +0 -162
  101. data/lib/nsx_driver.rb +0 -91
  102. data/lib/nsx_error.rb +0 -77
  103. data/lib/nsx_rule.rb +0 -206
  104. data/lib/nsxt_client.rb +0 -189
  105. data/lib/nsxt_dfw.rb +0 -196
  106. data/lib/nsxt_logical_port.rb +0 -94
  107. data/lib/nsxt_rule.rb +0 -188
  108. data/lib/nsxt_tz.rb +0 -38
  109. data/lib/nsxv_client.rb +0 -189
  110. data/lib/nsxv_dfw.rb +0 -202
  111. data/lib/nsxv_logical_port.rb +0 -107
  112. data/lib/nsxv_rule.rb +0 -172
  113. data/lib/nsxv_tz.rb +0 -41
  114. data/lib/opaque_network.rb +0 -134
  115. data/lib/rest_client.rb +0 -191
  116. data/lib/scripts_common.rb +0 -176
  117. data/lib/transport_zone.rb +0 -43
  118. data/lib/vcenter_driver.rb +0 -152
  119. data/lib/vcenter_importer.rb +0 -626
  120. data/lib/vi_client.rb +0 -273
  121. data/lib/vi_helper.rb +0 -328
  122. data/lib/virtual_machine.rb +0 -3574
  123. data/lib/virtual_wire.rb +0 -158
  124. data/lib/vm_device.rb +0 -80
  125. data/lib/vm_disk.rb +0 -202
  126. data/lib/vm_folder.rb +0 -69
  127. data/lib/vm_helper.rb +0 -30
  128. data/lib/vm_monitor.rb +0 -305
  129. data/lib/vm_nic.rb +0 -70
  130. data/lib/vm_template.rb +0 -2112
  131. data/lib/vmm_importer.rb +0 -165
data/lib/network.rb DELETED
@@ -1,705 +0,0 @@
1
- # -------------------------------------------------------------------------- #
2
- # Copyright 2002-2024, 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 'digest'
18
-
19
- ##############################################################################
20
- # Module VCenterDriver
21
- ##############################################################################
22
- module VCenterDriver
23
-
24
- ##########################################################################
25
- # Class NetworkFolder
26
- ##########################################################################
27
- class NetworkFolder
28
-
29
- attr_accessor :item, :items
30
-
31
- def initialize(item)
32
- @item = item
33
- @items = {}
34
- end
35
-
36
- ######################################################################
37
- # Builds a hash with Network-Ref / Network to be used as a cache
38
- # @return [Hash] in the form
39
- # { ds_ref [Symbol] => Network object }
40
- ######################################################################
41
- def fetch!
42
- VIClient.get_entities(@item, 'Network').each do |item|
43
- item_name = item._ref
44
- @items[item_name.to_sym] = PortGroup.new(item)
45
- end
46
-
47
- VIClient
48
- .get_entities(
49
- @item,
50
- 'DistributedVirtualPortgroup'
51
- ).each do |item|
52
- item_name = item._ref
53
- @items[item_name.to_sym] = DistributedPortGroup.new(item)
54
- end
55
-
56
- VIClient
57
- .get_entities(
58
- @item,
59
- 'VmwareDistributedVirtualSwitch'
60
- ).each do |item|
61
- item_name = item._ref
62
- @items[item_name.to_sym] = DistributedVirtualSwitch.new(item)
63
- end
64
-
65
- VIClient.get_entities(@item, 'OpaqueNetwork').each do |item|
66
- item_name = item._ref
67
- @items[item_name.to_sym] = OpaqueNetwork.new(item)
68
- end
69
- end
70
-
71
- ########################################################################
72
- # Returns a Network. Uses the cache if available.
73
- # @param ref [Symbol] the vcenter ref
74
- # @return Network
75
- ########################################################################
76
- def get(ref)
77
- if !@items[ref.to_sym]
78
- rbvmomi_net = RbVmomi::VIM::Network.new(@item._connection, ref)
79
- @items[ref.to_sym] = Network.new(rbvmomi_net)
80
- end
81
-
82
- @items[ref.to_sym]
83
- end
84
-
85
- end
86
- # class NetworkFolder
87
-
88
- ##########################################################################
89
- # Class Network
90
- ##########################################################################
91
- class Network
92
-
93
- attr_accessor :item
94
-
95
- include Memoize
96
-
97
- NETWORK_TYPE_PG = 'Port Group'
98
- NETWORK_TYPE_DPG = 'Distributed Port Group'
99
- NETWORK_TYPE_NSXV = 'NSX-V' # "Virtual Wire"
100
- NETWORK_TYPE_NSXT = 'Opaque Network'
101
- NETWORK_TYPE_UNKNOWN = 'Unknown Network'
102
-
103
- def initialize(item, vi_client = nil, check = true)
104
- if check
105
- begin
106
- check_item(item, RbVmomi::VIM::Network)
107
- rescue StandardError
108
- check_item(item, RbVmomi::VIM::DistributedVirtualPortgroup)
109
- end
110
- end
111
-
112
- @vi_client = vi_client
113
- @item = item
114
- end
115
-
116
- # Checks if a RbVmomi::VIM::VirtualDevice is a network interface
117
- def self.nic?(device)
118
- !device
119
- .class
120
- .ancestors
121
- .index(
122
- RbVmomi::VIM::VirtualEthernetCard
123
- ).nil?
124
- end
125
-
126
- def self.vlanid(vid)
127
- case vid
128
- when -1
129
- 'error'
130
- when 0
131
- 'disabled'
132
- when 4095
133
- 'VGT'
134
- else
135
- vid.to_s
136
- end
137
- end
138
-
139
- def self.retrieve_vlanid(network)
140
- begin
141
- name = network.name
142
- id = network
143
- .host
144
- .first
145
- .configManager
146
- .networkSystem
147
- .networkConfig
148
- .portgroup
149
- .select do |p|
150
- p.spec.name == name
151
- end.first.spec.vlanId
152
- rescue StandardError
153
- id = -1
154
- end
155
- id
156
- end
157
-
158
- def self.generate_name(name, opts = {})
159
- vcenter_instance_name = opts[:vcenter_name] || nil
160
- dc_name = opts[:dc_name] || nil
161
-
162
- hash_name = "#{name} - [#{vcenter_instance_name} - #{dc_name}]"
163
- sha256 = Digest::SHA256.new
164
- network_hash = sha256.hexdigest(hash_name)[0..11]
165
- "#{name} - [#{vcenter_instance_name} - #{dc_name}]_#{network_hash}"
166
- end
167
-
168
- def self.to_one_template(opts = {})
169
- one_tmp = {}
170
- network_name = opts[:network_name]
171
- network_ref = opts[:network_ref]
172
- network_type = opts[:network_type]
173
- sw_name = opts[:sw_name]
174
-
175
- vcenter_uuid = opts[:vcenter_uuid]
176
- cluster_id = opts[:cluster_id]
177
-
178
- unmanaged = opts[:unmanaged] || nil
179
- template_ref = opts[:template_ref] || nil
180
- dc_ref = opts[:dc_ref] || nil
181
- template_id = opts[:template_id] || nil
182
-
183
- nsx_id = opts[:nsx_id] || nil
184
- nsx_vni = opts[:nsx_vni] || nil
185
- nsx_tz_id = opts[:nsx_tz_id] || nil
186
-
187
- vlanid = opts[:vlanid] || nil
188
-
189
- bridge_name = network_name
190
- network_name = network_name.gsub('/', '_')
191
-
192
- network_import_name =
193
- VCenterDriver::VIHelper
194
- .one_name(
195
- OpenNebula::VirtualNetworkPool,
196
- network_name,
197
- network_ref+vcenter_uuid
198
- )
199
-
200
- one_tmp[:name] = bridge_name
201
- one_tmp[:import_name] = network_import_name
202
- one_tmp[:bridge] = bridge_name
203
- one_tmp[:type] = network_type
204
- one_tmp[:one_cluster_id] = cluster_id
205
- one_tmp[:ref] = network_ref
206
-
207
- opts = {
208
- :network_import_name => network_import_name,
209
- :bridge_name => bridge_name,
210
- :network_ref => network_ref,
211
- :network_type => network_type,
212
- :vcenter_uuid => vcenter_uuid,
213
- :unmanaged => unmanaged,
214
- :template_ref => template_ref,
215
- :dc_ref => dc_ref,
216
- :template_id => template_id,
217
- :sw_name => sw_name,
218
- :nsx_id => nsx_id,
219
- :nsx_vni => nsx_vni,
220
- :nsx_tz_id => nsx_tz_id,
221
- :vlanid => vlanid
222
- }
223
-
224
- one_tmp[:one] = to_one(opts)
225
- one_tmp
226
- end
227
-
228
- def self.to_one(opts)
229
- template = "NAME=\"#{opts[:network_import_name]}\"\n"\
230
- "BRIDGE=\"#{opts[:bridge_name]}\"\n"\
231
- "VN_MAD=\"vcenter\"\n"\
232
- "VCENTER_PORTGROUP_TYPE=\"#{opts[:network_type]}\"\n"\
233
- "VCENTER_NET_REF=\"#{opts[:network_ref]}\"\n"\
234
- "VCENTER_INSTANCE_ID=\"#{opts[:vcenter_uuid]}\"\n"\
235
- "VCENTER_IMPORTED=\"YES\"\n"
236
-
237
- if opts[:unmanaged] == 'wild'
238
- template += "VCENTER_FROM_WILD=\"#{opts[:template_id]}\"\n"
239
- end
240
-
241
- if opts[:template_ref]
242
- template +=
243
- "VCENTER_TEMPLATE_REF=\"#{opts[:template_ref]}\"\n"
244
- end
245
-
246
- if opts[:sw_name]
247
- template +=
248
- "VCENTER_SWITCH_NAME=\"#{opts[:sw_name]}\"\n"
249
- end
250
-
251
- if opts[:nsx_id]
252
- template +=
253
- "NSX_ID=\"#{opts[:nsx_id]}\"\n"
254
- end
255
- if opts[:nsx_vni]
256
- template +=
257
- "NSX_VNI=\"#{opts[:nsx_vni]}\"\n"
258
- end
259
- if opts[:nsx_tz_id]
260
- template +=
261
- "NSX_TZ_ID=\"#{opts[:nsx_tz_id]}\"\n"
262
- end
263
-
264
- if opts[:vlanid]
265
- template +=
266
- "VCENTER_VLAN_ID=\"#{opts[:vlanid]}\"\n"
267
- end
268
-
269
- template
270
- end
271
-
272
- REQUIRED_ATTRS = [:refs, :one_ids, :one_object]
273
- def self.create_one_network(net_config)
274
- # mandatory parameters:
275
- REQUIRED_ATTRS.each do |attr|
276
- if net_config[attr].nil?
277
- raise "#{attr} required for importing nics operation!"
278
- end
279
- end
280
-
281
- one_vn = VCenterDriver::VIHelper
282
- .new_one_item(
283
- OpenNebula::VirtualNetwork
284
- )
285
-
286
- done = []
287
- (0..net_config[:refs].size-1).each do |i|
288
- cl_id = net_config[:one_ids][i]
289
- next if cl_id == -1 || done.include?(cl_id)
290
-
291
- if done.empty?
292
- rc = one_vn.allocate(net_config[:one_object], cl_id.to_i)
293
- VCenterDriver::VIHelper.check_error(rc, 'create network')
294
- one_vn.info
295
- else
296
- one_cluster = VCenterDriver::VIHelper
297
- .one_item(
298
- OpenNebula::Cluster,
299
- cl_id,
300
- false
301
- )
302
- rc = one_cluster.addvnet(one_vn['ID'].to_i)
303
- VCenterDriver::VIHelper
304
- .check_error(rc, 'addvnet to cluster')
305
- end
306
- done << cl_id
307
- end
308
-
309
- one_vn
310
- end
311
-
312
- def self.get_network_type(network, network_name)
313
- case network
314
- when RbVmomi::VIM::DistributedVirtualPortgroup
315
- if network_name
316
- .match(/^vxw-dvs-(.*)-virtualwire-(.*)-sid-(.*)/)
317
- VCenterDriver::Network::NETWORK_TYPE_NSXV
318
- else
319
- VCenterDriver::Network::NETWORK_TYPE_DPG
320
- end
321
- when RbVmomi::VIM::OpaqueNetwork
322
- VCenterDriver::Network::NETWORK_TYPE_NSXT
323
- when RbVmomi::VIM::Network
324
- VCenterDriver::Network::NETWORK_TYPE_PG
325
- else
326
- VCenterDriver::Network::NETWORK_TYPE_UNKNOWN
327
- end
328
- end
329
-
330
- # Get vSwitch of Standard PortGroup
331
- # If there is differents vSwitches returns the first.
332
- def self.virtual_switch(vc_pg)
333
- vswitch = []
334
- vc_hosts = vc_pg.host
335
- vc_hosts.each do |vc_host|
336
- host_pgs = vc_host
337
- .configManager
338
- .networkSystem
339
- .networkInfo
340
- .portgroup
341
- host_pgs.each do |pg|
342
- if vc_pg.name == pg.spec.name
343
- vswitch << pg.spec.vswitchName
344
- end
345
- end
346
- end
347
- vswitch.uniq!
348
- vswitch << 'Invalid configuration' if vswitch.length > 1
349
- vswitch.join(' / ')
350
- end
351
-
352
- def self.remove_net_ref(network_id)
353
- one_vnet = VCenterDriver::VIHelper
354
- .one_item(
355
- OpenNebula::VirtualNetwork,
356
- network_id
357
- )
358
- one_vnet.info
359
- one_vnet.delete_element('TEMPLATE/VCENTER_NET_REF')
360
- one_vnet.delete_element('TEMPLATE/VCENTER_INSTANCE_ID')
361
- tmp_str = one_vnet.template_str
362
- one_vnet.update(tmp_str)
363
- one_vnet.info
364
- end
365
-
366
- # This is never cached
367
- def self.new_from_ref(ref, vi_client)
368
- new(RbVmomi::VIM::Network.new(vi_client.vim, ref), vi_client)
369
- end
370
-
371
- end
372
- # class Network
373
-
374
- ##########################################################################
375
- # Class PortGroup
376
- ##########################################################################
377
- class PortGroup < Network
378
-
379
- def initialize(item, vi_client = nil, _check = true)
380
- check_item(item, RbVmomi::VIM::Network)
381
-
382
- super(item, vi_client, false)
383
- end
384
-
385
- def clusters
386
- net_clusters = {}
387
- host_members =@item['host']
388
- host_members.each do |h|
389
- if !net_clusters.key?(h.parent._ref.to_s)
390
- net_clusters[h.parent._ref.to_s] = h.parent.name.to_s
391
- end
392
- end
393
- net_clusters
394
- end
395
-
396
- def network_type
397
- VCenterDriver::Network::NETWORK_TYPE_PG
398
- end
399
-
400
- end
401
- # class PortGroup
402
-
403
- ##########################################################################
404
- # Class DistributedPortGroup
405
- ##########################################################################
406
- class DistributedPortGroup < Network
407
-
408
- def initialize(item, vi_client = nil, _check = true)
409
- check_item(item, RbVmomi::VIM::DistributedVirtualPortgroup)
410
-
411
- super(item, vi_client, false)
412
- end
413
-
414
- def clusters
415
- net_clusters = {}
416
- # should have to work
417
- # host_members =@item['host']
418
- host_members =
419
- self['config.distributedVirtualSwitch.summary.hostMember']
420
- host_members.each do |h|
421
- if !net_clusters.key?(h.parent._ref.to_s)
422
- net_clusters[h.parent._ref.to_s] = h.parent.name.to_s
423
- end
424
- end
425
- net_clusters
426
- end
427
-
428
- def network_type
429
- VCenterDriver::Network::NETWORK_TYPE_DPG
430
- end
431
-
432
- end
433
- # class DistributedPortGroup
434
-
435
- ##########################################################################
436
- # Class OpaqueNetwork
437
- ##########################################################################
438
- class OpaqueNetwork < Network
439
-
440
- def initialize(item, vi_client = nil, _check = true)
441
- check_item(item, RbVmomi::VIM::OpaqueNetwork)
442
-
443
- super(item, vi_client, false)
444
- end
445
-
446
- def clusters
447
- net_clusters = {}
448
- host_members =@item['host']
449
- host_members.each do |h|
450
- if !net_clusters.key?(h.parent._ref.to_s)
451
- net_clusters[h.parent._ref.to_s] = h.parent.name.to_s
452
- end
453
- end
454
- net_clusters
455
- end
456
-
457
- def network_type
458
- VCenterDriver::Network::NETWORK_TYPE_NSXT
459
- end
460
-
461
- end
462
- # class OpaqueNetwork
463
-
464
- ##########################################################################
465
- # Class DistributedVirtualSwitch
466
- ##########################################################################
467
- class DistributedVirtualSwitch < Network
468
-
469
- def initialize(item, vi_client = nil, _check = true)
470
- check_item(item, RbVmomi::VIM::VmwareDistributedVirtualSwitch)
471
-
472
- super(item, vi_client, false)
473
- end
474
-
475
- end
476
- # class DistributedVirtualSwitch
477
-
478
- ##########################################################################
479
- # Class NetImporter
480
- ##########################################################################
481
- class NetImporter < VCenterDriver::VcImporter
482
-
483
- def initialize(one_client, vi_client)
484
- super(one_client, vi_client)
485
- @one_class = OpenNebula::VirtualNetwork
486
- @defaults = { :size => '255', :type => 'ether' }
487
- end
488
-
489
- def process_import(indexes, opts = {}, &_block)
490
- indexes = indexes.gsub(/\s*\,\s*/, ',').strip.split(',')
491
-
492
- dc_folder = VCenterDriver::DatacenterFolder.new(@vi_client)
493
- vcenter_instance_name = @vi_client.vc_name
494
- vcenter_uuid = @vi_client.vim.serviceContent.about.instanceUuid
495
- hpool = VCenterDriver::VIHelper.one_pool(
496
- OpenNebula::HostPool,
497
- false
498
- )
499
-
500
- one_client = OpenNebula::Client.new
501
- one_host = OpenNebula::Host.new_with_id(opts[:host], one_client)
502
-
503
- rc = one_host.info
504
- raise rc.message if OpenNebula.is_error? rc
505
-
506
- # Get all networks in vcenter cluster (one_host)
507
- vc_cluster_networks = dc_folder.cluster_networks(one_host)
508
-
509
- vc_cluster_networks_map_ref = {}
510
-
511
- # Iterate over vcenter networks
512
- vc_cluster_networks.each do |vc_cluster_network|
513
- vc_cluster_networks_map_ref[vc_cluster_network._ref] =
514
- vc_cluster_network
515
- end
516
-
517
- indexes.each do |index|
518
- begin
519
- @rollback = []
520
- @info[index] = {}
521
-
522
- vc_cluster_network = vc_cluster_networks_map_ref[index]
523
-
524
- if hpool.respond_to?(:message)
525
- raise 'Could not get OpenNebula HostPool: ' \
526
- "#{hpool.message}"
527
- end
528
-
529
- params = {}
530
- params[:vc_network] = vc_cluster_network
531
- params[:vcenter_instance_name] = vcenter_instance_name
532
- params[:vcenter_uuid] = vcenter_uuid
533
- params[:_hpool] = hpool
534
- params[:one_host] = one_host
535
- params[:args] = {}
536
-
537
- selected, _networks_type, _hosts_list, _clusters_list =
538
- dc_folder.process_network(
539
- params,
540
- {},
541
- {},
542
- {}
543
- )
544
-
545
- selected = selected[index]
546
-
547
- # import the object
548
- opts[index] ||= @defaults
549
- @info[:success] << import(selected, opts[index])
550
- rescue StandardError => e
551
- @info[:error] << { index => e.message }
552
- @info[index][:e] = e
553
-
554
- apply_rollback
555
- end
556
- end
557
- end
558
-
559
- def get_list(args = {})
560
- dc_folder = VCenterDriver::DatacenterFolder.new(@vi_client)
561
-
562
- # OpenNebula's VirtualNetworkPool
563
- npool = VCenterDriver::VIHelper
564
- .one_pool(
565
- OpenNebula::VirtualNetworkPool,
566
- false
567
- )
568
- if npool.respond_to?(:message)
569
- raise 'Could not get ' \
570
- "OpenNebula VirtualNetworkPool: #{npool.message}"
571
- end
572
-
573
- # Get OpenNebula's host pool
574
- hpool = VCenterDriver::VIHelper
575
- .one_pool(
576
- OpenNebula::HostPool,
577
- false
578
- )
579
- if hpool.respond_to?(:message)
580
- raise "Could not get OpenNebula HostPool: #{hpool.message}"
581
- end
582
-
583
- rs = dc_folder
584
- .get_unimported_networks(
585
- npool,
586
- @vi_client.vc_name,
587
- hpool,
588
- args
589
- )
590
- @list = rs
591
- end
592
-
593
- def add_cluster(cid, eid)
594
- one_cluster = @info[:clusters][cid]
595
- raise 'no cluster defined' unless one_cluster
596
-
597
- one_cluster.addvnet(eid)
598
- end
599
-
600
- def remove_default(id)
601
- cid = 0
602
- @info[:clusters][cid] ||=
603
- VCenterDriver::VIHelper
604
- .one_item(
605
- OpenNebula::Cluster,
606
- cid.to_s,
607
- false
608
- )
609
- @info[:clusters][cid].delvnet(id.to_i)
610
- end
611
-
612
- def build_ar(opts)
613
- str = "\nAR=[TYPE=\""
614
- type = opts[:type].downcase
615
-
616
- case type
617
- when '4', 'ip4', 'ip'
618
- str << 'IP4"'
619
- opts[:ip] = '192.168.1.1' if opts[:ip].empty?
620
- str << ",IP=\"#{opts[:ip]}\""
621
- when 'ip6'
622
- str << 'IP6"'
623
- if opts[:global_prefix]
624
- str << ",GLOBAL_PREFIX=\"#{opts[:global_prefix]}\""
625
- end
626
- if opts[:ula_prefix]
627
- str << ",ULA_PREFIX=\"#{opts[:ula_prefix]}\""
628
- end
629
- when 'ether', 'e'
630
- str << 'ETHER"'
631
- when 'ip6_static'
632
- str << 'IP6_STATIC"'
633
- str << ",IP6=\"#{opts[:ip6]}\"" if opts[:ip6]
634
- if opts[:prefix_length]
635
- str << ",PREFIX_LENGTH=\"#{opts[:prefix_length]}\""
636
- end
637
- end
638
-
639
- str << ",MAC=\"#{opts[:mac]}\"" if opts[:mac]
640
- str << ",SIZE = \"#{opts[:size]}\"]"
641
-
642
- str
643
- end
644
-
645
- def import(selected, opts = nil)
646
- opts = @info[selected[:ref]][:opts] if opts.nil?
647
-
648
- net = VCenterDriver::Network
649
- .new_from_ref(selected[:ref], @vi_client)
650
- if net
651
- vid = VCenterDriver::Network
652
- .retrieve_vlanid(net.item)
653
- end
654
-
655
- # If type is NSX we need to update values
656
- if selected[:type] == VCenterDriver::Network::NETWORK_TYPE_NSXV
657
- host_id = @vi_client.instance_variable_get '@host_id'
658
- nsx_client = NSXDriver::NSXClient.new_from_id(host_id)
659
- nsx_net = NSXDriver::VirtualWire
660
- .new_from_name(nsx_client, selected[:name])
661
- selected[:one] << "NSX_ID=\"#{nsx_net.ls_id}\"\n"
662
- selected[:one] << "NSX_VNI=\"#{nsx_net.ls_vni}\"\n"
663
- selected[:one] << "NSX_TZ_ID=\"#{nsx_net.tz_id}\"\n"
664
- end
665
-
666
- if selected[:type] == VCenterDriver::Network::NETWORK_TYPE_NSXT
667
- host_id = @vi_client.instance_variable_get '@host_id'
668
- nsx_client = NSXDriver::NSXClient.new_from_id(host_id)
669
- nsx_net = NSXDriver::OpaqueNetwork
670
- .new_from_name(nsx_client, selected[:name])
671
- selected[:one] << "NSX_ID=\"#{nsx_net.ls_id}\"\n"
672
- selected[:one] << "NSX_VNI=\"#{nsx_net.ls_vni}\"\n"
673
- selected[:one] << "NSX_TZ_ID=\"#{nsx_net.tz_id}\"\n"
674
- end
675
-
676
- if vid
677
- vlanid = VCenterDriver::Network.vlanid(vid)
678
-
679
- # we have vlan id
680
- if /\A\d+\z/.match(vlanid)
681
- selected[:one] << "VCENTER_VLAN_ID=\"#{vlanid}\"\n"
682
- end
683
- end
684
-
685
- selected[:one] << build_ar(opts)
686
- if opts['selected_clusters']
687
- selected[:clusters][:one_ids] =
688
- opts['selected_clusters']
689
- .each
690
- .map(&:to_i)
691
- end
692
-
693
- res = { :id => [], :name => selected[:name] }
694
- create(selected[:one]) do |_one_object, id|
695
- res[:id] << id
696
- add_clusters(id, selected[:clusters][:one_ids])
697
- end
698
-
699
- res
700
- end
701
-
702
- end
703
-
704
- end
705
- # module VCenterDriver