engineyard 1.3.7 → 1.3.10

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.
@@ -2,16 +2,19 @@ module EY
2
2
  class CLI
3
3
  class Recipes < EY::Thor
4
4
  desc "apply [--environment ENVIRONMENT]",
5
- "Run uploaded chef recipes on specified environment."
5
+ "Run chef recipes uploaded by the 'recipes upload' command on the specified environment."
6
6
  long_desc <<-DESC
7
7
  This is similar to '#{banner_base} rebuild' except Engine Yard's main
8
8
  configuration step is skipped.
9
+
10
+ The cookbook uploaded by the 'recipes upload' command will be run when
11
+ you run 'recipes apply'.
9
12
  DESC
10
13
 
11
14
  method_option :environment, :type => :string, :aliases => %w(-e),
12
15
  :desc => "Environment in which to apply recipes"
13
16
  method_option :account, :type => :string, :aliases => %w(-c),
14
- :desc => "Name of the account you want to deploy in"
17
+ :desc => "Name of the account in which the environment can be found"
15
18
  def apply
16
19
  environment = fetch_environment(options[:environment], options[:account])
17
20
  environment.run_custom_recipes
@@ -19,16 +22,18 @@ module EY
19
22
  end
20
23
 
21
24
  desc "upload [--environment ENVIRONMENT]",
22
- "Upload custom chef recipes to specified environment."
25
+ "Upload custom chef recipes to specified environment so they can be applied."
23
26
  long_desc <<-DESC
24
- The current directory should contain a subdirectory named "cookbooks" to be
25
- uploaded.
27
+ The current working directory should contain a subdirectory named "cookbooks"
28
+ that is the collection of recipes to be uploaded.
29
+
30
+ The uploaded cookbook will be run when executing 'recipes apply'.
26
31
  DESC
27
32
 
28
33
  method_option :environment, :type => :string, :aliases => %w(-e),
29
34
  :desc => "Environment that will receive the recipes"
30
35
  method_option :account, :type => :string, :aliases => %w(-c),
31
- :desc => "Name of the account you want to deploy in"
36
+ :desc => "Name of the account in which the environment can be found"
32
37
  def upload
33
38
  environment = fetch_environment(options[:environment], options[:account])
34
39
  environment.upload_recipes
@@ -36,17 +41,17 @@ module EY
36
41
  end
37
42
 
38
43
  desc "download [--environment ENVIRONMENT]",
39
- "Download custom chef recipes from ENVIRONMENT into the current directory."
44
+ "Download a copy of the custom chef recipes from this environment into the current directory."
40
45
  long_desc <<-DESC
41
46
  The recipes will be unpacked into a directory called "cookbooks" in the
42
- current directory.
47
+ current directory. This is the opposite of 'recipes upload'.
43
48
 
44
49
  If the cookbooks directory already exists, an error will be raised.
45
50
  DESC
46
51
  method_option :environment, :type => :string, :aliases => %w(-e),
47
52
  :desc => "Environment for which to download the recipes"
48
53
  method_option :account, :type => :string, :aliases => %w(-c),
49
- :desc => "Name of the account you want to deploy in"
54
+ :desc => "Name of the account in which the environment can be found"
50
55
  def download
51
56
  environment = fetch_environment(options[:environment], options[:account])
52
57
  environment.download_recipes
@@ -10,7 +10,7 @@ module EY
10
10
  method_option :verbose, :type => :boolean, :aliases => %w(-v),
11
11
  :desc => "Be verbose"
12
12
  method_option :account, :type => :string, :aliases => %w(-c),
13
- :desc => "Name of the account you want to deploy in"
13
+ :desc => "Name of the account in which the environment can be found"
14
14
  def enable
15
15
  app, environment = fetch_app_and_environment(options[:app], options[:environment], options[:account])
16
16
  EY.ui.info "Taking down maintenance page for '#{app.name}' in '#{environment.name}'"
@@ -37,7 +37,7 @@ module EY
37
37
  method_option :verbose, :type => :boolean, :aliases => %w(-v),
38
38
  :desc => "Be verbose"
39
39
  method_option :account, :type => :string, :aliases => %w(-c),
40
- :desc => "Name of the account you want to deploy in"
40
+ :desc => "Name of the account in which the environment can be found"
41
41
  def disable
42
42
  app, environment = fetch_app_and_environment(options[:app], options[:environment], options[:account])
43
43
  EY.ui.info "Putting up maintenance page for '#{app.name}' in '#{environment.name}'"
@@ -43,7 +43,7 @@ module EY
43
43
  method_option :app, :type => :string, :aliases => %w(-a),
44
44
  :desc => "Name of the application to deploy"
45
45
  method_option :account, :type => :string, :aliases => %w(-c),
46
- :desc => "Name of the account you want to deploy in"
46
+ :desc => "Name of the account in which the environment can be found"
47
47
  method_option :verbose, :type => :boolean, :aliases => %w(-v),
48
48
  :desc => "Be verbose"
49
49
  method_option :extra_deploy_hook_options, :type => :hash, :default => {},
@@ -120,7 +120,7 @@ module EY
120
120
  method_option :environment, :type => :string, :aliases => %w(-e),
121
121
  :desc => "Environment to rebuild"
122
122
  method_option :account, :type => :string, :aliases => %w(-c),
123
- :desc => "Name of the account you want to rebuild in"
123
+ :desc => "Name of the account in which the environment can be found"
124
124
  def rebuild
125
125
  environment = fetch_environment(options[:environment], options[:account])
126
126
  EY.ui.debug("Rebuilding #{environment.name}")
@@ -138,7 +138,7 @@ module EY
138
138
  method_option :app, :type => :string, :aliases => %w(-a),
139
139
  :desc => "Name of the application to roll back"
140
140
  method_option :account, :type => :string, :aliases => %w(-c),
141
- :desc => "Name of the account you want to roll back in"
141
+ :desc => "Name of the account in which the environment can be found"
142
142
  method_option :verbose, :type => :boolean, :aliases => %w(-v),
143
143
  :desc => "Be verbose"
144
144
  method_option :extra_deploy_hook_options, :type => :hash, :default => {},
@@ -168,7 +168,7 @@ module EY
168
168
  method_option :environment, :type => :string, :aliases => %w(-e),
169
169
  :desc => "Environment to ssh into"
170
170
  method_option :account, :type => :string, :aliases => %w(-c),
171
- :desc => "Name of the account you want to deploy in"
171
+ :desc => "Name of the account in which the environment can be found"
172
172
  method_option :all, :type => :boolean, :aliases => %(-a),
173
173
  :desc => "Run command on all servers"
174
174
  method_option :app_servers, :type => :boolean,
@@ -231,7 +231,7 @@ module EY
231
231
  method_option :environment, :type => :string, :aliases => %w(-e),
232
232
  :desc => "Environment with the interesting logs"
233
233
  method_option :account, :type => :string, :aliases => %w(-c),
234
- :desc => "Name of the account you want to deploy in"
234
+ :desc => "Name of the account in which the environment can be found"
235
235
  def logs
236
236
  environment = fetch_environment(options[:environment], options[:account])
237
237
  environment.logs.each do |log|
@@ -0,0 +1,51 @@
1
+ require 'escape'
2
+
3
+ module EY
4
+ module Model
5
+ class Deployment < ApiStruct.new(:id, :app, :created_at, :environment, :finished_at, :migration_command, :output, :ref, :successful)
6
+ def self.started(environment, app, ref, migration_command)
7
+ from_hash({
8
+ :app => app,
9
+ :environment => environment,
10
+ :migration_command => migration_command,
11
+ :ref => ref,
12
+ :created_at => Time.now.utc,
13
+ })
14
+ end
15
+
16
+ def finished(successful, output)
17
+ self.successful = successful
18
+ self.output = output
19
+ self.finished_at = Time.now.utc
20
+ post_to_appcloud!
21
+ end
22
+
23
+ private
24
+
25
+ def post_to_appcloud!
26
+ api.request(api_uri, :method => :post, :params => params)
27
+ EY.ui.info "Deployment recorded in AppCloud"
28
+ end
29
+
30
+ def params
31
+ {:deployment => {
32
+ :created_at => created_at,
33
+ :finished_at => finished_at,
34
+ :migrate => !!migration_command,
35
+ :migrate_command => migration_command,
36
+ :output => output,
37
+ :ref => ref,
38
+ :successful => successful,
39
+ }}
40
+ end
41
+
42
+ def api_uri
43
+ "/apps/#{app.id}/environments/#{environment.id}/deployments"
44
+ end
45
+
46
+ def api
47
+ app.api
48
+ end
49
+ end
50
+ end
51
+ end
@@ -55,7 +55,7 @@ module EY
55
55
  end
56
56
 
57
57
  def rebuild
58
- api.request("/environments/#{id}/rebuild", :method => :put)
58
+ api.request("/environments/#{id}/update_instances", :method => :put)
59
59
  end
60
60
 
61
61
  def run_custom_recipes
@@ -1,4 +1,5 @@
1
1
  require 'escape'
2
+ require 'open4'
2
3
 
3
4
  module EY
4
5
  module Model
@@ -19,13 +20,17 @@ module EY
19
20
  private :adapter
20
21
 
21
22
  def deploy(app, ref, migration_command=nil, extra_configuration=nil, verbose=false)
23
+ deployment = Deployment.started(environment, app, ref, migration_command)
24
+
22
25
  deploy_command = adapter(app, verbose).deploy do |args|
23
26
  args.config = extra_configuration if extra_configuration
24
27
  args.migrate = migration_command if migration_command
25
28
  args.ref = ref
26
29
  end
27
30
 
28
- invoke deploy_command
31
+ successful, output = invoke_with_output(deploy_command)
32
+ deployment.finished(successful, output)
33
+ successful
29
34
  end
30
35
 
31
36
  def rollback(app, extra_configuration=nil, verbose=false)
@@ -62,20 +67,29 @@ module EY
62
67
 
63
68
  private
64
69
 
65
- def ssh(remote_command, output = true)
70
+ def ssh(remote_command)
66
71
  user = environment.username
72
+ out = ""
73
+ tee = lambda do |chunk|
74
+ out << chunk
75
+ $stdout << chunk
76
+ end
67
77
 
68
78
  cmd = Escape.shell_command(%w[ssh -o StrictHostKeyChecking=no -q] << "#{user}@#{hostname}" << remote_command)
69
- cmd << " > /dev/null" unless output
70
79
  EY.ui.debug(cmd)
71
- unless ENV["NO_SSH"]
72
- system cmd
80
+ if ENV["NO_SSH"]
81
+ [true, "NO_SSH is set."]
73
82
  else
74
- true
83
+ status = Open4.spawn(cmd, :out => tee, :err => tee, :quiet => true)
84
+ [status.success?, out]
75
85
  end
76
86
  end
77
87
 
78
88
  def invoke(action)
89
+ invoke_with_output(action).first
90
+ end
91
+
92
+ def invoke_with_output(action)
79
93
  action.call do |cmd|
80
94
  puts cmd if action.verbose
81
95
  ssh cmd
@@ -3,6 +3,7 @@ module EY
3
3
  autoload :ApiStruct, 'engineyard/model/api_struct'
4
4
  autoload :Account, 'engineyard/model/account'
5
5
  autoload :App, 'engineyard/model/app'
6
+ autoload :Deployment, 'engineyard/model/deployment'
6
7
  autoload :Environment, 'engineyard/model/environment'
7
8
  autoload :Log, 'engineyard/model/log'
8
9
  autoload :Instance, 'engineyard/model/instance'
@@ -1,3 +1,3 @@
1
1
  module EY
2
- VERSION = '1.3.7'
2
+ VERSION = '1.3.10'
3
3
  end
@@ -11,13 +11,13 @@ describe "EY::Model::Environment#rebuild" do
11
11
 
12
12
  FakeWeb.register_uri(
13
13
  :put,
14
- "https://cloud.engineyard.com/api/v2/environments/#{env.id}/rebuild",
14
+ "https://cloud.engineyard.com/api/v2/environments/#{env.id}/update_instances",
15
15
  :body => ''
16
16
  )
17
17
 
18
18
  env.rebuild
19
19
 
20
- FakeWeb.should have_requested(:put, "https://cloud.engineyard.com/api/v2/environments/#{env.id}/rebuild")
20
+ FakeWeb.should have_requested(:put, "https://cloud.engineyard.com/api/v2/environments/#{env.id}/update_instances")
21
21
  end
22
22
  end
23
23
 
@@ -38,6 +38,7 @@ describe "ey deploy" do
38
38
 
39
39
  def verify_ran(scenario)
40
40
  @out.should match(/Beginning deploy for.*#{scenario[:application]}.*#{scenario[:environment]}/)
41
+ @out.should match(/Deployment recorded in AppCloud/)
41
42
  @ssh_commands.should have_command_like(/engineyard-serverside.*deploy.*--app #{scenario[:application]}/)
42
43
  end
43
44
 
@@ -96,7 +96,7 @@ class FakeAwsm < Sinatra::Base
96
96
  end
97
97
  end
98
98
 
99
- put "/api/v2/environments/:env_id/rebuild" do
99
+ put "/api/v2/environments/:env_id/update_instances" do
100
100
  status(202)
101
101
  ""
102
102
  end
@@ -106,6 +106,10 @@ class FakeAwsm < Sinatra::Base
106
106
  ""
107
107
  end
108
108
 
109
+ post "/api/v2/apps/:app_id/environments/:environment_id/deployments" do
110
+ {"deployment" => params[:deployment].merge({"id" => 2, "commit" => 'a'*40})}.to_json
111
+ end
112
+
109
113
  post "/api/v2/authenticate" do
110
114
  if valid_user?
111
115
  {"api_token" => "deadbeef", "ok" => true}.to_json
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: engineyard
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
5
4
  prerelease: false
6
5
  segments:
7
6
  - 1
8
7
  - 3
9
- - 7
10
- version: 1.3.7
8
+ - 10
9
+ version: 1.3.10
11
10
  platform: ruby
12
11
  authors:
13
12
  - EY Cloud Team
@@ -15,102 +14,104 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2010-11-22 00:00:00 -08:00
17
+ date: 2010-12-28 00:00:00 -08:00
19
18
  default_executable: ey
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
- requirement: &id001 !ruby/object:Gem::Requirement
23
- none: false
21
+ prerelease: false
22
+ name: thor
23
+ type: :runtime
24
+ version_requirements: &id001 !ruby/object:Gem::Requirement
24
25
  requirements:
25
26
  - - ~>
26
27
  - !ruby/object:Gem::Version
27
- hash: 43
28
28
  segments:
29
29
  - 0
30
30
  - 14
31
31
  - 6
32
32
  version: 0.14.6
33
- name: thor
33
+ requirement: *id001
34
+ - !ruby/object:Gem::Dependency
34
35
  prerelease: false
36
+ name: rest-client
35
37
  type: :runtime
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- requirement: &id002 !ruby/object:Gem::Requirement
39
- none: false
38
+ version_requirements: &id002 !ruby/object:Gem::Requirement
40
39
  requirements:
41
40
  - - ~>
42
41
  - !ruby/object:Gem::Version
43
- hash: 7
44
42
  segments:
45
43
  - 1
46
44
  - 4
47
45
  version: "1.4"
48
- name: rest-client
46
+ requirement: *id002
47
+ - !ruby/object:Gem::Dependency
49
48
  prerelease: false
49
+ name: highline
50
50
  type: :runtime
51
- version_requirements: *id002
52
- - !ruby/object:Gem::Dependency
53
- requirement: &id003 !ruby/object:Gem::Requirement
54
- none: false
51
+ version_requirements: &id003 !ruby/object:Gem::Requirement
55
52
  requirements:
56
53
  - - ~>
57
54
  - !ruby/object:Gem::Version
58
- hash: 13
59
55
  segments:
60
56
  - 1
61
57
  - 6
62
58
  - 1
63
59
  version: 1.6.1
64
- name: highline
60
+ requirement: *id003
61
+ - !ruby/object:Gem::Dependency
65
62
  prerelease: false
63
+ name: json_pure
66
64
  type: :runtime
67
- version_requirements: *id003
68
- - !ruby/object:Gem::Dependency
69
- requirement: &id004 !ruby/object:Gem::Requirement
70
- none: false
65
+ version_requirements: &id004 !ruby/object:Gem::Requirement
71
66
  requirements:
72
67
  - - ">="
73
68
  - !ruby/object:Gem::Version
74
- hash: 3
75
69
  segments:
76
70
  - 0
77
71
  version: "0"
78
- name: json_pure
72
+ requirement: *id004
73
+ - !ruby/object:Gem::Dependency
79
74
  prerelease: false
75
+ name: escape
80
76
  type: :runtime
81
- version_requirements: *id004
82
- - !ruby/object:Gem::Dependency
83
- requirement: &id005 !ruby/object:Gem::Requirement
84
- none: false
77
+ version_requirements: &id005 !ruby/object:Gem::Requirement
85
78
  requirements:
86
79
  - - ~>
87
80
  - !ruby/object:Gem::Version
88
- hash: 23
89
81
  segments:
90
82
  - 0
91
83
  - 0
92
84
  - 4
93
85
  version: 0.0.4
94
- name: escape
86
+ requirement: *id005
87
+ - !ruby/object:Gem::Dependency
95
88
  prerelease: false
89
+ name: engineyard-serverside-adapter
96
90
  type: :runtime
97
- version_requirements: *id005
98
- - !ruby/object:Gem::Dependency
99
- requirement: &id006 !ruby/object:Gem::Requirement
100
- none: false
91
+ version_requirements: &id006 !ruby/object:Gem::Requirement
101
92
  requirements:
102
93
  - - "="
103
94
  - !ruby/object:Gem::Version
104
- hash: 7
105
95
  segments:
106
96
  - 1
107
97
  - 4
108
98
  - 0
109
99
  version: 1.4.0
110
- name: engineyard-serverside-adapter
100
+ requirement: *id006
101
+ - !ruby/object:Gem::Dependency
111
102
  prerelease: false
103
+ name: open4
112
104
  type: :runtime
113
- version_requirements: *id006
105
+ version_requirements: &id007 !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ segments:
110
+ - 1
111
+ - 0
112
+ - 1
113
+ version: 1.0.1
114
+ requirement: *id007
114
115
  description: This gem allows you to deploy your rails application to the Engine Yard cloud directly from the command line.
115
116
  email: cloud@engineyard.com
116
117
  executables:
@@ -122,63 +123,33 @@ extra_rdoc_files: []
122
123
  files:
123
124
  - bin/ey
124
125
  - lib/engineyard/cli.rb
125
- - lib/engineyard/model.rb
126
+ - lib/engineyard/api.rb
126
127
  - lib/engineyard/error.rb
127
- - lib/engineyard/resolver.rb
128
+ - lib/engineyard/ruby_ext.rb
129
+ - lib/engineyard/cli/api.rb
130
+ - lib/engineyard/cli/web.rb
131
+ - lib/engineyard/cli/recipes.rb
132
+ - lib/engineyard/cli/ui.rb
133
+ - lib/engineyard/model/log.rb
134
+ - lib/engineyard/model/instance.rb
135
+ - lib/engineyard/model/environment.rb
136
+ - lib/engineyard/model/app.rb
137
+ - lib/engineyard/model/deployment.rb
138
+ - lib/engineyard/model/account.rb
139
+ - lib/engineyard/model/api_struct.rb
140
+ - lib/engineyard/thor.rb
141
+ - lib/engineyard/model.rb
142
+ - lib/engineyard/repo.rb
128
143
  - lib/engineyard/collection/abstract.rb
129
144
  - lib/engineyard/collection/apps.rb
130
145
  - lib/engineyard/collection/environments.rb
131
146
  - lib/engineyard/collection.rb
132
147
  - lib/engineyard/config.rb
133
- - lib/engineyard/repo.rb
134
- - lib/engineyard/thor.rb
135
- - lib/engineyard/api.rb
136
- - lib/engineyard/cli/recipes.rb
137
- - lib/engineyard/cli/web.rb
138
- - lib/engineyard/cli/ui.rb
139
- - lib/engineyard/cli/api.rb
140
148
  - lib/engineyard/version.rb
141
- - lib/engineyard/ruby_ext.rb
142
- - lib/engineyard/model/account.rb
143
- - lib/engineyard/model/instance.rb
144
- - lib/engineyard/model/api_struct.rb
145
- - lib/engineyard/model/app.rb
146
- - lib/engineyard/model/environment.rb
147
- - lib/engineyard/model/log.rb
149
+ - lib/engineyard/resolver.rb
148
150
  - lib/engineyard.rb
149
151
  - LICENSE
150
152
  - README.rdoc
151
- - spec/support/shared_behavior.rb
152
- - spec/support/helpers.rb
153
- - spec/support/bundled_ey
154
- - spec/support/ruby_ext.rb
155
- - spec/support/git_repo.rb
156
- - spec/support/fake_awsm.ru
157
- - spec/engineyard/resolver_spec.rb
158
- - spec/engineyard/api_spec.rb
159
- - spec/engineyard/repo_spec.rb
160
- - spec/engineyard/cli_spec.rb
161
- - spec/engineyard/config_spec.rb
162
- - spec/engineyard/collection/environments_spec.rb
163
- - spec/engineyard/collection/apps_spec.rb
164
- - spec/engineyard/cli/api_spec.rb
165
- - spec/engineyard/model/environment_spec.rb
166
- - spec/engineyard/model/instance_spec.rb
167
- - spec/engineyard/model/api_struct_spec.rb
168
- - spec/ey/rollback_spec.rb
169
- - spec/ey/rebuild_spec.rb
170
- - spec/ey/web/enable_spec.rb
171
- - spec/ey/web/disable_spec.rb
172
- - spec/ey/deploy_spec.rb
173
- - spec/ey/ey_spec.rb
174
- - spec/ey/ssh_spec.rb
175
- - spec/ey/list_environments_spec.rb
176
- - spec/ey/logs_spec.rb
177
- - spec/ey/recipes/upload_spec.rb
178
- - spec/ey/recipes/download_spec.rb
179
- - spec/ey/recipes/apply_spec.rb
180
- - spec/spec_helper.rb
181
- - spec/engineyard_spec.rb
182
153
  has_rdoc: true
183
154
  homepage: http://github.com/engineyard/engineyard
184
155
  licenses: []
@@ -189,59 +160,55 @@ rdoc_options: []
189
160
  require_paths:
190
161
  - lib
191
162
  required_ruby_version: !ruby/object:Gem::Requirement
192
- none: false
193
163
  requirements:
194
164
  - - ">="
195
165
  - !ruby/object:Gem::Version
196
- hash: 3
197
166
  segments:
198
167
  - 0
199
168
  version: "0"
200
169
  required_rubygems_version: !ruby/object:Gem::Requirement
201
- none: false
202
170
  requirements:
203
171
  - - ">="
204
172
  - !ruby/object:Gem::Version
205
- hash: 3
206
173
  segments:
207
174
  - 0
208
175
  version: "0"
209
176
  requirements: []
210
177
 
211
178
  rubyforge_project:
212
- rubygems_version: 1.3.7
179
+ rubygems_version: 1.3.6
213
180
  signing_key:
214
181
  specification_version: 3
215
182
  summary: Command-line deployment for the Engine Yard cloud
216
183
  test_files:
217
- - spec/support/shared_behavior.rb
218
- - spec/support/helpers.rb
219
- - spec/support/bundled_ey
220
- - spec/support/ruby_ext.rb
221
184
  - spec/support/git_repo.rb
222
185
  - spec/support/fake_awsm.ru
223
- - spec/engineyard/resolver_spec.rb
224
- - spec/engineyard/api_spec.rb
225
- - spec/engineyard/repo_spec.rb
186
+ - spec/support/ruby_ext.rb
187
+ - spec/support/helpers.rb
188
+ - spec/support/bundled_ey
189
+ - spec/support/shared_behavior.rb
226
190
  - spec/engineyard/cli_spec.rb
227
191
  - spec/engineyard/config_spec.rb
228
- - spec/engineyard/collection/environments_spec.rb
229
- - spec/engineyard/collection/apps_spec.rb
230
192
  - spec/engineyard/cli/api_spec.rb
193
+ - spec/engineyard/model/api_struct_spec.rb
231
194
  - spec/engineyard/model/environment_spec.rb
232
195
  - spec/engineyard/model/instance_spec.rb
233
- - spec/engineyard/model/api_struct_spec.rb
196
+ - spec/engineyard/resolver_spec.rb
197
+ - spec/engineyard/collection/apps_spec.rb
198
+ - spec/engineyard/collection/environments_spec.rb
199
+ - spec/engineyard/repo_spec.rb
200
+ - spec/engineyard/api_spec.rb
201
+ - spec/ey/list_environments_spec.rb
234
202
  - spec/ey/rollback_spec.rb
203
+ - spec/ey/logs_spec.rb
235
204
  - spec/ey/rebuild_spec.rb
236
- - spec/ey/web/enable_spec.rb
237
- - spec/ey/web/disable_spec.rb
205
+ - spec/ey/recipes/download_spec.rb
206
+ - spec/ey/recipes/apply_spec.rb
207
+ - spec/ey/recipes/upload_spec.rb
238
208
  - spec/ey/deploy_spec.rb
239
209
  - spec/ey/ey_spec.rb
210
+ - spec/ey/web/disable_spec.rb
211
+ - spec/ey/web/enable_spec.rb
240
212
  - spec/ey/ssh_spec.rb
241
- - spec/ey/list_environments_spec.rb
242
- - spec/ey/logs_spec.rb
243
- - spec/ey/recipes/upload_spec.rb
244
- - spec/ey/recipes/download_spec.rb
245
- - spec/ey/recipes/apply_spec.rb
246
- - spec/spec_helper.rb
247
213
  - spec/engineyard_spec.rb
214
+ - spec/spec_helper.rb