ufo 5.0.5 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (455) hide show
  1. checksums.yaml +4 -4
  2. data/.cody/README.md +19 -0
  3. data/.cody/acceptance/bin/build.sh +90 -0
  4. data/.cody/acceptance/buildspec.yml +10 -0
  5. data/.cody/acceptance/project.rb +11 -0
  6. data/.cody/acceptance/role.rb +28 -0
  7. data/.cody/shared/script/install/ufo.sh +40 -0
  8. data/.cody/shared/script/install.sh +5 -0
  9. data/.github/workflows/main.yml +28 -0
  10. data/CHANGELOG.md +11 -1
  11. data/Gemfile +0 -2
  12. data/README.md +2 -31
  13. data/lib/templates/docker/Dockerfile +4 -0
  14. data/lib/templates/helper/%underscore_name%_helper.rb.tt +6 -0
  15. data/lib/templates/init/.ufo/config/web/base.rb +6 -0
  16. data/lib/templates/init/.ufo/config/web/dev.rb +6 -0
  17. data/lib/templates/init/.ufo/config/web/prod.rb +6 -0
  18. data/lib/templates/init/.ufo/config.rb.tt +39 -0
  19. data/lib/templates/init/.ufo/resources/iam_roles/execution_role.rb +23 -0
  20. data/lib/templates/init/.ufo/resources/iam_roles/task_role.rb +20 -0
  21. data/lib/templates/init/.ufo/resources/task_definitions/web.yml +29 -0
  22. data/lib/templates/init/.ufo/vars/base.rb +20 -0
  23. data/lib/templates/init/.ufo/vars/dev.rb +4 -0
  24. data/lib/templates/init/.ufo/vars/prod.rb +4 -0
  25. data/lib/ufo/aws_services.rb +118 -0
  26. data/lib/ufo/booter.rb +27 -0
  27. data/lib/ufo/cfn/base.rb +7 -0
  28. data/lib/ufo/cfn/deploy.rb +54 -0
  29. data/lib/ufo/{stack → cfn/stack}/builder/base.rb +12 -23
  30. data/lib/ufo/cfn/stack/builder/conditions.rb +25 -0
  31. data/lib/ufo/{stack → cfn/stack}/builder/outputs.rb +2 -2
  32. data/lib/ufo/cfn/stack/builder/parameters.rb +34 -0
  33. data/lib/ufo/cfn/stack/builder/resources/base.rb +4 -0
  34. data/lib/ufo/cfn/stack/builder/resources/dns.rb +47 -0
  35. data/lib/ufo/{stack/builder/resources/ecs.rb → cfn/stack/builder/resources/ecs_service.rb} +11 -10
  36. data/lib/ufo/cfn/stack/builder/resources/elb.rb +35 -0
  37. data/lib/ufo/cfn/stack/builder/resources/iam_roles/base.rb +32 -0
  38. data/lib/ufo/cfn/stack/builder/resources/iam_roles/execution_role.rb +4 -0
  39. data/lib/ufo/cfn/stack/builder/resources/iam_roles/task_role.rb +4 -0
  40. data/lib/ufo/cfn/stack/builder/resources/listener.rb +65 -0
  41. data/lib/ufo/cfn/stack/builder/resources/listener_ssl.rb +44 -0
  42. data/lib/ufo/cfn/stack/builder/resources/scaling/base.rb +5 -0
  43. data/lib/ufo/cfn/stack/builder/resources/scaling/policy.rb +27 -0
  44. data/lib/ufo/cfn/stack/builder/resources/scaling/role.rb +33 -0
  45. data/lib/ufo/cfn/stack/builder/resources/scaling/target.rb +22 -0
  46. data/lib/ufo/cfn/stack/builder/resources/security_group/base.rb +4 -0
  47. data/lib/ufo/{stack → cfn/stack}/builder/resources/security_group/ecs.rb +4 -4
  48. data/lib/ufo/{stack → cfn/stack}/builder/resources/security_group/ecs_rule.rb +2 -2
  49. data/lib/ufo/{stack → cfn/stack}/builder/resources/security_group/elb.rb +5 -6
  50. data/lib/ufo/{stack → cfn/stack}/builder/resources/target_group.rb +4 -4
  51. data/lib/ufo/{stack → cfn/stack}/builder/resources/task_definition/reconstructor.rb +4 -4
  52. data/lib/ufo/{stack → cfn/stack}/builder/resources/task_definition.rb +4 -4
  53. data/lib/ufo/cfn/stack/builder/resources.rb +24 -0
  54. data/lib/ufo/cfn/stack/builder.rb +30 -0
  55. data/lib/ufo/{stack → cfn/stack}/custom_properties.rb +21 -5
  56. data/lib/ufo/cfn/stack/params.rb +51 -0
  57. data/lib/ufo/{stack → cfn/stack}/status.rb +2 -2
  58. data/lib/ufo/cfn/stack/template.rb +8 -0
  59. data/lib/ufo/cfn/stack/vars.rb +110 -0
  60. data/lib/ufo/cfn/stack/vpc.rb +31 -0
  61. data/lib/ufo/cfn/stack.rb +175 -0
  62. data/lib/ufo/cli/base.rb +18 -0
  63. data/lib/ufo/cli/build.rb +30 -0
  64. data/lib/ufo/cli/cancel.rb +18 -0
  65. data/lib/ufo/cli/central/update.rb +80 -0
  66. data/lib/ufo/cli/central.rb +12 -0
  67. data/lib/ufo/cli/clean.rb +17 -0
  68. data/lib/ufo/cli/destroy.rb +31 -0
  69. data/lib/ufo/{docker.rb → cli/docker.rb} +18 -18
  70. data/lib/ufo/cli/exec.rb +82 -0
  71. data/lib/ufo/cli/help/central/update.md +20 -0
  72. data/lib/ufo/{help → cli/help}/completion.md +0 -0
  73. data/lib/ufo/{help → cli/help}/completion_script.md +0 -0
  74. data/lib/ufo/cli/help/destroy.md +9 -0
  75. data/lib/ufo/cli/help/docker/base.md +39 -0
  76. data/lib/ufo/{help → cli/help}/docker/build.md +9 -9
  77. data/lib/ufo/{help → cli/help}/docker/clean.md +8 -8
  78. data/lib/ufo/{help → cli/help}/docker/compile.md +0 -0
  79. data/lib/ufo/cli/help/docker/name.md +16 -0
  80. data/lib/ufo/{help → cli/help}/docker/push.md +0 -0
  81. data/lib/ufo/cli/help/docker.md +6 -0
  82. data/lib/ufo/{help → cli/help}/help.md +1 -1
  83. data/lib/ufo/cli/help/init.md +27 -0
  84. data/lib/ufo/{help → cli/help}/logs.md +5 -4
  85. data/lib/ufo/cli/help/ps.md +12 -0
  86. data/lib/ufo/cli/help/releases.md +15 -0
  87. data/lib/ufo/cli/help/rollback.md +40 -0
  88. data/lib/ufo/cli/help/scale.md +7 -0
  89. data/lib/ufo/cli/help/ship.md +41 -0
  90. data/lib/ufo/cli/help/stop.md +3 -0
  91. data/lib/ufo/cli/help.rb +62 -0
  92. data/lib/ufo/{logs.rb → cli/logs.rb} +13 -6
  93. data/lib/ufo/cli/new/concerns.rb +16 -0
  94. data/lib/ufo/cli/new/helper.rb +24 -0
  95. data/lib/ufo/cli/new/init.rb +68 -0
  96. data/lib/ufo/{sequence.rb → cli/new/sequence.rb} +26 -4
  97. data/lib/ufo/cli/new.rb +10 -0
  98. data/lib/ufo/cli/opts.rb +35 -0
  99. data/lib/ufo/{ps → cli/ps}/task.rb +22 -29
  100. data/lib/ufo/cli/ps.rb +190 -0
  101. data/lib/ufo/{releases.rb → cli/releases.rb} +4 -4
  102. data/lib/ufo/{rollback.rb → cli/rollback.rb} +24 -12
  103. data/lib/ufo/cli/scale.rb +76 -0
  104. data/lib/ufo/cli/ship.rb +28 -0
  105. data/lib/ufo/cli/status.rb +8 -0
  106. data/lib/ufo/cli/stop.rb +49 -0
  107. data/lib/ufo/{tasks.rb → cli/tasks.rb} +2 -2
  108. data/lib/ufo/{upgrade.rb → cli/upgrade.rb} +2 -2
  109. data/lib/ufo/cli.rb +82 -172
  110. data/lib/ufo/command.rb +56 -1
  111. data/lib/ufo/concerns/autoscaling.rb +11 -0
  112. data/lib/ufo/concerns/names.rb +9 -0
  113. data/lib/ufo/concerns.rb +26 -0
  114. data/lib/ufo/config/inits.rb +13 -0
  115. data/lib/ufo/config.rb +187 -0
  116. data/lib/ufo/core.rb +32 -44
  117. data/lib/ufo/docker/builder.rb +44 -40
  118. data/lib/ufo/docker/cleaner.rb +9 -12
  119. data/lib/ufo/docker/compiler.rb +10 -4
  120. data/lib/ufo/docker/concerns.rb +7 -0
  121. data/lib/ufo/docker/dockerfile.rb +13 -9
  122. data/lib/ufo/docker/pusher.rb +13 -25
  123. data/lib/ufo/docker/state.rb +63 -0
  124. data/lib/ufo/ecr/auth.rb +8 -7
  125. data/lib/ufo/ecr/cleaner.rb +10 -14
  126. data/lib/ufo/ext/core/module.rb +31 -0
  127. data/lib/ufo/ext/core/nil_class.rb +11 -0
  128. data/lib/ufo/ext.rb +2 -0
  129. data/lib/ufo/{role → iam_role}/builder.rb +1 -1
  130. data/lib/ufo/{role → iam_role}/dsl.rb +8 -2
  131. data/lib/ufo/{role → iam_role}/registry.rb +1 -1
  132. data/lib/ufo/info.rb +22 -4
  133. data/lib/ufo/layering/layer.rb +95 -0
  134. data/lib/ufo/layering.rb +23 -0
  135. data/lib/ufo/log_group.rb +18 -10
  136. data/lib/ufo/logger/formatter.rb +13 -0
  137. data/lib/ufo/logger.rb +32 -0
  138. data/lib/ufo/names.rb +69 -0
  139. data/lib/ufo/param.rb +2 -1
  140. data/lib/ufo/task_definition/builder.rb +7 -0
  141. data/lib/ufo/task_definition/context.rb +45 -0
  142. data/lib/ufo/task_definition/erb/base.rb +18 -0
  143. data/lib/ufo/task_definition/erb/json.rb +28 -0
  144. data/lib/ufo/task_definition/erb/yaml.rb +18 -0
  145. data/lib/ufo/task_definition/erb.rb +78 -0
  146. data/lib/ufo/task_definition/helpers/aws_data_helper.rb +18 -0
  147. data/lib/ufo/task_definition/helpers/core.rb +50 -0
  148. data/lib/ufo/task_definition/helpers/ssm/fetcher.rb +39 -0
  149. data/lib/ufo/task_definition/helpers/ssm.rb +8 -0
  150. data/lib/ufo/task_definition/helpers/stack_output.rb +23 -0
  151. data/lib/ufo/{dsl/helper → task_definition/helpers}/vars.rb +40 -19
  152. data/lib/ufo/task_definition/helpers/vpc.rb +48 -0
  153. data/lib/ufo/task_definition/helpers.rb +5 -0
  154. data/lib/ufo/task_definition.rb +19 -0
  155. data/lib/ufo/upgrade/upgrade3.rb +1 -1
  156. data/lib/ufo/upgrade/upgrade4.rb +3 -3
  157. data/lib/ufo/utils/execute.rb +30 -0
  158. data/lib/ufo/utils/logging.rb +7 -0
  159. data/lib/ufo/utils/pretty.rb +18 -0
  160. data/lib/ufo/utils/squeezer.rb +1 -1
  161. data/lib/ufo/utils/sure.rb +23 -0
  162. data/lib/ufo/version.rb +1 -1
  163. data/lib/ufo/yaml/loader.rb +48 -0
  164. data/lib/ufo/yaml/validator.rb +51 -0
  165. data/lib/ufo/yaml.rb +13 -0
  166. data/lib/ufo.rb +13 -2
  167. data/spec/spec_helper.rb +4 -26
  168. data/spec/{lib → ufo}/ecr_auth_spec.rb +0 -0
  169. data/spec/{lib → ufo}/ecr_cleaner_spec.rb +0 -2
  170. data/spec/{lib/role → ufo/iam_role}/builder_spec.rb +5 -5
  171. data/spec/{lib/role → ufo/iam_role}/dsl_spec.rb +3 -3
  172. data/spec/{lib → ufo}/logs_spec.rb +2 -2
  173. data/ufo.gemspec +9 -3
  174. metadata +245 -340
  175. data/.circleci/bin/commit_docs.sh +0 -26
  176. data/.circleci/config.yml +0 -78
  177. data/.gitmodules +0 -0
  178. data/docs/.gitignore +0 -4
  179. data/docs/CNAME +0 -1
  180. data/docs/Gemfile +0 -3
  181. data/docs/LICENSE +0 -21
  182. data/docs/README.md +0 -20
  183. data/docs/_config.yml +0 -73
  184. data/docs/_docs/aws-ecs-task-execution-role.md +0 -28
  185. data/docs/_docs/conventions.md +0 -47
  186. data/docs/_docs/extras/codebuild-iam-role.md +0 -46
  187. data/docs/_docs/extras/dockerfile-erb.md +0 -60
  188. data/docs/_docs/extras/ecs-network-mode.md +0 -37
  189. data/docs/_docs/extras/load-balancer.md +0 -83
  190. data/docs/_docs/extras/minimal-deploy-iam.md +0 -79
  191. data/docs/_docs/extras/notification-arns.md +0 -21
  192. data/docs/_docs/extras/redirection-support.md +0 -27
  193. data/docs/_docs/extras/route53-support.md +0 -27
  194. data/docs/_docs/extras/security-groups.md +0 -36
  195. data/docs/_docs/extras/ssl-support.md +0 -20
  196. data/docs/_docs/faq.md +0 -100
  197. data/docs/_docs/fargate.md +0 -5
  198. data/docs/_docs/helpers.md +0 -24
  199. data/docs/_docs/iam-roles.md +0 -112
  200. data/docs/_docs/install.md +0 -25
  201. data/docs/_docs/more/auto-completion.md +0 -24
  202. data/docs/_docs/more/automated-cleanup.md +0 -14
  203. data/docs/_docs/more/customize-cloudformation.md +0 -35
  204. data/docs/_docs/more/migrations.md +0 -25
  205. data/docs/_docs/more/run-in-pieces.md +0 -30
  206. data/docs/_docs/more/single-task.md +0 -25
  207. data/docs/_docs/more/stuck-cloudformation.md +0 -29
  208. data/docs/_docs/more/why-cloudformation.md +0 -21
  209. data/docs/_docs/next-steps.md +0 -16
  210. data/docs/_docs/quick-start-ec2.md +0 -86
  211. data/docs/_docs/secrets.md +0 -135
  212. data/docs/_docs/settings/aws_profile.md +0 -36
  213. data/docs/_docs/settings/cfn.md +0 -12
  214. data/docs/_docs/settings/cluster.md +0 -66
  215. data/docs/_docs/settings/manage-security-groups.md +0 -24
  216. data/docs/_docs/settings/network.md +0 -45
  217. data/docs/_docs/settings.md +0 -55
  218. data/docs/_docs/ssl_errors.md +0 -40
  219. data/docs/_docs/structure.md +0 -41
  220. data/docs/_docs/tutorial-ufo-docker-build.md +0 -61
  221. data/docs/_docs/tutorial-ufo-init.md +0 -86
  222. data/docs/_docs/tutorial-ufo-ship.md +0 -95
  223. data/docs/_docs/tutorial-ufo-ships.md +0 -38
  224. data/docs/_docs/tutorial-ufo-tasks-build.md +0 -177
  225. data/docs/_docs/tutorial.md +0 -14
  226. data/docs/_docs/ufo-current.md +0 -49
  227. data/docs/_docs/ufo-env-extra.md +0 -22
  228. data/docs/_docs/ufo-env.md +0 -46
  229. data/docs/_docs/ufo-logs.md +0 -49
  230. data/docs/_docs/ufo-task-params.md +0 -43
  231. data/docs/_docs/ufo-tasks-register.md +0 -21
  232. data/docs/_docs/upgrading/upgrade4.5.md +0 -52
  233. data/docs/_docs/upgrading/upgrade4.md +0 -48
  234. data/docs/_docs/upgrading/upgrade5.md +0 -19
  235. data/docs/_docs/upgrading.md +0 -13
  236. data/docs/_docs/variables.md +0 -55
  237. data/docs/_includes/about.html +0 -19
  238. data/docs/_includes/cfn-customize.md +0 -53
  239. data/docs/_includes/commands.html +0 -80
  240. data/docs/_includes/contact.html +0 -17
  241. data/docs/_includes/contact_disqus.html +0 -16
  242. data/docs/_includes/contact_static.html +0 -17
  243. data/docs/_includes/content.html +0 -26
  244. data/docs/_includes/css/bootstrap.min.css +0 -7
  245. data/docs/_includes/css/main.css +0 -501
  246. data/docs/_includes/css/quotes.css +0 -102
  247. data/docs/_includes/css/syntax.css +0 -65
  248. data/docs/_includes/css/table.css +0 -53
  249. data/docs/_includes/css/timeline.css +0 -201
  250. data/docs/_includes/css/ufo.css +0 -218
  251. data/docs/_includes/edit-on-github.html +0 -11
  252. data/docs/_includes/example.html +0 -63
  253. data/docs/_includes/footer.html +0 -51
  254. data/docs/_includes/google_analytics.html +0 -10
  255. data/docs/_includes/head.html +0 -32
  256. data/docs/_includes/header.html +0 -15
  257. data/docs/_includes/js.html +0 -32
  258. data/docs/_includes/js_disqus.html +0 -21
  259. data/docs/_includes/modals.html +0 -40
  260. data/docs/_includes/nav.html +0 -27
  261. data/docs/_includes/prev_next.md +0 -19
  262. data/docs/_includes/quotes.html +0 -19
  263. data/docs/_includes/reference.md +0 -5
  264. data/docs/_includes/repo_push_access.md +0 -11
  265. data/docs/_includes/subnav.html +0 -78
  266. data/docs/_includes/summary.html +0 -22
  267. data/docs/_includes/ufo-ship-options.md +0 -12
  268. data/docs/_includes/uses.html +0 -19
  269. data/docs/_layouts/default.html +0 -11
  270. data/docs/_layouts/style.css +0 -6
  271. data/docs/_reference/ufo-apps.md +0 -37
  272. data/docs/_reference/ufo-cancel.md +0 -24
  273. data/docs/_reference/ufo-completion.md +0 -46
  274. data/docs/_reference/ufo-completion_script.md +0 -27
  275. data/docs/_reference/ufo-current.md +0 -93
  276. data/docs/_reference/ufo-deploy.md +0 -76
  277. data/docs/_reference/ufo-destroy.md +0 -36
  278. data/docs/_reference/ufo-docker-base.md +0 -71
  279. data/docs/_reference/ufo-docker-build.md +0 -91
  280. data/docs/_reference/ufo-docker-clean.md +0 -44
  281. data/docs/_reference/ufo-docker-compile.md +0 -19
  282. data/docs/_reference/ufo-docker-help.md +0 -15
  283. data/docs/_reference/ufo-docker-name.md +0 -37
  284. data/docs/_reference/ufo-docker-push.md +0 -49
  285. data/docs/_reference/ufo-docker.md +0 -38
  286. data/docs/_reference/ufo-init.md +0 -125
  287. data/docs/_reference/ufo-logs.md +0 -40
  288. data/docs/_reference/ufo-network-help.md +0 -15
  289. data/docs/_reference/ufo-network-init.md +0 -39
  290. data/docs/_reference/ufo-network.md +0 -26
  291. data/docs/_reference/ufo-ps.md +0 -56
  292. data/docs/_reference/ufo-releases.md +0 -40
  293. data/docs/_reference/ufo-resources.md +0 -44
  294. data/docs/_reference/ufo-rollback.md +0 -61
  295. data/docs/_reference/ufo-scale.md +0 -50
  296. data/docs/_reference/ufo-ship.md +0 -129
  297. data/docs/_reference/ufo-ships.md +0 -68
  298. data/docs/_reference/ufo-status.md +0 -23
  299. data/docs/_reference/ufo-stop.md +0 -31
  300. data/docs/_reference/ufo-task.md +0 -56
  301. data/docs/_reference/ufo-tasks-build.md +0 -178
  302. data/docs/_reference/ufo-tasks-help.md +0 -15
  303. data/docs/_reference/ufo-tasks-register.md +0 -29
  304. data/docs/_reference/ufo-tasks.md +0 -35
  305. data/docs/_reference/ufo-upgrade-help.md +0 -15
  306. data/docs/_reference/ufo-upgrade-v2to3.md +0 -15
  307. data/docs/_reference/ufo-upgrade-v33to34.md +0 -15
  308. data/docs/_reference/ufo-upgrade-v3to4.md +0 -27
  309. data/docs/_reference/ufo-upgrade-v43to45.md +0 -15
  310. data/docs/_reference/ufo-upgrade.md +0 -29
  311. data/docs/_reference/ufo-version.md +0 -23
  312. data/docs/articles.md +0 -14
  313. data/docs/bin/web +0 -4
  314. data/docs/css/font-awesome/css/font-awesome.css +0 -1566
  315. data/docs/css/font-awesome/css/font-awesome.min.css +0 -4
  316. data/docs/css/font-awesome/fonts/FontAwesome.otf +0 -0
  317. data/docs/css/font-awesome/fonts/fontawesome-webfont.eot +0 -0
  318. data/docs/css/font-awesome/fonts/fontawesome-webfont.svg +0 -504
  319. data/docs/css/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
  320. data/docs/css/font-awesome/fonts/fontawesome-webfont.woff +0 -0
  321. data/docs/docs.md +0 -29
  322. data/docs/img/docs/cloudformation-resources.png +0 -0
  323. data/docs/img/logos/boltops-logo-full.png +0 -0
  324. data/docs/img/logos/boltops-logo.png +0 -0
  325. data/docs/img/logos/ufo-logo-2.png +0 -0
  326. data/docs/img/logos/ufo-logo.png +0 -0
  327. data/docs/img/logos/ufo-site-header.png +0 -0
  328. data/docs/img/logos/ufo.jpg +0 -0
  329. data/docs/img/tutorials/ecs-console-task-definitions.png +0 -0
  330. data/docs/img/tutorials/ecs-console-ufo-ship.png +0 -0
  331. data/docs/img/tutorials/ecs-console-ufo-ships.png +0 -0
  332. data/docs/index.html +0 -10
  333. data/docs/js/bootstrap.js +0 -2114
  334. data/docs/js/bootstrap.min.js +0 -6
  335. data/docs/js/cbpAnimatedHeader.js +0 -44
  336. data/docs/js/cbpAnimatedHeader.min.js +0 -11
  337. data/docs/js/classie.js +0 -80
  338. data/docs/js/contact_me.js +0 -70
  339. data/docs/js/contact_me_static.js +0 -23
  340. data/docs/js/freelancer.js +0 -37
  341. data/docs/js/jqBootstrapValidation.js +0 -912
  342. data/docs/js/jquery-1.11.0.js +0 -4
  343. data/docs/js/jquery.easing.min.js +0 -44
  344. data/docs/js/nav.js +0 -53
  345. data/docs/quick-start.md +0 -133
  346. data/docs/reference.md +0 -29
  347. data/docs/style.css +0 -3
  348. data/docs/utils/ssl-doctor.rb +0 -89
  349. data/docs/utils/test-aws-api-access.rb +0 -11
  350. data/docs/utils/update-cert-chains.sh +0 -11
  351. data/lib/template/.env +0 -3
  352. data/lib/template/.secrets +0 -5
  353. data/lib/template/.ufo/iam_roles/execution_role.rb +0 -7
  354. data/lib/template/.ufo/iam_roles/task_role.rb +0 -21
  355. data/lib/template/.ufo/params.yml.tt +0 -27
  356. data/lib/template/.ufo/settings/cfn/default.yml.tt +0 -72
  357. data/lib/template/.ufo/settings/network/default.yml.tt +0 -26
  358. data/lib/template/.ufo/settings.yml.tt +0 -26
  359. data/lib/template/.ufo/task_definitions.rb.tt +0 -61
  360. data/lib/template/.ufo/templates/fargate.json.erb +0 -39
  361. data/lib/template/.ufo/templates/main.json.erb +0 -43
  362. data/lib/template/.ufo/variables/base.rb.tt +0 -19
  363. data/lib/template/.ufo/variables/development.rb +0 -8
  364. data/lib/template/.ufo/variables/production.rb +0 -7
  365. data/lib/template/Dockerfile +0 -15
  366. data/lib/template/bin/deploy.tt +0 -7
  367. data/lib/ufo/apps/cfn_map.rb +0 -70
  368. data/lib/ufo/apps/cluster.rb +0 -24
  369. data/lib/ufo/apps/service.rb +0 -56
  370. data/lib/ufo/apps.rb +0 -56
  371. data/lib/ufo/aws_service.rb +0 -36
  372. data/lib/ufo/base.rb +0 -35
  373. data/lib/ufo/cancel.rb +0 -23
  374. data/lib/ufo/current.rb +0 -104
  375. data/lib/ufo/default/settings.yml +0 -24
  376. data/lib/ufo/default/templates/main.json.erb +0 -39
  377. data/lib/ufo/destroy.rb +0 -41
  378. data/lib/ufo/docker/variables.rb +0 -26
  379. data/lib/ufo/dsl/helper.rb +0 -79
  380. data/lib/ufo/dsl/outputter.rb +0 -43
  381. data/lib/ufo/dsl/task_definition.rb +0 -108
  382. data/lib/ufo/dsl.rb +0 -96
  383. data/lib/ufo/help/apps.md +0 -12
  384. data/lib/ufo/help/balancer.md +0 -3
  385. data/lib/ufo/help/completions.md +0 -16
  386. data/lib/ufo/help/completions_script.md +0 -1
  387. data/lib/ufo/help/current.md +0 -65
  388. data/lib/ufo/help/deploy.md +0 -38
  389. data/lib/ufo/help/destroy.md +0 -9
  390. data/lib/ufo/help/docker/base.md +0 -49
  391. data/lib/ufo/help/docker/name.md +0 -16
  392. data/lib/ufo/help/docker.md +0 -6
  393. data/lib/ufo/help/init.md +0 -91
  394. data/lib/ufo/help/network/init.md +0 -13
  395. data/lib/ufo/help/ps.md +0 -27
  396. data/lib/ufo/help/releases.md +0 -16
  397. data/lib/ufo/help/resources.md +0 -20
  398. data/lib/ufo/help/rollback.md +0 -35
  399. data/lib/ufo/help/scale.md +0 -26
  400. data/lib/ufo/help/ship.md +0 -95
  401. data/lib/ufo/help/ships.md +0 -35
  402. data/lib/ufo/help/stop.md +0 -7
  403. data/lib/ufo/help/task.md +0 -27
  404. data/lib/ufo/help/tasks/build.md +0 -158
  405. data/lib/ufo/help/tasks/register.md +0 -14
  406. data/lib/ufo/help/tasks.md +0 -7
  407. data/lib/ufo/help/upgrade/v3to4.md +0 -3
  408. data/lib/ufo/help.rb +0 -9
  409. data/lib/ufo/init.rb +0 -119
  410. data/lib/ufo/network/fetch.rb +0 -48
  411. data/lib/ufo/network/helper.rb +0 -23
  412. data/lib/ufo/network/init.rb +0 -26
  413. data/lib/ufo/network.rb +0 -21
  414. data/lib/ufo/ps.rb +0 -129
  415. data/lib/ufo/scale.rb +0 -28
  416. data/lib/ufo/setting/profile.rb +0 -39
  417. data/lib/ufo/setting/security_groups.rb +0 -22
  418. data/lib/ufo/setting.rb +0 -75
  419. data/lib/ufo/settings.rb +0 -20
  420. data/lib/ufo/ship.rb +0 -103
  421. data/lib/ufo/stack/builder/conditions.rb +0 -23
  422. data/lib/ufo/stack/builder/parameters.rb +0 -45
  423. data/lib/ufo/stack/builder/resources/base.rb +0 -4
  424. data/lib/ufo/stack/builder/resources/dns.rb +0 -17
  425. data/lib/ufo/stack/builder/resources/elb.rb +0 -45
  426. data/lib/ufo/stack/builder/resources/listener.rb +0 -42
  427. data/lib/ufo/stack/builder/resources/listener_ssl.rb +0 -16
  428. data/lib/ufo/stack/builder/resources/roles/base.rb +0 -22
  429. data/lib/ufo/stack/builder/resources/roles/execution_role.rb +0 -4
  430. data/lib/ufo/stack/builder/resources/roles/task_role.rb +0 -4
  431. data/lib/ufo/stack/builder/resources/security_group/base.rb +0 -4
  432. data/lib/ufo/stack/builder/resources.rb +0 -20
  433. data/lib/ufo/stack/builder.rb +0 -26
  434. data/lib/ufo/stack/context.rb +0 -253
  435. data/lib/ufo/stack/helper.rb +0 -48
  436. data/lib/ufo/stack/template_body.rb +0 -13
  437. data/lib/ufo/stack.rb +0 -213
  438. data/lib/ufo/status.rb +0 -56
  439. data/lib/ufo/stop.rb +0 -49
  440. data/lib/ufo/task.rb +0 -225
  441. data/lib/ufo/tasks/builder.rb +0 -40
  442. data/lib/ufo/tasks/register.rb +0 -90
  443. data/lib/ufo/template_scope.rb +0 -57
  444. data/lib/ufo/util.rb +0 -69
  445. data/spec/lib/apps_spec.rb +0 -20
  446. data/spec/lib/builder_spec.rb +0 -23
  447. data/spec/lib/cli_spec.rb +0 -73
  448. data/spec/lib/completion_spec.rb +0 -18
  449. data/spec/lib/ps_spec.rb +0 -14
  450. data/spec/lib/register_spec.rb +0 -49
  451. data/spec/lib/setting_spec.rb +0 -18
  452. data/spec/lib/ship_spec.rb +0 -46
  453. data/spec/lib/stack/status_spec.rb +0 -76
  454. data/spec/lib/stop_spec.rb +0 -13
  455. data/spec/lib/task_spec.rb +0 -54
@@ -1,253 +0,0 @@
1
- class Ufo::Stack
2
- class Context
3
- extend Memoist
4
- include Helper
5
- include Ufo::Settings
6
-
7
- attr_reader :stack_name
8
- def initialize(options)
9
- @options = options
10
- @task_definition = options[:task_definition]
11
- @service = options[:service]
12
- # no need to adjust @cluster or @stack_name because it was adjusted in Stack#initialize
13
- @cluster = options[:cluster].dup # Thor options are frozen, we thaw it because CustomProperties#substitute_variables does a sub!
14
- @stack_name = options[:stack_name]
15
-
16
- @stack = options[:stack]
17
- @new_stack = !@stack
18
- end
19
-
20
- def scope
21
- scope = Ufo::TemplateScope.new(Ufo::DSL::Helper.new, nil)
22
- # Add additional variable to scope for CloudFormation template.
23
- # Dirties the scope but needed.
24
- vars = {
25
- service: @service,
26
- cluster: @cluster,
27
- stack_name: @stack_name, # used in custom_properties
28
- container: container,
29
- # to reconstruct TaskDefinition in the CloudFormation template
30
- task_definition: @task_definition,
31
- rollback_definition_arn: @options[:rollback_definition_arn],
32
- # elb options remember that their 'state'
33
- create_elb: create_elb?, # helps set Ecs DependsOn
34
- elb_type: elb_type,
35
- subnet_mappings: subnet_mappings,
36
- create_route53: create_elb? && has_dns_name?,
37
- default_target_group_protocol: default_target_group_protocol,
38
- default_listener_protocol: default_listener_protocol,
39
- default_listener_ssl_protocol: default_listener_ssl_protocol,
40
- create_listener_ssl: create_listener_ssl?,
41
- }
42
-
43
- scope.assign_instance_variables(vars)
44
- scope
45
- end
46
- memoize :scope
47
-
48
- def has_dns_name?
49
- cfn.dig(:Dns, :Name) || cfn.dig(:dns, :name) # backwards compatiblity
50
- end
51
-
52
- def default_target_group_protocol
53
- return 'TCP' if elb_type == 'network'
54
- 'HTTP'
55
- end
56
-
57
- def default_listener_protocol
58
- port = cfn.dig(:Listener, :Port) || cfn.dig(:listener, :port) # backwards compatiblity
59
- if elb_type == 'network'
60
- port == 443 ? 'TLS' : 'TCP'
61
- else
62
- port == 443 ? 'HTTPS' : 'HTTP'
63
- end
64
- end
65
-
66
- def default_listener_ssl_protocol
67
- elb_type == 'network' ? 'TLS' : 'HTTPS'
68
- end
69
-
70
- # if the configuration is set to anything then enable it
71
- def create_listener_ssl?
72
- cfn.dig(:ListenerSsl, :Port) || cfn.dig(:listener_ssl, :port) # backwards compatiblity
73
- end
74
-
75
- def create_elb?
76
- create_elb, _ = elb_options
77
- create_elb == "true" # convert to boolean
78
- end
79
-
80
- # If --elb is not set at all and is nil, then it defaults to creating the load balancer if the ecs service has
81
- # a container name "web".
82
- #
83
- # --elb '' - will not crete an elb
84
- # --elb 'auto' - creates an elb
85
- # --elb arn:... - will not create elb and use the existing target group
86
- #
87
- def elb_options
88
- case @options[:elb]
89
- when "auto", "true", "yes"
90
- create_elb = "true"
91
- elb_target_group = ""
92
- when "false", "0", "no"
93
- create_elb = "false"
94
- elb_target_group = ""
95
- when /^arn:aws:elasticloadbalancing.*targetgroup/
96
- create_elb = "false"
97
- elb_target_group = @options[:elb]
98
- when "", nil
99
- create_elb, elb_target_group = default_elb_options
100
- else
101
- puts "Invalid --elb option provided: #{@options[:elb].inspect}".color(:red)
102
- puts "Exiting."
103
- exit 1
104
- end
105
- [create_elb, elb_target_group]
106
- end
107
-
108
- def default_elb_options
109
- # cannot use :use_previous_value because need to know the create_elb value to
110
- # compile a template with the right DependsOn for the Ecs service
111
- unless @new_stack
112
- create_elb = get_parameter_value(@stack, "CreateElb")
113
- elb_target_group = get_parameter_value(@stack, "ElbTargetGroup")
114
- return [create_elb, elb_target_group]
115
- end
116
-
117
- # default is to create the load balancer is if container name is web
118
- # and no --elb option is provided
119
- create_elb = container[:name] == "web" ? "true" : "false"
120
- elb_target_group = ""
121
- [create_elb, elb_target_group]
122
- end
123
-
124
- def container
125
- task_definition = Builder::Resources::TaskDefinition::Reconstructor.new(@task_definition, @options[:rollback]).reconstruct
126
-
127
- container_def = task_definition["ContainerDefinitions"].first
128
- requires_compatibilities = task_definition["RequiresCompatibilities"]
129
- fargate = requires_compatibilities && requires_compatibilities == ["FARGATE"]
130
- network_mode = task_definition["NetworkMode"]
131
-
132
- mappings = container_def["PortMappings"] || []
133
- unless mappings.empty?
134
- port = mappings.first["ContainerPort"]
135
- end
136
-
137
- result = {
138
- name: container_def["Name"],
139
- fargate: fargate,
140
- network_mode: network_mode, # awsvpc, bridge, etc
141
- }
142
- result[:port] = port if port
143
- result
144
- end
145
- memoize :container
146
-
147
- def get_parameter_value(stack, key)
148
- param = stack.parameters.find do |p|
149
- p.parameter_key == key
150
- end
151
- param.parameter_value if param
152
- end
153
-
154
- def scheduling_strategy
155
- unless @new_stack
156
- scheduling_strategy = get_parameter_value(@stack, "EcsSchedulingStrategy")
157
- end
158
- scheduling_strategy || 'REPLICA' # defaults to REPLICA
159
- end
160
-
161
- def reset_empty_eip_ids?
162
- # reset and remove eip allocation ids check
163
- @options[:elb_eip_ids] && @options[:elb_eip_ids].detect { |x| [' ', 'empty'].include?(x) }
164
- end
165
-
166
- def subnet_mappings
167
- return [] if reset_empty_eip_ids?
168
-
169
- elb_eip_ids = normalize_elb_eip_ids
170
- return build_subnet_mappings!(elb_eip_ids) unless elb_eip_ids.empty?
171
-
172
- unless @new_stack
173
- elb_eip_ids = get_parameter_value(@stack, "ElbEipIds").split(',')
174
- build_subnet_mappings(elb_eip_ids)
175
- end
176
- end
177
-
178
- def normalize_elb_eip_ids
179
- elb_eip_ids = @options[:elb_eip_ids] || []
180
- elb_eip_ids.uniq!
181
- elb_eip_ids
182
- end
183
-
184
- # Returns string, used as CloudFormation parameter.
185
- def elb_eip_ids
186
- return '' if reset_empty_eip_ids?
187
-
188
- elb_eip_ids = normalize_elb_eip_ids
189
- return elb_eip_ids.join(',') unless elb_eip_ids.empty?
190
-
191
- unless @new_stack
192
- return get_parameter_value(@stack, "ElbEipIds")
193
- end
194
-
195
- ''
196
- end
197
-
198
- def build_subnet_mappings!(allocations)
199
- unless allocations.size == network[:elb_subnets].size
200
- puts "ERROR: The allocation_ids must match in length to the subnets.".color(:red)
201
- puts "Please double check that .ufo/settings/network/#{settings.network_profile} has the same number of subnets as the eip allocation ids are you specifying."
202
- subnets = network[:elb_subnets]
203
- puts "Conigured subnets: #{subnets.inspect}"
204
- puts "Specified allocation ids: #{allocations.inspect}"
205
- exit 1
206
- end
207
-
208
- build_subnet_mappings(allocations)
209
- end
210
-
211
- def build_subnet_mappings(allocations)
212
- mappings = []
213
- allocations.sort.each_with_index do |allocation_id, i|
214
- mappings << [allocation_id, network[:elb_subnets][i]]
215
- end
216
- mappings
217
- end
218
-
219
- def elb_type
220
- # if option explicitly specified then change the elb type
221
- return @options[:elb_type] if @options[:elb_type]
222
- # user is trying to create a network load balancer if --elb-eip-ids is used
223
- elb_eip_ids = normalize_elb_eip_ids
224
- if !elb_eip_ids.empty?
225
- return "network"
226
- end
227
-
228
- # if not explicitly set, new stack will defeault to application load balancer
229
- if @new_stack # default for new stack
230
- return "application"
231
- end
232
-
233
- # find existing load balancer for type
234
- resp = cloudformation.describe_stack_resources(stack_name: @stack_name)
235
- resources = resp.stack_resources
236
- elb_resource = resources.find do |resource|
237
- resource.logical_resource_id == "Elb"
238
- end
239
-
240
- # In the case when stack exists and there is no elb resource, the elb type
241
- # doesnt really matter because the elb wont be created since the CreateElb
242
- # parameter is set to false. The elb type only needs to be set for the
243
- # template to validate.
244
- return "application" unless elb_resource
245
-
246
- resp = elb.describe_load_balancers(load_balancer_arns: [elb_resource.physical_resource_id])
247
- load_balancer = resp.load_balancers.first
248
- load_balancer.type
249
- end
250
- memoize :elb_type
251
-
252
- end
253
- end
@@ -1,48 +0,0 @@
1
- class Ufo::Stack
2
- module Helper
3
- include Ufo::AwsService
4
- include Ufo::Util
5
- include Ufo::Settings
6
- extend Memoist
7
-
8
- def find_stack(stack_name)
9
- resp = cloudformation.describe_stacks(stack_name: stack_name)
10
- resp.stacks.first
11
- rescue Aws::CloudFormation::Errors::ValidationError => e
12
- # example: Stack with id demo-web does not exist
13
- if e.message =~ /Stack with/ && e.message =~ /does not exist/
14
- nil
15
- else
16
- raise
17
- end
18
- end
19
-
20
- def adjust_stack_name(cluster, service)
21
- if settings[:stack_naming].nil?
22
- puts "WARN: In ufo v4.5 the UFO_ENV value gets appends to the end of the CloudFormation stack name. This means a new stack gets created. You must upgrade to using the new stack and delete the old stack manually. More info: https://ufoships.com/docs/upgrading/upgrade4.5/".color(:yellow)
23
- puts "To get rid of this warning you can add `stack_naming: append_ufo_env` to your `.ufo/settings.yml config. New versions of ufo init do this automatically."
24
- puts "Pausing for 20 seconds."
25
- sleep 20
26
- end
27
-
28
- parts = case settings[:stack_naming]
29
- when "prepend_cluster" # ufo v4.3 and below
30
- [cluster, service, Ufo.env_extra] # legacy
31
- when "append_env", "append_cluster" # ufo v4.5
32
- # append_env will be removed in the next major version in favor of append_cluster to avoid confusion with
33
- # append_ufo_env
34
- [service, cluster, Ufo.env_extra]
35
- when "append_nothing", "prepend_nothing"
36
- [service, Ufo.env_extra]
37
- else # new default. ufo v4.5 and above
38
- [service, Ufo.env.to_s, Ufo.env_extra]
39
- end
40
- parts.reject {|x| x==''}.compact.join('-') # stack_name
41
- end
42
-
43
- def status
44
- Status.new(@stack_name)
45
- end
46
- memoize :status
47
- end
48
- end
@@ -1,13 +0,0 @@
1
- class Ufo::Stack
2
- class TemplateBody
3
- def initialize(context)
4
- @context = context
5
- end
6
-
7
- def build
8
- builder = Builder.new(@context)
9
- builder.build
10
- end
11
- end
12
- end
13
-
data/lib/ufo/stack.rb DELETED
@@ -1,213 +0,0 @@
1
- # CloudFormation status codes, full list:
2
- # https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-describing-stacks.html
3
- #
4
- # CREATE_COMPLETE
5
- # ROLLBACK_COMPLETE
6
- # DELETE_COMPLETE
7
- # UPDATE_COMPLETE
8
- # UPDATE_ROLLBACK_COMPLETE
9
- #
10
- # CREATE_FAILED
11
- # DELETE_FAILED
12
- # ROLLBACK_FAILED
13
- # UPDATE_ROLLBACK_FAILED
14
- #
15
- # CREATE_IN_PROGRESS
16
- # DELETE_IN_PROGRESS
17
- # REVIEW_IN_PROGRESS
18
- # ROLLBACK_IN_PROGRESS
19
- # UPDATE_COMPLETE_CLEANUP_IN_PROGRESS
20
- # UPDATE_IN_PROGRESS
21
- # UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS
22
- # UPDATE_ROLLBACK_IN_PROGRESS
23
- #
24
- module Ufo
25
- class Stack
26
- extend Memoist
27
- include Helper
28
- include Ufo::Settings
29
-
30
- def initialize(options)
31
- @options = options
32
- @task_definition = options[:task_definition]
33
- @rollback = options[:rollback]
34
- @service = options[:service]
35
- @cluster = @options[:cluster] || default_cluster(@service)
36
- @stack_name = adjust_stack_name(@cluster, options[:service])
37
- end
38
-
39
- def deploy
40
- @stack = find_stack(@stack_name)
41
- if @stack && rollback_complete?(@stack)
42
- puts "Existing stack in ROLLBACK_COMPLETE state. Deleting stack before continuing."
43
- cloudformation.delete_stack(stack_name: @stack_name)
44
- status.wait
45
- status.reset
46
- @stack = nil # at this point stack has been deleted
47
- end
48
-
49
- exit_with_message(@stack) if @stack && !updatable?(@stack)
50
-
51
- @stack ? perform(:update) : perform(:create)
52
-
53
- stop_old_tasks if @options[:stop_old_task]
54
-
55
- return unless @options[:wait]
56
- status.wait
57
-
58
- puts status.rollback_error_message if status.update_rollback?
59
-
60
- status.success?
61
- end
62
-
63
- def perform(action)
64
- puts "#{action[0..-2].capitalize}ing stack #{@stack_name.color(:green)}..."
65
- # Example: cloudformation.send("update_stack", stack_options)
66
- cloudformation.send("#{action}_stack", stack_options)
67
- rescue Aws::CloudFormation::Errors::ValidationError => e
68
- handle_stack_error(e)
69
- end
70
-
71
- def stack_options
72
- save_template
73
- if ENV['SAVE_TEMPLATE_EXIT']
74
- puts "Template saved. Exiting."
75
- exit 1
76
- end
77
- {
78
- capabilities: ["CAPABILITY_IAM"],
79
- notification_arns: notification_arns,
80
- parameters: parameters,
81
- stack_name: @stack_name,
82
- template_body: template_body,
83
- }
84
- end
85
-
86
- def notification_arns
87
- settings[:notification_arns] || []
88
- end
89
-
90
- def parameters
91
- create_elb, elb_target_group = context.elb_options
92
-
93
- elb_subnets = network[:elb_subnets] && !network[:elb_subnets].empty? ?
94
- network[:elb_subnets] :
95
- network[:ecs_subnets]
96
-
97
- params = {
98
- Vpc: network[:vpc],
99
- ElbSubnets: elb_subnets.join(','),
100
- EcsSubnets: network[:ecs_subnets].join(','),
101
-
102
- CreateElb: create_elb,
103
- ElbTargetGroup: elb_target_group,
104
- ElbEipIds: context.elb_eip_ids,
105
-
106
- EcsDesiredCount: current_desired_count,
107
- EcsSchedulingStrategy: scheduling_strategy,
108
- }
109
-
110
- params = Ufo::Utils::Squeezer.new(params).squeeze
111
- params.map do |k,v|
112
- if v == :use_previous_value
113
- { parameter_key: k, use_previous_value: true }
114
- else
115
- { parameter_key: k, parameter_value: v }
116
- end
117
- end
118
- end
119
- memoize :parameters
120
-
121
- # do not memoize template_body it can change for a rename retry
122
- def template_body
123
- TemplateBody.new(context).build
124
- end
125
- memoize :template_body
126
-
127
- def context
128
- o = @options.merge(
129
- cluster: @cluster,
130
- stack_name: @stack_name,
131
- stack: @stack,
132
- )
133
- o[:rollback_definition_arn] = rollback_definition_arn if rollback_definition_arn
134
- Context.new(o)
135
- end
136
- memoize :context
137
-
138
- def scheduling_strategy
139
- strategy = @options[:scheduling_strategy] || context.scheduling_strategy
140
- strategy.upcase
141
- end
142
-
143
- def current_desired_count
144
- # Cannot set ECS desired count when is scheduling_strategy DAEMON
145
- return '' if scheduling_strategy == "DAEMON"
146
-
147
- info = Info.new(@service, @options)
148
- service = info.service
149
- if service
150
- service.desired_count.to_s
151
- else
152
- "1" # new service default
153
- end
154
- end
155
-
156
- def rollback_definition_arn
157
- return unless @rollback
158
- resp = ecs.describe_task_definition(task_definition: @task_definition)
159
- resp.task_definition.task_definition_arn
160
- end
161
- memoize :rollback_definition_arn
162
-
163
- # Store template in tmp in case for debugging
164
- def save_template
165
- path = "/tmp/ufo/#{@stack_name}/stack.yml"
166
- FileUtils.mkdir_p(File.dirname(path))
167
- IO.write(path, template_body)
168
- puts "Generated template saved at: #{path}"
169
-
170
- path = "/tmp/ufo/#{@stack_name}/parameters.yml"
171
- IO.write(path, JSON.pretty_generate(parameters))
172
- puts "Generated parameters saved at: #{path}"
173
- end
174
-
175
- def exit_with_message(stack)
176
- region = `aws configure get region`.strip rescue "us-east-1"
177
- url = "https://console.aws.amazon.com/cloudformation/home?region=#{region}#/stacks"
178
- puts "The stack is not in an updateable state: #{stack.stack_status.color(:yellow)}."
179
- puts "Here's the CloudFormation url to check for more details #{url}"
180
- exit 1
181
- end
182
-
183
- # Assume only first container_definition to get the container info.
184
- # Stack:arn:aws:cloudformation:... is in ROLLBACK_COMPLETE state and can not be updated.
185
- def handle_stack_error(e)
186
- case e.message
187
- when /state and can not be updated/
188
- puts "The #{@stack_name} stack is in a state that cannot be updated. Deleted the stack and try again."
189
- puts "ERROR: #{e.message}"
190
- if message.include?('UPDATE_ROLLBACK_FAILED')
191
- puts "You might be able to do a 'Continue Update Rollback' and skip some resources to get the stack back into a good state."
192
- end
193
- region = `aws configure get region`.strip rescue 'us-east-1'
194
- url = "https://console.aws.amazon.com/cloudformation/home?region=#{region}"
195
- puts "Here's the CloudFormation console url: #{url}"
196
- exit 1
197
- when /No updates are to be performed/
198
- puts "There are no updates to be performed. Exiting.".color(:yellow)
199
- exit 1
200
- else
201
- raise
202
- end
203
- end
204
-
205
- def rollback_complete?(stack)
206
- stack.stack_status == 'ROLLBACK_COMPLETE'
207
- end
208
-
209
- def updatable?(stack)
210
- stack.stack_status =~ /_COMPLETE$/ || stack.stack_status == 'UPDATE_ROLLBACK_FAILED'
211
- end
212
- end
213
- end
data/lib/ufo/status.rb DELETED
@@ -1,56 +0,0 @@
1
- module Ufo
2
- class Status < Base
3
- # used for the ufo status command
4
- def run
5
- unless stack_exists?(@stack_name)
6
- puts "The stack #{@stack_name.color(:green)} does not exist."
7
- return
8
- end
9
-
10
- resp = cloudformation.describe_stacks(stack_name: @stack_name)
11
- stack = resp.stacks.first
12
-
13
- puts "The current status for the stack #{@stack_name.color(:green)} is #{stack.stack_status.color(:green)}"
14
-
15
- status_poller = Stack::Status.new(@stack_name)
16
-
17
- if stack.stack_status =~ /_IN_PROGRESS$/
18
- puts "Stack events (tailing):"
19
- # tail all events until done
20
- status_poller.hide_time_took = true
21
- status_poller.wait
22
- else
23
- puts "Stack events:"
24
- # show the last events that was user initiated
25
- status_poller.refresh_events
26
- status_poller.show_events(true)
27
- end
28
- end
29
-
30
- def stack_exists?(stack_name)
31
- return true if ENV['TEST']
32
- return false if @options[:noop]
33
-
34
- exist = nil
35
- begin
36
- # When the stack does not exist an exception is raised. Example:
37
- # Aws::CloudFormation::Errors::ValidationError: Stack with id blah does not exist
38
- resp = cloudformation.describe_stacks(stack_name: stack_name)
39
- exist = true
40
- rescue Aws::CloudFormation::Errors::ValidationError => e
41
- if e.message =~ /does not exist/
42
- exist = false
43
- elsif e.message.include?("'stackName' failed to satisfy constraint")
44
- # Example of e.message when describe_stack with invalid stack name
45
- # "1 validation error detected: Value 'instance_and_route53' at 'stackName' failed to satisfy constraint: Member must satisfy regular expression pattern: [a-zA-Z][-a-zA-Z0-9]*|arn:[-a-zA-Z0-9:/._+]*"
46
- puts "Invalid stack name: #{stack_name}"
47
- puts "Full error message: #{e.message}"
48
- exit 1
49
- else
50
- raise # re-raise exception because unsure what other errors can happen
51
- end
52
- end
53
- exist
54
- end
55
- end
56
- end
data/lib/ufo/stop.rb DELETED
@@ -1,49 +0,0 @@
1
- module Ufo
2
- class Stop < Base
3
- def run
4
- info = Info.new(@service, @options)
5
- service = info.service
6
- return unless service # brand new deploy
7
-
8
- @deployments = service.deployments
9
- if @deployments.size > 1
10
- stop_old_tasks(service.service_name)
11
- end
12
- end
13
-
14
- def stop_old_tasks(service_name)
15
- # json = JSON.pretty_generate(deployments.map(&:to_h))
16
- # IO.write("/tmp/deployments.json", json)
17
- tasks = service_tasks(@cluster, service_name)
18
- reason = "Ufo #{Ufo::VERSION} has deployed new code and stopping old tasks."
19
- tasks.each do |task|
20
- next if task["task_definition_arn"] == latest_deployed_arn
21
- log "Stopping task #{task["task_arn"]}"
22
- ecs.stop_task(cluster: @cluster, task: task["task_arn"], reason: reason)
23
- end
24
- end
25
-
26
- # latest deployment task definition arn
27
- def latest_deployed_arn
28
- latest = @deployments.sort_by do |deployment|
29
- Time.parse(deployment["created_at"].to_s)
30
- end.last
31
- latest["task_definition"]
32
- end
33
-
34
- def service_tasks(cluster, service_name)
35
- all_task_arns = ecs.list_tasks(cluster: cluster, service_name: service_name).task_arns
36
- return [] if all_task_arns.empty?
37
- ecs.describe_tasks(cluster: cluster, tasks: all_task_arns).tasks
38
- end
39
-
40
- def log(text)
41
- path = "#{Ufo.root}/.ufo/log/stop.log"
42
- FileUtils.mkdir_p(File.dirname(path))
43
- File.open(path, 'a') do |f|
44
- f.puts("#{Time.now} #{text}")
45
- end
46
- puts text unless @options[:mute]
47
- end
48
- end
49
- end