bosh_vcloud_cpi 0.4.8 → 0.4.9
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/cloud/vcloud/cloud.rb +49 -49
- data/lib/cloud/vcloud/util.rb +4 -2
- data/lib/cloud/vcloud/version.rb +3 -1
- data/lib/cloud/vcloud.rb +1 -0
- data/spec/spec_helper.rb +7 -7
- data/spec/unit/cloud_spec.rb +3 -3
- metadata +5 -7
data/lib/cloud/vcloud/cloud.rb
CHANGED
@@ -36,7 +36,7 @@ module VCloudCloud
|
|
36
36
|
at_exit { destroy_client }
|
37
37
|
end
|
38
38
|
|
39
|
-
def client
|
39
|
+
def client
|
40
40
|
@client_lock.synchronize {
|
41
41
|
if @client.nil?
|
42
42
|
create_client
|
@@ -145,8 +145,8 @@ module VCloudCloud
|
|
145
145
|
@client = client
|
146
146
|
|
147
147
|
with_thread_name("create_vm(#{agent_id}, ...)") do
|
148
|
-
Util.retry_operation("create_vm(#{agent_id}, ...)", @retries[
|
149
|
-
@control[
|
148
|
+
Util.retry_operation("create_vm(#{agent_id}, ...)", @retries["cpi"],
|
149
|
+
@control["backoff"]) do
|
150
150
|
@logger.info("Creating VM: #{agent_id}")
|
151
151
|
@logger.debug("networks: #{networks.inspect}")
|
152
152
|
|
@@ -172,8 +172,8 @@ module VCloudCloud
|
|
172
172
|
@client = client
|
173
173
|
|
174
174
|
with_thread_name("delete_vm(#{vapp_id}, ...)") do
|
175
|
-
Util.retry_operation("delete_vm(#{vapp_id}, ...)", @retries[
|
176
|
-
@control[
|
175
|
+
Util.retry_operation("delete_vm(#{vapp_id}, ...)", @retries["cpi"],
|
176
|
+
@control["backoff"]) do
|
177
177
|
@logger.info("Deleting vApp: #{vapp_id}")
|
178
178
|
vapp = @client.get_vapp(vapp_id)
|
179
179
|
vm = get_vm(vapp)
|
@@ -185,7 +185,7 @@ module VCloudCloud
|
|
185
185
|
@client.discard_suspended_state_vapp(vapp)
|
186
186
|
@client.power_off_vapp(vapp)
|
187
187
|
end
|
188
|
-
del_vapp = @vcd[
|
188
|
+
del_vapp = @vcd["debug"]["delete_vapp"]
|
189
189
|
@client.delete_vapp(vapp) if del_vapp
|
190
190
|
@logger.info("Deleting ISO #{vm_name}")
|
191
191
|
@client.delete_catalog_media(vm_name) if del_vapp
|
@@ -201,8 +201,8 @@ module VCloudCloud
|
|
201
201
|
@client = client
|
202
202
|
|
203
203
|
with_thread_name("reboot_vm(#{vapp_id}, ...)") do
|
204
|
-
Util.retry_operation("reboot_vm(#{vapp_id}, ...)", @retries[
|
205
|
-
@control[
|
204
|
+
Util.retry_operation("reboot_vm(#{vapp_id}, ...)", @retries["cpi"],
|
205
|
+
@control["backoff"]) do
|
206
206
|
@logger.info("Rebooting vApp: #{vapp_id}")
|
207
207
|
vapp = @client.get_vapp(vapp_id)
|
208
208
|
begin
|
@@ -226,7 +226,7 @@ module VCloudCloud
|
|
226
226
|
|
227
227
|
with_thread_name("configure_networks(#{vapp_id}, ...)") do
|
228
228
|
Util.retry_operation("configure_networks(#{vapp_id}, ...)",
|
229
|
-
@retries[
|
229
|
+
@retries["cpi"], @control["backoff"]) do
|
230
230
|
@logger.info("Reconfiguring vApp networks: #{vapp_id}")
|
231
231
|
vapp, vm = get_vapp_vm_by_vapp_id(vapp_id)
|
232
232
|
@logger.debug("Powering off #{vapp.name}.")
|
@@ -266,7 +266,7 @@ module VCloudCloud
|
|
266
266
|
|
267
267
|
with_thread_name("attach_disk(#{vapp_id} #{disk_id})") do
|
268
268
|
Util.retry_operation("attach_disk(#{vapp_id}, #{disk_id})",
|
269
|
-
@retries[
|
269
|
+
@retries["cpi"], @control["backoff"]) do
|
270
270
|
@logger.info("Attaching disk: #{disk_id} on vm: #{vapp_id}")
|
271
271
|
|
272
272
|
vapp, vm = get_vapp_vm_by_vapp_id(vapp_id)
|
@@ -297,7 +297,7 @@ module VCloudCloud
|
|
297
297
|
|
298
298
|
with_thread_name("detach_disk(#{vapp_id} #{disk_id})") do
|
299
299
|
Util.retry_operation("detach_disk(#{vapp_id}, #{disk_id})",
|
300
|
-
@retries[
|
300
|
+
@retries["cpi"], @control["backoff"]) do
|
301
301
|
@logger.info("Detaching disk: #{disk_id} from vm: #{vapp_id}")
|
302
302
|
|
303
303
|
vapp, vm = get_vapp_vm_by_vapp_id(vapp_id)
|
@@ -328,7 +328,7 @@ module VCloudCloud
|
|
328
328
|
|
329
329
|
with_thread_name("create_disk(#{size_mb}, vm_locality)") do
|
330
330
|
Util.retry_operation("create_disk(#{size_mb}, vm_locality)",
|
331
|
-
@retries[
|
331
|
+
@retries["cpi"], @control["backoff"]) do
|
332
332
|
@logger.info("Create disk: #{size_mb}, #{vm_locality}")
|
333
333
|
disk_name = "#{generate_unique_name}"
|
334
334
|
disk = nil
|
@@ -355,8 +355,8 @@ module VCloudCloud
|
|
355
355
|
@client = client
|
356
356
|
|
357
357
|
with_thread_name("delete_disk(#{disk_id})") do
|
358
|
-
Util.retry_operation("delete_disk(#{disk_id})", @retries[
|
359
|
-
@control[
|
358
|
+
Util.retry_operation("delete_disk(#{disk_id})", @retries["cpi"],
|
359
|
+
@control["backoff"]) do
|
360
360
|
@logger.info("Deleting disk: #{disk_id}")
|
361
361
|
disk = @client.get_disk(disk_id)
|
362
362
|
@client.delete_disk(disk)
|
@@ -372,8 +372,8 @@ module VCloudCloud
|
|
372
372
|
@client = client
|
373
373
|
|
374
374
|
with_thread_name("get_disk_size(#{disk_id})") do
|
375
|
-
Util.retry_operation("get_disk_size(#{disk_id})", @retries[
|
376
|
-
@control[
|
375
|
+
Util.retry_operation("get_disk_size(#{disk_id})", @retries["cpi"],
|
376
|
+
@control["backoff"]) do
|
377
377
|
@logger.info("Getting disk size: #{disk_id}")
|
378
378
|
disk = @client.get_disk(disk_id)
|
379
379
|
@logger.info("Disk #{disk_id} size: #{disk.size_mb} MB")
|
@@ -393,44 +393,43 @@ module VCloudCloud
|
|
393
393
|
private
|
394
394
|
|
395
395
|
def finalize_options
|
396
|
-
@vcd[
|
397
|
-
@vcd[
|
398
|
-
@vcd[
|
399
|
-
@vcd[
|
396
|
+
@vcd["control"] = {} unless @vcd["control"]
|
397
|
+
@vcd["control"]["retries"] = {} unless @vcd["control"]["retries"]
|
398
|
+
@vcd["control"]["retries"]["default"] ||= RETRIES_DEFAULT
|
399
|
+
@vcd["control"]["retries"]["upload_vapp_files"] ||=
|
400
400
|
RETRIES_UPLOAD_VAPP_FILES
|
401
|
-
@vcd[
|
402
|
-
@vcd[
|
403
|
-
@vcd[
|
404
|
-
@vcd[
|
405
|
-
@vcd[
|
406
|
-
@vcd[
|
401
|
+
@vcd["control"]["retries"]["cpi"] ||= RETRIES_CPI
|
402
|
+
@vcd["control"]["delay"] ||= DELAY
|
403
|
+
@vcd["control"]["time_limit_sec"] = {} unless
|
404
|
+
@vcd["control"]["time_limit_sec"]
|
405
|
+
@vcd["control"]["time_limit_sec"]["default"] ||= TIMELIMIT_DEFAULT
|
406
|
+
@vcd["control"]["time_limit_sec"]["delete_vapp_template"] ||=
|
407
407
|
TIMELIMIT_DELETE_VAPP_TEMPLATE
|
408
|
-
@vcd[
|
409
|
-
@vcd[
|
408
|
+
@vcd["control"]["time_limit_sec"]["delete_vapp"] ||= TIMELIMIT_DELETE_VAPP
|
409
|
+
@vcd["control"]["time_limit_sec"]["delete_media"] ||=
|
410
410
|
TIMELIMIT_DELETE_MEDIA
|
411
|
-
@vcd[
|
411
|
+
@vcd["control"]["time_limit_sec"]["instantiate_vapp_template"] ||=
|
412
412
|
TIMELIMIT_INSTANTIATE_VAPP_TEMPLATE
|
413
|
-
@vcd[
|
414
|
-
@vcd[
|
415
|
-
@vcd[
|
416
|
-
@vcd[
|
413
|
+
@vcd["control"]["time_limit_sec"]["power_on"] ||= TIMELIMIT_POWER_ON
|
414
|
+
@vcd["control"]["time_limit_sec"]["power_off"] ||= TIMELIMIT_POWER_OFF
|
415
|
+
@vcd["control"]["time_limit_sec"]["undeploy"] ||= TIMELIMIT_UNDEPLOY
|
416
|
+
@vcd["control"]["time_limit_sec"]["process_descriptor_vapp_template"] ||=
|
417
417
|
TIMELIMIT_PROCESS_DESCRIPTOR_VAPP_TEMPLATE
|
418
|
-
@vcd[
|
418
|
+
@vcd["control"]["time_limit_sec"]["http_request"] ||=
|
419
419
|
TIMELIMIT_HTTP_REQUEST
|
420
|
-
@vcd[
|
421
|
-
@vcd[
|
422
|
-
@vcd[
|
423
|
-
@vcd[
|
424
|
-
@vcd[
|
425
|
-
@vcd[
|
426
|
-
@vcd[
|
427
|
-
@vcd[
|
420
|
+
@vcd["control"]["backoff"] ||= BACKOFF
|
421
|
+
@vcd["control"]["rest_throttle"] = {} unless
|
422
|
+
@vcd["control"]["rest_throttle"]
|
423
|
+
@vcd["control"]["rest_throttle"]["min"] ||= REST_THROTTLE_MIN
|
424
|
+
@vcd["control"]["rest_throttle"]["max"] ||= REST_THROTTLE_MAX
|
425
|
+
@vcd["debug"] = {} unless @vcd["debug"]
|
426
|
+
@vcd["debug"]["delete_vapp"] = DEBUG_DELETE_VAPP unless
|
427
|
+
@vcd["debug"]["delete_vapp"]
|
428
428
|
end
|
429
429
|
|
430
|
-
def create_client
|
430
|
+
def create_client
|
431
431
|
url = @vcd["url"]
|
432
432
|
@logger.debug("Create session to VCD cloud: #{url}")
|
433
|
-
#@rest_logger.debug("Session to VCD cloud: #{url}")
|
434
433
|
|
435
434
|
@client = VCloudSdk::Client.new(url, @vcd["user"],
|
436
435
|
@vcd["password"], @vcd["entities"], @vcd["control"])
|
@@ -443,7 +442,7 @@ module VCloudCloud
|
|
443
442
|
raise e
|
444
443
|
end
|
445
444
|
|
446
|
-
def destroy_client
|
445
|
+
def destroy_client
|
447
446
|
url = @vcd["url"]
|
448
447
|
@logger.debug("Destroy session to VCD cloud: #{url}")
|
449
448
|
# TODO VCloudSdk::Client should permit logout.
|
@@ -535,7 +534,7 @@ module VCloudCloud
|
|
535
534
|
@client.set_metadata(vm, @vcd["entities"]["vm_metadata_key"], env_json)
|
536
535
|
|
537
536
|
storage_profiles = @client.get_ovdc.storage_profiles || []
|
538
|
-
media_storage_profile = storage_profiles.find { |sp| sp[
|
537
|
+
media_storage_profile = storage_profiles.find { |sp| sp["name"] ==
|
539
538
|
@vcd["entities"]["media_storage_profile"] }
|
540
539
|
@logger.info("Uploading and inserting ISO #{iso_path} as #{vm.name} " +
|
541
540
|
"to #{media_storage_profile.inspect}")
|
@@ -546,7 +545,7 @@ module VCloudCloud
|
|
546
545
|
end
|
547
546
|
|
548
547
|
def delete_vapp_networks(vapp, exclude_nets)
|
549
|
-
exclude = exclude_nets.map {|k,v| v["cloud_properties"]["name"]}.uniq
|
548
|
+
exclude = exclude_nets.map { |k,v| v["cloud_properties"]["name"] }.uniq
|
550
549
|
@client.delete_networks(vapp, exclude)
|
551
550
|
@logger.debug("Deleted vApp #{vapp.name} networks excluding " +
|
552
551
|
"#{exclude.inspect}.")
|
@@ -562,7 +561,7 @@ module VCloudCloud
|
|
562
561
|
cloud_networks.each do |configured_network|
|
563
562
|
@logger.debug("Adding configured network: #{configured_network}")
|
564
563
|
org_net = accessible_org_networks.find {
|
565
|
-
|n| n[
|
564
|
+
|n| n["name"] == configured_network }
|
566
565
|
unless org_net
|
567
566
|
raise VCloudSdk::CloudError, "Configured network: " +
|
568
567
|
"#{configured_network}, is not accessible to VDC:#{ovdc.name}."
|
@@ -621,7 +620,7 @@ module VCloudCloud
|
|
621
620
|
def independent_disks(disk_locality)
|
622
621
|
disk_locality ||= []
|
623
622
|
@logger.info("Instantiate vApp accessible to disks: " +
|
624
|
-
"#{disk_locality.join(
|
623
|
+
"#{disk_locality.join(",")}")
|
625
624
|
disks = []
|
626
625
|
disk_locality.each do |disk_id|
|
627
626
|
disks << @client.get_disk(disk_id)
|
@@ -630,4 +629,5 @@ module VCloudCloud
|
|
630
629
|
end
|
631
630
|
|
632
631
|
end
|
632
|
+
|
633
633
|
end
|
data/lib/cloud/vcloud/util.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
module VCloudCloud
|
2
|
+
|
2
3
|
class Util
|
3
4
|
class << self
|
4
5
|
|
@@ -9,8 +10,8 @@ module VCloudCloud
|
|
9
10
|
rescue VCloudSdk::ApiError => e
|
10
11
|
raise e if attempt >= attempts-1
|
11
12
|
delay = backoff ** attempt
|
12
|
-
Config.logger.error("Retry-attempt #{attempt+1}
|
13
|
-
|
13
|
+
Bosh::Clouds.Config.logger.error("Retry-attempt #{attempt+1}/" +
|
14
|
+
"#{attempts} failed to #{op}, retrying in #{delay} seconds.\t#{e}")
|
14
15
|
sleep (delay)
|
15
16
|
end
|
16
17
|
end
|
@@ -18,4 +19,5 @@ module VCloudCloud
|
|
18
19
|
|
19
20
|
end
|
20
21
|
end
|
22
|
+
|
21
23
|
end
|
data/lib/cloud/vcloud/version.rb
CHANGED
data/lib/cloud/vcloud.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
$:.unshift(File.expand_path("..", __FILE__))
|
2
|
-
$:.unshift(File.join(File.dirname(__FILE__),
|
3
|
-
$:.unshift(File.join(File.dirname(__FILE__),
|
4
|
-
$:.unshift(File.join(File.dirname(__FILE__),
|
2
|
+
$:.unshift(File.join(File.dirname(__FILE__), "."))
|
3
|
+
$:.unshift(File.join(File.dirname(__FILE__), "../lib/cloud"))
|
4
|
+
$:.unshift(File.join(File.dirname(__FILE__), "unit"))
|
5
5
|
|
6
|
-
require
|
7
|
-
require
|
6
|
+
require "yaml"
|
7
|
+
require "vcloud"
|
8
8
|
|
9
9
|
|
10
10
|
module VCloudCloud
|
@@ -43,8 +43,8 @@ module VCloudCloud
|
|
43
43
|
|
44
44
|
def compare_xml(a, b)
|
45
45
|
a.diff(b) do |change, node|
|
46
|
-
#
|
47
|
-
return false if change !=
|
46
|
+
# " " Means no difference. "+" means addition and "-" means deletion.
|
47
|
+
return false if change != " " && node.to_s.strip().length != 0
|
48
48
|
end
|
49
49
|
true
|
50
50
|
end
|
data/spec/unit/cloud_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.dirname(__FILE__) +
|
1
|
+
require File.dirname(__FILE__) + "/../spec_helper"
|
2
2
|
require "yaml"
|
3
3
|
|
4
4
|
module VCloudCloud
|
@@ -270,7 +270,7 @@ module VCloudCloud
|
|
270
270
|
mc.should_receive(:get_vapp).with(anything).and_return { vapp }
|
271
271
|
mc.should_receive(:power_off_vapp).with(vapp).and_return {}
|
272
272
|
mc.should_receive(:delete_vapp).with(vapp).and_return {} if
|
273
|
-
vcd_settings[
|
273
|
+
vcd_settings["debug"]["delete_vapp"] == true
|
274
274
|
mc.should_receive(:delete_catalog_media).with(
|
275
275
|
an_instance_of(String)).and_return {}
|
276
276
|
|
@@ -294,7 +294,7 @@ module VCloudCloud
|
|
294
294
|
end
|
295
295
|
}
|
296
296
|
mc.should_receive(:delete_vapp).with(vapp).and_return {} if
|
297
|
-
vcd_settings[
|
297
|
+
vcd_settings["debug"]["delete_vapp"] == true
|
298
298
|
mc.should_receive(:delete_catalog_media).with(
|
299
299
|
an_instance_of(String)).and_return {}
|
300
300
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: bosh_vcloud_cpi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.4.
|
5
|
+
version: 0.4.9
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- VMware
|
@@ -10,8 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-
|
14
|
-
default_executable:
|
13
|
+
date: 2012-12-05 00:00:00 Z
|
15
14
|
dependencies:
|
16
15
|
- !ruby/object:Gem::Dependency
|
17
16
|
name: bosh_common
|
@@ -89,7 +88,6 @@ files:
|
|
89
88
|
- spec/assets/valid_stemcell.tgz
|
90
89
|
- spec/spec_helper.rb
|
91
90
|
- spec/unit/cloud_spec.rb
|
92
|
-
has_rdoc: true
|
93
91
|
homepage: http://www.vmware.com
|
94
92
|
licenses: []
|
95
93
|
|
@@ -103,7 +101,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
103
101
|
requirements:
|
104
102
|
- - ">="
|
105
103
|
- !ruby/object:Gem::Version
|
106
|
-
hash: -
|
104
|
+
hash: -1905250305917973427
|
107
105
|
segments:
|
108
106
|
- 0
|
109
107
|
version: "0"
|
@@ -112,14 +110,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
110
|
requirements:
|
113
111
|
- - ">="
|
114
112
|
- !ruby/object:Gem::Version
|
115
|
-
hash: -
|
113
|
+
hash: -1905250305917973427
|
116
114
|
segments:
|
117
115
|
- 0
|
118
116
|
version: "0"
|
119
117
|
requirements: []
|
120
118
|
|
121
119
|
rubyforge_project:
|
122
|
-
rubygems_version: 1.
|
120
|
+
rubygems_version: 1.8.24
|
123
121
|
signing_key:
|
124
122
|
specification_version: 3
|
125
123
|
summary: BOSH vCloud CPI
|