bosh_vsphere_cpi 0.4.9 → 0.5.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/vsphere/client.rb +3 -2
- data/lib/cloud/vsphere/cloud.rb +84 -95
- data/lib/cloud/vsphere/config.rb +254 -0
- data/lib/cloud/vsphere/resources.rb +164 -514
- data/lib/cloud/vsphere/resources/cluster.rb +294 -0
- data/lib/cloud/vsphere/resources/datacenter.rb +86 -0
- data/lib/cloud/vsphere/resources/datastore.rb +61 -0
- data/lib/cloud/vsphere/resources/folder.rb +54 -0
- data/lib/cloud/vsphere/resources/resource_pool.rb +39 -0
- data/lib/cloud/vsphere/resources/scorer.rb +130 -0
- data/lib/cloud/vsphere/resources/util.rb +44 -0
- data/lib/cloud/vsphere/version.rb +1 -1
- data/spec/spec_helper.rb +2 -0
- data/spec/unit/cloud/vsphere/resources/cluster_spec.rb +383 -0
- data/spec/unit/cloud/vsphere/resources/datacenter_spec.rb +72 -0
- data/spec/unit/cloud/vsphere/resources/datastore_spec.rb +43 -0
- data/spec/unit/cloud/vsphere/resources/folder_spec.rb +63 -0
- data/spec/unit/cloud/vsphere/resources/resource_pool_spec.rb +42 -0
- data/spec/unit/cloud/vsphere/resources/scorer_spec.rb +73 -0
- data/spec/unit/cloud/vsphere/resources/util_spec.rb +35 -0
- data/spec/unit/cloud/vsphere/resources_spec.rb +216 -0
- metadata +48 -15
- data/spec/unit/vsphere_resource_spec.rb +0 -274
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bosh_vsphere_cpi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.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: 2012-
|
12
|
+
date: 2012-10-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bosh_common
|
@@ -34,7 +34,7 @@ dependencies:
|
|
34
34
|
requirements:
|
35
35
|
- - ! '>='
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: 0.4.
|
37
|
+
version: 0.4.4
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,9 +42,9 @@ dependencies:
|
|
42
42
|
requirements:
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 0.4.
|
45
|
+
version: 0.4.4
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
47
|
+
name: membrane
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|
@@ -60,7 +60,7 @@ dependencies:
|
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
63
|
+
name: ruby_vim_sdk
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
none: false
|
66
66
|
requirements:
|
@@ -91,6 +91,22 @@ dependencies:
|
|
91
91
|
- - ! '>='
|
92
92
|
- !ruby/object:Gem::Version
|
93
93
|
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: uuidtools
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :runtime
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
94
110
|
description: BOSH VSphere CPI
|
95
111
|
email: support@vmware.com
|
96
112
|
executables: []
|
@@ -100,14 +116,29 @@ files:
|
|
100
116
|
- lib/cloud/vsphere.rb
|
101
117
|
- lib/cloud/vsphere/client.rb
|
102
118
|
- lib/cloud/vsphere/cloud.rb
|
119
|
+
- lib/cloud/vsphere/config.rb
|
103
120
|
- lib/cloud/vsphere/lease_updater.rb
|
104
121
|
- lib/cloud/vsphere/models/disk.rb
|
105
122
|
- lib/cloud/vsphere/resources.rb
|
123
|
+
- lib/cloud/vsphere/resources/cluster.rb
|
124
|
+
- lib/cloud/vsphere/resources/datacenter.rb
|
125
|
+
- lib/cloud/vsphere/resources/datastore.rb
|
126
|
+
- lib/cloud/vsphere/resources/folder.rb
|
127
|
+
- lib/cloud/vsphere/resources/resource_pool.rb
|
128
|
+
- lib/cloud/vsphere/resources/scorer.rb
|
129
|
+
- lib/cloud/vsphere/resources/util.rb
|
106
130
|
- lib/cloud/vsphere/version.rb
|
107
131
|
- README
|
108
132
|
- Rakefile
|
109
133
|
- spec/spec_helper.rb
|
110
|
-
- spec/unit/
|
134
|
+
- spec/unit/cloud/vsphere/resources/cluster_spec.rb
|
135
|
+
- spec/unit/cloud/vsphere/resources/datacenter_spec.rb
|
136
|
+
- spec/unit/cloud/vsphere/resources/datastore_spec.rb
|
137
|
+
- spec/unit/cloud/vsphere/resources/folder_spec.rb
|
138
|
+
- spec/unit/cloud/vsphere/resources/resource_pool_spec.rb
|
139
|
+
- spec/unit/cloud/vsphere/resources/scorer_spec.rb
|
140
|
+
- spec/unit/cloud/vsphere/resources/util_spec.rb
|
141
|
+
- spec/unit/cloud/vsphere/resources_spec.rb
|
111
142
|
homepage: http://www.vmware.com
|
112
143
|
licenses: []
|
113
144
|
post_install_message:
|
@@ -120,24 +151,26 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
120
151
|
- - ! '>='
|
121
152
|
- !ruby/object:Gem::Version
|
122
153
|
version: '0'
|
123
|
-
segments:
|
124
|
-
- 0
|
125
|
-
hash: 3586558243084673783
|
126
154
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
155
|
none: false
|
128
156
|
requirements:
|
129
157
|
- - ! '>='
|
130
158
|
- !ruby/object:Gem::Version
|
131
159
|
version: '0'
|
132
|
-
segments:
|
133
|
-
- 0
|
134
|
-
hash: 3586558243084673783
|
135
160
|
requirements: []
|
136
161
|
rubyforge_project:
|
137
|
-
rubygems_version: 1.8.
|
162
|
+
rubygems_version: 1.8.23
|
138
163
|
signing_key:
|
139
164
|
specification_version: 3
|
140
165
|
summary: BOSH VSphere CPI
|
141
166
|
test_files:
|
142
167
|
- spec/spec_helper.rb
|
143
|
-
- spec/unit/
|
168
|
+
- spec/unit/cloud/vsphere/resources/cluster_spec.rb
|
169
|
+
- spec/unit/cloud/vsphere/resources/datacenter_spec.rb
|
170
|
+
- spec/unit/cloud/vsphere/resources/datastore_spec.rb
|
171
|
+
- spec/unit/cloud/vsphere/resources/folder_spec.rb
|
172
|
+
- spec/unit/cloud/vsphere/resources/resource_pool_spec.rb
|
173
|
+
- spec/unit/cloud/vsphere/resources/scorer_spec.rb
|
174
|
+
- spec/unit/cloud/vsphere/resources/util_spec.rb
|
175
|
+
- spec/unit/cloud/vsphere/resources_spec.rb
|
176
|
+
has_rdoc:
|
@@ -1,274 +0,0 @@
|
|
1
|
-
# Copyright (c) 2009-2012 VMware, Inc.
|
2
|
-
|
3
|
-
require File.expand_path("../../spec_helper", __FILE__)
|
4
|
-
|
5
|
-
describe VSphereCloud::Resources do
|
6
|
-
|
7
|
-
def create_datacenter(name)
|
8
|
-
datacenter = VSphereCloud::Resources::Datacenter.new
|
9
|
-
datacenter.name = name
|
10
|
-
datacenter.persistent_datastore_pattern = /.*/
|
11
|
-
datacenter.clusters = []
|
12
|
-
datacenter
|
13
|
-
end
|
14
|
-
|
15
|
-
def create_cluster(name)
|
16
|
-
cluster = VSphereCloud::Resources::Cluster.new
|
17
|
-
cluster.name = name
|
18
|
-
cluster.mob = name
|
19
|
-
cluster.total_memory = 2048
|
20
|
-
cluster.free_memory = 1024
|
21
|
-
cluster.unaccounted_memory = 0
|
22
|
-
cluster.mem_over_commit = 1
|
23
|
-
cluster.idle_cpu = 0.9
|
24
|
-
cluster.datastores = []
|
25
|
-
cluster.persistent_datastores = []
|
26
|
-
cluster
|
27
|
-
end
|
28
|
-
|
29
|
-
def create_datastore(name)
|
30
|
-
datastore = VSphereCloud::Resources::Datastore.new
|
31
|
-
datastore.name = name
|
32
|
-
datastore.total_space = 2048
|
33
|
-
datastore.free_space = 1024
|
34
|
-
datastore.unaccounted_space = 0
|
35
|
-
datastore
|
36
|
-
end
|
37
|
-
|
38
|
-
def mark_clusters_full
|
39
|
-
@datacenters["dc"].clusters.each do |cluster|
|
40
|
-
cluster.free_memory = 0
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def mark_datastore_full(cluster_index, datastore_index)
|
45
|
-
datastore = @datacenters["dc"].clusters[cluster_index].datastores[datastore_index]
|
46
|
-
datastore.free_space = 0
|
47
|
-
end
|
48
|
-
|
49
|
-
def mark_persistent_datastore_full(cluster_index, datastore_index)
|
50
|
-
datastore = @datacenters["dc"].clusters[cluster_index].persistent_datastores[datastore_index]
|
51
|
-
datastore.free_space = 0
|
52
|
-
end
|
53
|
-
|
54
|
-
before(:each) do
|
55
|
-
@resources = VSphereCloud::Resources.new("client", "vcenter")
|
56
|
-
datacenter = create_datacenter("dc")
|
57
|
-
3.times do |n|
|
58
|
-
cluster = create_cluster("cluster#{n}")
|
59
|
-
2.times do |x|
|
60
|
-
cluster.datastores << create_datastore("#{cluster.name}-#{x}")
|
61
|
-
end
|
62
|
-
2.times do |x|
|
63
|
-
cluster.persistent_datastores << create_datastore("#{cluster.name}-p-#{x}")
|
64
|
-
end
|
65
|
-
datacenter.clusters << cluster
|
66
|
-
end
|
67
|
-
@datacenters = {}
|
68
|
-
@datacenters[datacenter.name] = datacenter
|
69
|
-
end
|
70
|
-
|
71
|
-
|
72
|
-
it "should raise exception if no resources available" do
|
73
|
-
@resources.stub!(:find_resources).and_return([])
|
74
|
-
got_exception = false
|
75
|
-
begin
|
76
|
-
@resources.get_resources
|
77
|
-
rescue => e
|
78
|
-
if e.message =~ /No available resources.*/
|
79
|
-
got_exception = true
|
80
|
-
end
|
81
|
-
end
|
82
|
-
got_exception.should be_true
|
83
|
-
end
|
84
|
-
|
85
|
-
it "should match given persistent disk affinity" do
|
86
|
-
@resources.stub!(:datacenters).and_return(@datacenters)
|
87
|
-
disks = []
|
88
|
-
disks << {"size" => 100}
|
89
|
-
disks << {"persistent" => true, "datacenter" => "dc", "datastore" => "cluster0-p-0", "size" => 100}
|
90
|
-
cluster, datastore = @resources.get_resources(0, disks)
|
91
|
-
cluster.name.should == "cluster0"
|
92
|
-
datastore.name.should match(/cluster0*/)
|
93
|
-
end
|
94
|
-
|
95
|
-
it "should match expected datastore and cluster" do
|
96
|
-
mark_datastore_full(0, 0)
|
97
|
-
@resources.stub!(:datacenters).and_return(@datacenters)
|
98
|
-
|
99
|
-
disks = []
|
100
|
-
disks << {"size" => 100}
|
101
|
-
disks << {"persistent" => true, "datacenter" => "dc", "datastore" => "cluster0-p-0", "size" => 100}
|
102
|
-
cluster, datastore = @resources.get_resources(0, disks)
|
103
|
-
cluster.name.should == "cluster0"
|
104
|
-
datastore.name.should == "cluster0-1"
|
105
|
-
end
|
106
|
-
|
107
|
-
it "should match expected datastore and cluster" do
|
108
|
-
mark_datastore_full(0, 1)
|
109
|
-
@resources.stub!(:datacenters).and_return(@datacenters)
|
110
|
-
|
111
|
-
disks = []
|
112
|
-
disks << {"size" => 100}
|
113
|
-
disks << {"persistent" => true, "datacenter" => "dc", "datastore" => "cluster0-p-0", "size" => 100}
|
114
|
-
cluster, datastore = @resources.get_resources(0, disks)
|
115
|
-
cluster.name.should == "cluster0"
|
116
|
-
datastore.name.should == "cluster0-0"
|
117
|
-
end
|
118
|
-
|
119
|
-
it "should match next available datastore and cluster" do
|
120
|
-
mark_datastore_full(0, 0)
|
121
|
-
mark_datastore_full(0, 1)
|
122
|
-
@resources.stub!(:datacenters).and_return(@datacenters)
|
123
|
-
|
124
|
-
disks = []
|
125
|
-
disks << {"size" => 100}
|
126
|
-
disks << {"persistent" => true, "datacenter" => "dc", "datastore" => "cluster0-p-0", "size" => 100}
|
127
|
-
cluster, datastore = @resources.get_resources(0, disks)
|
128
|
-
cluster.name.should_not match(/cluster0/)
|
129
|
-
datastore.name.should_not match(/cluster0/)
|
130
|
-
end
|
131
|
-
|
132
|
-
it "should match given persistent datastore affinity" do
|
133
|
-
mark_persistent_datastore_full(0, 0)
|
134
|
-
@resources.stub!(:datacenters).and_return(@datacenters)
|
135
|
-
|
136
|
-
disks = []
|
137
|
-
disks << {"size" => 100}
|
138
|
-
disks << {"persistent" => true, "datacenter" => "dc", "datastore" => "cluster0-p-0", "size" => 100}
|
139
|
-
cluster, datastore = @resources.get_resources(0, disks)
|
140
|
-
cluster.name.should == "cluster0"
|
141
|
-
datastore.name.should match(/cluster0*/)
|
142
|
-
end
|
143
|
-
|
144
|
-
it "should match given persistent datastore affinity" do
|
145
|
-
mark_persistent_datastore_full(0, 1)
|
146
|
-
@resources.stub!(:datacenters).and_return(@datacenters)
|
147
|
-
|
148
|
-
disks = []
|
149
|
-
disks << {"size" => 100}
|
150
|
-
disks << {"persistent" => true, "datacenter" => "dc", "datastore" => "cluster0-p-0", "size" => 100}
|
151
|
-
cluster, datastore = @resources.get_resources(0, disks)
|
152
|
-
cluster.name.should == "cluster0"
|
153
|
-
datastore.name.should match(/cluster0*/)
|
154
|
-
end
|
155
|
-
|
156
|
-
it "should match next available datastore and cluster" do
|
157
|
-
mark_persistent_datastore_full(0, 0)
|
158
|
-
mark_persistent_datastore_full(0, 1)
|
159
|
-
@resources.stub!(:datacenters).and_return(@datacenters)
|
160
|
-
|
161
|
-
disks = []
|
162
|
-
disks << {"size" => 100}
|
163
|
-
disks << {"persistent" => true, "datacenter" => "dc", "datastore" => "cluster0-p-0", "size" => 100}
|
164
|
-
cluster, datastore = @resources.get_resources(0, disks)
|
165
|
-
cluster.name.should_not match(/cluster0/)
|
166
|
-
datastore.name.should_not match(/cluster0/)
|
167
|
-
end
|
168
|
-
|
169
|
-
it "should match the cluster with largest footprint" do
|
170
|
-
@resources.stub!(:datacenters).and_return(@datacenters)
|
171
|
-
|
172
|
-
disks = []
|
173
|
-
disks << {"size" => 100}
|
174
|
-
disks << {"persistent" => true, "datacenter" => "dc", "datastore" => "cluster0-p-0", "size" => 100}
|
175
|
-
disks << {"persistent" => true, "datacenter" => "dc", "datastore" => "cluster2-p-0", "size" => 512}
|
176
|
-
disks << {"persistent" => true, "datacenter" => "dc", "datastore" => "cluster0-p-1", "size" => 200}
|
177
|
-
cluster, datastore = @resources.get_resources(0, disks)
|
178
|
-
cluster.name.should == "cluster2"
|
179
|
-
datastore.name.should match(/cluster2/)
|
180
|
-
end
|
181
|
-
|
182
|
-
it "should match the cluster with largest cummulative footprint" do
|
183
|
-
@resources.stub!(:datacenters).and_return(@datacenters)
|
184
|
-
|
185
|
-
disks = []
|
186
|
-
disks << {"size" => 100}
|
187
|
-
disks << {"persistent" => true, "datacenter" => "dc", "datastore" => "cluster0-p-0", "size" => 200}
|
188
|
-
disks << {"persistent" => true, "datacenter" => "dc", "datastore" => "cluster2-p-0", "size" => 256}
|
189
|
-
disks << {"persistent" => true, "datacenter" => "dc", "datastore" => "cluster0-p-1", "size" => 200}
|
190
|
-
cluster, datastore = @resources.get_resources(0, disks)
|
191
|
-
cluster.name.should == "cluster0"
|
192
|
-
datastore.name.should match(/cluster0/)
|
193
|
-
end
|
194
|
-
|
195
|
-
it "should match any available datastore and cluster" do
|
196
|
-
@resources.stub!(:datacenters).and_return(@datacenters)
|
197
|
-
|
198
|
-
disks = []
|
199
|
-
disks << {"size" => 100}
|
200
|
-
cluster, datastore = @resources.get_resources(0, disks)
|
201
|
-
cluster.name.should_not be_nil
|
202
|
-
datastore.name.should_not be_nil
|
203
|
-
end
|
204
|
-
|
205
|
-
it "should match any available datastore and cluster" do
|
206
|
-
@resources.stub!(:datacenters).and_return(@datacenters)
|
207
|
-
cluster, datastore = @resources.get_resources
|
208
|
-
cluster.name.should_not be_nil
|
209
|
-
datastore.name.should_not be_nil
|
210
|
-
end
|
211
|
-
|
212
|
-
it "should match the exact expected datastore and cluster" do
|
213
|
-
mark_persistent_datastore_full(0, 0)
|
214
|
-
mark_persistent_datastore_full(0, 1)
|
215
|
-
mark_persistent_datastore_full(1, 0)
|
216
|
-
mark_persistent_datastore_full(1, 1)
|
217
|
-
@resources.stub!(:datacenters).and_return(@datacenters)
|
218
|
-
cluster, datastore = @resources.get_resources
|
219
|
-
cluster.name.should == "cluster2"
|
220
|
-
datastore.name.should match(/cluster2/)
|
221
|
-
end
|
222
|
-
|
223
|
-
it "should raise an exception if clusters are out of memory" do
|
224
|
-
mark_clusters_full
|
225
|
-
@resources.stub!(:datacenters).and_return(@datacenters)
|
226
|
-
got_exception = false
|
227
|
-
begin
|
228
|
-
cluster, datastore = @resources.get_resources
|
229
|
-
rescue => e
|
230
|
-
if e.message =~ /No available resources.*/ && e.message =~ /.*Skipping.*/
|
231
|
-
got_exception = true
|
232
|
-
end
|
233
|
-
end
|
234
|
-
got_exception.should be_true
|
235
|
-
end
|
236
|
-
|
237
|
-
it "should raise an exception if all persistent datastores are full" do
|
238
|
-
mark_persistent_datastore_full(0, 0)
|
239
|
-
mark_persistent_datastore_full(0, 1)
|
240
|
-
mark_persistent_datastore_full(1, 0)
|
241
|
-
mark_persistent_datastore_full(1, 1)
|
242
|
-
mark_persistent_datastore_full(2, 0)
|
243
|
-
mark_persistent_datastore_full(2, 1)
|
244
|
-
@resources.stub!(:datacenters).and_return(@datacenters)
|
245
|
-
got_exception = false
|
246
|
-
begin
|
247
|
-
cluster, datastore = @resources.get_resources
|
248
|
-
rescue => e
|
249
|
-
if e.message =~ /No available resources.*/ && e.message =~ /.*Skipping.*/
|
250
|
-
got_exception = true
|
251
|
-
end
|
252
|
-
end
|
253
|
-
got_exception.should be_true
|
254
|
-
end
|
255
|
-
|
256
|
-
it "should raise an exception if all nonpersistent datastores are full" do
|
257
|
-
mark_datastore_full(0, 0)
|
258
|
-
mark_datastore_full(0, 1)
|
259
|
-
mark_datastore_full(1, 0)
|
260
|
-
mark_datastore_full(1, 1)
|
261
|
-
mark_datastore_full(2, 0)
|
262
|
-
mark_datastore_full(2, 1)
|
263
|
-
@resources.stub!(:datacenters).and_return(@datacenters)
|
264
|
-
got_exception = false
|
265
|
-
begin
|
266
|
-
cluster, datastore = @resources.get_resources
|
267
|
-
rescue => e
|
268
|
-
if e.message =~ /No available resources.*/ && e.message =~ /.*Skipping.*/
|
269
|
-
got_exception = true
|
270
|
-
end
|
271
|
-
end
|
272
|
-
got_exception.should be_true
|
273
|
-
end
|
274
|
-
end
|