bosh-cloudfoundry 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +18 -0
- data/.rspec +2 -0
- data/.travis.yml +6 -0
- data/Gemfile +6 -0
- data/Guardfile +10 -0
- data/LICENSE.txt +22 -0
- data/README.md +242 -0
- data/Rakefile +33 -0
- data/bosh-cloudfoundry.gemspec +29 -0
- data/config/defaults.yml +6 -0
- data/lib/bosh-cloudfoundry.rb +34 -0
- data/lib/bosh-cloudfoundry/bosh_release_manager.rb +141 -0
- data/lib/bosh-cloudfoundry/config.rb +6 -0
- data/lib/bosh-cloudfoundry/config/common_config.rb +27 -0
- data/lib/bosh-cloudfoundry/config/dea_config.rb +150 -0
- data/lib/bosh-cloudfoundry/config/microbosh_config.rb +106 -0
- data/lib/bosh-cloudfoundry/config/postgresql_service_config.rb +185 -0
- data/lib/bosh-cloudfoundry/config/redis_service_config.rb +179 -0
- data/lib/bosh-cloudfoundry/config/system_config.rb +60 -0
- data/lib/bosh-cloudfoundry/config_options.rb +362 -0
- data/lib/bosh-cloudfoundry/gerrit_patches_helper.rb +47 -0
- data/lib/bosh-cloudfoundry/providers.rb +19 -0
- data/lib/bosh-cloudfoundry/providers/aws.rb +75 -0
- data/lib/bosh-cloudfoundry/system_deployment_manifest_renderer.rb +286 -0
- data/lib/bosh-cloudfoundry/version.rb +5 -0
- data/lib/bosh/cli/commands/cf.rb +668 -0
- data/spec/assets/.gitkeep +0 -0
- data/spec/assets/cf-release/jobs/cloud_controller/templates/runtimes.yml +150 -0
- data/spec/assets/deployments/aws-core-1-m1.small-free-redis.yml +221 -0
- data/spec/assets/deployments/aws-core-1-m1.xlarge-free-postgresql-2-m1.small-free-postgresql.yml +248 -0
- data/spec/assets/deployments/aws-core-2-m1.xlarge-dea.yml +195 -0
- data/spec/assets/deployments/aws-core-only.yml +178 -0
- data/spec/assets/deployments/aws-core-with-nfs.yml +192 -0
- data/spec/functional/.gitkeep +0 -0
- data/spec/spec_helper.rb +41 -0
- data/spec/unit/.gitkeep +0 -0
- data/spec/unit/bosh_release_manager_spec.rb +36 -0
- data/spec/unit/cf_command_spec.rb +280 -0
- data/spec/unit/config/common_config_spec.rb +21 -0
- data/spec/unit/config/dea_config_spec.rb +92 -0
- data/spec/unit/config/microbosh_config_spec.rb +11 -0
- data/spec/unit/config/postgresql_service_config_spec.rb +103 -0
- data/spec/unit/config/redis_service_config_spec.rb +103 -0
- data/spec/unit/config/system_config_spec.rb +29 -0
- data/spec/unit/config_options_spec.rb +64 -0
- data/spec/unit/system_deployment_manifest_renderer_spec.rb +93 -0
- metadata +246 -0
@@ -0,0 +1,11 @@
|
|
1
|
+
# Copyright (c) 2012-2013 Stark & Wayne, LLC
|
2
|
+
|
3
|
+
require File.expand_path("../../../spec_helper", __FILE__)
|
4
|
+
|
5
|
+
describe Bosh::CloudFoundry::Config::MicroboshConfig do
|
6
|
+
before(:each) do
|
7
|
+
@home = Dir.mktmpdir("home")
|
8
|
+
end
|
9
|
+
|
10
|
+
it "discovers fog connection properties in an AWS micro_bosh.yml"
|
11
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
# Copyright (c) 2012-2013 Stark & Wayne, LLC
|
2
|
+
|
3
|
+
require File.expand_path("../../../spec_helper", __FILE__)
|
4
|
+
|
5
|
+
# The specification of how a user's postgresql choices (count & flavor)
|
6
|
+
# are converted into deployment manifest configuration
|
7
|
+
describe Bosh::CloudFoundry::Config::PostgresqlServiceConfig do
|
8
|
+
include FileUtils
|
9
|
+
|
10
|
+
before do
|
11
|
+
@systems_dir = Dir.mktmpdir("system_config")
|
12
|
+
@system_dir = File.join(@systems_dir, "production")
|
13
|
+
mkdir_p(@system_dir)
|
14
|
+
@system_config = Bosh::CloudFoundry::Config::SystemConfig.new(@system_dir)
|
15
|
+
@system_config.bosh_provider = "aws"
|
16
|
+
@manifest = YAML.load_file(spec_asset("deployments/aws-core-only.yml"))
|
17
|
+
end
|
18
|
+
|
19
|
+
# find a specificly named job in the manifest
|
20
|
+
def job(name)
|
21
|
+
@manifest["jobs"].find { |job| job["name"] == name }
|
22
|
+
end
|
23
|
+
|
24
|
+
# find a specificly named resource pool in the manifest
|
25
|
+
def resource_pool(name)
|
26
|
+
@manifest["resource_pools"].find { |res| res["name"] == name }
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "0 postgresqls" do
|
30
|
+
subject { Bosh::CloudFoundry::Config::PostgresqlServiceConfig.build_from_system_config(@system_config) }
|
31
|
+
it "has 0 postgresql servers" do
|
32
|
+
subject.total_service_nodes_count.should == 0
|
33
|
+
end
|
34
|
+
it "is not in the core job" do
|
35
|
+
subject.add_core_jobs_to_manifest(@manifest)
|
36
|
+
job("core")["template"].should_not be_include("postgresql")
|
37
|
+
end
|
38
|
+
it "should not add a resoure pool called 'postgresql'" do
|
39
|
+
subject.add_resource_pools_to_manifest(@manifest)
|
40
|
+
@manifest["resource_pools"].size.should == 1
|
41
|
+
resource_pool("postgresql").should be_nil
|
42
|
+
end
|
43
|
+
it "should not add a job called 'postgresql'" do
|
44
|
+
subject.add_jobs_to_manifest(@manifest)
|
45
|
+
@manifest["jobs"].size.should == 1
|
46
|
+
job("postgresql").should be_nil
|
47
|
+
end
|
48
|
+
it "does not set properties.postgresql_gateway" do
|
49
|
+
subject.merge_manifest_properties(@manifest)
|
50
|
+
@manifest["properties"]["postgresql_gateway"].should be_nil
|
51
|
+
end
|
52
|
+
it "does not set properties.postgresql_node" do
|
53
|
+
subject.merge_manifest_properties(@manifest)
|
54
|
+
@manifest["properties"]["postgresql_node"].should be_nil
|
55
|
+
end
|
56
|
+
it "does not set properties.service_plans.postgresql" do
|
57
|
+
subject.merge_manifest_properties(@manifest)
|
58
|
+
@manifest["properties"]["service_plans"]["postgresql"].should be_nil
|
59
|
+
end
|
60
|
+
end
|
61
|
+
describe "1 x m1.xlarge postgresql node on AWS" do
|
62
|
+
subject do
|
63
|
+
@system_config.postgresql = [{ "count" => 1, "flavor" => 'm1.xlarge' }]
|
64
|
+
Bosh::CloudFoundry::Config::PostgresqlServiceConfig.build_from_system_config(@system_config)
|
65
|
+
end
|
66
|
+
it "has 1 postgresql servers" do
|
67
|
+
subject.total_service_nodes_count.should == 1
|
68
|
+
end
|
69
|
+
it "does not add colocated job to core job" do
|
70
|
+
subject.add_core_jobs_to_manifest(@manifest)
|
71
|
+
job("core")["template"].should_not be_include("postgresql")
|
72
|
+
end
|
73
|
+
it "adds postgresql_gateway to core job" do
|
74
|
+
subject.add_core_jobs_to_manifest(@manifest)
|
75
|
+
job("core")["template"].should be_include("postgresql_gateway")
|
76
|
+
end
|
77
|
+
it "should add a resoure pool called 'postgresql'" do
|
78
|
+
subject.add_resource_pools_to_manifest(@manifest)
|
79
|
+
@manifest["resource_pools"].size.should == 2
|
80
|
+
resource_pool("postgresql_m1_xlarge_free").should_not be_nil
|
81
|
+
resource_pool("postgresql_m1_xlarge_free")["size"].should == 1
|
82
|
+
resource_pool("postgresql_m1_xlarge_free")["cloud_properties"]["instance_type"].should == "m1.xlarge"
|
83
|
+
end
|
84
|
+
it "converts 1 postgresql into an explicit postgresql job" do
|
85
|
+
subject.add_jobs_to_manifest(@manifest)
|
86
|
+
job("postgresql_m1_xlarge_free").should_not be_nil
|
87
|
+
job("postgresql_m1_xlarge_free")["template"].should == ["postgresql_node"]
|
88
|
+
job("postgresql_m1_xlarge_free")["instances"].should == 1
|
89
|
+
end
|
90
|
+
it "sets properties.postgresql_gateway" do
|
91
|
+
subject.merge_manifest_properties(@manifest)
|
92
|
+
@manifest["properties"]["postgresql_gateway"].should_not be_nil
|
93
|
+
end
|
94
|
+
it "sets properties.postgresql_node" do
|
95
|
+
subject.merge_manifest_properties(@manifest)
|
96
|
+
@manifest["properties"]["postgresql_node"].should_not be_nil
|
97
|
+
end
|
98
|
+
it "sets properties.service_plans.postgresql" do
|
99
|
+
subject.merge_manifest_properties(@manifest)
|
100
|
+
@manifest["properties"]["service_plans"]["postgresql"].should_not be_nil
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
# Copyright (c) 2012-2013 Stark & Wayne, LLC
|
2
|
+
|
3
|
+
require File.expand_path("../../../spec_helper", __FILE__)
|
4
|
+
|
5
|
+
# The specification of how a user's redis choices (count & flavor)
|
6
|
+
# are converted into deployment manifest configuration
|
7
|
+
describe Bosh::CloudFoundry::Config::RedisServiceConfig do
|
8
|
+
include FileUtils
|
9
|
+
|
10
|
+
before do
|
11
|
+
@systems_dir = Dir.mktmpdir("system_config")
|
12
|
+
@system_dir = File.join(@systems_dir, "production")
|
13
|
+
mkdir_p(@system_dir)
|
14
|
+
@system_config = Bosh::CloudFoundry::Config::SystemConfig.new(@system_dir)
|
15
|
+
@system_config.bosh_provider = "aws"
|
16
|
+
@manifest = YAML.load_file(spec_asset("deployments/aws-core-only.yml"))
|
17
|
+
end
|
18
|
+
|
19
|
+
# find a specificly named job in the manifest
|
20
|
+
def job(name)
|
21
|
+
@manifest["jobs"].find { |job| job["name"] == name }
|
22
|
+
end
|
23
|
+
|
24
|
+
# find a specificly named resource pool in the manifest
|
25
|
+
def resource_pool(name)
|
26
|
+
@manifest["resource_pools"].find { |res| res["name"] == name }
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "0 redis servers" do
|
30
|
+
subject { Bosh::CloudFoundry::Config::RedisServiceConfig.build_from_system_config(@system_config) }
|
31
|
+
it "has 0 redis servers" do
|
32
|
+
subject.total_service_nodes_count.should == 0
|
33
|
+
end
|
34
|
+
it "is not in the core job" do
|
35
|
+
subject.add_core_jobs_to_manifest(@manifest)
|
36
|
+
job("core")["template"].should_not be_include("redis")
|
37
|
+
end
|
38
|
+
it "should not add a resoure pool called 'redis'" do
|
39
|
+
subject.add_resource_pools_to_manifest(@manifest)
|
40
|
+
@manifest["resource_pools"].size.should == 1
|
41
|
+
resource_pool("redis").should be_nil
|
42
|
+
end
|
43
|
+
it "should not add a job called 'redis'" do
|
44
|
+
subject.add_jobs_to_manifest(@manifest)
|
45
|
+
@manifest["jobs"].size.should == 1
|
46
|
+
job("redis").should be_nil
|
47
|
+
end
|
48
|
+
it "does not set properties.redis_gateway" do
|
49
|
+
subject.merge_manifest_properties(@manifest)
|
50
|
+
@manifest["properties"]["redis_gateway"].should be_nil
|
51
|
+
end
|
52
|
+
it "does not set properties.redis_node" do
|
53
|
+
subject.merge_manifest_properties(@manifest)
|
54
|
+
@manifest["properties"]["redis_node"].should be_nil
|
55
|
+
end
|
56
|
+
it "does not set properties.service_plans.redis" do
|
57
|
+
subject.merge_manifest_properties(@manifest)
|
58
|
+
@manifest["properties"]["service_plans"]["redis"].should be_nil
|
59
|
+
end
|
60
|
+
end
|
61
|
+
describe "1 x m1.xlarge redis node on AWS" do
|
62
|
+
subject do
|
63
|
+
@system_config.redis = [{ "count" => 1, "flavor" => 'm1.xlarge' }]
|
64
|
+
Bosh::CloudFoundry::Config::RedisServiceConfig.build_from_system_config(@system_config)
|
65
|
+
end
|
66
|
+
it "has 1 redis servers" do
|
67
|
+
subject.total_service_nodes_count.should == 1
|
68
|
+
end
|
69
|
+
it "does not add colocated job to core job" do
|
70
|
+
subject.add_core_jobs_to_manifest(@manifest)
|
71
|
+
job("core")["template"].should_not be_include("redis")
|
72
|
+
end
|
73
|
+
it "adds redis_gateway to core job" do
|
74
|
+
subject.add_core_jobs_to_manifest(@manifest)
|
75
|
+
job("core")["template"].should be_include("redis_gateway")
|
76
|
+
end
|
77
|
+
it "should add a resoure pool called 'redis'" do
|
78
|
+
subject.add_resource_pools_to_manifest(@manifest)
|
79
|
+
@manifest["resource_pools"].size.should == 2
|
80
|
+
resource_pool("redis_m1_xlarge_free").should_not be_nil
|
81
|
+
resource_pool("redis_m1_xlarge_free")["size"].should == 1
|
82
|
+
resource_pool("redis_m1_xlarge_free")["cloud_properties"]["instance_type"].should == "m1.xlarge"
|
83
|
+
end
|
84
|
+
it "converts 1 redis into an explicit redis job" do
|
85
|
+
subject.add_jobs_to_manifest(@manifest)
|
86
|
+
job("redis_m1_xlarge_free").should_not be_nil
|
87
|
+
job("redis_m1_xlarge_free")["template"].should == ["redis_node"]
|
88
|
+
job("redis_m1_xlarge_free")["instances"].should == 1
|
89
|
+
end
|
90
|
+
it "sets properties.redis_gateway" do
|
91
|
+
subject.merge_manifest_properties(@manifest)
|
92
|
+
@manifest["properties"]["redis_gateway"].should_not be_nil
|
93
|
+
end
|
94
|
+
it "sets properties.redis_node" do
|
95
|
+
subject.merge_manifest_properties(@manifest)
|
96
|
+
@manifest["properties"]["redis_node"].should_not be_nil
|
97
|
+
end
|
98
|
+
it "sets properties.service_plans.redis" do
|
99
|
+
subject.merge_manifest_properties(@manifest)
|
100
|
+
@manifest["properties"]["service_plans"]["redis"].should_not be_nil
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# Copyright (c) 2012-2013 Stark & Wayne, LLC
|
2
|
+
|
3
|
+
require File.expand_path("../../../spec_helper", __FILE__)
|
4
|
+
|
5
|
+
describe Bosh::CloudFoundry::Config::SystemConfig do
|
6
|
+
before(:each) do
|
7
|
+
@dir = Dir.mktmpdir("system_config_spec")
|
8
|
+
@config = Bosh::CloudFoundry::Config::SystemConfig.new(@dir)
|
9
|
+
end
|
10
|
+
|
11
|
+
after(:each) do
|
12
|
+
FileUtils.remove_entry_secure @dir
|
13
|
+
end
|
14
|
+
|
15
|
+
it("has system_name attribute") { @config.system_name.should_not == nil }
|
16
|
+
it("has system_dir attribute") { @config.system_dir.should_not == nil }
|
17
|
+
it("has release_name attribute") { @config.release_name.should == nil }
|
18
|
+
it("has stemcell_version attribute") { @config.stemcell_version.should == nil }
|
19
|
+
it("has runtimes attribute") { @config.runtimes.should == nil }
|
20
|
+
it("has common_password attribute") { @config.common_password.should == nil }
|
21
|
+
|
22
|
+
it "defaults system_name attribute based on basename of location of config file" do
|
23
|
+
@config.system_name == File.basename(@dir)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "defaults system_dir attribute based on location of config file" do
|
27
|
+
@config.system_dir == @dir
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# Copyright (c) 2012-2013 Stark & Wayne, LLC
|
2
|
+
|
3
|
+
require File.expand_path("../../spec_helper", __FILE__)
|
4
|
+
|
5
|
+
describe Bosh::CloudFoundry::ConfigOptions do
|
6
|
+
include Bosh::CloudFoundry::ConfigOptions
|
7
|
+
include FileUtils
|
8
|
+
attr_reader :options
|
9
|
+
|
10
|
+
before do
|
11
|
+
@options = {
|
12
|
+
common_config: File.join(Dir.mktmpdir, "bosh_common_config.yml"),
|
13
|
+
system: File.join(Dir.mktmpdir, "systems", "production"),
|
14
|
+
bosh_target: 'http://1.2.3.4:25555',
|
15
|
+
bosh_target_uuid: 'UUUUUIIIIIDDDD'
|
16
|
+
}
|
17
|
+
mkdir_p(@options[:system])
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "common_config attribute" do
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "system_config attribute" do
|
25
|
+
it "release_name can be overridden but is stored in system_config" do
|
26
|
+
options[:release_name] = "CHANGED"
|
27
|
+
release_name.should == "CHANGED"
|
28
|
+
system_config.release_name.should == "CHANGED"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "stemcell_version can be overridden but is stored in system_config" do
|
32
|
+
options[:stemcell_version] = "CHANGED"
|
33
|
+
stemcell_version.should == "CHANGED"
|
34
|
+
system_config.stemcell_version.should == "CHANGED"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "core_ip can be overridden but is stored in system_config" do
|
38
|
+
options[:core_ip] = "CHANGED"
|
39
|
+
core_ip.should == "CHANGED"
|
40
|
+
system_config.core_ip.should == "CHANGED"
|
41
|
+
end
|
42
|
+
|
43
|
+
it "root_dns can be overridden but is stored in system_config" do
|
44
|
+
options[:root_dns] = "CHANGED"
|
45
|
+
root_dns.should == "CHANGED"
|
46
|
+
system_config.root_dns.should == "CHANGED"
|
47
|
+
end
|
48
|
+
|
49
|
+
it "core_server_flavor can be overridden but is stored in system_config" do
|
50
|
+
options[:core_server_flavor] = "CHANGED"
|
51
|
+
core_server_flavor.should == "CHANGED"
|
52
|
+
system_config.core_server_flavor.should == "CHANGED"
|
53
|
+
end
|
54
|
+
|
55
|
+
it "common_password is 16 characters long" do
|
56
|
+
generate_common_password.size.should == 16
|
57
|
+
end
|
58
|
+
|
59
|
+
it "generate_security_group includes system name" do
|
60
|
+
security_group.should == "cloudfoundry-production"
|
61
|
+
generate_security_group.should == "cloudfoundry-production"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# Copyright (c) 2012-2013 Stark & Wayne, LLC
|
2
|
+
|
3
|
+
require File.expand_path("../../spec_helper", __FILE__)
|
4
|
+
|
5
|
+
describe Bosh::CloudFoundry::SystemDeploymentManifestRenderer do
|
6
|
+
include FileUtils
|
7
|
+
|
8
|
+
before(:each) do
|
9
|
+
@home_dir = Dir.mktmpdir("home")
|
10
|
+
common_config_file = File.join(@home_dir, "cf_config")
|
11
|
+
@common_config = Bosh::CloudFoundry::Config:: CommonConfig.new(common_config_file)
|
12
|
+
|
13
|
+
bosh_config_file = File.join(@home_dir, "bosh_config")
|
14
|
+
@bosh_config = Bosh::Cli::Config.new(bosh_config_file)
|
15
|
+
@bosh_config.target_uuid = "DIRECTOR_UUID"
|
16
|
+
@bosh_config.save
|
17
|
+
|
18
|
+
@systems_dir = Dir.mktmpdir("system_config")
|
19
|
+
@system_dir = File.join(@systems_dir, "production")
|
20
|
+
mkdir_p(@system_dir)
|
21
|
+
@system_config = Bosh::CloudFoundry::Config::SystemConfig.new(@system_dir)
|
22
|
+
@system_config.bosh_provider = 'aws'
|
23
|
+
@system_config.release_name = 'appcloud'
|
24
|
+
@system_config.release_version = 124 # TODO restore to 'latest' when #49 fixed
|
25
|
+
@system_config.stemcell_name = 'bosh-stemcell'
|
26
|
+
@system_config.stemcell_version = '0.6.4'
|
27
|
+
@system_config.core_server_flavor = 'm1.small'
|
28
|
+
@system_config.core_ip = '1.2.3.4'
|
29
|
+
@system_config.root_dns = 'mycompany.com'
|
30
|
+
@system_config.admin_emails = ['drnic@starkandwayne.com']
|
31
|
+
@system_config.common_password = 'c1oudc0wc1oudc0w'
|
32
|
+
@system_config.common_persistent_disk = 16192
|
33
|
+
@system_config.security_group = 'cloudfoundry-production'
|
34
|
+
|
35
|
+
@renderer = Bosh::CloudFoundry::SystemDeploymentManifestRenderer.new(
|
36
|
+
@system_config, @common_config, @bosh_config)
|
37
|
+
end
|
38
|
+
|
39
|
+
after(:each) do
|
40
|
+
FileUtils.remove_entry_secure @systems_dir
|
41
|
+
@renderer = nil
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "rendering deployment manifest(s)" do
|
45
|
+
it "renders a base system without DEAs/services into a deployment manifest" do
|
46
|
+
@renderer.perform
|
47
|
+
|
48
|
+
chdir(@system_config.system_dir) do
|
49
|
+
File.should be_exist("deployments/production-core.yml")
|
50
|
+
files_match("deployments/production-core.yml", spec_asset("deployments/aws-core-only.yml"))
|
51
|
+
end
|
52
|
+
end
|
53
|
+
it "renders a simple system + DEAs into a deployment manifest" do
|
54
|
+
Bosh::CloudFoundry::Providers.should_receive(:for_bosh_provider_name).
|
55
|
+
and_return(Bosh::CloudFoundry::Providers::AWS.new)
|
56
|
+
@system_config.dea = { "count" => 2, "flavor" => "m1.xlarge" }
|
57
|
+
@renderer.perform
|
58
|
+
|
59
|
+
chdir(@system_config.system_dir) do
|
60
|
+
File.should be_exist("deployments/production-core.yml")
|
61
|
+
files_match("deployments/production-core.yml",
|
62
|
+
spec_asset("deployments/aws-core-2-m1.xlarge-dea.yml"))
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
it "renders a simple system + postgresql into a deployment manifest" do
|
67
|
+
@system_config.postgresql = [
|
68
|
+
{ "count" => 1, "flavor" => "m1.xlarge", "plan" =>"free" },
|
69
|
+
{ "count" => 2, "flavor" => "m1.small", "plan" =>"free" },
|
70
|
+
]
|
71
|
+
@renderer.perform
|
72
|
+
|
73
|
+
chdir(@system_config.system_dir) do
|
74
|
+
File.should be_exist("deployments/production-core.yml")
|
75
|
+
files_match("deployments/production-core.yml",
|
76
|
+
spec_asset("deployments/aws-core-1-m1.xlarge-free-postgresql-2-m1.small-free-postgresql.yml"))
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
it "renders a simple system + redis into a deployment manifest" do
|
81
|
+
@system_config.redis = [
|
82
|
+
{ "count" => 1, "flavor" => "m1.small", "plan" =>"free" },
|
83
|
+
]
|
84
|
+
@renderer.perform
|
85
|
+
|
86
|
+
chdir(@system_config.system_dir) do
|
87
|
+
File.should be_exist("deployments/production-core.yml")
|
88
|
+
files_match("deployments/production-core.yml",
|
89
|
+
spec_asset("deployments/aws-core-1-m1.small-free-redis.yml"))
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
metadata
ADDED
@@ -0,0 +1,246 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bosh-cloudfoundry
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Dr Nic Williams
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-01-27 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bosh_cli
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.0.3
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.0.3
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: net-dns
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: fog
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 1.8.0
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.8.0
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rspec
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: ci_reporter
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: debugger
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: guard-rspec
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
description: Create and manage your Cloud Foundry deployments
|
143
|
+
email:
|
144
|
+
- drnicwilliams@gmail.com
|
145
|
+
executables: []
|
146
|
+
extensions: []
|
147
|
+
extra_rdoc_files: []
|
148
|
+
files:
|
149
|
+
- .gitignore
|
150
|
+
- .rspec
|
151
|
+
- .travis.yml
|
152
|
+
- Gemfile
|
153
|
+
- Guardfile
|
154
|
+
- LICENSE.txt
|
155
|
+
- README.md
|
156
|
+
- Rakefile
|
157
|
+
- bosh-cloudfoundry.gemspec
|
158
|
+
- config/defaults.yml
|
159
|
+
- lib/bosh-cloudfoundry.rb
|
160
|
+
- lib/bosh-cloudfoundry/bosh_release_manager.rb
|
161
|
+
- lib/bosh-cloudfoundry/config.rb
|
162
|
+
- lib/bosh-cloudfoundry/config/common_config.rb
|
163
|
+
- lib/bosh-cloudfoundry/config/dea_config.rb
|
164
|
+
- lib/bosh-cloudfoundry/config/microbosh_config.rb
|
165
|
+
- lib/bosh-cloudfoundry/config/postgresql_service_config.rb
|
166
|
+
- lib/bosh-cloudfoundry/config/redis_service_config.rb
|
167
|
+
- lib/bosh-cloudfoundry/config/system_config.rb
|
168
|
+
- lib/bosh-cloudfoundry/config_options.rb
|
169
|
+
- lib/bosh-cloudfoundry/gerrit_patches_helper.rb
|
170
|
+
- lib/bosh-cloudfoundry/providers.rb
|
171
|
+
- lib/bosh-cloudfoundry/providers/aws.rb
|
172
|
+
- lib/bosh-cloudfoundry/system_deployment_manifest_renderer.rb
|
173
|
+
- lib/bosh-cloudfoundry/version.rb
|
174
|
+
- lib/bosh/cli/commands/cf.rb
|
175
|
+
- spec/assets/.gitkeep
|
176
|
+
- spec/assets/cf-release/jobs/cloud_controller/templates/runtimes.yml
|
177
|
+
- spec/assets/deployments/aws-core-1-m1.small-free-redis.yml
|
178
|
+
- spec/assets/deployments/aws-core-1-m1.xlarge-free-postgresql-2-m1.small-free-postgresql.yml
|
179
|
+
- spec/assets/deployments/aws-core-2-m1.xlarge-dea.yml
|
180
|
+
- spec/assets/deployments/aws-core-only.yml
|
181
|
+
- spec/assets/deployments/aws-core-with-nfs.yml
|
182
|
+
- spec/functional/.gitkeep
|
183
|
+
- spec/spec_helper.rb
|
184
|
+
- spec/unit/.gitkeep
|
185
|
+
- spec/unit/bosh_release_manager_spec.rb
|
186
|
+
- spec/unit/cf_command_spec.rb
|
187
|
+
- spec/unit/config/common_config_spec.rb
|
188
|
+
- spec/unit/config/dea_config_spec.rb
|
189
|
+
- spec/unit/config/microbosh_config_spec.rb
|
190
|
+
- spec/unit/config/postgresql_service_config_spec.rb
|
191
|
+
- spec/unit/config/redis_service_config_spec.rb
|
192
|
+
- spec/unit/config/system_config_spec.rb
|
193
|
+
- spec/unit/config_options_spec.rb
|
194
|
+
- spec/unit/system_deployment_manifest_renderer_spec.rb
|
195
|
+
homepage: https://github.com/StarkAndWayne/bosh-cloudfoundry
|
196
|
+
licenses:
|
197
|
+
- MIT
|
198
|
+
post_install_message:
|
199
|
+
rdoc_options: []
|
200
|
+
require_paths:
|
201
|
+
- lib
|
202
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
203
|
+
none: false
|
204
|
+
requirements:
|
205
|
+
- - ! '>='
|
206
|
+
- !ruby/object:Gem::Version
|
207
|
+
version: '0'
|
208
|
+
segments:
|
209
|
+
- 0
|
210
|
+
hash: -3782934893958062180
|
211
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
212
|
+
none: false
|
213
|
+
requirements:
|
214
|
+
- - ! '>='
|
215
|
+
- !ruby/object:Gem::Version
|
216
|
+
version: '0'
|
217
|
+
segments:
|
218
|
+
- 0
|
219
|
+
hash: -3782934893958062180
|
220
|
+
requirements: []
|
221
|
+
rubyforge_project:
|
222
|
+
rubygems_version: 1.8.24
|
223
|
+
signing_key:
|
224
|
+
specification_version: 3
|
225
|
+
summary: Create and manage your Cloud Foundry deployments via the BOSH CLI
|
226
|
+
test_files:
|
227
|
+
- spec/assets/.gitkeep
|
228
|
+
- spec/assets/cf-release/jobs/cloud_controller/templates/runtimes.yml
|
229
|
+
- spec/assets/deployments/aws-core-1-m1.small-free-redis.yml
|
230
|
+
- spec/assets/deployments/aws-core-1-m1.xlarge-free-postgresql-2-m1.small-free-postgresql.yml
|
231
|
+
- spec/assets/deployments/aws-core-2-m1.xlarge-dea.yml
|
232
|
+
- spec/assets/deployments/aws-core-only.yml
|
233
|
+
- spec/assets/deployments/aws-core-with-nfs.yml
|
234
|
+
- spec/functional/.gitkeep
|
235
|
+
- spec/spec_helper.rb
|
236
|
+
- spec/unit/.gitkeep
|
237
|
+
- spec/unit/bosh_release_manager_spec.rb
|
238
|
+
- spec/unit/cf_command_spec.rb
|
239
|
+
- spec/unit/config/common_config_spec.rb
|
240
|
+
- spec/unit/config/dea_config_spec.rb
|
241
|
+
- spec/unit/config/microbosh_config_spec.rb
|
242
|
+
- spec/unit/config/postgresql_service_config_spec.rb
|
243
|
+
- spec/unit/config/redis_service_config_spec.rb
|
244
|
+
- spec/unit/config/system_config_spec.rb
|
245
|
+
- spec/unit/config_options_spec.rb
|
246
|
+
- spec/unit/system_deployment_manifest_renderer_spec.rb
|