bosh_vcloud_cpi 0.5.5 → 0.6.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.
- checksums.yaml +4 -4
- data/lib/cloud/vcloud/cloud.rb +9 -4
- data/lib/cloud/vcloud/steps/create_disk.rb +2 -1
- data/lib/cloud/vcloud/steps/instantiate.rb +10 -1
- data/lib/cloud/vcloud/xml/wrapper_classes/disk_create_params.rb +13 -0
- data/lib/cloud/vcloud/xml/wrapper_classes/instantiate_vapp_template_params.rb +33 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cf849aca94b875385ed294be390fb8f9e69ab2fa
|
4
|
+
data.tar.gz: 32c666a6702a4f3000441bd074ecedcb70bc0530
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb7a0ee08d1289702d516b90c285647c64caf0604bdc665c9a132e3027ff16782e9d2e19e6e2a8bcb909e2ed23b8c1a6148e80a02b3b62329719996c66f45a8f
|
7
|
+
data.tar.gz: 9d40d0aead537318a279bbfdaa8fe2558cf6720e91bbc37b393d66fad81c62b7ffc8c0aa267e5e2363ba447a9d79bced779c33eb751f9fb45a7ebde7d636c772
|
data/lib/cloud/vcloud/cloud.rb
CHANGED
@@ -57,7 +57,10 @@ module VCloudCloud
|
|
57
57
|
requested_name = environment && environment['vapp']
|
58
58
|
vapp_name = requested_name ? "vapp-tmp-#{unique_name}" : agent_id
|
59
59
|
|
60
|
-
|
60
|
+
storage_profiles = client.vdc.storage_profiles || []
|
61
|
+
storage_profile = storage_profiles.find { |sp| sp['name'] == @entities['vapp_storage_profile'] }
|
62
|
+
|
63
|
+
s.next Steps::Instantiate, catalog_vapp_id, vapp_name, description, disk_locality, storage_profile
|
61
64
|
client.flush_cache # flush cached vdc which contains vapp list
|
62
65
|
vapp = s.state[:vapp]
|
63
66
|
vm = s.state[:vm] = vapp.vms[0]
|
@@ -220,11 +223,13 @@ module VCloudCloud
|
|
220
223
|
end
|
221
224
|
end
|
222
225
|
|
223
|
-
def create_disk(size_mb, vm_locality = nil)
|
224
|
-
(steps "create_disk(#{size_mb}, #{vm_locality.inspect})" do |s|
|
226
|
+
def create_disk(size_mb, cloud_properties, vm_locality = nil)
|
227
|
+
(steps "create_disk(#{size_mb}, #{cloud_properties.inspect}, #{vm_locality.inspect})" do |s|
|
225
228
|
# vm_locality is used as vm_id
|
226
229
|
vm = vm_locality.nil? ? nil : client.resolve_entity(vm_locality)
|
227
|
-
|
230
|
+
storage_profiles = client.vdc.storage_profiles || []
|
231
|
+
storage_profile = storage_profiles.find { |sp| sp['name'] == @entities['vapp_storage_profile'] }
|
232
|
+
s.next Steps::CreateDisk, unique_name, size_mb, vm, storage_profile
|
228
233
|
end)[:disk].urn
|
229
234
|
end
|
230
235
|
|
@@ -1,13 +1,14 @@
|
|
1
1
|
module VCloudCloud
|
2
2
|
module Steps
|
3
3
|
class CreateDisk < Step
|
4
|
-
def perform(name, size_mb, vm, &block)
|
4
|
+
def perform(name, size_mb, vm, storage_profile, &block)
|
5
5
|
params = VCloudSdk::Xml::WrapperFactory.create_instance 'DiskCreateParams'
|
6
6
|
params.name = name
|
7
7
|
params.size_bytes = size_mb << 20 # VCD expects bytes
|
8
8
|
params.bus_type = VCloudSdk::Xml::HARDWARE_TYPE[:SCSI_CONTROLLER]
|
9
9
|
params.bus_sub_type = VCloudSdk::Xml::BUS_SUB_TYPE[:LSILOGIC]
|
10
10
|
params.add_locality vm if vm
|
11
|
+
params.storage_profile = storage_profile if storage_profile
|
11
12
|
disk = client.invoke :post, client.vdc.add_disk_link,
|
12
13
|
:payload => params,
|
13
14
|
:headers => { :content_type => VCloudSdk::Xml::MEDIA_TYPE[:DISK_CREATE_PARAMS] }
|
@@ -3,7 +3,7 @@ module VCloudCloud
|
|
3
3
|
# Create a vApp from a vApp template
|
4
4
|
# Ref: http://pubs.vmware.com/vcd-51/index.jsp?topic=%2Fcom.vmware.vcloud.api.reference.doc_51%2Fdoc%2Foperations%2FPOST-InstantiateVAppTemplate.html
|
5
5
|
class Instantiate < Step
|
6
|
-
def perform(template_id, vapp_name, description, disk_locality, &block)
|
6
|
+
def perform(template_id, vapp_name, description, disk_locality, storage_profile, &block)
|
7
7
|
catalog_item = client.resolve_entity template_id
|
8
8
|
raise ObjectNotFoundError, "Invalid vApp template Id: #{template_id}" unless catalog_item
|
9
9
|
template = client.resolve_link catalog_item.entity
|
@@ -15,6 +15,7 @@ module VCloudCloud
|
|
15
15
|
params.all_eulas_accepted = true
|
16
16
|
params.linked_clone = false
|
17
17
|
params.set_locality = locality_spec template, disk_locality
|
18
|
+
params.set_storage_profile = storage_profile_spec(template, storage_profile) if storage_profile
|
18
19
|
|
19
20
|
state[:instantiate_vapp_name] = vapp_name
|
20
21
|
|
@@ -57,6 +58,14 @@ module VCloudCloud
|
|
57
58
|
end
|
58
59
|
locality
|
59
60
|
end
|
61
|
+
|
62
|
+
def storage_profile_spec(template, storage_profile)
|
63
|
+
vm_storage_profiles = {}
|
64
|
+
template.vms.each do |vm|
|
65
|
+
vm_storage_profiles[vm] = storage_profile
|
66
|
+
end
|
67
|
+
vm_storage_profiles
|
68
|
+
end
|
60
69
|
end
|
61
70
|
end
|
62
71
|
end
|
@@ -32,6 +32,19 @@ module VCloudSdk
|
|
32
32
|
disk.node.after(node)
|
33
33
|
end
|
34
34
|
|
35
|
+
def storage_profile=(storage_profile)
|
36
|
+
return unless storage_profile
|
37
|
+
|
38
|
+
raise "disk storage profile already set." if @storage_profile
|
39
|
+
@storage_profile = true
|
40
|
+
|
41
|
+
node = create_child("StorageProfile")
|
42
|
+
node["type"] = storage_profile.type
|
43
|
+
node["name"] = storage_profile.name
|
44
|
+
node["href"] = storage_profile.href
|
45
|
+
disk.node.add_child(node)
|
46
|
+
end
|
47
|
+
|
35
48
|
private
|
36
49
|
|
37
50
|
def disk
|
@@ -32,7 +32,6 @@ module VCloudSdk
|
|
32
32
|
source_node["href"] = src["href"]
|
33
33
|
source_node["id"] = src["id"]
|
34
34
|
source_node["type"] = src["type"]
|
35
|
-
source_node["id"] = src["id"]
|
36
35
|
end
|
37
36
|
|
38
37
|
def set_locality=(locality)
|
@@ -74,6 +73,39 @@ module VCloudSdk
|
|
74
73
|
end
|
75
74
|
end
|
76
75
|
|
76
|
+
def set_storage_profile=(storage_profile)
|
77
|
+
return unless storage_profile
|
78
|
+
|
79
|
+
raise "vApp storage profile already set." if @storage_profile
|
80
|
+
@storage_profile = true
|
81
|
+
|
82
|
+
storage_profile.each do |k,v|
|
83
|
+
node_sp = create_child("SourcedVmInstantiationParams",
|
84
|
+
namespace.prefix,
|
85
|
+
namespace.href)
|
86
|
+
|
87
|
+
is_source_delete.node.after(node_sp)
|
88
|
+
|
89
|
+
node_sv = add_child("Source",
|
90
|
+
namespace.prefix,
|
91
|
+
namespace.href,
|
92
|
+
node_sp)
|
93
|
+
|
94
|
+
node_sv["type"] = k.type
|
95
|
+
node_sv["name"] = k.name
|
96
|
+
node_sv["href"] = k.href
|
97
|
+
|
98
|
+
node_lp = create_child("StorageProfile",
|
99
|
+
namespace.prefix,
|
100
|
+
namespace.href)
|
101
|
+
node_lp["type"] = v.type
|
102
|
+
node_lp["name"] = v.name
|
103
|
+
node_lp["href"] = v.href
|
104
|
+
|
105
|
+
node_sv.after(node_lp)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
77
109
|
private
|
78
110
|
|
79
111
|
def is_source_delete
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bosh_vcloud_cpi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- VMware
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-08-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bosh_common
|
@@ -124,7 +124,7 @@ dependencies:
|
|
124
124
|
version: '0'
|
125
125
|
description: |-
|
126
126
|
BOSH vCloud CPI
|
127
|
-
|
127
|
+
7133d0
|
128
128
|
email: support@cloudfoundry.com
|
129
129
|
executables: []
|
130
130
|
extensions: []
|