engineyard 1.3.11 → 1.3.12

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.
@@ -0,0 +1,96 @@
1
+ require 'escape'
2
+
3
+ module EY
4
+ module Connection
5
+ class System
6
+ def adapter(app, instances, verbose)
7
+ require 'engineyard-serverside-adapter'
8
+ EY::Serverside::Adapter.new("/usr/local/ey_resin/ruby/bin") do |args|
9
+ args.app = app.name
10
+ args.repo = app.repository_uri
11
+ args.instances = instances
12
+ args.verbose = verbose || ENV['DEBUG']
13
+ end
14
+ end
15
+ private :adapter
16
+
17
+ def deploy(app, ref, instances, stack_name, framework_env, migration_command=nil, extra_configuration=nil, verbose=false)
18
+ deploy_command = adapter(app, instances, verbose).deploy do |args|
19
+ args.ref = ref
20
+ args.stack = stack_name
21
+ args.framework_env = framework_env
22
+ args.migrate = migration_command if migration_command
23
+ args.config = extra_configuration if extra_configuration
24
+ end
25
+
26
+ invoke deploy_command
27
+ end
28
+
29
+ def rollback(app, instances, stack_name, framework_env, extra_configuration=nil, verbose=false)
30
+ rollback = adapter(app, instances, verbose).rollback do |args|
31
+ args.stack = stack_name
32
+ args.framework_env = framework_env
33
+ args.config = extra_configuration if extra_configuration
34
+ end
35
+ invoke rollback
36
+ end
37
+
38
+
39
+ def put_up_maintenance_page(app, instances, verbose=false)
40
+ invoke adapter(app, instances, verbose).enable_maintenance_page
41
+ end
42
+
43
+ def take_down_maintenance_page(app, instances, verbose=false)
44
+ invoke adapter(app, instances, verbose).disable_maintenance_page
45
+ end
46
+
47
+ protected
48
+
49
+ def engineyard_serverside_hostname
50
+ # If we tell engineyard-serverside to use 'localhost', it'll run
51
+ # commands on the instance directly (#system). If we give it the
52
+ # instance's actual hostname, it'll SSH to itself.
53
+ #
54
+ # Using 'localhost' instead of its EC2 hostname speeds up
55
+ # deploys on solos and single-app-server clusters significantly.
56
+ app_master? ? 'localhost' : hostname
57
+ end
58
+
59
+ private
60
+
61
+ def ssh(remote_command, output = true)
62
+ user = environment.username
63
+
64
+ cmd = Escape.shell_command(%w[ssh -o StrictHostKeyChecking=no -q] << "#{user}@#{hostname}" << remote_command)
65
+ cmd << " > /dev/null" unless output
66
+ EY.ui.debug(cmd)
67
+ unless ENV["NO_SSH"]
68
+ system cmd
69
+ else
70
+ true
71
+ end
72
+ end
73
+
74
+ def invoke(action)
75
+ action.call do |cmd|
76
+ puts cmd if action.verbose
77
+ ssh cmd
78
+ end
79
+ end
80
+
81
+ def instances_data
82
+ environment.instances.select { |inst| inst.has_app_code? }.map do |i|
83
+ {
84
+ :hostname => i.engineyard_serverside_hostname,
85
+ :roles => [i.role],
86
+ :name => i.name,
87
+ }
88
+ end
89
+ end
90
+
91
+ def app_master?
92
+ environment.app_master == self
93
+ end
94
+ end
95
+ end
96
+ end
@@ -71,11 +71,17 @@ module EY
71
71
 
72
72
  private
73
73
 
74
- def ssh(remote_command, &block)
75
- raise(ArgumentError, "Block required!") unless block_given?
76
- user = environment.username
77
- cmd = Escape.shell_command(%w[ssh -o StrictHostKeyChecking=no -q] << "#{user}@#{hostname}" << remote_command)
74
+ def ssh(remote_command, verbose, &block)
75
+ raise(ArgumentError, "Block required!") unless block
76
+
77
+ raw_cmd = %w[ssh -o StrictHostKeyChecking=no]
78
+ raw_cmd << '-q' unless verbose
79
+ raw_cmd << "#{environment.username}@#{hostname}"
80
+ raw_cmd << remote_command
81
+
82
+ cmd = Escape.shell_command(raw_cmd)
78
83
  EY.ui.debug(cmd)
84
+ puts cmd if verbose
79
85
  if ENV["NO_SSH"]
80
86
  block.call("NO_SSH is set. No output.")
81
87
  true
@@ -87,8 +93,7 @@ module EY
87
93
 
88
94
  def invoke(action, &block)
89
95
  action.call do |cmd|
90
- puts cmd if action.verbose
91
- ssh cmd do |chunk|
96
+ ssh cmd, action.verbose do |chunk|
92
97
  $stdout << chunk
93
98
  block.call(chunk) if block
94
99
  end
@@ -1,3 +1,3 @@
1
1
  module EY
2
- VERSION = '1.3.11'
2
+ VERSION = '1.3.12'
3
3
  end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: engineyard
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 3
4
5
  prerelease: false
5
6
  segments:
6
7
  - 1
7
8
  - 3
8
- - 11
9
- version: 1.3.11
9
+ - 12
10
+ version: 1.3.12
10
11
  platform: ruby
11
12
  authors:
12
13
  - EY Cloud Team
@@ -14,104 +15,119 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-12-28 00:00:00 -08:00
18
+ date: 2011-01-10 00:00:00 -08:00
18
19
  default_executable: ey
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
- prerelease: false
22
- name: thor
23
- type: :runtime
24
22
  version_requirements: &id001 !ruby/object:Gem::Requirement
23
+ none: false
25
24
  requirements:
26
25
  - - ~>
27
26
  - !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
- requirement: *id001
34
- - !ruby/object:Gem::Dependency
33
+ name: thor
35
34
  prerelease: false
36
- name: rest-client
35
+ requirement: *id001
37
36
  type: :runtime
37
+ - !ruby/object:Gem::Dependency
38
38
  version_requirements: &id002 !ruby/object:Gem::Requirement
39
+ none: false
39
40
  requirements:
40
41
  - - ~>
41
42
  - !ruby/object:Gem::Version
43
+ hash: 3
42
44
  segments:
43
45
  - 1
44
46
  - 4
45
- version: "1.4"
46
- requirement: *id002
47
- - !ruby/object:Gem::Dependency
47
+ - 2
48
+ version: 1.4.2
49
+ name: rest-client
48
50
  prerelease: false
49
- name: highline
51
+ requirement: *id002
50
52
  type: :runtime
53
+ - !ruby/object:Gem::Dependency
51
54
  version_requirements: &id003 !ruby/object:Gem::Requirement
55
+ none: false
52
56
  requirements:
53
57
  - - ~>
54
58
  - !ruby/object:Gem::Version
59
+ hash: 13
55
60
  segments:
56
61
  - 1
57
62
  - 6
58
63
  - 1
59
64
  version: 1.6.1
60
- requirement: *id003
61
- - !ruby/object:Gem::Dependency
65
+ name: highline
62
66
  prerelease: false
63
- name: json_pure
67
+ requirement: *id003
64
68
  type: :runtime
69
+ - !ruby/object:Gem::Dependency
65
70
  version_requirements: &id004 !ruby/object:Gem::Requirement
71
+ none: false
66
72
  requirements:
67
73
  - - ">="
68
74
  - !ruby/object:Gem::Version
75
+ hash: 3
69
76
  segments:
70
77
  - 0
71
78
  version: "0"
72
- requirement: *id004
73
- - !ruby/object:Gem::Dependency
79
+ name: json_pure
74
80
  prerelease: false
75
- name: escape
81
+ requirement: *id004
76
82
  type: :runtime
83
+ - !ruby/object:Gem::Dependency
77
84
  version_requirements: &id005 !ruby/object:Gem::Requirement
85
+ none: false
78
86
  requirements:
79
87
  - - ~>
80
88
  - !ruby/object:Gem::Version
89
+ hash: 23
81
90
  segments:
82
91
  - 0
83
92
  - 0
84
93
  - 4
85
94
  version: 0.0.4
86
- requirement: *id005
87
- - !ruby/object:Gem::Dependency
95
+ name: escape
88
96
  prerelease: false
89
- name: engineyard-serverside-adapter
97
+ requirement: *id005
90
98
  type: :runtime
99
+ - !ruby/object:Gem::Dependency
91
100
  version_requirements: &id006 !ruby/object:Gem::Requirement
101
+ none: false
92
102
  requirements:
93
103
  - - "="
94
104
  - !ruby/object:Gem::Version
105
+ hash: 7
95
106
  segments:
96
107
  - 1
97
108
  - 4
98
109
  - 0
99
110
  version: 1.4.0
100
- requirement: *id006
101
- - !ruby/object:Gem::Dependency
111
+ name: engineyard-serverside-adapter
102
112
  prerelease: false
103
- name: open4
113
+ requirement: *id006
104
114
  type: :runtime
115
+ - !ruby/object:Gem::Dependency
105
116
  version_requirements: &id007 !ruby/object:Gem::Requirement
117
+ none: false
106
118
  requirements:
107
119
  - - ~>
108
120
  - !ruby/object:Gem::Version
121
+ hash: 21
109
122
  segments:
110
123
  - 1
111
124
  - 0
112
125
  - 1
113
126
  version: 1.0.1
127
+ name: open4
128
+ prerelease: false
114
129
  requirement: *id007
130
+ type: :runtime
115
131
  description: This gem allows you to deploy your rails application to the Engine Yard cloud directly from the command line.
116
132
  email: cloud@engineyard.com
117
133
  executables:
@@ -122,34 +138,66 @@ extra_rdoc_files: []
122
138
 
123
139
  files:
124
140
  - bin/ey
125
- - lib/engineyard/cli.rb
126
141
  - lib/engineyard/api.rb
127
- - lib/engineyard/error.rb
128
- - lib/engineyard/ruby_ext.rb
129
142
  - lib/engineyard/cli/api.rb
130
- - lib/engineyard/cli/web.rb
131
143
  - lib/engineyard/cli/recipes.rb
132
144
  - 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
145
+ - lib/engineyard/cli/web.rb
146
+ - lib/engineyard/cli.rb
143
147
  - lib/engineyard/collection/abstract.rb
144
148
  - lib/engineyard/collection/apps.rb
145
149
  - lib/engineyard/collection/environments.rb
146
150
  - lib/engineyard/collection.rb
147
151
  - lib/engineyard/config.rb
148
- - lib/engineyard/version.rb
152
+ - lib/engineyard/connection/system.rb
153
+ - lib/engineyard/error.rb
154
+ - lib/engineyard/model/account.rb
155
+ - lib/engineyard/model/api_struct.rb
156
+ - lib/engineyard/model/app.rb
157
+ - lib/engineyard/model/deployment.rb
158
+ - lib/engineyard/model/environment.rb
159
+ - lib/engineyard/model/instance.rb
160
+ - lib/engineyard/model/log.rb
161
+ - lib/engineyard/model.rb
162
+ - lib/engineyard/repo.rb
149
163
  - lib/engineyard/resolver.rb
164
+ - lib/engineyard/ruby_ext.rb
165
+ - lib/engineyard/thor.rb
166
+ - lib/engineyard/version.rb
150
167
  - lib/engineyard.rb
151
168
  - LICENSE
152
169
  - README.rdoc
170
+ - spec/engineyard/api_spec.rb
171
+ - spec/engineyard/cli/api_spec.rb
172
+ - spec/engineyard/cli_spec.rb
173
+ - spec/engineyard/collection/apps_spec.rb
174
+ - spec/engineyard/collection/environments_spec.rb
175
+ - spec/engineyard/config_spec.rb
176
+ - spec/engineyard/model/api_struct_spec.rb
177
+ - spec/engineyard/model/environment_spec.rb
178
+ - spec/engineyard/model/instance_spec.rb
179
+ - spec/engineyard/repo_spec.rb
180
+ - spec/engineyard/resolver_spec.rb
181
+ - spec/engineyard_spec.rb
182
+ - spec/ey/deploy_spec.rb
183
+ - spec/ey/ey_spec.rb
184
+ - spec/ey/list_environments_spec.rb
185
+ - spec/ey/logs_spec.rb
186
+ - spec/ey/rebuild_spec.rb
187
+ - spec/ey/recipes/apply_spec.rb
188
+ - spec/ey/recipes/download_spec.rb
189
+ - spec/ey/recipes/upload_spec.rb
190
+ - spec/ey/rollback_spec.rb
191
+ - spec/ey/ssh_spec.rb
192
+ - spec/ey/web/disable_spec.rb
193
+ - spec/ey/web/enable_spec.rb
194
+ - spec/spec_helper.rb
195
+ - spec/support/bundled_ey
196
+ - spec/support/fake_awsm.ru
197
+ - spec/support/git_repo.rb
198
+ - spec/support/helpers.rb
199
+ - spec/support/ruby_ext.rb
200
+ - spec/support/shared_behavior.rb
153
201
  has_rdoc: true
154
202
  homepage: http://github.com/engineyard/engineyard
155
203
  licenses: []
@@ -160,55 +208,59 @@ rdoc_options: []
160
208
  require_paths:
161
209
  - lib
162
210
  required_ruby_version: !ruby/object:Gem::Requirement
211
+ none: false
163
212
  requirements:
164
213
  - - ">="
165
214
  - !ruby/object:Gem::Version
215
+ hash: 3
166
216
  segments:
167
217
  - 0
168
218
  version: "0"
169
219
  required_rubygems_version: !ruby/object:Gem::Requirement
220
+ none: false
170
221
  requirements:
171
222
  - - ">="
172
223
  - !ruby/object:Gem::Version
224
+ hash: 3
173
225
  segments:
174
226
  - 0
175
227
  version: "0"
176
228
  requirements: []
177
229
 
178
230
  rubyforge_project:
179
- rubygems_version: 1.3.6
231
+ rubygems_version: 1.3.7
180
232
  signing_key:
181
233
  specification_version: 3
182
234
  summary: Command-line deployment for the Engine Yard cloud
183
235
  test_files:
184
- - spec/support/git_repo.rb
185
- - spec/support/fake_awsm.ru
186
- - spec/support/ruby_ext.rb
187
- - spec/support/helpers.rb
188
- - spec/support/bundled_ey
189
- - spec/support/shared_behavior.rb
236
+ - spec/engineyard/api_spec.rb
237
+ - spec/engineyard/cli/api_spec.rb
190
238
  - spec/engineyard/cli_spec.rb
239
+ - spec/engineyard/collection/apps_spec.rb
240
+ - spec/engineyard/collection/environments_spec.rb
191
241
  - spec/engineyard/config_spec.rb
192
- - spec/engineyard/cli/api_spec.rb
193
242
  - spec/engineyard/model/api_struct_spec.rb
194
243
  - spec/engineyard/model/environment_spec.rb
195
244
  - spec/engineyard/model/instance_spec.rb
196
- - spec/engineyard/resolver_spec.rb
197
- - spec/engineyard/collection/apps_spec.rb
198
- - spec/engineyard/collection/environments_spec.rb
199
245
  - spec/engineyard/repo_spec.rb
200
- - spec/engineyard/api_spec.rb
246
+ - spec/engineyard/resolver_spec.rb
247
+ - spec/engineyard_spec.rb
248
+ - spec/ey/deploy_spec.rb
249
+ - spec/ey/ey_spec.rb
201
250
  - spec/ey/list_environments_spec.rb
202
- - spec/ey/rollback_spec.rb
203
251
  - spec/ey/logs_spec.rb
204
252
  - spec/ey/rebuild_spec.rb
205
- - spec/ey/recipes/download_spec.rb
206
253
  - spec/ey/recipes/apply_spec.rb
254
+ - spec/ey/recipes/download_spec.rb
207
255
  - spec/ey/recipes/upload_spec.rb
208
- - spec/ey/deploy_spec.rb
209
- - spec/ey/ey_spec.rb
256
+ - spec/ey/rollback_spec.rb
257
+ - spec/ey/ssh_spec.rb
210
258
  - spec/ey/web/disable_spec.rb
211
259
  - spec/ey/web/enable_spec.rb
212
- - spec/ey/ssh_spec.rb
213
- - spec/engineyard_spec.rb
214
260
  - spec/spec_helper.rb
261
+ - spec/support/bundled_ey
262
+ - spec/support/fake_awsm.ru
263
+ - spec/support/git_repo.rb
264
+ - spec/support/helpers.rb
265
+ - spec/support/ruby_ext.rb
266
+ - spec/support/shared_behavior.rb