bosh-cloudfoundry 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/.gitignore +18 -0
  2. data/.rspec +2 -0
  3. data/.travis.yml +6 -0
  4. data/Gemfile +6 -0
  5. data/Guardfile +10 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +242 -0
  8. data/Rakefile +33 -0
  9. data/bosh-cloudfoundry.gemspec +29 -0
  10. data/config/defaults.yml +6 -0
  11. data/lib/bosh-cloudfoundry.rb +34 -0
  12. data/lib/bosh-cloudfoundry/bosh_release_manager.rb +141 -0
  13. data/lib/bosh-cloudfoundry/config.rb +6 -0
  14. data/lib/bosh-cloudfoundry/config/common_config.rb +27 -0
  15. data/lib/bosh-cloudfoundry/config/dea_config.rb +150 -0
  16. data/lib/bosh-cloudfoundry/config/microbosh_config.rb +106 -0
  17. data/lib/bosh-cloudfoundry/config/postgresql_service_config.rb +185 -0
  18. data/lib/bosh-cloudfoundry/config/redis_service_config.rb +179 -0
  19. data/lib/bosh-cloudfoundry/config/system_config.rb +60 -0
  20. data/lib/bosh-cloudfoundry/config_options.rb +362 -0
  21. data/lib/bosh-cloudfoundry/gerrit_patches_helper.rb +47 -0
  22. data/lib/bosh-cloudfoundry/providers.rb +19 -0
  23. data/lib/bosh-cloudfoundry/providers/aws.rb +75 -0
  24. data/lib/bosh-cloudfoundry/system_deployment_manifest_renderer.rb +286 -0
  25. data/lib/bosh-cloudfoundry/version.rb +5 -0
  26. data/lib/bosh/cli/commands/cf.rb +668 -0
  27. data/spec/assets/.gitkeep +0 -0
  28. data/spec/assets/cf-release/jobs/cloud_controller/templates/runtimes.yml +150 -0
  29. data/spec/assets/deployments/aws-core-1-m1.small-free-redis.yml +221 -0
  30. data/spec/assets/deployments/aws-core-1-m1.xlarge-free-postgresql-2-m1.small-free-postgresql.yml +248 -0
  31. data/spec/assets/deployments/aws-core-2-m1.xlarge-dea.yml +195 -0
  32. data/spec/assets/deployments/aws-core-only.yml +178 -0
  33. data/spec/assets/deployments/aws-core-with-nfs.yml +192 -0
  34. data/spec/functional/.gitkeep +0 -0
  35. data/spec/spec_helper.rb +41 -0
  36. data/spec/unit/.gitkeep +0 -0
  37. data/spec/unit/bosh_release_manager_spec.rb +36 -0
  38. data/spec/unit/cf_command_spec.rb +280 -0
  39. data/spec/unit/config/common_config_spec.rb +21 -0
  40. data/spec/unit/config/dea_config_spec.rb +92 -0
  41. data/spec/unit/config/microbosh_config_spec.rb +11 -0
  42. data/spec/unit/config/postgresql_service_config_spec.rb +103 -0
  43. data/spec/unit/config/redis_service_config_spec.rb +103 -0
  44. data/spec/unit/config/system_config_spec.rb +29 -0
  45. data/spec/unit/config_options_spec.rb +64 -0
  46. data/spec/unit/system_deployment_manifest_renderer_spec.rb +93 -0
  47. 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