bosh_vsphere_cpi 0.6.0 → 1.5.0.pre.1100
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/vsphere_cpi_console +35 -0
- data/db/migrations/20120123235022_initial.rb +5 -0
- data/lib/cloud/vsphere/client.rb +4 -5
- data/lib/cloud/vsphere/cloud.rb +245 -226
- data/lib/cloud/vsphere/config.rb +0 -4
- data/lib/cloud/vsphere/models/disk.rb +3 -0
- data/lib/cloud/vsphere/path_finder.rb +12 -0
- data/lib/cloud/vsphere/resources.rb +0 -2
- data/lib/cloud/vsphere/version.rb +1 -1
- data/lib/cloud/vsphere.rb +5 -3
- data/lib/ruby_vim_sdk/base_type.rb +15 -0
- data/lib/ruby_vim_sdk/const.rb +32 -0
- data/lib/ruby_vim_sdk/core_types.rb +68 -0
- data/lib/ruby_vim_sdk/data_type.rb +14 -0
- data/lib/ruby_vim_sdk/enum_type.rb +12 -0
- data/lib/ruby_vim_sdk/ext.rb +9 -0
- data/lib/ruby_vim_sdk/managed_type.rb +12 -0
- data/lib/ruby_vim_sdk/method.rb +37 -0
- data/lib/ruby_vim_sdk/missing_types.rb +11 -0
- data/lib/ruby_vim_sdk/property.rb +49 -0
- data/lib/ruby_vim_sdk/server_objects.rb +2718 -0
- data/lib/ruby_vim_sdk/soap/deserializer.rb +301 -0
- data/lib/ruby_vim_sdk/soap/serializer.rb +225 -0
- data/lib/ruby_vim_sdk/soap/stub_adapter.rb +123 -0
- data/lib/ruby_vim_sdk/soap_exception.rb +12 -0
- data/lib/ruby_vim_sdk/typed_array.rb +9 -0
- data/lib/ruby_vim_sdk/types.rb +22 -0
- data/lib/ruby_vim_sdk/version.rb +5 -0
- data/lib/ruby_vim_sdk/vmodl/data_object.rb +102 -0
- data/lib/ruby_vim_sdk/vmodl/managed_object.rb +78 -0
- data/lib/ruby_vim_sdk/vmodl/method_name.rb +7 -0
- data/lib/ruby_vim_sdk/vmodl/property_path.rb +7 -0
- data/lib/ruby_vim_sdk/vmodl/type_name.rb +7 -0
- data/lib/ruby_vim_sdk/vmodl_helper.rb +33 -0
- data/lib/ruby_vim_sdk/vmomi_support.rb +280 -0
- data/lib/ruby_vim_sdk.rb +45 -0
- metadata +65 -53
- data/Rakefile +0 -50
- data/spec/spec_helper.rb +0 -33
- data/spec/unit/cloud/vsphere/resources/cluster_spec.rb +0 -383
- data/spec/unit/cloud/vsphere/resources/datacenter_spec.rb +0 -72
- data/spec/unit/cloud/vsphere/resources/datastore_spec.rb +0 -43
- data/spec/unit/cloud/vsphere/resources/folder_spec.rb +0 -63
- data/spec/unit/cloud/vsphere/resources/resource_pool_spec.rb +0 -42
- data/spec/unit/cloud/vsphere/resources/scorer_spec.rb +0 -73
- data/spec/unit/cloud/vsphere/resources/util_spec.rb +0 -35
- data/spec/unit/cloud/vsphere/resources_spec.rb +0 -216
metadata
CHANGED
@@ -1,89 +1,89 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bosh_vsphere_cpi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 1.5.0.pre.1100
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- VMware
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-10-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bosh_common
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 1.5.0.pre.1100
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: 1.5.0.pre.1100
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: bosh_cpi
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
35
|
-
- -
|
35
|
+
- - ~>
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
37
|
+
version: 1.5.0.pre.1100
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
45
|
+
version: 1.5.0.pre.1100
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
47
|
name: membrane
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|
51
|
-
- -
|
51
|
+
- - ~>
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
53
|
+
version: 0.0.2
|
54
54
|
type: :runtime
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
none: false
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 0.0.2
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
63
|
+
name: sequel
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
none: false
|
66
66
|
requirements:
|
67
|
-
- -
|
67
|
+
- - ~>
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
69
|
+
version: 3.43.0
|
70
70
|
type: :runtime
|
71
71
|
prerelease: false
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
|
-
- -
|
75
|
+
- - ~>
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
77
|
+
version: 3.43.0
|
78
78
|
- !ruby/object:Gem::Dependency
|
79
|
-
name:
|
79
|
+
name: rspec
|
80
80
|
requirement: !ruby/object:Gem::Requirement
|
81
81
|
none: false
|
82
82
|
requirements:
|
83
83
|
- - ! '>='
|
84
84
|
- !ruby/object:Gem::Version
|
85
85
|
version: '0'
|
86
|
-
type: :
|
86
|
+
type: :development
|
87
87
|
prerelease: false
|
88
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
89
|
none: false
|
@@ -92,14 +92,14 @@ dependencies:
|
|
92
92
|
- !ruby/object:Gem::Version
|
93
93
|
version: '0'
|
94
94
|
- !ruby/object:Gem::Dependency
|
95
|
-
name:
|
95
|
+
name: rspec-fire
|
96
96
|
requirement: !ruby/object:Gem::Requirement
|
97
97
|
none: false
|
98
98
|
requirements:
|
99
99
|
- - ! '>='
|
100
100
|
- !ruby/object:Gem::Version
|
101
101
|
version: '0'
|
102
|
-
type: :
|
102
|
+
type: :development
|
103
103
|
prerelease: false
|
104
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
@@ -107,9 +107,12 @@ dependencies:
|
|
107
107
|
- - ! '>='
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: '0'
|
110
|
-
description: BOSH VSphere CPI
|
111
|
-
|
112
|
-
|
110
|
+
description: ! 'BOSH VSphere CPI
|
111
|
+
|
112
|
+
a5984f'
|
113
|
+
email: support@cloudfoundry.com
|
114
|
+
executables:
|
115
|
+
- vsphere_cpi_console
|
113
116
|
extensions: []
|
114
117
|
extra_rdoc_files: []
|
115
118
|
files:
|
@@ -121,6 +124,7 @@ files:
|
|
121
124
|
- lib/cloud/vsphere/config.rb
|
122
125
|
- lib/cloud/vsphere/lease_updater.rb
|
123
126
|
- lib/cloud/vsphere/models/disk.rb
|
127
|
+
- lib/cloud/vsphere/path_finder.rb
|
124
128
|
- lib/cloud/vsphere/resources.rb
|
125
129
|
- lib/cloud/vsphere/resources/cluster.rb
|
126
130
|
- lib/cloud/vsphere/resources/datacenter.rb
|
@@ -130,19 +134,37 @@ files:
|
|
130
134
|
- lib/cloud/vsphere/resources/scorer.rb
|
131
135
|
- lib/cloud/vsphere/resources/util.rb
|
132
136
|
- lib/cloud/vsphere/version.rb
|
137
|
+
- lib/ruby_vim_sdk.rb
|
138
|
+
- lib/ruby_vim_sdk/base_type.rb
|
139
|
+
- lib/ruby_vim_sdk/const.rb
|
140
|
+
- lib/ruby_vim_sdk/core_types.rb
|
141
|
+
- lib/ruby_vim_sdk/data_type.rb
|
142
|
+
- lib/ruby_vim_sdk/enum_type.rb
|
143
|
+
- lib/ruby_vim_sdk/ext.rb
|
144
|
+
- lib/ruby_vim_sdk/managed_type.rb
|
145
|
+
- lib/ruby_vim_sdk/method.rb
|
146
|
+
- lib/ruby_vim_sdk/missing_types.rb
|
147
|
+
- lib/ruby_vim_sdk/property.rb
|
148
|
+
- lib/ruby_vim_sdk/server_objects.rb
|
149
|
+
- lib/ruby_vim_sdk/soap/deserializer.rb
|
150
|
+
- lib/ruby_vim_sdk/soap/serializer.rb
|
151
|
+
- lib/ruby_vim_sdk/soap/stub_adapter.rb
|
152
|
+
- lib/ruby_vim_sdk/soap_exception.rb
|
153
|
+
- lib/ruby_vim_sdk/typed_array.rb
|
154
|
+
- lib/ruby_vim_sdk/types.rb
|
155
|
+
- lib/ruby_vim_sdk/version.rb
|
156
|
+
- lib/ruby_vim_sdk/vmodl/data_object.rb
|
157
|
+
- lib/ruby_vim_sdk/vmodl/managed_object.rb
|
158
|
+
- lib/ruby_vim_sdk/vmodl/method_name.rb
|
159
|
+
- lib/ruby_vim_sdk/vmodl/property_path.rb
|
160
|
+
- lib/ruby_vim_sdk/vmodl/type_name.rb
|
161
|
+
- lib/ruby_vim_sdk/vmodl_helper.rb
|
162
|
+
- lib/ruby_vim_sdk/vmomi_support.rb
|
133
163
|
- README
|
134
|
-
-
|
135
|
-
|
136
|
-
|
137
|
-
-
|
138
|
-
- spec/unit/cloud/vsphere/resources/datastore_spec.rb
|
139
|
-
- spec/unit/cloud/vsphere/resources/folder_spec.rb
|
140
|
-
- spec/unit/cloud/vsphere/resources/resource_pool_spec.rb
|
141
|
-
- spec/unit/cloud/vsphere/resources/scorer_spec.rb
|
142
|
-
- spec/unit/cloud/vsphere/resources/util_spec.rb
|
143
|
-
- spec/unit/cloud/vsphere/resources_spec.rb
|
144
|
-
homepage: http://www.vmware.com
|
145
|
-
licenses: []
|
164
|
+
- bin/vsphere_cpi_console
|
165
|
+
homepage: https://github.com/cloudfoundry/bosh
|
166
|
+
licenses:
|
167
|
+
- Apache 2.0
|
146
168
|
post_install_message:
|
147
169
|
rdoc_options: []
|
148
170
|
require_paths:
|
@@ -152,27 +174,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
152
174
|
requirements:
|
153
175
|
- - ! '>='
|
154
176
|
- !ruby/object:Gem::Version
|
155
|
-
version:
|
177
|
+
version: 1.9.3
|
156
178
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
157
179
|
none: false
|
158
180
|
requirements:
|
159
|
-
- - ! '
|
181
|
+
- - ! '>'
|
160
182
|
- !ruby/object:Gem::Version
|
161
|
-
version:
|
183
|
+
version: 1.3.1
|
162
184
|
requirements: []
|
163
185
|
rubyforge_project:
|
164
186
|
rubygems_version: 1.8.23
|
165
187
|
signing_key:
|
166
188
|
specification_version: 3
|
167
189
|
summary: BOSH VSphere CPI
|
168
|
-
test_files:
|
169
|
-
- spec/spec_helper.rb
|
170
|
-
- spec/unit/cloud/vsphere/resources/cluster_spec.rb
|
171
|
-
- spec/unit/cloud/vsphere/resources/datacenter_spec.rb
|
172
|
-
- spec/unit/cloud/vsphere/resources/datastore_spec.rb
|
173
|
-
- spec/unit/cloud/vsphere/resources/folder_spec.rb
|
174
|
-
- spec/unit/cloud/vsphere/resources/resource_pool_spec.rb
|
175
|
-
- spec/unit/cloud/vsphere/resources/scorer_spec.rb
|
176
|
-
- spec/unit/cloud/vsphere/resources/util_spec.rb
|
177
|
-
- spec/unit/cloud/vsphere/resources_spec.rb
|
178
|
-
has_rdoc:
|
190
|
+
test_files: []
|
data/Rakefile
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
# Copyright (c) 2009-2012 VMware, Inc.
|
2
|
-
|
3
|
-
$:.unshift(File.expand_path("../../rake", __FILE__))
|
4
|
-
|
5
|
-
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __FILE__)
|
6
|
-
|
7
|
-
require "rubygems"
|
8
|
-
require "bundler"
|
9
|
-
Bundler.setup(:default, :test)
|
10
|
-
|
11
|
-
require "rake"
|
12
|
-
begin
|
13
|
-
require "rspec/core/rake_task"
|
14
|
-
rescue LoadError
|
15
|
-
end
|
16
|
-
|
17
|
-
require "bundler_task"
|
18
|
-
require "ci_task"
|
19
|
-
|
20
|
-
gem_helper = Bundler::GemHelper.new(Dir.pwd)
|
21
|
-
|
22
|
-
desc "Build VSphere CPI gem into the pkg directory"
|
23
|
-
task "build" do
|
24
|
-
gem_helper.build_gem
|
25
|
-
end
|
26
|
-
|
27
|
-
desc "Build and install VSphere CPI into system gems"
|
28
|
-
task "install" do
|
29
|
-
Rake::Task["bundler:install"].invoke
|
30
|
-
gem_helper.install_gem
|
31
|
-
end
|
32
|
-
|
33
|
-
BundlerTask.new
|
34
|
-
|
35
|
-
if defined?(RSpec)
|
36
|
-
namespace :spec do
|
37
|
-
desc "Run Unit Tests"
|
38
|
-
rspec_task = RSpec::Core::RakeTask.new(:unit) do |t|
|
39
|
-
t.pattern = "spec/unit/**/*_spec.rb"
|
40
|
-
t.rspec_opts = %w(--format progress --colour)
|
41
|
-
end
|
42
|
-
|
43
|
-
CiTask.new do |task|
|
44
|
-
task.rspec_task = rspec_task
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
desc "Run tests"
|
49
|
-
task :spec => %w(spec:unit)
|
50
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
# Copyright (c) 2009-2012 VMware, Inc.
|
2
|
-
|
3
|
-
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __FILE__)
|
4
|
-
|
5
|
-
require "rubygems"
|
6
|
-
require "bundler"
|
7
|
-
Bundler.setup(:default, :test)
|
8
|
-
|
9
|
-
require "rspec"
|
10
|
-
|
11
|
-
require "sequel"
|
12
|
-
require "sequel/adapters/sqlite"
|
13
|
-
|
14
|
-
Sequel.extension :migration
|
15
|
-
db = Sequel.sqlite(':memory:')
|
16
|
-
migration = File.expand_path("../../db/migrations/vsphere_cpi", __FILE__)
|
17
|
-
Sequel::TimestampMigrator.new(db, migration, :table => "vsphere_cpi_schema").run
|
18
|
-
|
19
|
-
require 'cloud'
|
20
|
-
require 'cloud/vsphere'
|
21
|
-
|
22
|
-
class VSphereSpecConfig
|
23
|
-
attr_accessor :db, :logger, :uuid
|
24
|
-
end
|
25
|
-
|
26
|
-
config = VSphereSpecConfig.new
|
27
|
-
config.db = db
|
28
|
-
config.logger = Logger.new(STDOUT)
|
29
|
-
config.logger.level = Logger::ERROR
|
30
|
-
config.uuid = "123"
|
31
|
-
|
32
|
-
Bosh::Clouds::Config.configure(config)
|
33
|
-
VSphereCloud::Config.logger = config.logger
|
@@ -1,383 +0,0 @@
|
|
1
|
-
# Copyright (c) 2009-2012 VMware, Inc.
|
2
|
-
|
3
|
-
require File.expand_path("../../../../../spec_helper", __FILE__)
|
4
|
-
|
5
|
-
describe VSphereCloud::Resources::Cluster do
|
6
|
-
before(:each) do
|
7
|
-
@client = mock(:client)
|
8
|
-
VSphereCloud::Config.client = @client
|
9
|
-
VSphereCloud::Config.mem_overcommit = 1.0
|
10
|
-
@dc = mock(:datacenter)
|
11
|
-
@dc_config = mock(:datacenter_config)
|
12
|
-
@dc.stub!(:config).and_return(@dc_config)
|
13
|
-
end
|
14
|
-
|
15
|
-
describe :initialize do
|
16
|
-
it "should create a cluster" do
|
17
|
-
cluster_mob = mock(:cluster_mob)
|
18
|
-
|
19
|
-
@client.should_receive(:get_properties).with(
|
20
|
-
[], VimSdk::Vim::Datastore,
|
21
|
-
%w(summary.freeSpace summary.capacity name)).and_return(
|
22
|
-
{})
|
23
|
-
|
24
|
-
VSphereCloud::Resources::Cluster.any_instance.stub(
|
25
|
-
:fetch_cluster_utilization)
|
26
|
-
|
27
|
-
cluster_config = mock(:cluster_config)
|
28
|
-
cluster_config.stub!(:name).and_return("foo")
|
29
|
-
cluster_config.stub!(:resource_pool).and_return(nil)
|
30
|
-
cluster = VSphereCloud::Resources::Cluster.new(@dc, cluster_config, {
|
31
|
-
:obj => cluster_mob,
|
32
|
-
"datastore" => []
|
33
|
-
})
|
34
|
-
|
35
|
-
cluster.name.should == "foo"
|
36
|
-
cluster.mob.should == cluster_mob
|
37
|
-
cluster.ephemeral_datastores.should be_empty
|
38
|
-
cluster.persistent_datastores.should be_empty
|
39
|
-
cluster.shared_datastores.should be_empty
|
40
|
-
end
|
41
|
-
|
42
|
-
it "should create a cluster with dedicated datastores" do
|
43
|
-
datastore_config = mock(:datastore_config)
|
44
|
-
datastore_config.stub!(:ephemeral_pattern).and_return(/a/)
|
45
|
-
datastore_config.stub!(:persistent_pattern).and_return(/b/)
|
46
|
-
datastore_config.stub!(:allow_mixed).and_return(false)
|
47
|
-
@dc_config.stub!(:datastores).and_return(datastore_config)
|
48
|
-
|
49
|
-
datastore_a = mock(:datastore_a)
|
50
|
-
datastore_a.stub(:name).and_return("a")
|
51
|
-
datastore_a_mob = mock(:datastore_a_mob)
|
52
|
-
datastore_a_properties = {
|
53
|
-
"name" => "a",
|
54
|
-
"summary.capacity" => 128 * 1024 * 1024 * 1024,
|
55
|
-
"summary.freeSpace" => 32 * 1024 * 1024 * 1024
|
56
|
-
}
|
57
|
-
VSphereCloud::Resources::Datastore.stub!(:new).
|
58
|
-
with(datastore_a_properties).and_return(datastore_a)
|
59
|
-
|
60
|
-
datastore_b = mock(:datastore_b)
|
61
|
-
datastore_b.stub(:name).and_return("b")
|
62
|
-
datastore_b_mob = mock(:datastore_b_mob)
|
63
|
-
datastore_b_properties = {
|
64
|
-
"name" => "b",
|
65
|
-
"summary.capacity" => 64 * 1024 * 1024 * 1024,
|
66
|
-
"summary.freeSpace" => 8 * 1024 * 1024 * 1024
|
67
|
-
}
|
68
|
-
VSphereCloud::Resources::Datastore.stub!(:new).
|
69
|
-
with(datastore_b_properties).and_return(datastore_b)
|
70
|
-
|
71
|
-
@client.should_receive(:get_properties).with(
|
72
|
-
[datastore_a_mob, datastore_b_mob], VimSdk::Vim::Datastore,
|
73
|
-
%w(summary.freeSpace summary.capacity name)).and_return(
|
74
|
-
{"a" => datastore_a_properties, "b" => datastore_b_properties})
|
75
|
-
|
76
|
-
VSphereCloud::Resources::Cluster.any_instance.stub(
|
77
|
-
:fetch_cluster_utilization)
|
78
|
-
|
79
|
-
cluster_config = mock(:cluster_config)
|
80
|
-
cluster_config.stub!(:name).and_return("foo")
|
81
|
-
cluster_config.stub!(:resource_pool).and_return(nil)
|
82
|
-
cluster = VSphereCloud::Resources::Cluster.new(@dc, cluster_config, {
|
83
|
-
"datastore" => [datastore_a_mob, datastore_b_mob]
|
84
|
-
})
|
85
|
-
|
86
|
-
cluster.ephemeral_datastores.should == {"a" => datastore_a}
|
87
|
-
cluster.persistent_datastores.should == {"b" => datastore_b}
|
88
|
-
cluster.shared_datastores.should be_empty
|
89
|
-
end
|
90
|
-
|
91
|
-
it "should fail to create a cluster with overlapped dedicated datastores" do
|
92
|
-
datastore_config = mock(:datastore_config)
|
93
|
-
datastore_config.stub!(:ephemeral_pattern).and_return(/[ab]/)
|
94
|
-
datastore_config.stub!(:persistent_pattern).and_return(/b/)
|
95
|
-
datastore_config.stub!(:allow_mixed).and_return(false)
|
96
|
-
@dc_config.stub!(:datastores).and_return(datastore_config)
|
97
|
-
|
98
|
-
datastore_a = mock(:datastore_a)
|
99
|
-
datastore_a.stub(:name).and_return("a")
|
100
|
-
datastore_a_mob = mock(:datastore_a_mob)
|
101
|
-
datastore_a_properties = {
|
102
|
-
"name" => "a"
|
103
|
-
}
|
104
|
-
VSphereCloud::Resources::Datastore.stub!(:new).
|
105
|
-
with(datastore_a_properties).and_return(datastore_a)
|
106
|
-
|
107
|
-
datastore_b = mock(:datastore_b)
|
108
|
-
datastore_b.stub(:name).and_return("b")
|
109
|
-
datastore_b_mob = mock(:datastore_b_mob)
|
110
|
-
datastore_b_properties = {
|
111
|
-
"name" => "b"
|
112
|
-
}
|
113
|
-
VSphereCloud::Resources::Datastore.stub!(:new).
|
114
|
-
with(datastore_b_properties).and_return(datastore_b)
|
115
|
-
|
116
|
-
@client.should_receive(:get_properties).with(
|
117
|
-
[datastore_a_mob, datastore_b_mob], VimSdk::Vim::Datastore,
|
118
|
-
%w(summary.freeSpace summary.capacity name)).and_return(
|
119
|
-
{"a" => datastore_a_properties, "b" => datastore_b_properties})
|
120
|
-
|
121
|
-
VSphereCloud::Resources::Cluster.any_instance.stub(
|
122
|
-
:fetch_cluster_utilization)
|
123
|
-
|
124
|
-
cluster_config = mock(:cluster_config)
|
125
|
-
cluster_config.stub!(:name).and_return("foo")
|
126
|
-
cluster_config.stub!(:resource_pool).and_return(nil)
|
127
|
-
expect {
|
128
|
-
VSphereCloud::Resources::Cluster.new(@dc, cluster_config, {
|
129
|
-
"datastore" => [datastore_a_mob, datastore_b_mob]
|
130
|
-
})
|
131
|
-
}.to raise_error /Datastore patterns are not mutually exclusive/
|
132
|
-
end
|
133
|
-
|
134
|
-
it "should create a cluster with shared datastores" do
|
135
|
-
datastore_config = mock(:datastore_config)
|
136
|
-
datastore_config.stub!(:ephemeral_pattern).and_return(/a/)
|
137
|
-
datastore_config.stub!(:persistent_pattern).and_return(/a/)
|
138
|
-
datastore_config.stub!(:allow_mixed).and_return(true)
|
139
|
-
@dc_config.stub!(:datastores).and_return(datastore_config)
|
140
|
-
|
141
|
-
datastore_a = mock(:datastore_a)
|
142
|
-
datastore_a.stub(:name).and_return("a")
|
143
|
-
datastore_a_mob = mock(:datastore_a_mob)
|
144
|
-
datastore_a_properties = {
|
145
|
-
"name" => "a",
|
146
|
-
"summary.capacity" => 128 * 1024 * 1024 * 1024,
|
147
|
-
"summary.freeSpace" => 32 * 1024 * 1024 * 1024
|
148
|
-
}
|
149
|
-
VSphereCloud::Resources::Datastore.stub!(:new).
|
150
|
-
with(datastore_a_properties).and_return(datastore_a)
|
151
|
-
|
152
|
-
@client.should_receive(:get_properties).with(
|
153
|
-
[datastore_a_mob], VimSdk::Vim::Datastore,
|
154
|
-
%w(summary.freeSpace summary.capacity name)).and_return(
|
155
|
-
{"a" => datastore_a_properties})
|
156
|
-
|
157
|
-
VSphereCloud::Resources::Cluster.any_instance.stub(
|
158
|
-
:fetch_cluster_utilization)
|
159
|
-
|
160
|
-
cluster_config = mock(:cluster_config)
|
161
|
-
cluster_config.stub!(:name).and_return("foo")
|
162
|
-
cluster_config.stub!(:resource_pool).and_return(nil)
|
163
|
-
cluster = VSphereCloud::Resources::Cluster.new(@dc, cluster_config, {
|
164
|
-
"datastore" => [datastore_a_mob]
|
165
|
-
})
|
166
|
-
|
167
|
-
cluster.ephemeral_datastores.should be_empty
|
168
|
-
cluster.persistent_datastores.should be_empty
|
169
|
-
cluster.shared_datastores.should == {"a" => datastore_a}
|
170
|
-
end
|
171
|
-
|
172
|
-
it "should create a cluster without a resource pool" do
|
173
|
-
host = mock(:host)
|
174
|
-
host_properties = {
|
175
|
-
:obj => host,
|
176
|
-
"runtime.inMaintenanceMode" => "false",
|
177
|
-
"hardware.memorySize" => 64 * 1024 * 1024 * 1024
|
178
|
-
}
|
179
|
-
host_counters = {
|
180
|
-
"cpu.usage.average" => "1000",
|
181
|
-
"mem.usage.average" => "5000"
|
182
|
-
}
|
183
|
-
@client.should_receive(:get_properties).with(
|
184
|
-
[], VimSdk::Vim::Datastore,
|
185
|
-
%w(summary.freeSpace summary.capacity name)).and_return(
|
186
|
-
{})
|
187
|
-
@client.should_receive(:get_properties).with(
|
188
|
-
[host], VimSdk::Vim::HostSystem,
|
189
|
-
%w(hardware.memorySize runtime.inMaintenanceMode),
|
190
|
-
{:ensure_all => true}).and_return(
|
191
|
-
{"foo" => host_properties})
|
192
|
-
@client.should_receive(:get_perf_counters).with(
|
193
|
-
[host], %w(cpu.usage.average mem.usage.average), {:max_sample => 5}).
|
194
|
-
and_return({"foo" => host_counters})
|
195
|
-
cluster_config = mock(:cluster_config)
|
196
|
-
cluster_config.stub!(:name).and_return("foo")
|
197
|
-
cluster_config.stub!(:resource_pool).and_return(nil)
|
198
|
-
cluster = VSphereCloud::Resources::Cluster.new(@dc, cluster_config, {
|
199
|
-
"datastore" => [],
|
200
|
-
"host" => [host]
|
201
|
-
})
|
202
|
-
|
203
|
-
cluster.free_memory.should == 32768
|
204
|
-
cluster.total_memory.should == 65536
|
205
|
-
cluster.idle_cpu.should == 0.9
|
206
|
-
end
|
207
|
-
|
208
|
-
it "should create a cluster with a resource pool" do
|
209
|
-
resource_pool = mock(:resource_pool)
|
210
|
-
resource_pool_mob = mock(:resource_pool_mob)
|
211
|
-
resource_pool.stub(:mob).and_return(resource_pool_mob)
|
212
|
-
VSphereCloud::Resources::ResourcePool.stub!(:new).
|
213
|
-
with(an_instance_of(VSphereCloud::Resources::Cluster), nil).
|
214
|
-
and_return(resource_pool)
|
215
|
-
|
216
|
-
summary = mock(:summary)
|
217
|
-
runtime = mock(:runtime)
|
218
|
-
runtime.stub(:overall_status).and_return("green")
|
219
|
-
cpu = mock(:cpu)
|
220
|
-
cpu.stub(:overall_usage).and_return(5)
|
221
|
-
cpu.stub(:max_usage).and_return(10)
|
222
|
-
runtime.stub(:cpu).and_return(cpu)
|
223
|
-
memory = mock(:memory)
|
224
|
-
memory.stub(:overall_usage).and_return(32 * 1024 * 1024 * 1024)
|
225
|
-
memory.stub(:max_usage).and_return(64 * 1024 * 1024 * 1024)
|
226
|
-
runtime.stub(:memory).and_return(memory)
|
227
|
-
summary.stub(:runtime).and_return(runtime)
|
228
|
-
|
229
|
-
@client.should_receive(:get_properties).with(
|
230
|
-
[], VimSdk::Vim::Datastore,
|
231
|
-
%w(summary.freeSpace summary.capacity name)).and_return(
|
232
|
-
{})
|
233
|
-
@client.should_receive(:get_properties).with(
|
234
|
-
resource_pool_mob, VimSdk::Vim::ResourcePool, %w(summary)).
|
235
|
-
and_return({"summary" => summary})
|
236
|
-
cluster_config = mock(:cluster_config)
|
237
|
-
cluster_config.stub!(:name).and_return("foo")
|
238
|
-
cluster_config.stub!(:resource_pool).and_return("baz")
|
239
|
-
cluster = VSphereCloud::Resources::Cluster.new(@dc, cluster_config, {
|
240
|
-
"datastore" => []
|
241
|
-
})
|
242
|
-
|
243
|
-
cluster.free_memory.should == 32768
|
244
|
-
cluster.total_memory.should == 65536
|
245
|
-
cluster.idle_cpu.should == 0.5
|
246
|
-
end
|
247
|
-
|
248
|
-
it "should create a cluster with an unhealthy resource pool" do
|
249
|
-
resource_pool = mock(:resource_pool)
|
250
|
-
resource_pool_mob = mock(:resource_pool_mob)
|
251
|
-
resource_pool.stub(:mob).and_return(resource_pool_mob)
|
252
|
-
VSphereCloud::Resources::ResourcePool.stub!(:new).
|
253
|
-
with(an_instance_of(VSphereCloud::Resources::Cluster), nil).
|
254
|
-
and_return(resource_pool)
|
255
|
-
|
256
|
-
summary = mock(:summary)
|
257
|
-
runtime = mock(:runtime)
|
258
|
-
runtime.stub(:overall_status).and_return("gray")
|
259
|
-
summary.stub(:runtime).and_return(runtime)
|
260
|
-
|
261
|
-
@client.should_receive(:get_properties).with(
|
262
|
-
[], VimSdk::Vim::Datastore,
|
263
|
-
%w(summary.freeSpace summary.capacity name)).and_return(
|
264
|
-
{})
|
265
|
-
@client.should_receive(:get_properties).with(
|
266
|
-
resource_pool_mob, VimSdk::Vim::ResourcePool, %w(summary)).
|
267
|
-
and_return({"summary" => summary})
|
268
|
-
cluster_config = mock(:cluster_config)
|
269
|
-
cluster_config.stub!(:name).and_return("foo")
|
270
|
-
cluster_config.stub!(:resource_pool).and_return("baz")
|
271
|
-
cluster = VSphereCloud::Resources::Cluster.new(@dc, cluster_config, {
|
272
|
-
"datastore" => []
|
273
|
-
})
|
274
|
-
|
275
|
-
cluster.free_memory.should == 0
|
276
|
-
cluster.total_memory.should == 0
|
277
|
-
cluster.idle_cpu.should == 0.0
|
278
|
-
end
|
279
|
-
end
|
280
|
-
|
281
|
-
describe :allocate do
|
282
|
-
it "should record the allocation against the cached utilization" do
|
283
|
-
@client.should_receive(:get_properties).with(
|
284
|
-
[], VimSdk::Vim::Datastore,
|
285
|
-
%w(summary.freeSpace summary.capacity name)).and_return(
|
286
|
-
{})
|
287
|
-
|
288
|
-
VSphereCloud::Resources::Cluster.any_instance.stub(
|
289
|
-
:fetch_cluster_utilization)
|
290
|
-
|
291
|
-
cluster_config = mock(:cluster_config)
|
292
|
-
cluster_config.stub!(:name).and_return("foo")
|
293
|
-
cluster_config.stub!(:resource_pool).and_return(nil)
|
294
|
-
cluster = VSphereCloud::Resources::Cluster.new(@dc, cluster_config, {
|
295
|
-
"datastore" => []
|
296
|
-
})
|
297
|
-
cluster.instance_eval { @synced_free_memory = 2048 }
|
298
|
-
cluster.allocate(1024)
|
299
|
-
cluster.free_memory.should == 1024
|
300
|
-
end
|
301
|
-
end
|
302
|
-
|
303
|
-
describe :pick_persistent do
|
304
|
-
before(:each) do
|
305
|
-
@client.should_receive(:get_properties).with(
|
306
|
-
[], VimSdk::Vim::Datastore,
|
307
|
-
%w(summary.freeSpace summary.capacity name)).and_return(
|
308
|
-
{})
|
309
|
-
|
310
|
-
VSphereCloud::Resources::Cluster.any_instance.stub(
|
311
|
-
:fetch_cluster_utilization)
|
312
|
-
|
313
|
-
cluster_config = mock(:cluster_config)
|
314
|
-
cluster_config.stub!(:name).and_return("foo")
|
315
|
-
cluster_config.stub!(:resource_pool).and_return(nil)
|
316
|
-
@cluster = VSphereCloud::Resources::Cluster.new(@dc, cluster_config, {
|
317
|
-
"datastore" => []
|
318
|
-
})
|
319
|
-
end
|
320
|
-
|
321
|
-
it "should only use persistent datastores if possible" do
|
322
|
-
datastore_a = mock(:datastore_a)
|
323
|
-
datastore_a.stub(:free_space).and_return(4096)
|
324
|
-
datastore_b = mock(:datastore_b)
|
325
|
-
|
326
|
-
@cluster.persistent_datastores["foo"] = datastore_a
|
327
|
-
@cluster.shared_datastores["bar"] = datastore_b
|
328
|
-
|
329
|
-
VSphereCloud::Resources::Util.should_receive(:weighted_random).
|
330
|
-
with([[datastore_a, 4096]]).and_return(datastore_a)
|
331
|
-
|
332
|
-
datastore = @cluster.pick_persistent(1024)
|
333
|
-
datastore.should == datastore_a
|
334
|
-
end
|
335
|
-
|
336
|
-
it "should filter out datastores that are low on free space" do
|
337
|
-
datastore_a = mock(:datastore_a)
|
338
|
-
datastore_a.stub(:free_space).and_return(2000)
|
339
|
-
datastore_b = mock(:datastore_b)
|
340
|
-
datastore_b.stub(:free_space).and_return(4096)
|
341
|
-
|
342
|
-
@cluster.persistent_datastores["foo"] = datastore_a
|
343
|
-
@cluster.shared_datastores["bar"] = datastore_b
|
344
|
-
|
345
|
-
VSphereCloud::Resources::Util.should_receive(:weighted_random).
|
346
|
-
with([[datastore_b, 4096]]).and_return(datastore_b)
|
347
|
-
|
348
|
-
datastore = @cluster.pick_persistent(1024)
|
349
|
-
datastore.should == datastore_b
|
350
|
-
end
|
351
|
-
end
|
352
|
-
|
353
|
-
describe :pick_ephemeral do
|
354
|
-
it "should only use ephemeral datastores if possible" do
|
355
|
-
@client.should_receive(:get_properties).with(
|
356
|
-
[], VimSdk::Vim::Datastore,
|
357
|
-
%w(summary.freeSpace summary.capacity name)).and_return(
|
358
|
-
{})
|
359
|
-
|
360
|
-
VSphereCloud::Resources::Cluster.any_instance.stub(
|
361
|
-
:fetch_cluster_utilization)
|
362
|
-
|
363
|
-
cluster_config = mock(:cluster_config)
|
364
|
-
cluster_config.stub!(:name).and_return("foo")
|
365
|
-
cluster_config.stub!(:resource_pool).and_return(nil)
|
366
|
-
@cluster = VSphereCloud::Resources::Cluster.new(@dc, cluster_config, {
|
367
|
-
"datastore" => []
|
368
|
-
})
|
369
|
-
datastore_a = mock(:datastore_a)
|
370
|
-
datastore_a.stub(:free_space).and_return(4096)
|
371
|
-
datastore_b = mock(:datastore_b)
|
372
|
-
|
373
|
-
@cluster.ephemeral_datastores["foo"] = datastore_a
|
374
|
-
@cluster.shared_datastores["bar"] = datastore_b
|
375
|
-
|
376
|
-
VSphereCloud::Resources::Util.should_receive(:weighted_random).
|
377
|
-
with([[datastore_a, 4096]]).and_return(datastore_a)
|
378
|
-
|
379
|
-
datastore = @cluster.pick_ephemeral(1024)
|
380
|
-
datastore.should == datastore_a
|
381
|
-
end
|
382
|
-
end
|
383
|
-
end
|