engineyard-serverside 2.7.0.pre → 2.7.8pre2

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 (252) hide show
  1. data/bin/engineyard-serverside +1 -1
  2. data/lib/engineyard-serverside/about.rb +8 -7
  3. data/lib/engineyard-serverside/cli.rb +225 -4
  4. data/lib/engineyard-serverside/cli_helpers.rb +53 -0
  5. data/lib/engineyard-serverside/configuration.rb +0 -1
  6. data/lib/engineyard-serverside/dependency_manager/bundler.rb +18 -46
  7. data/lib/engineyard-serverside/dependency_manager/npm.rb +1 -12
  8. data/lib/engineyard-serverside/deploy.rb +45 -7
  9. data/lib/engineyard-serverside/deploy_hook.rb +83 -20
  10. data/lib/engineyard-serverside/maintenance.rb +9 -1
  11. data/lib/engineyard-serverside/paths.rb +0 -11
  12. data/lib/engineyard-serverside/rails_assets.rb +1 -2
  13. data/lib/engineyard-serverside/version.rb +1 -1
  14. data/spec/archive_deploy_spec.rb +53 -0
  15. data/spec/basic_deploy_spec.rb +26 -0
  16. data/spec/bundler_deploy_spec.rb +139 -0
  17. data/spec/configuration_spec.rb +205 -0
  18. data/spec/custom_deploy_spec.rb +128 -0
  19. data/spec/deploy_hook_spec.rb +362 -0
  20. data/spec/deprecation_spec.rb +23 -0
  21. data/spec/ey_yml_customized_deploy_spec.rb +99 -0
  22. data/spec/fixtures/gitrepo.tar.gz +0 -0
  23. data/{lib/engineyard-serverside/callbacks/hooks.rb → spec/fixtures/gitrepo/bar} +0 -0
  24. data/spec/fixtures/gitrepo/foo +0 -0
  25. data/spec/fixtures/invalid_hook.rb +1 -0
  26. data/spec/fixtures/lockfiles/0.9-no-bundler +111 -0
  27. data/spec/fixtures/lockfiles/0.9-with-bundler +117 -0
  28. data/spec/fixtures/lockfiles/1.0-no-bundler +54 -0
  29. data/spec/fixtures/lockfiles/1.0.0.rc.1-with-bundler +162 -0
  30. data/spec/fixtures/lockfiles/1.0.18-do_mysql +88 -0
  31. data/spec/fixtures/lockfiles/1.0.18-do_postgres +79 -0
  32. data/spec/fixtures/lockfiles/1.0.18-mysql +43 -0
  33. data/spec/fixtures/lockfiles/1.0.18-mysql2 +43 -0
  34. data/spec/fixtures/lockfiles/1.0.18-pg +43 -0
  35. data/spec/fixtures/lockfiles/1.0.6-no-bundler +51 -0
  36. data/spec/fixtures/lockfiles/1.0.6-with-any-bundler +52 -0
  37. data/spec/fixtures/lockfiles/1.0.6-with-bundler +52 -0
  38. data/spec/fixtures/lockfiles/1.3.1-rails-3.2.13 +112 -0
  39. data/spec/fixtures/lockfiles/not-a-lockfile +1 -0
  40. data/spec/fixtures/repos/assets_detected/Gemfile +5 -0
  41. data/spec/fixtures/repos/assets_detected/Gemfile.lock +88 -0
  42. data/spec/fixtures/repos/assets_detected/README +1 -0
  43. data/spec/fixtures/repos/assets_detected/Rakefile +5 -0
  44. data/spec/fixtures/repos/assets_detected/app/assets/empty +0 -0
  45. data/spec/fixtures/repos/assets_detected/config/application.rb +5 -0
  46. data/spec/fixtures/repos/assets_detected/config/ey.yml +3 -0
  47. data/spec/fixtures/repos/assets_disabled/Gemfile +5 -0
  48. data/spec/fixtures/repos/assets_disabled/Gemfile.lock +88 -0
  49. data/spec/fixtures/repos/assets_disabled/README +1 -0
  50. data/spec/fixtures/repos/assets_disabled/Rakefile +6 -0
  51. data/spec/fixtures/repos/assets_disabled/app/assets/empty +0 -0
  52. data/spec/fixtures/repos/assets_disabled/config/application.rb +5 -0
  53. data/spec/fixtures/repos/assets_disabled/config/ey.yml +3 -0
  54. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile +5 -0
  55. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Gemfile.lock +88 -0
  56. data/spec/fixtures/repos/assets_disabled_in_ey_yml/README +1 -0
  57. data/spec/fixtures/repos/assets_disabled_in_ey_yml/Rakefile +6 -0
  58. data/spec/fixtures/repos/assets_disabled_in_ey_yml/app/assets/empty +0 -0
  59. data/spec/fixtures/repos/assets_disabled_in_ey_yml/config/application.rb +5 -0
  60. data/spec/fixtures/repos/assets_disabled_in_ey_yml/config/ey.yml +5 -0
  61. data/spec/fixtures/repos/assets_disabled_utf8/Gemfile +5 -0
  62. data/spec/fixtures/repos/assets_disabled_utf8/Gemfile.lock +88 -0
  63. data/spec/fixtures/repos/assets_disabled_utf8/README +3 -0
  64. data/spec/fixtures/repos/assets_disabled_utf8/Rakefile +5 -0
  65. data/spec/fixtures/repos/assets_disabled_utf8/app/assets/empty +0 -0
  66. data/spec/fixtures/repos/assets_disabled_utf8/config/application.rb +7 -0
  67. data/spec/fixtures/repos/assets_disabled_utf8/config/ey.yml +3 -0
  68. data/spec/fixtures/repos/assets_enabled_all/Gemfile +5 -0
  69. data/spec/fixtures/repos/assets_enabled_all/Gemfile.lock +88 -0
  70. data/spec/fixtures/repos/assets_enabled_all/README +1 -0
  71. data/spec/fixtures/repos/assets_enabled_all/app/assets/empty +0 -0
  72. data/spec/fixtures/repos/assets_enabled_all/config/application.rb +5 -0
  73. data/spec/fixtures/repos/assets_enabled_all/config/ey.yml +6 -0
  74. data/spec/fixtures/repos/assets_enabled_all/script/assets +5 -0
  75. data/spec/fixtures/repos/assets_enabled_all/tmp/obstruction +1 -0
  76. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile +3 -0
  77. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile.lock +10 -0
  78. data/spec/fixtures/repos/assets_enabled_in_ey_yml/README +1 -0
  79. data/spec/fixtures/repos/assets_enabled_in_ey_yml/Rakefile +8 -0
  80. data/spec/fixtures/repos/assets_enabled_in_ey_yml/config/ey.yml +4 -0
  81. data/spec/fixtures/repos/assets_enabled_util_only/Gemfile +5 -0
  82. data/spec/fixtures/repos/assets_enabled_util_only/Gemfile.lock +88 -0
  83. data/spec/fixtures/repos/assets_enabled_util_only/README +1 -0
  84. data/spec/fixtures/repos/assets_enabled_util_only/Rakefile +6 -0
  85. data/spec/fixtures/repos/assets_enabled_util_only/app/assets/empty +0 -0
  86. data/spec/fixtures/repos/assets_enabled_util_only/config/application.rb +5 -0
  87. data/spec/fixtures/repos/assets_enabled_util_only/config/ey.yml +6 -0
  88. data/spec/fixtures/repos/assets_in_hook/Gemfile +5 -0
  89. data/spec/fixtures/repos/assets_in_hook/Gemfile.lock +88 -0
  90. data/spec/fixtures/repos/assets_in_hook/README +2 -0
  91. data/spec/fixtures/repos/assets_in_hook/Rakefile +5 -0
  92. data/spec/fixtures/repos/assets_in_hook/app/assets/empty +0 -0
  93. data/spec/fixtures/repos/assets_in_hook/config/application.rb +5 -0
  94. data/spec/fixtures/repos/assets_in_hook/config/ey.yml +3 -0
  95. data/spec/fixtures/repos/assets_in_hook/deploy/before_compile_assets.rb +2 -0
  96. data/spec/fixtures/repos/bundle_fails/Gemfile +1 -0
  97. data/spec/fixtures/repos/bundle_fails/README +1 -0
  98. data/spec/fixtures/repos/bundle_fails/deploy/after_bundle.rb +1 -0
  99. data/spec/fixtures/repos/bundler_disabled/Gemfile +4 -0
  100. data/spec/fixtures/repos/bundler_disabled/Gemfile.lock +12 -0
  101. data/spec/fixtures/repos/bundler_disabled/README +1 -0
  102. data/spec/fixtures/repos/bundler_disabled/config/ey.yml +2 -0
  103. data/spec/fixtures/repos/bundler_disabled/deploy/after_bundle.rb +1 -0
  104. data/spec/fixtures/repos/bundler_disabled/deploy/before_bundle.rb +1 -0
  105. data/spec/fixtures/repos/default/Gemfile +4 -0
  106. data/spec/fixtures/repos/default/Gemfile.lock +12 -0
  107. data/spec/fixtures/repos/default/README +5 -0
  108. data/spec/fixtures/repos/default/ey.yml +3 -0
  109. data/spec/fixtures/repos/executable_hooks/README +1 -0
  110. data/spec/fixtures/repos/executable_hooks/deploy/before_restart +72 -0
  111. data/spec/fixtures/repos/executable_hooks_not_executable/README +3 -0
  112. data/spec/fixtures/repos/executable_hooks_not_executable/deploy/before_restart +3 -0
  113. data/spec/fixtures/repos/ey_yml/Gemfile +4 -0
  114. data/spec/fixtures/repos/ey_yml/Gemfile.lock +12 -0
  115. data/spec/fixtures/repos/ey_yml/README +1 -0
  116. data/spec/fixtures/repos/ey_yml/config/ey.yml +18 -0
  117. data/spec/fixtures/repos/ey_yml/deploy/before_migrate.rb +6 -0
  118. data/spec/fixtures/repos/ey_yml_alt/Gemfile +4 -0
  119. data/spec/fixtures/repos/ey_yml_alt/Gemfile.lock +12 -0
  120. data/spec/fixtures/repos/ey_yml_alt/README +1 -0
  121. data/spec/fixtures/repos/ey_yml_alt/deploy/before_migrate.rb +6 -0
  122. data/spec/fixtures/repos/ey_yml_alt/ey.yml +12 -0
  123. data/spec/fixtures/repos/hook_fails/README +1 -0
  124. data/spec/fixtures/repos/hook_fails/deploy/before_deploy.rb +1 -0
  125. data/spec/fixtures/repos/hooks/README +1 -0
  126. data/spec/fixtures/repos/hooks/deploy/after_bundle.rb +1 -0
  127. data/spec/fixtures/repos/hooks/deploy/after_compile_assets.rb +1 -0
  128. data/spec/fixtures/repos/hooks/deploy/after_deploy.rb +1 -0
  129. data/spec/fixtures/repos/hooks/deploy/after_migrate.rb +1 -0
  130. data/spec/fixtures/repos/hooks/deploy/after_restart.rb +1 -0
  131. data/spec/fixtures/repos/hooks/deploy/after_symlink.rb +1 -0
  132. data/spec/fixtures/repos/hooks/deploy/before_bundle.rb +1 -0
  133. data/spec/fixtures/repos/hooks/deploy/before_compile_assets.rb +1 -0
  134. data/spec/fixtures/repos/hooks/deploy/before_deploy.rb +1 -0
  135. data/spec/fixtures/repos/hooks/deploy/before_migrate.rb +1 -0
  136. data/spec/fixtures/repos/hooks/deploy/before_restart.rb +1 -0
  137. data/spec/fixtures/repos/hooks/deploy/before_symlink.rb +1 -0
  138. data/spec/fixtures/repos/multi_dep_manager/README +1 -0
  139. data/spec/fixtures/repos/multi_dep_manager/composer.json +5 -0
  140. data/spec/fixtures/repos/multi_dep_manager/composer.lock +462 -0
  141. data/spec/fixtures/repos/multi_dep_manager/package.json +7 -0
  142. data/spec/fixtures/repos/multi_dep_manager/public/index.php +4 -0
  143. data/spec/fixtures/repos/no_ey_config/Gemfile +3 -0
  144. data/spec/fixtures/repos/no_ey_config/Gemfile.lock +10 -0
  145. data/spec/fixtures/repos/no_ey_config/README +1 -0
  146. data/spec/fixtures/repos/no_ey_config/ey.yml +3 -0
  147. data/spec/fixtures/repos/no_gemfile_lock/Gemfile +4 -0
  148. data/spec/fixtures/repos/no_gemfile_lock/README +1 -0
  149. data/spec/fixtures/repos/no_gemfile_lock/ey.yml +3 -0
  150. data/spec/fixtures/repos/nodejs/README +1 -0
  151. data/spec/fixtures/repos/nodejs/package.json +7 -0
  152. data/spec/fixtures/repos/not_bundled/README +1 -0
  153. data/spec/fixtures/repos/npm_disabled/README +1 -0
  154. data/spec/fixtures/repos/npm_disabled/config/ey.yml +2 -0
  155. data/spec/fixtures/repos/npm_disabled/package.json +7 -0
  156. data/spec/fixtures/repos/php_composer_disabled/README +1 -0
  157. data/spec/fixtures/repos/php_composer_disabled/composer.json +5 -0
  158. data/spec/fixtures/repos/php_composer_disabled/composer.lock +462 -0
  159. data/spec/fixtures/repos/php_composer_disabled/config/ey.yml +2 -0
  160. data/spec/fixtures/repos/php_composer_disabled/public/index.php +4 -0
  161. data/spec/fixtures/repos/php_composer_lock/README +1 -0
  162. data/spec/fixtures/repos/php_composer_lock/composer.json +5 -0
  163. data/spec/fixtures/repos/php_composer_lock/composer.lock +462 -0
  164. data/spec/fixtures/repos/php_composer_lock/public/index.php +4 -0
  165. data/spec/fixtures/repos/php_no_composer_lock/README +1 -0
  166. data/spec/fixtures/repos/php_no_composer_lock/composer.json +21 -0
  167. data/spec/fixtures/repos/php_no_composer_lock/public/index.php +4 -0
  168. data/spec/fixtures/repos/public_system/Gemfile +4 -0
  169. data/spec/fixtures/repos/public_system/Gemfile.lock +12 -0
  170. data/spec/fixtures/repos/public_system/README +5 -0
  171. data/spec/fixtures/repos/public_system/ey.yml +3 -0
  172. data/spec/fixtures/repos/public_system/public/system/cant_touch_this.txt +3 -0
  173. data/spec/fixtures/repos/sqlite3/Gemfile +4 -0
  174. data/spec/fixtures/repos/sqlite3/Gemfile.lock +89 -0
  175. data/spec/fixtures/repos/sqlite3/README +1 -0
  176. data/spec/fixtures/retwisj.war +0 -0
  177. data/spec/fixtures/valid_hook.rb +1 -0
  178. data/spec/git_strategy_spec.rb +34 -0
  179. data/spec/lockfile_parser_spec.rb +122 -0
  180. data/spec/maintenance_spec.rb +44 -0
  181. data/spec/multi_dependency_manager_spec.rb +25 -0
  182. data/spec/nodejs_deploy_spec.rb +30 -0
  183. data/spec/php_deploy_spec.rb +81 -0
  184. data/spec/platform_configure_spec.rb +61 -0
  185. data/spec/rails31_deploy_spec.rb +164 -0
  186. data/spec/restart_spec.rb +43 -0
  187. data/spec/rollback_spec.rb +87 -0
  188. data/spec/server_spec.rb +70 -0
  189. data/spec/services_deploy_spec.rb +153 -0
  190. data/spec/shell_spec.rb +57 -0
  191. data/spec/source/archive_spec.rb +33 -0
  192. data/spec/source/git_spec.rb +44 -0
  193. data/spec/spec_helper.rb +355 -0
  194. data/spec/sqlite3_deploy_spec.rb +38 -0
  195. data/spec/support/integration.rb +103 -0
  196. data/spec/support/source_doubles.rb +28 -0
  197. data/spec/support/timecop.rb +5 -0
  198. data/spec/symlink_spec.rb +15 -0
  199. metadata +522 -184
  200. data/lib/engineyard-serverside/callbacks.rb +0 -11
  201. data/lib/engineyard-serverside/callbacks/collection.rb +0 -17
  202. data/lib/engineyard-serverside/callbacks/collection/base.rb +0 -94
  203. data/lib/engineyard-serverside/callbacks/collection/combined.rb +0 -45
  204. data/lib/engineyard-serverside/callbacks/collection/deploy_hooks.rb +0 -21
  205. data/lib/engineyard-serverside/callbacks/collection/service_hooks.rb +0 -17
  206. data/lib/engineyard-serverside/callbacks/collection/service_hooks/collection.rb +0 -24
  207. data/lib/engineyard-serverside/callbacks/collection/service_hooks/combined.rb +0 -40
  208. data/lib/engineyard-serverside/callbacks/distributor.rb +0 -23
  209. data/lib/engineyard-serverside/callbacks/distributor/base.rb +0 -38
  210. data/lib/engineyard-serverside/callbacks/distributor/executable.rb +0 -19
  211. data/lib/engineyard-serverside/callbacks/distributor/executable/runnable.rb +0 -41
  212. data/lib/engineyard-serverside/callbacks/distributor/executable/unrunnable.rb +0 -19
  213. data/lib/engineyard-serverside/callbacks/distributor/ruby.rb +0 -59
  214. data/lib/engineyard-serverside/callbacks/distributor/ruby/distributor.rb +0 -57
  215. data/lib/engineyard-serverside/callbacks/hooks/app.rb +0 -17
  216. data/lib/engineyard-serverside/callbacks/hooks/base.rb +0 -39
  217. data/lib/engineyard-serverside/callbacks/hooks/service.rb +0 -24
  218. data/lib/engineyard-serverside/callbacks/service_hook.rb +0 -20
  219. data/lib/engineyard-serverside/cli/app.rb +0 -136
  220. data/lib/engineyard-serverside/cli/helpers.rb +0 -58
  221. data/lib/engineyard-serverside/cli/server_hash_extractor.rb +0 -49
  222. data/lib/engineyard-serverside/cli/workflows.rb +0 -45
  223. data/lib/engineyard-serverside/cli/workflows/base.rb +0 -78
  224. data/lib/engineyard-serverside/cli/workflows/calling_deploy_hooks.rb +0 -31
  225. data/lib/engineyard-serverside/cli/workflows/deploying_applications.rb +0 -28
  226. data/lib/engineyard-serverside/cli/workflows/disabling_maintenance.rb +0 -29
  227. data/lib/engineyard-serverside/cli/workflows/enabling_maintenance.rb +0 -29
  228. data/lib/engineyard-serverside/cli/workflows/errors.rb +0 -13
  229. data/lib/engineyard-serverside/cli/workflows/helpers.rb +0 -21
  230. data/lib/engineyard-serverside/cli/workflows/integrating_servers.rb +0 -71
  231. data/lib/engineyard-serverside/cli/workflows/restarting_applications.rb +0 -36
  232. data/lib/engineyard-serverside/cli/workflows/rolling_back_applications.rb +0 -28
  233. data/lib/engineyard-serverside/cli/workflows/showing_maintenance_status.rb +0 -28
  234. data/lib/engineyard-serverside/deploy_hook/callback_context.rb +0 -77
  235. data/lib/engineyard-serverside/propagator.rb +0 -59
  236. data/lib/engineyard-serverside/slug.rb +0 -7
  237. data/lib/engineyard-serverside/slug/distributor.rb +0 -58
  238. data/lib/engineyard-serverside/slug/enabler.rb +0 -100
  239. data/lib/engineyard-serverside/slug/failure_handler.rb +0 -24
  240. data/lib/engineyard-serverside/slug/finalizer.rb +0 -86
  241. data/lib/engineyard-serverside/slug/generator.rb +0 -29
  242. data/lib/engineyard-serverside/slug/migrator.rb +0 -41
  243. data/lib/engineyard-serverside/slug/restarter.rb +0 -103
  244. data/lib/engineyard-serverside/slug/source.rb +0 -16
  245. data/lib/engineyard-serverside/slug/source/updater.rb +0 -194
  246. data/lib/railway.rb +0 -43
  247. data/lib/result.rb +0 -7
  248. data/lib/result/base.rb +0 -41
  249. data/lib/result/dsl.rb +0 -16
  250. data/lib/result/failure.rb +0 -29
  251. data/lib/result/success.rb +0 -24
  252. data/lib/runner.rb +0 -34
@@ -1,57 +0,0 @@
1
- require 'engineyard-serverside/callbacks/distributor/base'
2
-
3
- require 'escape'
4
-
5
- module EY
6
- module Serverside
7
- module Callbacks
8
- module Distributor
9
- module Ruby
10
-
11
- class Distributor < Base
12
- def distribute
13
- shell.status "Running deploy hook: #{hook}.rb"
14
-
15
- runner.run escaped_command(hook) do |server, cmd|
16
- instance_args = [
17
- '--current-roles', server.roles.to_a.join(' ')
18
- ]
19
-
20
- if server.name
21
- instance_args.push('--current-name')
22
- instance_args.push(server.name.to_s)
23
- end
24
-
25
- instance_args.push('--config')
26
- instance_args.push(config.to_json)
27
-
28
- cmd << " " << Escape.shell_command(instance_args)
29
- end
30
- end
31
-
32
- private
33
- def escaped_command(hook)
34
- Escape.shell_command(command_for(hook.callback_name))
35
- end
36
- def command_for(hook_name)
37
- cmd = [
38
- About.binary,
39
- 'hook', hook_name.to_s,
40
- '--app', config.app,
41
- '--environment-name', config.environment_name,
42
- '--account-name', config.account_name,
43
- '--release-path', paths.active_release.to_s,
44
- '--framework-env', config.framework_env.to_s
45
- ]
46
-
47
- cmd.push('--verbose') if config.verbose
48
-
49
- cmd
50
- end
51
- end
52
-
53
- end
54
- end
55
- end
56
- end
57
- end
@@ -1,17 +0,0 @@
1
- require 'engineyard-serverside/callbacks/hooks/base'
2
-
3
- module EY
4
- module Serverside
5
- module Callbacks
6
- module Hooks
7
-
8
- class App < Base
9
- def to_s
10
- "deploy/#{callback_name}"
11
- end
12
- end
13
-
14
- end
15
- end
16
- end
17
- end
@@ -1,39 +0,0 @@
1
- require 'pathname'
2
-
3
- module EY
4
- module Serverside
5
- module Callbacks
6
- module Hooks
7
-
8
- class Base
9
- attr_reader :path, :callback_name, :flavor
10
-
11
- def initialize(file_path)
12
- @path = Pathname.new(file_path)
13
-
14
- filename = path.basename
15
-
16
- callback = filename.basename('.rb')
17
-
18
- @flavor = filename == callback ? :executable : :ruby
19
-
20
- @callback_name = callback.to_s.to_sym
21
- end
22
-
23
- def matches?(callback)
24
- callback_name == callback
25
- end
26
-
27
- def read
28
- path.read
29
- end
30
-
31
- def to_s
32
- raise "Unimplemented"
33
- end
34
- end
35
-
36
- end
37
- end
38
- end
39
- end
@@ -1,24 +0,0 @@
1
- require 'engineyard-serverside/callbacks/hooks/base'
2
-
3
- module EY
4
- module Serverside
5
- module Callbacks
6
- module Hooks
7
-
8
- class Service < Base
9
- attr_reader :service_name
10
-
11
- def initialize(file_path)
12
- super
13
- @service_name = path.dirname.basename.to_s
14
- end
15
-
16
- def to_s
17
- "service/#{service_name}/#{callback_name}"
18
- end
19
- end
20
-
21
- end
22
- end
23
- end
24
- end
@@ -1,20 +0,0 @@
1
- require 'pathname'
2
-
3
- require 'engineyard-serverside/callbacks/base_hook'
4
-
5
- module EY
6
- module Serverside
7
- module Callbacks
8
-
9
- class ServiceHook < BaseHook
10
- attr_reader :service_name
11
-
12
- def initialize(file_path)
13
- super
14
- @service_name = path.dirname.basename.to_s
15
- end
16
- end
17
-
18
- end
19
- end
20
- end
@@ -1,136 +0,0 @@
1
- require 'thor'
2
- require 'pathname'
3
- require 'engineyard-serverside/about'
4
- require 'engineyard-serverside/deploy'
5
- require 'engineyard-serverside/propagator'
6
- require 'engineyard-serverside/shell'
7
- require 'engineyard-serverside/cli/server_hash_extractor'
8
- require 'engineyard-serverside/servers'
9
- require 'engineyard-serverside/cli/helpers'
10
- require 'engineyard-serverside/cli/workflows'
11
-
12
- module EY
13
- module Serverside
14
- module CLI
15
-
16
- # App is the actual Thor-based entry point for the engineyard-serverside
17
- # CLI application
18
- class App < Thor
19
-
20
- extend Helpers
21
-
22
- method_option :migrate, :type => :string,
23
- :desc => "Run migrations with this deploy",
24
- :aliases => ["-m"]
25
-
26
- method_option :branch, :type => :string,
27
- :desc => "Git ref to deploy, defaults to master. May be a branch, a tag, or a SHA",
28
- :aliases => %w[-b --ref --tag]
29
-
30
- method_option :repo, :type => :string,
31
- :desc => "Remote repo to deploy",
32
- :aliases => ["-r"]
33
-
34
-
35
- # Archive source strategy
36
- method_option :archive, :type => :string,
37
- :desc => "Remote URI for archive to download and unzip"
38
-
39
- # Git source strategy
40
- method_option :git, :type => :string,
41
- :desc => "Remote git repo to deploy"
42
-
43
- method_option :clean, :type => :boolean,
44
- :desc => "Run deploy without relying on existing files"
45
-
46
-
47
- account_app_env_options
48
- config_option
49
- framework_env_option
50
- instances_options
51
- stack_option
52
- verbose_option
53
-
54
- desc "deploy", "Deploy code to /data/<app>"
55
- def deploy(default_task=:deploy)
56
-
57
- # By default, we'll want to perform the :deploy workflow, but this
58
- # method is also the entry point for the rollback workflow. So,
59
- # we'll just let the workflow system figure out what to do based on
60
- # the task passed in from the command line.
61
- Workflows.perform(default_task, options)
62
- end
63
-
64
- account_app_env_options
65
- config_option
66
- instances_options
67
- verbose_option
68
- desc "enable_maintenance", "Enable maintenance page (disables web access)"
69
- def enable_maintenance
70
- Workflows.perform(:enable_maintenance, options)
71
- end
72
-
73
- account_app_env_options
74
- config_option
75
- instances_options
76
- verbose_option
77
- desc "maintenance_status", "Maintenance status"
78
- def maintenance_status
79
- Workflows.perform(:maintenance_status, options)
80
- end
81
-
82
- account_app_env_options
83
- config_option
84
- instances_options
85
- verbose_option
86
- desc "disable_maintenance", "Disable maintenance page (enables web access)"
87
- def disable_maintenance
88
- Workflows.perform(:disable_maintenance, options)
89
- end
90
-
91
- method_option :release_path, :type => :string,
92
- :desc => "Value for #release_path in hooks (mostly for internal coordination)",
93
- :aliases => ["-r"]
94
-
95
- method_option :current_roles, :type => :array,
96
- :desc => "Value for #current_roles in hooks"
97
-
98
- method_option :current_name, :type => :string,
99
- :desc => "Value for #current_name in hooks"
100
- account_app_env_options
101
- config_option
102
- framework_env_option
103
- verbose_option
104
- desc "hook [NAME]", "Run a particular deploy hook"
105
- def hook(hook_name)
106
- Workflows.perform(
107
- :hook,
108
- options.merge(:hook_name => hook_name)
109
- )
110
- end
111
-
112
- method_option :ignore_existing, :type => :boolean,
113
- :desc => "When syncing /data/app directory, don't overwrite destination files"
114
- account_app_env_options
115
- config_option
116
- framework_env_option
117
- instances_options
118
- stack_option
119
- verbose_option
120
- desc "integrate", "Integrate other instances into this cluster"
121
- def integrate
122
- Workflows.perform(:integrate, options)
123
- end
124
-
125
- account_app_env_options
126
- instances_options
127
- stack_option
128
- verbose_option
129
- desc "restart", "Restart app servers, conditionally enabling maintenance page"
130
- def restart
131
- Workflows.perform(:restart, options)
132
- end
133
- end
134
- end
135
- end
136
- end
@@ -1,58 +0,0 @@
1
- module EY
2
- module Serverside
3
- module CLI
4
-
5
- # Helpers is a set of methods that define options and such for an App
6
- # task
7
- module Helpers
8
- def account_app_env_options
9
- method_option :app, :type => :string,
10
- :required => true,
11
- :desc => "Application to deploy",
12
- :aliases => %w[-a --app-name]
13
- method_option :environment_name, :type => :string,
14
- :required => true,
15
- :desc => "Environment name"
16
- method_option :account_name, :type => :string,
17
- :required => true,
18
- :desc => "Account name"
19
- end
20
-
21
- def framework_env_option
22
- method_option :framework_env, :type => :string,
23
- :required => true,
24
- :desc => "Ruby web framework environment",
25
- :aliases => ["-e"]
26
- end
27
-
28
- def stack_option
29
- method_option :stack, :type => :string,
30
- :desc => "Web stack (so we can restart it correctly)"
31
- end
32
-
33
-
34
- def config_option
35
- method_option :config, :type => :string,
36
- :desc => "Additional configuration"
37
- end
38
-
39
- def instances_options
40
- method_option :instances, :type => :array,
41
- :desc => "Hostnames of instances to deploy to, e.g. --instances localhost app1 app2"
42
- method_option :instance_roles, :type => :hash,
43
- :default => {},
44
- :desc => "Roles of instances, keyed on hostname, comma-separated. e.g. instance1:app_master,etc instance2:db,memcached ..."
45
- method_option :instance_names, :type => :hash,
46
- :default => {},
47
- :desc => "Instance names, keyed on hostname. e.g. instance1:name1 instance2:name2"
48
- end
49
-
50
- def verbose_option
51
- method_option :verbose, :type => :boolean,
52
- :desc => "Verbose output",
53
- :aliases => ["-v"]
54
- end
55
- end
56
- end
57
- end
58
- end
@@ -1,49 +0,0 @@
1
- module EY
2
- module Serverside
3
- module CLI
4
-
5
- # ServerHashExtractor, given an options hash and a deploy configuration,
6
- # generates an array of hashes that can be used to instantiate Server
7
- # objects
8
- class ServerHashExtractor
9
- def self.hashes(options, config)
10
- new(options, config).hashes
11
- end
12
-
13
- attr_reader :options, :config
14
-
15
- def initialize(options, config)
16
- @options = options
17
- @config = config
18
- end
19
-
20
- def hashes
21
- return [] unless instances
22
-
23
- instances.collect {|hostname|
24
- {
25
- :hostname => hostname,
26
- :roles => instance_roles[hostname].to_s.split(','),
27
- :name => instance_names[hostname],
28
- :user => config.user
29
- }
30
- }
31
- end
32
-
33
- private
34
- def instances
35
- options[:instances]
36
- end
37
-
38
- def instance_roles
39
- options[:instance_roles]
40
- end
41
-
42
- def instance_names
43
- options[:instance_names]
44
- end
45
-
46
- end
47
- end
48
- end
49
- end
@@ -1,45 +0,0 @@
1
- require 'engineyard-serverside/cli/workflows/calling_deploy_hooks'
2
- require 'engineyard-serverside/cli/workflows/deploying_applications'
3
- require 'engineyard-serverside/cli/workflows/disabling_maintenance'
4
- require 'engineyard-serverside/cli/workflows/enabling_maintenance'
5
- require 'engineyard-serverside/cli/workflows/integrating_servers'
6
- require 'engineyard-serverside/cli/workflows/restarting_applications'
7
- require 'engineyard-serverside/cli/workflows/rolling_back_applications'
8
- require 'engineyard-serverside/cli/workflows/showing_maintenance_status'
9
-
10
- module EY
11
- module Serverside
12
- module CLI
13
-
14
- # Workflows is a collection of reified procedures that handle the
15
- # various requirements of our CLI app
16
- module Workflows
17
- DEFINED = {
18
- :deploy => DeployingApplications,
19
- :disable_maintenance => DisablingMaintenance,
20
- :enable_maintenance => EnablingMaintenance,
21
- :hook => CallingDeployHooks,
22
- :integrate => IntegratingServers,
23
- :maintenance_status => ShowingMaintenanceStatus,
24
- :restart => RestartingApplications,
25
- :rollback => RollingBackApplications
26
- }
27
-
28
- def self.perform(workflow, options = {})
29
- resolve(workflow).
30
- perform(options)
31
- end
32
-
33
- def self.resolve(workflow)
34
- (DEFINED[normalized(workflow)] || Base)
35
- end
36
-
37
- def self.normalized(workflow)
38
- return nil if workflow.nil?
39
-
40
- workflow.to_sym
41
- end
42
- end
43
- end
44
- end
45
- end