bosh-cloudfoundry 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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