vmware_web_service 2.0.3 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/VMwareWebService/MiqHostDatastoreSystem.rb +5 -1
- data/lib/VMwareWebService/MiqVim.rb +80 -56
- data/lib/VMwareWebService/MiqVimClientBase.rb +11 -10
- data/lib/VMwareWebService/MiqVimCluster.rb +6 -2
- data/lib/VMwareWebService/MiqVimDataStore.rb +9 -6
- data/lib/VMwareWebService/MiqVimDump.rb +1 -1
- data/lib/VMwareWebService/MiqVimEventHistoryCollector.rb +5 -1
- data/lib/VMwareWebService/MiqVimEventMonitor.rb +22 -20
- data/lib/VMwareWebService/MiqVimFolder.rb +15 -11
- data/lib/VMwareWebService/MiqVimHost.rb +15 -13
- data/lib/VMwareWebService/MiqVimInventory.rb +78 -79
- data/lib/VMwareWebService/MiqVimPerfHistory.rb +13 -10
- data/lib/VMwareWebService/MiqVimUpdate.rb +50 -50
- data/lib/VMwareWebService/MiqVimVdlMod.rb +7 -7
- data/lib/VMwareWebService/MiqVimVm.rb +102 -101
- data/lib/VMwareWebService/VimService.rb +5 -2
- data/lib/VMwareWebService/VixDiskLib/VixDiskLib.rb +15 -7
- data/lib/VMwareWebService/VixDiskLib/VixDiskLibServer.rb +15 -15
- data/lib/VMwareWebService/VixDiskLib/vdl_wrapper.rb +26 -27
- data/lib/VMwareWebService/exception.rb +0 -2
- data/lib/VMwareWebService/logging.rb +16 -0
- data/lib/VMwareWebService/version.rb +1 -1
- data/lib/vmware_web_service.rb +2 -0
- metadata +15 -48
- data/lib/VMwareWebService/DMiqVim.rb +0 -95
- data/lib/VMwareWebService/DMiqVimSync.rb +0 -45
- data/lib/VMwareWebService/MiqVimBroker.rb +0 -581
- data/lib/VMwareWebService/MiqVimBrokerMods.rb +0 -222
- data/lib/VMwareWebService/MiqVimCoreUpdater.rb +0 -269
- data/lib/VMwareWebService/miq_fault_tolerant_vim.rb +0 -246
@@ -11,19 +11,17 @@ require 'VMwareWebService/VixDiskLib/vdl_wrapper'
|
|
11
11
|
class VixDiskLibError < RuntimeError
|
12
12
|
end
|
13
13
|
|
14
|
-
LOG_FILE = ENV["LOG_FILE"]
|
15
|
-
|
16
|
-
$vim_log = Logger.new LOG_FILE
|
17
|
-
|
18
14
|
class VDDKFactory
|
19
15
|
include DRb::DRbUndumped
|
20
16
|
attr_accessor :shutdown
|
21
17
|
attr_accessor :running
|
18
|
+
attr_reader :logger
|
22
19
|
|
23
20
|
def initialize
|
24
21
|
@shutdown = nil
|
25
22
|
@started = nil
|
26
23
|
@running = nil
|
24
|
+
@logger = Logger.new($stdout)
|
27
25
|
end
|
28
26
|
|
29
27
|
def init
|
@@ -45,14 +43,14 @@ class VDDKFactory
|
|
45
43
|
thr = DRb.thread
|
46
44
|
DRb.stop_service
|
47
45
|
thr.join unless thr.nil?
|
48
|
-
|
46
|
+
logger.info "Finished shutting down DRb"
|
49
47
|
end
|
50
48
|
|
51
49
|
def shut_down_service(msg)
|
52
|
-
|
50
|
+
logger.info msg.to_s
|
53
51
|
VdlWrapper.__exit__ if @started
|
54
52
|
@running = true
|
55
|
-
|
53
|
+
logger.info "VdlWrapper.__exit__ finished"
|
56
54
|
shut_down_drb
|
57
55
|
end
|
58
56
|
|
@@ -95,11 +93,13 @@ begin
|
|
95
93
|
STDOUT.sync = true
|
96
94
|
STDERR.sync = true
|
97
95
|
|
96
|
+
logger = Logger.new($stdout)
|
97
|
+
|
98
98
|
DRb.start_service(nil, vddk)
|
99
99
|
DRb.primary_server.verbose = true
|
100
100
|
uri_used = DRb.uri
|
101
101
|
Thread.abort_on_exception = true
|
102
|
-
|
102
|
+
logger.info "Started DRb service on URI #{uri_used}"
|
103
103
|
#
|
104
104
|
# Now write the URI used back to the parent (client) process to let it know which port was selected.
|
105
105
|
#
|
@@ -115,21 +115,21 @@ begin
|
|
115
115
|
trap('TERM') { vddk.shut_down_service("Termination Signal received"); exit }
|
116
116
|
|
117
117
|
Thread.new do
|
118
|
-
|
118
|
+
logger.info "Monitoring Thread"
|
119
119
|
#
|
120
120
|
# This will block until the SmartProxyWorker (our parent) exits
|
121
121
|
#
|
122
122
|
proc_reader.read
|
123
|
-
|
123
|
+
logger.info "Shutting down VixDiskLibServer - Worker has exited"
|
124
124
|
exit
|
125
125
|
end
|
126
126
|
#
|
127
127
|
# If we haven't been marked as started yet, wait for it.
|
128
128
|
# We may return immediately because startup (and more) has already happened.
|
129
129
|
#
|
130
|
-
|
130
|
+
logger.info "calling watchdog for startup"
|
131
131
|
vddk.wait_for_status("started", 1800)
|
132
|
-
|
132
|
+
logger.info "startup has happened, shutdown flag is #{vddk.shutdown}"
|
133
133
|
#
|
134
134
|
# Wait for the DRb server thread to finish before exiting.
|
135
135
|
#
|
@@ -142,8 +142,8 @@ begin
|
|
142
142
|
end
|
143
143
|
|
144
144
|
vddk.shut_down_service("Shutting Down VixDiskLibServer")
|
145
|
-
|
145
|
+
logger.info "Service has stopped"
|
146
146
|
rescue => err
|
147
|
-
|
148
|
-
|
147
|
+
logger.error "VixDiskLibServer ERROR: [#{err}]"
|
148
|
+
logger.debug "VixDiskLibServer ERROR: [#{err.backtrace.join("\n")}]"
|
149
149
|
end
|
@@ -2,16 +2,14 @@ require 'drb/drb'
|
|
2
2
|
require 'sync'
|
3
3
|
require 'ffi-vix_disk_lib/api_wrapper'
|
4
4
|
require 'VMwareWebService/VimTypes'
|
5
|
+
require 'VMwareWebService/logging'
|
5
6
|
require 'time'
|
6
7
|
|
7
|
-
LOG_FILE = ENV["LOG_FILE"]
|
8
|
-
|
9
|
-
$vim_log = Logger.new LOG_FILE
|
10
|
-
|
11
8
|
VixDiskLibApi = FFI::VixDiskLib::ApiWrapper
|
12
9
|
class VdlWrapper
|
13
10
|
extend FFI::VixDiskLib::ApiWrapper
|
14
11
|
include DRb::DRbUndumped
|
12
|
+
include VMwareWebService::Logging
|
15
13
|
|
16
14
|
@initialized = false
|
17
15
|
@server_disk_count = 0
|
@@ -22,9 +20,9 @@ class VdlWrapper
|
|
22
20
|
@vddk = server
|
23
21
|
end
|
24
22
|
|
25
|
-
@info_log = ->(s) {
|
26
|
-
@warn_log = ->(s) {
|
27
|
-
@error_log = ->(s) {
|
23
|
+
@info_log = ->(s) { logger.info "VMware(VixDiskLib): #{s}" }
|
24
|
+
@warn_log = ->(s) { logger.warn "VMware(VixDiskLib): #{s}" }
|
25
|
+
@error_log = ->(s) { logger.error "VMware(VixDiskLib): #{s}" }
|
28
26
|
|
29
27
|
def self.init
|
30
28
|
return if @initialized
|
@@ -34,10 +32,10 @@ class VdlWrapper
|
|
34
32
|
end
|
35
33
|
|
36
34
|
def self.dumpDisks(server_name)
|
37
|
-
|
35
|
+
logger.warn "*** Open VdlDisks for server #{server_name}"
|
38
36
|
@connection.dumpDisks unless @connection.nil? || @connection.serverName != server_name
|
39
37
|
@vddk.running = true
|
40
|
-
|
38
|
+
logger.warn "*** Open VdlDisks end"
|
41
39
|
end
|
42
40
|
|
43
41
|
def self.inc_server_disk_count
|
@@ -53,7 +51,7 @@ class VdlWrapper
|
|
53
51
|
end
|
54
52
|
|
55
53
|
def self.connect(connect_parms)
|
56
|
-
|
54
|
+
logger.info "VdlWrapper.connect: #{connect_parms[:server_name]}"
|
57
55
|
raise VixDiskLibError, "VixDiskLib is not initialized" unless @initialized
|
58
56
|
raise VixDiskLibError, "Already connected to #{@connection.serverName}" if @connection
|
59
57
|
@connection = VdlConnection.new(connect_parms, @vddk)
|
@@ -61,7 +59,7 @@ class VdlWrapper
|
|
61
59
|
end
|
62
60
|
|
63
61
|
def self.__disconnect__(conn_obj)
|
64
|
-
|
62
|
+
logger.info "VdlWrapper.__disconnect__: #{conn_obj.serverName}"
|
65
63
|
raise VixDiskLibError, "VixDiskLib is not initialized" unless @initialized
|
66
64
|
FFI::VixDiskLib::API.disconnect(conn_obj.vdl_connection)
|
67
65
|
@connection = nil
|
@@ -76,7 +74,7 @@ class VdlWrapper
|
|
76
74
|
# the DRb service (this process) to segfault during the exit sequence.
|
77
75
|
#
|
78
76
|
# super
|
79
|
-
|
77
|
+
logger.info "VixDiskLib has exited cleanly"
|
80
78
|
@vddk.running = true
|
81
79
|
@vddk.shutdown = true
|
82
80
|
@initialized = nil
|
@@ -92,7 +90,7 @@ class VdlConnection
|
|
92
90
|
|
93
91
|
def initialize(connect_parms, vddk)
|
94
92
|
@serverName = connect_parms[:server_name]
|
95
|
-
|
93
|
+
logger.info "VdlConnection.initialize: #{@serverName}"
|
96
94
|
@vdl_connection = VixDiskLibApi.connect(connect_parms)
|
97
95
|
@disks = []
|
98
96
|
@disk_lock = Sync.new
|
@@ -100,10 +98,10 @@ class VdlConnection
|
|
100
98
|
end
|
101
99
|
|
102
100
|
def disconnect
|
103
|
-
|
101
|
+
logger.info "VdlConnection.disconnect: #{@serverName}"
|
104
102
|
@disk_lock.synchronize(:EX) do
|
105
103
|
if !@vdl_connection
|
106
|
-
|
104
|
+
logger.warn "VDLConnection.disconnect: server: #{@serverName} not connected"
|
107
105
|
else
|
108
106
|
__close_disks__
|
109
107
|
VdlWrapper.__disconnect__(self)
|
@@ -119,7 +117,7 @@ class VdlConnection
|
|
119
117
|
@vddk.running = true
|
120
118
|
@disk_lock.sync_lock(:SH) if (unlock = !@disk_lock.sync_locked?)
|
121
119
|
@disks.each do |d|
|
122
|
-
|
120
|
+
logger.warn " VdlDisk: #{d.path}, opened: #{d.timeStamp}"
|
123
121
|
end
|
124
122
|
ensure
|
125
123
|
@disk_lock.sync_unlock if unlock
|
@@ -132,11 +130,11 @@ class VdlConnection
|
|
132
130
|
disk = VdlDisk.new(self, path, flags)
|
133
131
|
@disks << disk
|
134
132
|
nd = VdlWrapper.inc_server_disk_count
|
135
|
-
|
136
|
-
if nd >= MAX_DISK_WARN
|
137
|
-
|
138
|
-
|
139
|
-
|
133
|
+
logger.info "VdlConnection.getDisk: #{@serverName} open disks = #{nd}"
|
134
|
+
if nd >= MAX_DISK_WARN
|
135
|
+
logger.warn "VdlConnection::getDisk: connection to server: #{@serverName}"
|
136
|
+
logger.warn "VdlConnection::getDisk: number of open disks = #{nd}"
|
137
|
+
logger.warn "VdlConnection::getDisk: subsequent open calls may fail"
|
140
138
|
VdlWrapper.dumpDisks(@serverName)
|
141
139
|
end
|
142
140
|
return disk
|
@@ -149,11 +147,11 @@ class VdlConnection
|
|
149
147
|
@vddk.running = true
|
150
148
|
VixDiskLibApi.close(diskObj.handle)
|
151
149
|
if !@vdl_connection
|
152
|
-
|
150
|
+
logger.warn "VDLConnection.disconnect: server: #{@serverName} not connected"
|
153
151
|
else
|
154
152
|
@disks.delete(diskObj)
|
155
153
|
nd = VdlWrapper.dec_server_disk_count
|
156
|
-
|
154
|
+
logger.warn "VdlConnection.__close_disk__: #{@serverName} open disks = #{nd}"
|
157
155
|
end
|
158
156
|
ensure
|
159
157
|
@disk_lock.sync_unlock if unlock
|
@@ -163,7 +161,7 @@ class VdlConnection
|
|
163
161
|
raise VixDiskLibError,
|
164
162
|
"VdlConnection::__close_disks__: exclusive disk lock not held" unless @disk_lock.sync_exclusive?
|
165
163
|
if !@vdl_connection
|
166
|
-
|
164
|
+
logger.warn "VDLConnection.disconnect: server: #{@serverName} not connected"
|
167
165
|
else
|
168
166
|
@disks.each(&:close)
|
169
167
|
end
|
@@ -173,6 +171,7 @@ end # class VdlConnection
|
|
173
171
|
|
174
172
|
class VdlDisk
|
175
173
|
include DRb::DRbUndumped
|
174
|
+
include VMwareWebService::Logging
|
176
175
|
|
177
176
|
attr_reader :path, :flags, :handle, :sectorSize, :timeStamp, :info
|
178
177
|
|
@@ -180,7 +179,7 @@ class VdlDisk
|
|
180
179
|
|
181
180
|
def initialize(conn_obj, path, flags)
|
182
181
|
@time_stamp = Time.now
|
183
|
-
|
182
|
+
logger.debug { "VdlDisk.new <#{object_id}>: opening #{path}" }
|
184
183
|
@connection = conn_obj
|
185
184
|
@handle = VixDiskLibApi.open(@connection.vdl_connection, path, flags)
|
186
185
|
@path = path
|
@@ -196,11 +195,11 @@ class VdlDisk
|
|
196
195
|
end
|
197
196
|
|
198
197
|
def close
|
199
|
-
|
198
|
+
logger.debug { "VdlDisk.close <#{ssId}>: closing #{@path}" }
|
200
199
|
@vddk.running = true
|
201
200
|
@handle_lock.synchronize(:EX) do
|
202
201
|
if !@handle
|
203
|
-
|
202
|
+
logger.debug { "VdlDisk.close: #{@path} not open" }
|
204
203
|
else
|
205
204
|
@connection.__close_disk__(self)
|
206
205
|
@handle = nil
|
@@ -2,8 +2,6 @@ module MiqException
|
|
2
2
|
class Error < RuntimeError; end
|
3
3
|
|
4
4
|
class MiqVimError < Error; end
|
5
|
-
class MiqVimBrokerStaleHandle < MiqVimError; end
|
6
|
-
class MiqVimBrokerUnavailable < MiqVimError; end
|
7
5
|
# MiqVimResourceNotFound is derived from RuntimeError to ensure it gets marshalled over DRB properly.
|
8
6
|
# TODO: Rename MiqException::Error class to avoid issues returning derived error classes over DRB.
|
9
7
|
# Then change MiqVimResourceNotFound to derive from MiqVimError
|
data/lib/vmware_web_service.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vmware_web_service
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ManageIQ Developers
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: 5.2.4.3
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '7.0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
version: 5.2.4.3
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
32
|
+
version: '7.0'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: ffi-vix_disk_lib
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -107,21 +107,7 @@ dependencies:
|
|
107
107
|
- !ruby/object:Gem::Version
|
108
108
|
version: '0'
|
109
109
|
- !ruby/object:Gem::Dependency
|
110
|
-
name:
|
111
|
-
requirement: !ruby/object:Gem::Requirement
|
112
|
-
requirements:
|
113
|
-
- - "~>"
|
114
|
-
- !ruby/object:Gem::Version
|
115
|
-
version: 1.0.0
|
116
|
-
type: :development
|
117
|
-
prerelease: false
|
118
|
-
version_requirements: !ruby/object:Gem::Requirement
|
119
|
-
requirements:
|
120
|
-
- - "~>"
|
121
|
-
- !ruby/object:Gem::Version
|
122
|
-
version: 1.0.0
|
123
|
-
- !ruby/object:Gem::Dependency
|
124
|
-
name: manageiq-password
|
110
|
+
name: manageiq-style
|
125
111
|
requirement: !ruby/object:Gem::Requirement
|
126
112
|
requirements:
|
127
113
|
- - ">="
|
@@ -162,42 +148,26 @@ dependencies:
|
|
162
148
|
- - "~>"
|
163
149
|
- !ruby/object:Gem::Version
|
164
150
|
version: '3.0'
|
165
|
-
- !ruby/object:Gem::Dependency
|
166
|
-
name: rubocop
|
167
|
-
requirement: !ruby/object:Gem::Requirement
|
168
|
-
requirements:
|
169
|
-
- - "~>"
|
170
|
-
- !ruby/object:Gem::Version
|
171
|
-
version: '0.52'
|
172
|
-
type: :development
|
173
|
-
prerelease: false
|
174
|
-
version_requirements: !ruby/object:Gem::Requirement
|
175
|
-
requirements:
|
176
|
-
- - "~>"
|
177
|
-
- !ruby/object:Gem::Version
|
178
|
-
version: '0.52'
|
179
151
|
- !ruby/object:Gem::Dependency
|
180
152
|
name: simplecov
|
181
153
|
requirement: !ruby/object:Gem::Requirement
|
182
154
|
requirements:
|
183
155
|
- - ">="
|
184
156
|
- !ruby/object:Gem::Version
|
185
|
-
version:
|
157
|
+
version: 0.21.2
|
186
158
|
type: :development
|
187
159
|
prerelease: false
|
188
160
|
version_requirements: !ruby/object:Gem::Requirement
|
189
161
|
requirements:
|
190
162
|
- - ">="
|
191
163
|
- !ruby/object:Gem::Version
|
192
|
-
version:
|
164
|
+
version: 0.21.2
|
193
165
|
description: A ruby interface to Vmware Web Services SDK
|
194
|
-
email:
|
166
|
+
email:
|
195
167
|
executables: []
|
196
168
|
extensions: []
|
197
169
|
extra_rdoc_files: []
|
198
170
|
files:
|
199
|
-
- lib/VMwareWebService/DMiqVim.rb
|
200
|
-
- lib/VMwareWebService/DMiqVimSync.rb
|
201
171
|
- lib/VMwareWebService/MiqCustomFieldsManager.rb
|
202
172
|
- lib/VMwareWebService/MiqHostAdvancedOptionManager.rb
|
203
173
|
- lib/VMwareWebService/MiqHostDatastoreSystem.rb
|
@@ -209,11 +179,8 @@ files:
|
|
209
179
|
- lib/VMwareWebService/MiqHostVirtualNicManager.rb
|
210
180
|
- lib/VMwareWebService/MiqVim.rb
|
211
181
|
- lib/VMwareWebService/MiqVimAlarmManager.rb
|
212
|
-
- lib/VMwareWebService/MiqVimBroker.rb
|
213
|
-
- lib/VMwareWebService/MiqVimBrokerMods.rb
|
214
182
|
- lib/VMwareWebService/MiqVimClientBase.rb
|
215
183
|
- lib/VMwareWebService/MiqVimCluster.rb
|
216
|
-
- lib/VMwareWebService/MiqVimCoreUpdater.rb
|
217
184
|
- lib/VMwareWebService/MiqVimCustomizationSpecManager.rb
|
218
185
|
- lib/VMwareWebService/MiqVimDataStore.rb
|
219
186
|
- lib/VMwareWebService/MiqVimDump.rb
|
@@ -238,7 +205,7 @@ files:
|
|
238
205
|
- lib/VMwareWebService/broker_timeout.rb
|
239
206
|
- lib/VMwareWebService/esx_thumb_print.rb
|
240
207
|
- lib/VMwareWebService/exception.rb
|
241
|
-
- lib/VMwareWebService/
|
208
|
+
- lib/VMwareWebService/logging.rb
|
242
209
|
- lib/VMwareWebService/thumb_print.rb
|
243
210
|
- lib/VMwareWebService/vcenter_thumb_print.rb
|
244
211
|
- lib/VMwareWebService/version.rb
|
@@ -4445,23 +4412,23 @@ homepage: https://github.com/ManageIQ/vmware_web_service
|
|
4445
4412
|
licenses:
|
4446
4413
|
- Apache-2.0
|
4447
4414
|
metadata: {}
|
4448
|
-
post_install_message:
|
4415
|
+
post_install_message:
|
4449
4416
|
rdoc_options: []
|
4450
4417
|
require_paths:
|
4451
4418
|
- lib
|
4452
4419
|
required_ruby_version: !ruby/object:Gem::Requirement
|
4453
4420
|
requirements:
|
4454
|
-
- - "
|
4421
|
+
- - ">="
|
4455
4422
|
- !ruby/object:Gem::Version
|
4456
|
-
version:
|
4423
|
+
version: 2.5.0
|
4457
4424
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
4458
4425
|
requirements:
|
4459
4426
|
- - ">="
|
4460
4427
|
- !ruby/object:Gem::Version
|
4461
4428
|
version: '0'
|
4462
4429
|
requirements: []
|
4463
|
-
rubygems_version: 3.
|
4464
|
-
signing_key:
|
4430
|
+
rubygems_version: 3.3.5
|
4431
|
+
signing_key:
|
4465
4432
|
specification_version: 4
|
4466
4433
|
summary: A ruby interface to Vmware Web Services SDK
|
4467
4434
|
test_files: []
|
@@ -1,95 +0,0 @@
|
|
1
|
-
require 'VMwareWebService/MiqVim'
|
2
|
-
require 'VMwareWebService/DMiqVimSync'
|
3
|
-
|
4
|
-
#
|
5
|
-
# Class used to wrap locked object and return it through DRB.
|
6
|
-
#
|
7
|
-
class MiqDrbReturn
|
8
|
-
attr_accessor :obj, :lock
|
9
|
-
|
10
|
-
def initialize(obj, lock = nil)
|
11
|
-
@obj = obj
|
12
|
-
@lock = lock
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
class DMiqVim < MiqVim
|
17
|
-
alias_method :serverPrivateConnect, :connect
|
18
|
-
alias_method :serverPrivateDisconnect, :disconnect
|
19
|
-
alias_method :conditionalCopy, :deepClone
|
20
|
-
|
21
|
-
include DRb::DRbUndumped
|
22
|
-
include DMiqVimSync
|
23
|
-
|
24
|
-
# @param server [String] DNS name or IP address of the vCenter Server
|
25
|
-
# @param username [String] Username to connect to the vCenter Server
|
26
|
-
# @param password [String] Password to connect to the vCenter Server
|
27
|
-
# @param broker [MiqVimBroker] Instance of the broker worker this connection belongs to
|
28
|
-
# @param preLoad [Bool] Should the cache be built before returning the connection (default: false)
|
29
|
-
# @param debugUpdates [Bool] Should we print debug info for each update (default: false)
|
30
|
-
# @param notifyMethod [Method] A optional method to call for each update (default: nil)
|
31
|
-
# @param cacheScope [Symbol] A pre-defined set of properties to cache (default: nil)
|
32
|
-
# @param maxWait [Integer] How many seconds to wait before breaking out of WaitForUpdates (default: 60)
|
33
|
-
# @param maxObjects [Integer] How many objects to return from each WaitForUpdates page (default: 250)
|
34
|
-
def initialize(server, username, password, broker, preLoad = false, debugUpdates = false, notifyMethod = nil, cacheScope = nil, maxWait = 60, maxObjects = 250)
|
35
|
-
super(server, username, password, cacheScope, monitor_updates = true, preLoad, debugUpdates, notifyMethod, maxWait, maxObjects)
|
36
|
-
|
37
|
-
@broker = broker
|
38
|
-
@connectionShuttingDown = false
|
39
|
-
@connectionRemoved = false
|
40
|
-
end
|
41
|
-
|
42
|
-
def monitor(preLoad)
|
43
|
-
log_prefix = "DMiqVim.monitor (#{@connId})"
|
44
|
-
begin
|
45
|
-
monitorUpdates(preLoad)
|
46
|
-
rescue Exception => err
|
47
|
-
# if handleSessionNotAuthenticated(err)
|
48
|
-
# $vim_log.info "#{log_prefix}: Restarting Update Monitor" if $vim_log
|
49
|
-
# retry
|
50
|
-
# end
|
51
|
-
$vim_log.info "#{log_prefix}: returned from monitorUpdates via #{err.class} exception" if $vim_log
|
52
|
-
@error = err
|
53
|
-
ensure
|
54
|
-
$vim_log.info "#{log_prefix}: returned from monitorUpdates" if $vim_log
|
55
|
-
if @updateMonitorReady && !@broker.shuttingDown
|
56
|
-
@broker.connTrySync(:EX, server, username) do |key|
|
57
|
-
@broker.removeMiqVimSS(key, self)
|
58
|
-
end
|
59
|
-
|
60
|
-
if @notifyMethod
|
61
|
-
@notifyMethod.call(:server => @server,
|
62
|
-
:username => @username,
|
63
|
-
:op => 'MiqVimRemoved',
|
64
|
-
:error => @error
|
65
|
-
)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
def shutdownConnection
|
72
|
-
return if @connectionShuttingDown
|
73
|
-
log_prefix = "DMiqVim.shutdownConnection (#{@connId})"
|
74
|
-
$vim_log.info "#{log_prefix}: for address=<#{@server}>, username=<#{@username}>...Starting" if $vim_log
|
75
|
-
@connectionShuttingDown = true
|
76
|
-
serverPrivateDisconnect if self.isAlive?
|
77
|
-
$vim_log.info "#{log_prefix}: for address=<#{@server}>, username=<#{@username}>...Complete" if $vim_log
|
78
|
-
end
|
79
|
-
|
80
|
-
def connectionRemoved?
|
81
|
-
@connectionRemoved
|
82
|
-
end
|
83
|
-
|
84
|
-
def connectionRemoved
|
85
|
-
@connectionRemoved = true
|
86
|
-
end
|
87
|
-
|
88
|
-
def connect
|
89
|
-
(true)
|
90
|
-
end
|
91
|
-
|
92
|
-
def disconnect
|
93
|
-
(true)
|
94
|
-
end
|
95
|
-
end # class DMiqVim
|
@@ -1,45 +0,0 @@
|
|
1
|
-
|
2
|
-
module DMiqVimSync
|
3
|
-
#
|
4
|
-
# This method is called - with the cacheLock held - when returning an object from the cache to the client.
|
5
|
-
# It used to produce a full recursive copy of the object before releasing the lock.
|
6
|
-
# When used in the broker, the DRB layer would then marshal the copy of the object to return it to the remote client.
|
7
|
-
# This new scheme enables us to hold the cacheLock until after DRB marshals the object, eliminating the need
|
8
|
-
# for this method to produce a full recursive copy.
|
9
|
-
#
|
10
|
-
# The lock count of the cacheLock is incremented, so when this method's caller releases the lock, the lock
|
11
|
-
# will still be held. The object to be returned and the cacheLock are wraped in a MiqDrbReturn object
|
12
|
-
# and returned to the DRB layer, which will marshal the object and release the lock. See below.
|
13
|
-
#
|
14
|
-
def dupObj(obj)
|
15
|
-
return(obj) unless @cacheLock.sync_locked?
|
16
|
-
$vim_log.debug "DMiqVim::dupObj: LOCKING [#{Thread.current.object_id}] <#{obj.object_id}>" if $vim_log.debug?
|
17
|
-
@cacheLock.sync_lock(:SH)
|
18
|
-
(MiqDrbReturn.new(obj, @cacheLock))
|
19
|
-
end
|
20
|
-
end # module DMiqVimSync
|
21
|
-
|
22
|
-
class DRb::DRbMessage
|
23
|
-
alias_method :dump_original, :dump
|
24
|
-
|
25
|
-
#
|
26
|
-
# This is the DRB half of the dupObj locking scheme. If we get a MiqDrbReturn object,
|
27
|
-
# we marshal the object it wraps and release the lock.
|
28
|
-
#
|
29
|
-
def dump(obj, error = false)
|
30
|
-
#
|
31
|
-
# Place a temp hold on the object until the client registers it.
|
32
|
-
#
|
33
|
-
obj.holdBrokerObj if obj.respond_to?(:holdBrokerObj)
|
34
|
-
|
35
|
-
return(dump_original(obj, error)) unless obj.kind_of?(MiqDrbReturn)
|
36
|
-
begin
|
37
|
-
return(dump_original(obj.obj, error))
|
38
|
-
ensure
|
39
|
-
if obj.lock && obj.lock.sync_locked?
|
40
|
-
$vim_log.debug "DRb::DRbMessage.dump: UNLOCKING [#{Thread.current.object_id}] <#{obj.obj.object_id}>" if $vim_log.debug?
|
41
|
-
obj.lock.sync_unlock
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end # class DRb::DRbMessage
|