bosh_openstack_cpi 1.2579.0 → 1.2583.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|