bosh-cloudfoundry 0.3.0 → 0.4.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.
@@ -1,5 +1,9 @@
1
1
  # Change Log
2
2
 
3
+ ## v0.4
4
+
5
+ Defaults to patched dev release (since a cf-release final release doesn't work).
6
+
3
7
  ## v0.3
4
8
 
5
9
  Additions:
data/Gemfile CHANGED
@@ -1,6 +1,8 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in bosh-cloudfoundry.gemspec
4
4
  gemspec
5
5
 
6
- gem "awesome_print"
6
+ gem "awesome_print"
7
+ gem "rb-fsevent", "~> 0.9.1"
8
+ gem "guard-rspec"
data/Guardfile CHANGED
@@ -1,7 +1,7 @@
1
1
  # A sample Guardfile
2
2
  # More info at https://github.com/guard/guard#readme
3
3
 
4
- guard 'rspec', :version => 2 do
4
+ guard 'rspec' do
5
5
  watch(%r{^spec/.+_spec\.rb$})
6
6
  watch(%r{^lib/bosh/cli/commands/cf.rb$}) { |m| "spec/unit/cf_command_spec.rb" }
7
7
  watch(%r{^lib/bosh-cloudfoundry/(.+)\.rb$}) { |m| "spec/unit/#{m[1]}_spec.rb" }
data/README.md CHANGED
@@ -1,53 +1,42 @@
1
1
  # Bosh::CloudFoundry
2
2
 
3
- You want CloudFoundry? You can now create, scale, upgrade and patch one or more Cloud Foundry deployments using very simple, easy to learn and remember CLI commands.
3
+ You want Cloud Foundry? You can now create, scale, upgrade and patch one or more Cloud Foundry deployments using very simple, easy to learn and remember CLI commands.
4
4
 
5
- Currently supports AWS only. OpenStack support is coming. vSphere and vCloud support will require someone to tell me that they really want it.
5
+ Currently supports AWS and OpenStack only. vSphere and vCloud support will require someone to tell me that they really want it.
6
6
 
7
- ## NOTE - currently requires latest edge of many things
7
+ ## Zero to Cloud Foundry in a few hours
8
8
 
9
- This tool currently requires the latest merged patches. The readme below, from "Usage" onward, is written for when there are public stemcells and final releases.
9
+ If you have an AWS or OpenStack account then you can deploy a running Cloud Foundry VM by following this very simple tutorial. It first uses the very powerful [bosh-bootstrap](https://github.com/StarkAndWayne/bosh-bootstrap) tool to deploy a BOSH, and then using this project (a plugin for the BOSH CLI) it will do everything necessary to deploy Cloud Foundry via your shiny new, empty BOSH.
10
10
 
11
- Today, to get everything running:
11
+ **You should not need to know anything before running this tutorial.** If you do this tutorial and you feel it was too complex or you needed to know something additional, please [create a ticket](https://github.com/StarkAndWayne/bosh-cloudfoundry/issues).
12
12
 
13
13
  ```
14
14
  # on your laptop
15
15
  gem install bosh-bootstrap
16
- bosh-bootstrap deploy --latest-stemcell
16
+ bosh-bootstrap deploy --edge-deployer
17
+ # prompts for AWS/OpenStack credentials
18
+ # and some other fields that you can
19
+ # just press Enter for.
17
20
 
21
+ # SSH into inception VM
18
22
  bosh-bootstrap ssh
19
23
 
20
- # now on the inception VM
21
-
22
- # TODO - restore gem installation when rubygem security issue resolved
23
- # sudo gem install bosh-cloudfoundry
24
-
25
- cd /var/vcap/store/repos
26
- git clone git://github.com/StarkAndWayne/bosh-cloudfoundry.git
27
- cd bosh-cloudfoundry
28
- git checkout -b v0.3
29
- git pull origin v0.3
30
- rake install
31
-
24
+ sudo gem install bosh-cloudfoundry
32
25
  export TMPDIR=/var/vcap/store/tmp
33
- bosh cf upload release --dev
34
-
35
- bosh cf prepare system production --release-name appcloud-dev
26
+ bosh cf prepare system production
36
27
  # prompts for a DNS host for your CloudFoundry, such as mycompany.com
37
28
  # will generate a new IP address
38
29
  # now setup your DNS for *.mycompany.com => new IP address
39
30
  # the re-run:
40
31
  bosh cf prepare system production
41
32
 
42
- bosh cf upload stemcell --latest
43
- bosh cf merge gerrit 37/13137/4 84/13084/4 83/13583/1 09/13609/2
44
- bosh cf deploy
33
+ bosh deploy
45
34
 
46
35
  # now we can grow our single VM deployment
47
36
 
48
37
  bosh cf change deas 1
49
38
  bosh cf add service postgresql
50
- bosh cf deploy
39
+ bosh deploy
51
40
  ```
52
41
 
53
42
  Overtime, as you add more DEAs and other service nodes, your set of VMs might look like:
@@ -70,6 +59,7 @@ $ bosh vms
70
59
 
71
60
  * Ruby 1.9
72
61
  * BOSH running on AWS (other CPIs coming)
62
+ * Unix-based local system (Windows support for bosh-bootstrap is a priority)
73
63
 
74
64
  ## Usage
75
65
 
@@ -23,7 +23,4 @@ Gem::Specification.new do |gem|
23
23
  gem.add_dependency "net-dns"
24
24
  gem.add_dependency "fog", ">= 1.8.0"
25
25
  gem.add_development_dependency "rspec"
26
- gem.add_development_dependency "ci_reporter"
27
- gem.add_development_dependency "debugger"
28
- gem.add_development_dependency "guard-rspec"
29
26
  end
@@ -77,7 +77,7 @@ module Bosh::CloudFoundry::BoshReleaseManager
77
77
  def create_and_upload_dev_release(release_name=default_dev_release_name)
78
78
  chdir(cf_release_dir) do
79
79
  write_dev_config_file(release_name)
80
- sh "bosh create release --with-tarball --force"
80
+ sh "bosh -n --color create release --with-tarball --force"
81
81
  sh "bosh -n --color upload release"
82
82
  end
83
83
  @bosh_releases = nil # reset cache
@@ -56,6 +56,10 @@ module Bosh::CloudFoundry::ConfigOptions
56
56
  end
57
57
  end
58
58
 
59
+ def system_config_setup?
60
+ system
61
+ end
62
+
59
63
  # @return [String] CloudFoundry system path
60
64
  def system
61
65
  options[:system] || common_config.target_system
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Cloudfoundry
3
- VERSION = "0.3.0"
3
+ VERSION = "0.4.0"
4
4
  end
5
5
  end
@@ -39,6 +39,10 @@ module Bosh::Cli::Command
39
39
  option "--admin-emails email1,email2", Array, "Admin email accounts in created CloudFoundry"
40
40
  option "--skip-validations", "Skip all validations"
41
41
  def prepare_system(name=nil)
42
+ # FUTURE remove this when cf-release has a final release with
43
+ # all patches in https://github.com/StarkAndWayne/bosh-cloudfoundry/issues/42
44
+ options[:dev] = true
45
+
42
46
  setup_system_dir(name)
43
47
  confirm_or_prompt_all_defaults
44
48
  confirm_or_prompt_for_system_requirements
@@ -111,24 +115,30 @@ module Bosh::Cli::Command
111
115
 
112
116
  usage "cf upload stemcell"
113
117
  desc "download/create stemcell & upload to BOSH"
114
- option "--latest", "Use latest stemcell; possibly not tagged stable"
118
+ # option "--stable", "Use latest stemcell; possibly not tagged stable"
119
+ option "--latest", "Use latest stemcell; possibly not tagged stable [default]"
115
120
  option "--custom", "Create custom stemcell from BOSH git source"
116
121
  def upload_stemcell
117
- stemcell_type = "stable"
118
- stemcell_type = "latest" if options[:latest]
122
+ stemcell_type = "stable" if options[:stable]
119
123
  stemcell_type = "custom" if options[:custom]
124
+ stemcell_type ||= "latest"
120
125
  create_or_download_stemcell_then_upload(stemcell_type)
121
126
  end
122
127
 
123
128
  usage "cf upload release"
124
129
  desc "fetch & upload latest public cloudfoundry release to BOSH"
125
- option "--dev", "Create development release from very latest cf-release commits"
130
+ # option "--dev", "Create development release from very latest cf-release commits & specific patches"
131
+ option "--final", "Upload latest final release from very latest cf-release commits"
126
132
  def upload_release
127
133
  clone_or_update_cf_release
128
- if options.delete(:dev)
129
- create_and_upload_dev_release
130
- else
134
+ if options.delete(:final)
131
135
  upload_final_release
136
+ else
137
+ # FUTURE once all patches from https://github.com/StarkAndWayne/bosh-cloudfoundry/issues/42
138
+ # are merged into cf-release, then no more gerrit merging required
139
+ options[:dev] = true
140
+ merge_gerrit(*%w[37/13137/4 84/13084/4])
141
+ # create_and_upload_dev_release
132
142
  end
133
143
  end
134
144
 
@@ -153,7 +163,7 @@ module Bosh::Cli::Command
153
163
  end
154
164
  end
155
165
  apply_gerrit_patches
156
- create_and_upload_dev_release
166
+ create_and_upload_dev_release(release_name)
157
167
  end
158
168
 
159
169
  usage "cf deploy"
@@ -249,32 +259,20 @@ module Bosh::Cli::Command
249
259
  end
250
260
 
251
261
  # @return [String] label for the CPI being used by the target BOSH
252
- # * "aws" - AWS
253
- #
254
- # Yet to be supported by bosh-cloudfoundry:
255
- # * "openstack" - VMWare vSphere
256
- # * "vsphere" - VMWare vSphere
257
- # * "vcloud" - VMWare vCloud
258
262
  def bosh_provider
259
- if aws?
260
- "aws"
261
- elsif openstack?
262
- "openstack"
263
- else
264
- err("Please implement cf.rb's bosh_provider for this IaaS")
265
- end
263
+ system_config_setup? ? system_config.bosh_provider : bosh_cpi
266
264
  end
267
265
 
268
266
  # Deploying CloudFoundry to AWS?
269
267
  # Is the target BOSH's IaaS using the AWS CPI?
270
268
  def aws?
271
- system_config.bosh_provider == "aws"
269
+ bosh_provider == "aws"
272
270
  end
273
271
 
274
272
  # Deploying CloudFoundry to OpenStack?
275
273
  # Is the target BOSH's IaaS using the OpenStack CPI?
276
274
  def openstack?
277
- system_config.bosh_provider == "openstack"
275
+ bosh_provider == "openstack"
278
276
  end
279
277
 
280
278
  # User is prompted for common values at the
@@ -550,7 +548,7 @@ module Bosh::Cli::Command
550
548
  err("Server flavor '#{flavor}' is not a valid OpenStack compute flavor")
551
549
  end
552
550
  else
553
- err("Please implemenet cf.rb's validate_compute_flavor for this IaaS")
551
+ err("Please implemenet cf.rb's validate_compute_flavor for #{bosh_provider.inspect}")
554
552
  end
555
553
  end
556
554
 
@@ -569,31 +567,6 @@ module Bosh::Cli::Command
569
567
  renderer.perform
570
568
  end
571
569
 
572
- def generate_dea_servers(server_count, server_flavor)
573
- director_uuid = "DIRECTOR_UUID"
574
- release_name = "appcloud"
575
- stemcell_version = "0.6.4"
576
- if aws?
577
- resource_pool_cloud_properties = "instance_type: #{server_flavor}"
578
- else
579
- err("Please implemenet cf.rb's generate_dea_servers for this IaaS")
580
- end
581
- dea_max_memory = 2048 # FIXME a value based on server flavor RAM?
582
- nats_password = "mynats1234"
583
- system_dir = File.join(base_systems_dir, system_name)
584
- mkdir_p(system_dir)
585
- chdir system_dir do
586
- require 'bosh-cloudfoundry/generators/dea_generator'
587
- Bosh::CloudFoundry::Generators::DeaGenerator.start([
588
- system_name,
589
- server_count, server_flavor,
590
- director_uuid, release_name, stemcell_version,
591
- resource_pool_cloud_properties,
592
- dea_max_memory,
593
- nats_password])
594
- end
595
- end
596
-
597
570
  # Valdiate that +service_name+ is a known, supported service name
598
571
  def validate_service_name(service_name)
599
572
  return true if skip_validations?
@@ -618,30 +591,6 @@ module Bosh::Cli::Command
618
591
  end
619
592
  end
620
593
 
621
- def generate_service_servers(service_name, server_count, server_flavor)
622
- director_uuid = "DIRECTOR_UUID"
623
- release_name = "appcloud"
624
- stemcell_version = "0.6.4"
625
- if aws?
626
- resource_pool_cloud_properties = "instance_type: #{server_flavor}"
627
- else
628
- err("Please implemenet cf.rb's generate_service_servers for this IaaS")
629
- end
630
- persistent_disk = 16192
631
- nats_password = "mynats1234"
632
- system_dir = File.join(base_systems_dir, system_name)
633
- mkdir_p(system_dir)
634
- chdir system_dir do
635
- require 'bosh-cloudfoundry/generators/service_generator'
636
- Bosh::CloudFoundry::Generators::ServiceGenerator.start([
637
- system_name,
638
- service_name, server_count, server_flavor,
639
- director_uuid, release_name, stemcell_version,
640
- resource_pool_cloud_properties, persistent_disk,
641
- nats_password])
642
- end
643
- end
644
-
645
594
  def default_core_server_flavor
646
595
  if aws?
647
596
  "m1.large"
@@ -41,9 +41,14 @@ describe Bosh::Cli::Command::Base do
41
41
  it "downloads stemcell and uploads it" do
42
42
  @cmd.stub!(:bosh_target).and_return("http://9.8.7.6:25555")
43
43
  @cmd.stub!(:bosh_target_uuid).and_return("DIRECTOR_UUID")
44
+ @cmd.stub!(:bosh_cpi).and_return("aws")
44
45
  @cmd.should_receive(:`).
45
- with("bosh public stemcells --tags aws,stable | grep ' bosh-stemcell-' | awk '{ print $2 }' | sort -r | head -n 1").
46
+ with("bosh public stemcells --tags aws | grep ' bosh-stemcell-' | awk '{ print $2 }' | sort -r | head -n 1").
46
47
  and_return("bosh-stemcell-aws-0.6.7.tgz")
48
+ # FIXME default to stable stemcells when 0.8.1 is marked stable
49
+ # @cmd.should_receive(:`).
50
+ # with("bosh public stemcells --tags aws,stable | grep ' bosh-stemcell-' | awk '{ print $2 }' | sort -r | head -n 1").
51
+ # and_return("bosh-stemcell-aws-0.6.7.tgz")
47
52
  @cmd.should_receive(:sh).
48
53
  with("bosh -n --color download public stemcell bosh-stemcell-aws-0.6.7.tgz")
49
54
  @cmd.should_receive(:sh).
@@ -58,6 +63,7 @@ describe Bosh::Cli::Command::Base do
58
63
  mkdir_p(File.join(@repos_dir, "bosh", "agent"))
59
64
  @cmd.stub!(:bosh_target).and_return("http://9.8.7.6:25555")
60
65
  @cmd.stub!(:bosh_target_uuid).and_return("DIRECTOR_UUID")
66
+ @cmd.stub!(:bosh_cpi).and_return("aws")
61
67
  @cmd.should_receive(:sh).with("git pull origin master")
62
68
  @cmd.should_receive(:sh).with("bundle install --without development test")
63
69
  @cmd.should_receive(:sh).with("sudo bundle exec rake stemcell:basic['aws']")
@@ -94,34 +100,38 @@ describe Bosh::Cli::Command::Base do
94
100
  @cmd.should_receive(:`).with("tail -n 1 releases/index.yml | awk '{print $2}'").
95
101
  and_return("126")
96
102
  @cmd.should_receive(:sh).with("bosh -n --color upload release releases/appcloud-126.yml")
103
+ @cmd.add_option(:final, true)
97
104
  @cmd.upload_release
98
105
  end
99
106
 
100
- it "updates/creates/uploads development/edge cf-release" do
101
- cf_release_dir = File.join(@releases_dir, "cf-release")
102
- FileUtils.mkdir_p(cf_release_dir)
103
- @cmd.common_config.cf_release_dir = cf_release_dir
104
- @cmd.add_option(:dev, true)
105
-
106
- @cmd.should_receive(:sh).with("git pull origin master")
107
- script = <<-BASH.gsub(/^ /, '')
108
- grep -rI "github.com" * .gitmodules | awk 'BEGIN {FS=":"} { print($1) }' | uniq while read file
109
- do
110
- echo "changing - $file"
111
- sed -i 's#git://github.com#https://github.com#g' $file
112
- sed -i 's#git@github.com:#https://github.com:#g' $file
113
- done
114
- BASH
115
- @cmd.should_receive(:sh).with("sed -i 's#git@github.com:#https://github.com/#g' .gitmodules")
116
- @cmd.should_receive(:sh).with("sed -i 's#git://github.com#https://github.com#g' .gitmodules")
117
- @cmd.should_receive(:sh).with("git submodule update --init --recursive")
118
- @cmd.should_receive(:write_dev_config_file).with("appcloud-dev")
119
- @cmd.should_receive(:sh).with("bosh create release --with-tarball --force")
120
- @cmd.should_receive(:sh).with("bosh -n --color upload release")
121
- @cmd.upload_release
122
- end
107
+ it "updates/creates/uploads development/edge cf-release (requires system setup)"
108
+ # TODO turn this into a unit test for the specific methods
109
+ # do
110
+ # cf_release_dir = File.join(@releases_dir, "cf-release")
111
+ # FileUtils.mkdir_p(cf_release_dir)
112
+ # @cmd.common_config.cf_release_dir = cf_release_dir
113
+ # @cmd.add_option(:dev, true)
114
+ #
115
+ # @cmd.should_receive(:sh).with("git pull origin master")
116
+ # script = <<-BASH.gsub(/^ /, '')
117
+ # grep -rI "github.com" * .gitmodules | awk 'BEGIN {FS=":"} { print($1) }' | uniq while read file
118
+ # do
119
+ # echo "changing - $file"
120
+ # sed -i 's#git://github.com#https://github.com#g' $file
121
+ # sed -i 's#git@github.com:#https://github.com:#g' $file
122
+ # done
123
+ # BASH
124
+ # @cmd.should_receive(:sh).with("sed -i 's#git@github.com:#https://github.com/#g' .gitmodules")
125
+ # @cmd.should_receive(:sh).with("sed -i 's#git://github.com#https://github.com#g' .gitmodules")
126
+ # @cmd.should_receive(:sh).with("git submodule update --init --recursive")
127
+ # @cmd.should_receive(:write_dev_config_file).with("appcloud-dev")
128
+ # @cmd.should_receive(:sh).with("bosh create release --with-tarball --force")
129
+ # @cmd.should_receive(:sh).with("bosh -n --color upload release")
130
+ # @cmd.upload_release
131
+ # end
123
132
 
124
133
  def generate_new_system(cmd = nil)
134
+ needs_initial_release_uploaded = true
125
135
  cmd ||= begin
126
136
  cmd = Bosh::Cli::Command::CloudFoundry.new(nil)
127
137
  cmd.add_option(:non_interactive, true)
@@ -134,13 +144,22 @@ describe Bosh::Cli::Command::Base do
134
144
 
135
145
  cmd.stub!(:bosh_target).and_return("http://9.8.7.6:25555")
136
146
  cmd.stub!(:bosh_target_uuid).and_return("DIRECTOR_UUID")
147
+ cmd.stub!(:bosh_cpi).and_return("aws")
137
148
  cmd.should_receive(:generate_common_password).and_return('c1oudc0wc1oudc0w')
138
- cmd.should_receive(:bosh_releases).exactly(1).times.and_return([
139
- {"name"=>"appcloud", "versions"=>["124", "126"], "in_use"=>[]},
140
- {"name"=>"appcloud-dev", "versions"=>["124.1-dev", "126.1-dev"], "in_use"=>[]},
141
- ])
142
149
  cmd.should_receive(:validate_dns_a_record).with("api.mycompany.com", '1.2.3.4').and_return(true)
143
150
  cmd.should_receive(:validate_dns_a_record).with("demoapp.mycompany.com", '1.2.3.4').and_return(true)
151
+
152
+ if needs_initial_release_uploaded
153
+ cmd.should_receive(:bosh_releases).exactly(1).times.and_return([])
154
+ cmd.should_receive(:clone_or_update_cf_release)
155
+ cmd.should_receive(:merge_gerrit).with(*%w[37/13137/4 84/13084/4 09/13609/2])
156
+ else
157
+ cmd.should_receive(:bosh_releases).exactly(1).times.and_return([
158
+ {"name"=>"appcloud", "versions"=>["124", "126"], "in_use"=>[]},
159
+ {"name"=>"appcloud-dev", "versions"=>["124.1-dev", "126.1-dev"], "in_use"=>[]},
160
+ ])
161
+ end
162
+
144
163
  cmd.should_receive(:bosh_stemcell_versions).exactly(4).times.and_return(['0.6.4'])
145
164
  cmd.should_receive(:render_system)
146
165
 
@@ -155,7 +174,7 @@ describe Bosh::Cli::Command::Base do
155
174
 
156
175
  cmd.add_option(:core_ip, '1.2.3.4')
157
176
  cmd.add_option(:root_dns, 'mycompany.com')
158
- cmd.add_option(:cf_release, 'appcloud')
177
+ # cmd.add_option(:cf_release, 'appcloud')
159
178
  cmd.add_option(:core_server_flavor, 'm1.large')
160
179
  cmd.add_option(:admin_emails, ['drnic@starkandwayne.com'])
161
180
 
@@ -174,6 +193,12 @@ describe Bosh::Cli::Command::Base do
174
193
  File.basename(@cmd.system).should == "production"
175
194
  end
176
195
 
196
+ it "temporarily uploads latest stemcell & patched cf-release by default" do
197
+ generate_new_system(@cmd)
198
+ File.basename(@cmd.system).should == "production"
199
+ @cmd.system_config.release_name.should == "appcloud-dev"
200
+ end
201
+
177
202
  it "new system has common random password" do
178
203
  generate_new_system(@cmd)
179
204
  @cmd.system_config.common_password.should == "c1oudc0wc1oudc0w"
@@ -184,6 +209,7 @@ describe Bosh::Cli::Command::Base do
184
209
 
185
210
  @cmd.should_receive(:render_system)
186
211
 
212
+ @cmd.stub!(:bosh_cpi).and_return("aws")
187
213
  @cmd.stub!(:bosh_target).and_return("http://9.8.7.6:25555")
188
214
  @cmd.add_option(:flavor, 'm1.xlarge')
189
215
  @cmd.change_deas(3)
@@ -204,6 +230,7 @@ describe Bosh::Cli::Command::Base do
204
230
 
205
231
  @cmd.should_receive(:render_system)
206
232
 
233
+ @cmd.stub!(:bosh_cpi).and_return("aws")
207
234
  @cmd.stub!(:bosh_target).and_return("http://9.8.7.6:25555")
208
235
  @cmd.add_option(:flavor, 'm1.large')
209
236
  @cmd.add_service_node("postgresql", 4)
@@ -219,6 +246,7 @@ describe Bosh::Cli::Command::Base do
219
246
 
220
247
  @cmd.should_receive(:render_system)
221
248
 
249
+ @cmd.stub!(:bosh_cpi).and_return("aws")
222
250
  @cmd.stub!(:bosh_target).and_return("http://9.8.7.6:25555")
223
251
  @cmd.add_option(:flavor, 'm1.large')
224
252
  @cmd.add_service_node("redis", 2)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh-cloudfoundry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-02 00:00:00.000000000 Z
12
+ date: 2013-02-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bosh_cli
@@ -91,54 +91,6 @@ dependencies:
91
91
  - - ! '>='
92
92
  - !ruby/object:Gem::Version
93
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
94
  description: Create and manage your Cloud Foundry deployments
143
95
  email:
144
96
  - drnicwilliams@gmail.com
@@ -209,7 +161,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
209
161
  version: '0'
210
162
  segments:
211
163
  - 0
212
- hash: -743491069374654137
164
+ hash: -44016591154602000
213
165
  required_rubygems_version: !ruby/object:Gem::Requirement
214
166
  none: false
215
167
  requirements:
@@ -218,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
218
170
  version: '0'
219
171
  segments:
220
172
  - 0
221
- hash: -743491069374654137
173
+ hash: -44016591154602000
222
174
  requirements: []
223
175
  rubyforge_project:
224
176
  rubygems_version: 1.8.24