bosh-cloudfoundry 0.2.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.
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