bosh_openstack_cpi 1.2579.0 → 1.2583.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.
- data/lib/cloud/openstack/cloud.rb +75 -18
- data/lib/cloud/openstack/version.rb +1 -1
- metadata +11 -11
|
@@ -13,6 +13,7 @@ module Bosh::OpenStackCloud
|
|
|
13
13
|
attr_reader :openstack
|
|
14
14
|
attr_reader :registry
|
|
15
15
|
attr_reader :glance
|
|
16
|
+
attr_reader :volume
|
|
16
17
|
attr_accessor :logger
|
|
17
18
|
|
|
18
19
|
##
|
|
@@ -33,11 +34,12 @@ module Bosh::OpenStackCloud
|
|
|
33
34
|
@agent_properties = @options['agent'] || {}
|
|
34
35
|
@openstack_properties = @options['openstack']
|
|
35
36
|
|
|
36
|
-
@default_key_name = @openstack_properties[
|
|
37
|
-
@default_security_groups = @openstack_properties[
|
|
38
|
-
@state_timeout = @openstack_properties[
|
|
39
|
-
@stemcell_public_visibility = @openstack_properties[
|
|
40
|
-
@wait_resource_poll_interval = @openstack_properties[
|
|
37
|
+
@default_key_name = @openstack_properties["default_key_name"]
|
|
38
|
+
@default_security_groups = @openstack_properties["default_security_groups"]
|
|
39
|
+
@state_timeout = @openstack_properties["state_timeout"]
|
|
40
|
+
@stemcell_public_visibility = @openstack_properties["stemcell_public_visibility"]
|
|
41
|
+
@wait_resource_poll_interval = @openstack_properties["wait_resource_poll_interval"]
|
|
42
|
+
@boot_from_volume = @openstack_properties["boot_from_volume"]
|
|
41
43
|
|
|
42
44
|
unless @openstack_properties['auth_url'].match(/\/tokens$/)
|
|
43
45
|
@openstack_properties['auth_url'] = @openstack_properties['auth_url'] + '/tokens'
|
|
@@ -77,6 +79,22 @@ module Bosh::OpenStackCloud
|
|
|
77
79
|
cloud_error('Unable to connect to the OpenStack Image Service API. Check task debug log for details.')
|
|
78
80
|
end
|
|
79
81
|
|
|
82
|
+
volume_params = {
|
|
83
|
+
:provider => "OpenStack",
|
|
84
|
+
:openstack_auth_url => @openstack_properties["auth_url"],
|
|
85
|
+
:openstack_username => @openstack_properties["username"],
|
|
86
|
+
:openstack_api_key => @openstack_properties["api_key"],
|
|
87
|
+
:openstack_tenant => @openstack_properties["tenant"],
|
|
88
|
+
:openstack_endpoint_type => @openstack_properties["endpoint_type"],
|
|
89
|
+
:connection_options => @openstack_properties['connection_options']
|
|
90
|
+
}
|
|
91
|
+
begin
|
|
92
|
+
@volume = Fog::Volume.new(volume_params)
|
|
93
|
+
rescue Exception => e
|
|
94
|
+
@logger.error(e)
|
|
95
|
+
cloud_error("Unable to connect to the OpenStack Volume API. Check task debug log for details.")
|
|
96
|
+
end
|
|
97
|
+
|
|
80
98
|
@metadata_lock = Mutex.new
|
|
81
99
|
end
|
|
82
100
|
|
|
@@ -222,6 +240,14 @@ module Bosh::OpenStackCloud
|
|
|
222
240
|
cloud_error("Key-pair `#{keyname}' not found") if keypair.nil?
|
|
223
241
|
@logger.debug("Using key-pair: `#{keypair.name}' (#{keypair.fingerprint})")
|
|
224
242
|
|
|
243
|
+
if @boot_from_volume
|
|
244
|
+
boot_vol_size = flavor.disk * 1024
|
|
245
|
+
|
|
246
|
+
boot_vol_id = create_boot_disk(boot_vol_size, stemcell_id)
|
|
247
|
+
cloud_error("Failed to create boot volume.") if boot_vol_id.nil?
|
|
248
|
+
@logger.debug("Using boot volume: `#{boot_vol_id}'")
|
|
249
|
+
end
|
|
250
|
+
|
|
225
251
|
server_params = {
|
|
226
252
|
:name => server_name,
|
|
227
253
|
:image_ref => image.id,
|
|
@@ -229,16 +255,26 @@ module Bosh::OpenStackCloud
|
|
|
229
255
|
:key_name => keypair.name,
|
|
230
256
|
:security_groups => security_groups,
|
|
231
257
|
:nics => nics,
|
|
232
|
-
:user_data => Yajl::Encoder.encode(user_data(server_name, network_spec))
|
|
233
|
-
:personality => [{
|
|
234
|
-
'path' => "#{BOSH_APP_DIR}/user_data.json",
|
|
235
|
-
'contents' => Yajl::Encoder.encode(user_data(server_name, network_spec, keypair.public_key))
|
|
236
|
-
}]
|
|
258
|
+
:user_data => Yajl::Encoder.encode(user_data(server_name, network_spec))
|
|
237
259
|
}
|
|
238
260
|
|
|
239
261
|
availability_zone = select_availability_zone(disk_locality, resource_pool['availability_zone'])
|
|
240
262
|
server_params[:availability_zone] = availability_zone if availability_zone
|
|
241
263
|
|
|
264
|
+
if @boot_from_volume
|
|
265
|
+
server_params[:block_device_mapping] = [{
|
|
266
|
+
:volume_size => "",
|
|
267
|
+
:volume_id => boot_vol_id,
|
|
268
|
+
:delete_on_termination => "1",
|
|
269
|
+
:device_name => "/dev/vda"
|
|
270
|
+
}]
|
|
271
|
+
else
|
|
272
|
+
server_params[:personality] = [{
|
|
273
|
+
"path" => "#{BOSH_APP_DIR}/user_data.json",
|
|
274
|
+
"contents" => Yajl::Encoder.encode(user_data(server_name, network_spec, keypair.public_key))
|
|
275
|
+
}]
|
|
276
|
+
end
|
|
277
|
+
|
|
242
278
|
@logger.debug("Using boot parms: `#{server_params.inspect}'")
|
|
243
279
|
server = with_openstack { @openstack.servers.create(server_params) }
|
|
244
280
|
|
|
@@ -376,6 +412,35 @@ module Bosh::OpenStackCloud
|
|
|
376
412
|
end
|
|
377
413
|
end
|
|
378
414
|
|
|
415
|
+
##
|
|
416
|
+
# Creates a new OpenStack boot volume
|
|
417
|
+
#
|
|
418
|
+
# @param [Integer] size disk size in MiB
|
|
419
|
+
# @param [String] stemcell_id OpenStack image UUID that will be used to
|
|
420
|
+
# populate the boot volume
|
|
421
|
+
# @return [String] OpenStack volume UUID
|
|
422
|
+
def create_boot_disk(size, stemcell_id)
|
|
423
|
+
with_thread_name("create_boot_disk(#{size}, #{stemcell_id})") do
|
|
424
|
+
raise ArgumentError, "Disk size needs to be an integer" unless size.kind_of?(Integer)
|
|
425
|
+
cloud_error("Minimum disk size is 1 GiB") if (size < 1024)
|
|
426
|
+
cloud_error("Maximum disk size is 1 TiB") if (size > 1024 * 1000)
|
|
427
|
+
|
|
428
|
+
volume_params = {
|
|
429
|
+
:display_name => "volume-#{generate_unique_name}",
|
|
430
|
+
:size => (size / 1024.0).ceil,
|
|
431
|
+
:imageRef => stemcell_id
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
@logger.info("Creating new boot volume...")
|
|
435
|
+
boot_volume = with_openstack { @volume.volumes.create(volume_params) }
|
|
436
|
+
|
|
437
|
+
@logger.info("Creating new boot volume `#{boot_volume.id}'...")
|
|
438
|
+
wait_resource(boot_volume, :available)
|
|
439
|
+
|
|
440
|
+
boot_volume.id.to_s
|
|
441
|
+
end
|
|
442
|
+
end
|
|
443
|
+
|
|
379
444
|
##
|
|
380
445
|
# Deletes an OpenStack volume
|
|
381
446
|
#
|
|
@@ -525,14 +590,6 @@ module Bosh::OpenStackCloud
|
|
|
525
590
|
end
|
|
526
591
|
end
|
|
527
592
|
|
|
528
|
-
##
|
|
529
|
-
# Validates the deployment
|
|
530
|
-
#
|
|
531
|
-
# @note Not implemented in the OpenStack CPI
|
|
532
|
-
def validate_deployment(old_manifest, new_manifest)
|
|
533
|
-
not_implemented(:validate_deployment)
|
|
534
|
-
end
|
|
535
|
-
|
|
536
593
|
##
|
|
537
594
|
# Selects the availability zone to use from a list of disk volumes,
|
|
538
595
|
# resource pool availability zone (if any) and the default availability
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: bosh_openstack_cpi
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2583.0
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2014-05-
|
|
12
|
+
date: 2014-05-30 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: fog
|
|
@@ -34,7 +34,7 @@ dependencies:
|
|
|
34
34
|
requirements:
|
|
35
35
|
- - ~>
|
|
36
36
|
- !ruby/object:Gem::Version
|
|
37
|
-
version: 1.
|
|
37
|
+
version: 1.2583.0
|
|
38
38
|
type: :runtime
|
|
39
39
|
prerelease: false
|
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -42,7 +42,7 @@ dependencies:
|
|
|
42
42
|
requirements:
|
|
43
43
|
- - ~>
|
|
44
44
|
- !ruby/object:Gem::Version
|
|
45
|
-
version: 1.
|
|
45
|
+
version: 1.2583.0
|
|
46
46
|
- !ruby/object:Gem::Dependency
|
|
47
47
|
name: bosh_cpi
|
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -50,7 +50,7 @@ dependencies:
|
|
|
50
50
|
requirements:
|
|
51
51
|
- - ~>
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: 1.
|
|
53
|
+
version: 1.2583.0
|
|
54
54
|
type: :runtime
|
|
55
55
|
prerelease: false
|
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -58,7 +58,7 @@ dependencies:
|
|
|
58
58
|
requirements:
|
|
59
59
|
- - ~>
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: 1.
|
|
61
|
+
version: 1.2583.0
|
|
62
62
|
- !ruby/object:Gem::Dependency
|
|
63
63
|
name: bosh-registry
|
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -66,7 +66,7 @@ dependencies:
|
|
|
66
66
|
requirements:
|
|
67
67
|
- - ~>
|
|
68
68
|
- !ruby/object:Gem::Version
|
|
69
|
-
version: 1.
|
|
69
|
+
version: 1.2583.0
|
|
70
70
|
type: :runtime
|
|
71
71
|
prerelease: false
|
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -74,7 +74,7 @@ dependencies:
|
|
|
74
74
|
requirements:
|
|
75
75
|
- - ~>
|
|
76
76
|
- !ruby/object:Gem::Version
|
|
77
|
-
version: 1.
|
|
77
|
+
version: 1.2583.0
|
|
78
78
|
- !ruby/object:Gem::Dependency
|
|
79
79
|
name: httpclient
|
|
80
80
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -109,7 +109,7 @@ dependencies:
|
|
|
109
109
|
version: 0.8.2
|
|
110
110
|
description: ! 'BOSH OpenStack CPI
|
|
111
111
|
|
|
112
|
-
|
|
112
|
+
b96a92'
|
|
113
113
|
email: support@cloudfoundry.com
|
|
114
114
|
executables:
|
|
115
115
|
- bosh_openstack_console
|
|
@@ -153,10 +153,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
153
153
|
version: '0'
|
|
154
154
|
segments:
|
|
155
155
|
- 0
|
|
156
|
-
hash: -
|
|
156
|
+
hash: -4384250625249937982
|
|
157
157
|
requirements: []
|
|
158
158
|
rubyforge_project:
|
|
159
|
-
rubygems_version: 1.8.23
|
|
159
|
+
rubygems_version: 1.8.23.2
|
|
160
160
|
signing_key:
|
|
161
161
|
specification_version: 3
|
|
162
162
|
summary: BOSH OpenStack CPI
|