engineyard 1.4.29 → 1.7.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. data/README.rdoc +139 -4
  2. data/bin/ey +1 -7
  3. data/lib/engineyard.rb +1 -22
  4. data/lib/engineyard/cli.rb +192 -94
  5. data/lib/engineyard/cli/#recipes.rb# +32 -0
  6. data/lib/engineyard/cli/api.rb +42 -28
  7. data/lib/engineyard/cli/recipes.rb +13 -6
  8. data/lib/engineyard/cli/ui.rb +103 -42
  9. data/lib/engineyard/cli/web.rb +16 -10
  10. data/lib/engineyard/config.rb +92 -18
  11. data/lib/engineyard/deploy_config.rb +66 -0
  12. data/lib/engineyard/deploy_config/migrate.rb +125 -0
  13. data/lib/engineyard/deploy_config/ref.rb +56 -0
  14. data/lib/engineyard/error.rb +38 -78
  15. data/lib/engineyard/repo.rb +75 -27
  16. data/lib/engineyard/serverside_runner.rb +133 -0
  17. data/lib/engineyard/thor.rb +110 -18
  18. data/lib/engineyard/version.rb +1 -1
  19. data/spec/engineyard/cli/api_spec.rb +10 -16
  20. data/spec/engineyard/cli_spec.rb +0 -11
  21. data/spec/engineyard/config_spec.rb +1 -8
  22. data/spec/engineyard/deploy_config_spec.rb +203 -0
  23. data/spec/engineyard/eyrc_spec.rb +2 -0
  24. data/spec/engineyard/repo_spec.rb +57 -34
  25. data/spec/ey/deploy_spec.rb +102 -52
  26. data/spec/ey/list_environments_spec.rb +69 -14
  27. data/spec/ey/login_spec.rb +11 -7
  28. data/spec/ey/logout_spec.rb +4 -4
  29. data/spec/ey/logs_spec.rb +6 -6
  30. data/spec/ey/recipes/apply_spec.rb +1 -1
  31. data/spec/ey/recipes/download_spec.rb +1 -1
  32. data/spec/ey/recipes/upload_spec.rb +6 -6
  33. data/spec/ey/rollback_spec.rb +3 -3
  34. data/spec/ey/ssh_spec.rb +9 -9
  35. data/spec/ey/status_spec.rb +2 -2
  36. data/spec/ey/whoami_spec.rb +9 -8
  37. data/spec/spec_helper.rb +18 -15
  38. data/spec/support/{fake_awsm.rb → git_repos.rb} +0 -14
  39. data/spec/support/helpers.rb +84 -28
  40. data/spec/support/matchers.rb +0 -16
  41. data/spec/support/shared_behavior.rb +83 -103
  42. metadata +65 -51
  43. data/lib/engineyard/api.rb +0 -117
  44. data/lib/engineyard/collection.rb +0 -7
  45. data/lib/engineyard/collection/abstract.rb +0 -71
  46. data/lib/engineyard/collection/apps.rb +0 -8
  47. data/lib/engineyard/collection/environments.rb +0 -8
  48. data/lib/engineyard/model.rb +0 -12
  49. data/lib/engineyard/model/account.rb +0 -8
  50. data/lib/engineyard/model/api_struct.rb +0 -33
  51. data/lib/engineyard/model/app.rb +0 -32
  52. data/lib/engineyard/model/deployment.rb +0 -90
  53. data/lib/engineyard/model/environment.rb +0 -194
  54. data/lib/engineyard/model/instance.rb +0 -166
  55. data/lib/engineyard/model/log.rb +0 -9
  56. data/lib/engineyard/model/user.rb +0 -6
  57. data/lib/engineyard/resolver.rb +0 -134
  58. data/lib/engineyard/rest_client_ext.rb +0 -9
  59. data/lib/engineyard/ruby_ext.rb +0 -9
  60. data/spec/engineyard/api_spec.rb +0 -39
  61. data/spec/engineyard/collection/apps_spec.rb +0 -16
  62. data/spec/engineyard/collection/environments_spec.rb +0 -16
  63. data/spec/engineyard/model/api_struct_spec.rb +0 -41
  64. data/spec/engineyard/model/environment_spec.rb +0 -198
  65. data/spec/engineyard/model/instance_spec.rb +0 -27
  66. data/spec/engineyard/resolver_spec.rb +0 -112
  67. data/spec/support/fake_awsm.ru +0 -245
  68. data/spec/support/scenarios.rb +0 -417
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: engineyard
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.29
5
- prerelease:
4
+ version: 1.7.0.pre2
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - EY Cloud Team
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-26 00:00:00.000000000 Z
12
+ date: 2012-05-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
@@ -82,7 +82,7 @@ dependencies:
82
82
  requirements:
83
83
  - - '='
84
84
  - !ruby/object:Gem::Version
85
- version: 1.6.4
85
+ version: 1.7.0.pre2
86
86
  type: :runtime
87
87
  prerelease: false
88
88
  version_requirements: !ruby/object:Gem::Requirement
@@ -90,7 +90,23 @@ dependencies:
90
90
  requirements:
91
91
  - - '='
92
92
  - !ruby/object:Gem::Version
93
- version: 1.6.4
93
+ version: 1.7.0.pre2
94
+ - !ruby/object:Gem::Dependency
95
+ name: engineyard-cloud-client
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: 0.1.2
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 0.1.2
94
110
  - !ruby/object:Gem::Dependency
95
111
  name: net-ssh
96
112
  requirement: !ruby/object:Gem::Requirement
@@ -251,6 +267,38 @@ dependencies:
251
267
  - - ~>
252
268
  - !ruby/object:Gem::Version
253
269
  version: 1.0.1
270
+ - !ruby/object:Gem::Dependency
271
+ name: hashie
272
+ requirement: !ruby/object:Gem::Requirement
273
+ none: false
274
+ requirements:
275
+ - - ! '>='
276
+ - !ruby/object:Gem::Version
277
+ version: '0'
278
+ type: :development
279
+ prerelease: false
280
+ version_requirements: !ruby/object:Gem::Requirement
281
+ none: false
282
+ requirements:
283
+ - - ! '>='
284
+ - !ruby/object:Gem::Version
285
+ version: '0'
286
+ - !ruby/object:Gem::Dependency
287
+ name: gitable
288
+ requirement: !ruby/object:Gem::Requirement
289
+ none: false
290
+ requirements:
291
+ - - ! '>='
292
+ - !ruby/object:Gem::Version
293
+ version: '0'
294
+ type: :development
295
+ prerelease: false
296
+ version_requirements: !ruby/object:Gem::Requirement
297
+ none: false
298
+ requirements:
299
+ - - ! '>='
300
+ - !ruby/object:Gem::Version
301
+ version: '0'
254
302
  description: This gem allows you to deploy your rails application to the Engine Yard
255
303
  cloud directly from the command line.
256
304
  email: cloud@engineyard.com
@@ -260,32 +308,20 @@ extensions: []
260
308
  extra_rdoc_files: []
261
309
  files:
262
310
  - bin/ey
263
- - lib/engineyard/api.rb
311
+ - lib/engineyard/cli/#recipes.rb#
264
312
  - lib/engineyard/cli/api.rb
265
313
  - lib/engineyard/cli/recipes.rb
266
314
  - lib/engineyard/cli/ui.rb
267
315
  - lib/engineyard/cli/web.rb
268
316
  - lib/engineyard/cli.rb
269
- - lib/engineyard/collection/abstract.rb
270
- - lib/engineyard/collection/apps.rb
271
- - lib/engineyard/collection/environments.rb
272
- - lib/engineyard/collection.rb
273
317
  - lib/engineyard/config.rb
318
+ - lib/engineyard/deploy_config/migrate.rb
319
+ - lib/engineyard/deploy_config/ref.rb
320
+ - lib/engineyard/deploy_config.rb
274
321
  - lib/engineyard/error.rb
275
322
  - lib/engineyard/eyrc.rb
276
- - lib/engineyard/model/account.rb
277
- - lib/engineyard/model/api_struct.rb
278
- - lib/engineyard/model/app.rb
279
- - lib/engineyard/model/deployment.rb
280
- - lib/engineyard/model/environment.rb
281
- - lib/engineyard/model/instance.rb
282
- - lib/engineyard/model/log.rb
283
- - lib/engineyard/model/user.rb
284
- - lib/engineyard/model.rb
285
323
  - lib/engineyard/repo.rb
286
- - lib/engineyard/resolver.rb
287
- - lib/engineyard/rest_client_ext.rb
288
- - lib/engineyard/ruby_ext.rb
324
+ - lib/engineyard/serverside_runner.rb
289
325
  - lib/engineyard/thor.rb
290
326
  - lib/engineyard/version.rb
291
327
  - lib/engineyard.rb
@@ -322,18 +358,12 @@ files:
322
358
  - lib/vendor/thor/README.md
323
359
  - LICENSE
324
360
  - README.rdoc
325
- - spec/engineyard/api_spec.rb
326
361
  - spec/engineyard/cli/api_spec.rb
327
362
  - spec/engineyard/cli_spec.rb
328
- - spec/engineyard/collection/apps_spec.rb
329
- - spec/engineyard/collection/environments_spec.rb
330
363
  - spec/engineyard/config_spec.rb
364
+ - spec/engineyard/deploy_config_spec.rb
331
365
  - spec/engineyard/eyrc_spec.rb
332
- - spec/engineyard/model/api_struct_spec.rb
333
- - spec/engineyard/model/environment_spec.rb
334
- - spec/engineyard/model/instance_spec.rb
335
366
  - spec/engineyard/repo_spec.rb
336
- - spec/engineyard/resolver_spec.rb
337
367
  - spec/engineyard_spec.rb
338
368
  - spec/ey/deploy_spec.rb
339
369
  - spec/ey/ey_spec.rb
@@ -353,13 +383,11 @@ files:
353
383
  - spec/ey/whoami_spec.rb
354
384
  - spec/spec_helper.rb
355
385
  - spec/support/bundled_ey
356
- - spec/support/fake_awsm.rb
357
- - spec/support/fake_awsm.ru
358
386
  - spec/support/fixture_recipes.tgz
387
+ - spec/support/git_repos.rb
359
388
  - spec/support/helpers.rb
360
389
  - spec/support/matchers.rb
361
390
  - spec/support/ruby_ext.rb
362
- - spec/support/scenarios.rb
363
391
  - spec/support/shared_behavior.rb
364
392
  homepage: http://github.com/engineyard/engineyard
365
393
  licenses: []
@@ -377,37 +405,25 @@ required_ruby_version: !ruby/object:Gem::Requirement
377
405
  - - ! '>='
378
406
  - !ruby/object:Gem::Version
379
407
  version: '0'
380
- segments:
381
- - 0
382
- hash: -1428275579656453784
383
408
  required_rubygems_version: !ruby/object:Gem::Requirement
384
409
  none: false
385
410
  requirements:
386
- - - ! '>='
411
+ - - ! '>'
387
412
  - !ruby/object:Gem::Version
388
- version: '0'
389
- segments:
390
- - 0
391
- hash: -1428275579656453784
413
+ version: 1.3.1
392
414
  requirements: []
393
415
  rubyforge_project:
394
- rubygems_version: 1.8.19
416
+ rubygems_version: 1.8.21
395
417
  signing_key:
396
418
  specification_version: 3
397
419
  summary: Command-line deployment for the Engine Yard cloud
398
420
  test_files:
399
- - spec/engineyard/api_spec.rb
400
421
  - spec/engineyard/cli/api_spec.rb
401
422
  - spec/engineyard/cli_spec.rb
402
- - spec/engineyard/collection/apps_spec.rb
403
- - spec/engineyard/collection/environments_spec.rb
404
423
  - spec/engineyard/config_spec.rb
424
+ - spec/engineyard/deploy_config_spec.rb
405
425
  - spec/engineyard/eyrc_spec.rb
406
- - spec/engineyard/model/api_struct_spec.rb
407
- - spec/engineyard/model/environment_spec.rb
408
- - spec/engineyard/model/instance_spec.rb
409
426
  - spec/engineyard/repo_spec.rb
410
- - spec/engineyard/resolver_spec.rb
411
427
  - spec/engineyard_spec.rb
412
428
  - spec/ey/deploy_spec.rb
413
429
  - spec/ey/ey_spec.rb
@@ -427,11 +443,9 @@ test_files:
427
443
  - spec/ey/whoami_spec.rb
428
444
  - spec/spec_helper.rb
429
445
  - spec/support/bundled_ey
430
- - spec/support/fake_awsm.rb
431
- - spec/support/fake_awsm.ru
432
446
  - spec/support/fixture_recipes.tgz
447
+ - spec/support/git_repos.rb
433
448
  - spec/support/helpers.rb
434
449
  - spec/support/matchers.rb
435
450
  - spec/support/ruby_ext.rb
436
- - spec/support/scenarios.rb
437
451
  - spec/support/shared_behavior.rb
@@ -1,117 +0,0 @@
1
- require 'engineyard/model'
2
- require 'yaml'
3
- require 'rest_client'
4
- require 'engineyard/rest_client_ext'
5
- require 'json'
6
- require 'engineyard/eyrc'
7
-
8
- module EY
9
- class API
10
- attr_reader :token
11
-
12
- USER_AGENT_STRING = "EngineYardCLI/#{VERSION}"
13
-
14
- def initialize(token = nil)
15
- @token = token
16
- @token ||= EY::EYRC.load.api_token
17
- raise ArgumentError, "EY Cloud API token required" unless @token
18
- end
19
-
20
- def ==(other)
21
- raise ArgumentError unless other.is_a?(self.class)
22
- self.token == other.token
23
- end
24
-
25
- def request(url, opts={})
26
- opts[:headers] ||= {}
27
- opts[:headers]["X-EY-Cloud-Token"] = token
28
- EY.ui.debug("Token", token)
29
- self.class.request(url, opts)
30
- end
31
-
32
- def environments
33
- @environments ||= EY::Model::Environment.from_array(request('/environments')["environments"], :api => self)
34
- end
35
-
36
- def apps
37
- @apps ||= EY::Model::App.from_array(request('/apps')["apps"], :api => self)
38
- end
39
-
40
- def resolver
41
- @resolver ||= Resolver.new(self)
42
- end
43
-
44
- def apps_for_repo(repo)
45
- repo.fail_on_no_remotes!
46
- apps.find_all {|a| repo.has_remote?(a.repository_uri) }
47
- end
48
-
49
- def user
50
- EY::Model::User.from_hash(request('/current_user')['user'])
51
- end
52
-
53
- class InvalidCredentials < EY::Error; end
54
- class RequestFailed < EY::Error; end
55
- class ResourceNotFound < RequestFailed; end
56
-
57
- def self.request(path, opts={})
58
- require 'rest_client'
59
- require 'engineyard/rest_client_ext'
60
- require 'json'
61
-
62
- url = EY.config.endpoint + "api/v2#{path}"
63
- method = (opts.delete(:method) || 'get').to_s.downcase.to_sym
64
- params = opts.delete(:params) || {}
65
- headers = opts.delete(:headers) || {}
66
- headers["Accept"] ||= "application/json"
67
- headers["User-Agent"] = USER_AGENT_STRING
68
-
69
- begin
70
- EY.ui.debug("Request", "#{method.to_s.upcase} #{url}")
71
- case method
72
- when :get, :delete, :head
73
- url.query = RestClient::Payload::UrlEncoded.new(params).to_s
74
- resp = RestClient.send(method, url.to_s, headers)
75
- else
76
- resp = RestClient.send(method, url.to_s, params, headers)
77
- end
78
- rescue RestClient::Unauthorized
79
- raise InvalidCredentials
80
- rescue Errno::ECONNREFUSED
81
- raise RequestFailed, "Could not reach the cloud API"
82
- rescue RestClient::ResourceNotFound
83
- raise ResourceNotFound, "The requested resource could not be found"
84
- rescue RestClient::BadGateway
85
- raise RequestFailed, "EY Cloud API is temporarily unavailable. Please try again soon."
86
- rescue RestClient::RequestFailed => e
87
- raise RequestFailed, "#{e.message} #{e.response}"
88
- rescue OpenSSL::SSL::SSLError
89
- raise RequestFailed, "SSL is misconfigured on your cloud"
90
- end
91
-
92
- if resp.body.empty?
93
- data = ''
94
- elsif resp.headers[:content_type] =~ /application\/json/
95
- begin
96
- data = JSON.parse(resp.body)
97
- EY.ui.debug("Response", data)
98
- rescue JSON::ParserError
99
- EY.ui.debug("Raw response", resp.body)
100
- raise RequestFailed, "Response was not valid JSON."
101
- end
102
- else
103
- data = resp.body
104
- end
105
-
106
- data
107
- end
108
-
109
- def self.fetch_token(email, password)
110
- api_token = request("/authenticate", :method => "post",
111
- :params => { :email => email, :password => password })["api_token"]
112
- EY::EYRC.load.api_token = api_token
113
- api_token
114
- end
115
-
116
- end # API
117
- end # EY
@@ -1,7 +0,0 @@
1
- module EY
2
- module Collection
3
- require 'engineyard/collection/abstract'
4
- require 'engineyard/collection/environments'
5
- require 'engineyard/collection/apps'
6
- end
7
- end
@@ -1,71 +0,0 @@
1
- require 'engineyard/error'
2
-
3
- module EY
4
- module Collection
5
- class Abstract
6
- COLLAB_MESSAGE = <<-MSG
7
- \nThis error is due to having access to another account's resources via the collaboration feature.
8
- Specify --account ACCOUNT_NAME to resolve this ambiguity.
9
- MSG
10
-
11
- include Enumerable
12
-
13
- def initialize(contents)
14
- @contents = contents ? contents.dup.flatten : []
15
- end
16
-
17
- def each(&block)
18
- @contents.each(&block)
19
- end
20
-
21
- def to_a
22
- @contents
23
- end
24
-
25
- def named(name, account_name=nil)
26
- candidates = @contents.find_all do |x|
27
- if account_name
28
- x.name.downcase == name.downcase && x.account.name.downcase == account_name.downcase
29
- else
30
- x.name.downcase == name.downcase
31
- end
32
- end
33
- if candidates.size > 1
34
- raise ambiguous_error(name, candidates.map {|e| e.name}, COLLAB_MESSAGE )
35
- end
36
- candidates.first
37
- end
38
-
39
- def match_one(name_part)
40
- named(name_part) || find_by_unambiguous_substring(name_part)
41
- end
42
-
43
- def match_one!(name_part)
44
- match_one(name_part) or raise invalid_error(name_part)
45
- end
46
-
47
- private
48
-
49
- def find_by_unambiguous_substring(name_part)
50
- candidates = @contents.find_all{|e| e.name.downcase[name_part.downcase] }
51
- if candidates.size > 1
52
- raise ambiguous_error(name_part, candidates.map {|e| e.name})
53
- end
54
- candidates.first
55
- end
56
-
57
- class << self
58
- attr_accessor :invalid_error, :ambiguous_error
59
- end
60
-
61
- def invalid_error(*args, &blk)
62
- self.class.invalid_error.new(*args, &blk)
63
- end
64
-
65
- def ambiguous_error(*args, &blk)
66
- self.class.ambiguous_error.new(*args, &blk)
67
- end
68
-
69
- end
70
- end
71
- end
@@ -1,8 +0,0 @@
1
- module EY
2
- module Collection
3
- class Apps < Abstract
4
- self.invalid_error = InvalidAppError
5
- self.ambiguous_error = AmbiguousAppNameError
6
- end
7
- end
8
- end
@@ -1,8 +0,0 @@
1
- module EY
2
- module Collection
3
- class Environments < Abstract
4
- self.invalid_error = NoEnvironmentError
5
- self.ambiguous_error = AmbiguousEnvironmentNameError
6
- end
7
- end
8
- end
@@ -1,12 +0,0 @@
1
- module EY
2
- module Model
3
- require 'engineyard/model/api_struct'
4
- require 'engineyard/model/account'
5
- require 'engineyard/model/app'
6
- require 'engineyard/model/deployment'
7
- require 'engineyard/model/environment'
8
- require 'engineyard/model/log'
9
- require 'engineyard/model/instance'
10
- require 'engineyard/model/user'
11
- end
12
- end