engineyard 1.4.29 → 1.7.0.pre2

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 (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