ufo 5.0.7 → 6.0.0

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 (457) 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 +4 -1
  11. data/Gemfile +0 -2
  12. data/README.md +1 -32
  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 +12 -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 +244 -341
  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 -5
  179. data/docs/CNAME +0 -1
  180. data/docs/Gemfile +0 -4
  181. data/docs/LICENSE +0 -21
  182. data/docs/README.md +0 -20
  183. data/docs/_config.yml +0 -75
  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/banner/foot.html +0 -2
  239. data/docs/_includes/banner/head.html +0 -5
  240. data/docs/_includes/cfn-customize.md +0 -53
  241. data/docs/_includes/commands.html +0 -80
  242. data/docs/_includes/contact.html +0 -17
  243. data/docs/_includes/contact_disqus.html +0 -16
  244. data/docs/_includes/contact_static.html +0 -17
  245. data/docs/_includes/content.html +0 -26
  246. data/docs/_includes/css/bootstrap.min.css +0 -7
  247. data/docs/_includes/css/main.css +0 -501
  248. data/docs/_includes/css/quotes.css +0 -102
  249. data/docs/_includes/css/syntax.css +0 -65
  250. data/docs/_includes/css/table.css +0 -53
  251. data/docs/_includes/css/timeline.css +0 -201
  252. data/docs/_includes/css/ufo.css +0 -218
  253. data/docs/_includes/edit-on-github.html +0 -11
  254. data/docs/_includes/example.html +0 -63
  255. data/docs/_includes/footer.html +0 -44
  256. data/docs/_includes/google_analytics.html +0 -10
  257. data/docs/_includes/head.html +0 -32
  258. data/docs/_includes/header.html +0 -15
  259. data/docs/_includes/js.html +0 -32
  260. data/docs/_includes/js_disqus.html +0 -21
  261. data/docs/_includes/modals.html +0 -40
  262. data/docs/_includes/nav.html +0 -27
  263. data/docs/_includes/prev_next.md +0 -19
  264. data/docs/_includes/quotes.html +0 -19
  265. data/docs/_includes/reference.md +0 -5
  266. data/docs/_includes/repo_push_access.md +0 -11
  267. data/docs/_includes/subnav.html +0 -78
  268. data/docs/_includes/summary.html +0 -22
  269. data/docs/_includes/ufo-ship-options.md +0 -12
  270. data/docs/_includes/uses.html +0 -19
  271. data/docs/_layouts/default.html +0 -13
  272. data/docs/_layouts/style.css +0 -6
  273. data/docs/_reference/ufo-apps.md +0 -37
  274. data/docs/_reference/ufo-cancel.md +0 -24
  275. data/docs/_reference/ufo-completion.md +0 -46
  276. data/docs/_reference/ufo-completion_script.md +0 -27
  277. data/docs/_reference/ufo-current.md +0 -93
  278. data/docs/_reference/ufo-deploy.md +0 -76
  279. data/docs/_reference/ufo-destroy.md +0 -36
  280. data/docs/_reference/ufo-docker-base.md +0 -71
  281. data/docs/_reference/ufo-docker-build.md +0 -91
  282. data/docs/_reference/ufo-docker-clean.md +0 -44
  283. data/docs/_reference/ufo-docker-compile.md +0 -19
  284. data/docs/_reference/ufo-docker-help.md +0 -15
  285. data/docs/_reference/ufo-docker-name.md +0 -37
  286. data/docs/_reference/ufo-docker-push.md +0 -49
  287. data/docs/_reference/ufo-docker.md +0 -38
  288. data/docs/_reference/ufo-init.md +0 -125
  289. data/docs/_reference/ufo-logs.md +0 -40
  290. data/docs/_reference/ufo-network-help.md +0 -15
  291. data/docs/_reference/ufo-network-init.md +0 -39
  292. data/docs/_reference/ufo-network.md +0 -26
  293. data/docs/_reference/ufo-ps.md +0 -56
  294. data/docs/_reference/ufo-releases.md +0 -40
  295. data/docs/_reference/ufo-resources.md +0 -44
  296. data/docs/_reference/ufo-rollback.md +0 -61
  297. data/docs/_reference/ufo-scale.md +0 -50
  298. data/docs/_reference/ufo-ship.md +0 -129
  299. data/docs/_reference/ufo-ships.md +0 -68
  300. data/docs/_reference/ufo-status.md +0 -23
  301. data/docs/_reference/ufo-stop.md +0 -31
  302. data/docs/_reference/ufo-task.md +0 -56
  303. data/docs/_reference/ufo-tasks-build.md +0 -178
  304. data/docs/_reference/ufo-tasks-help.md +0 -15
  305. data/docs/_reference/ufo-tasks-register.md +0 -29
  306. data/docs/_reference/ufo-tasks.md +0 -35
  307. data/docs/_reference/ufo-upgrade-help.md +0 -15
  308. data/docs/_reference/ufo-upgrade-v2to3.md +0 -15
  309. data/docs/_reference/ufo-upgrade-v33to34.md +0 -15
  310. data/docs/_reference/ufo-upgrade-v3to4.md +0 -27
  311. data/docs/_reference/ufo-upgrade-v43to45.md +0 -15
  312. data/docs/_reference/ufo-upgrade.md +0 -29
  313. data/docs/_reference/ufo-version.md +0 -23
  314. data/docs/articles.md +0 -14
  315. data/docs/bin/web +0 -4
  316. data/docs/css/font-awesome/css/font-awesome.css +0 -1566
  317. data/docs/css/font-awesome/css/font-awesome.min.css +0 -4
  318. data/docs/css/font-awesome/fonts/FontAwesome.otf +0 -0
  319. data/docs/css/font-awesome/fonts/fontawesome-webfont.eot +0 -0
  320. data/docs/css/font-awesome/fonts/fontawesome-webfont.svg +0 -504
  321. data/docs/css/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
  322. data/docs/css/font-awesome/fonts/fontawesome-webfont.woff +0 -0
  323. data/docs/docs.md +0 -29
  324. data/docs/img/docs/cloudformation-resources.png +0 -0
  325. data/docs/img/logos/boltops-logo-full.png +0 -0
  326. data/docs/img/logos/boltops-logo.png +0 -0
  327. data/docs/img/logos/ufo-logo-2.png +0 -0
  328. data/docs/img/logos/ufo-logo.png +0 -0
  329. data/docs/img/logos/ufo-site-header.png +0 -0
  330. data/docs/img/logos/ufo.jpg +0 -0
  331. data/docs/img/tutorials/ecs-console-task-definitions.png +0 -0
  332. data/docs/img/tutorials/ecs-console-ufo-ship.png +0 -0
  333. data/docs/img/tutorials/ecs-console-ufo-ships.png +0 -0
  334. data/docs/index.html +0 -10
  335. data/docs/js/bootstrap.js +0 -2114
  336. data/docs/js/bootstrap.min.js +0 -6
  337. data/docs/js/cbpAnimatedHeader.js +0 -44
  338. data/docs/js/cbpAnimatedHeader.min.js +0 -11
  339. data/docs/js/classie.js +0 -80
  340. data/docs/js/contact_me.js +0 -70
  341. data/docs/js/contact_me_static.js +0 -23
  342. data/docs/js/freelancer.js +0 -37
  343. data/docs/js/jqBootstrapValidation.js +0 -912
  344. data/docs/js/jquery-1.11.0.js +0 -4
  345. data/docs/js/jquery.easing.min.js +0 -44
  346. data/docs/js/nav.js +0 -53
  347. data/docs/quick-start.md +0 -133
  348. data/docs/reference.md +0 -29
  349. data/docs/style.css +0 -3
  350. data/docs/utils/ssl-doctor.rb +0 -89
  351. data/docs/utils/test-aws-api-access.rb +0 -11
  352. data/docs/utils/update-cert-chains.sh +0 -11
  353. data/lib/template/.env +0 -3
  354. data/lib/template/.secrets +0 -5
  355. data/lib/template/.ufo/iam_roles/execution_role.rb +0 -7
  356. data/lib/template/.ufo/iam_roles/task_role.rb +0 -21
  357. data/lib/template/.ufo/params.yml.tt +0 -27
  358. data/lib/template/.ufo/settings/cfn/default.yml.tt +0 -72
  359. data/lib/template/.ufo/settings/network/default.yml.tt +0 -26
  360. data/lib/template/.ufo/settings.yml.tt +0 -26
  361. data/lib/template/.ufo/task_definitions.rb.tt +0 -61
  362. data/lib/template/.ufo/templates/fargate.json.erb +0 -39
  363. data/lib/template/.ufo/templates/main.json.erb +0 -43
  364. data/lib/template/.ufo/variables/base.rb.tt +0 -19
  365. data/lib/template/.ufo/variables/development.rb +0 -8
  366. data/lib/template/.ufo/variables/production.rb +0 -7
  367. data/lib/template/Dockerfile +0 -15
  368. data/lib/template/bin/deploy.tt +0 -7
  369. data/lib/ufo/apps/cfn_map.rb +0 -70
  370. data/lib/ufo/apps/cluster.rb +0 -24
  371. data/lib/ufo/apps/service.rb +0 -56
  372. data/lib/ufo/apps.rb +0 -56
  373. data/lib/ufo/aws_service.rb +0 -36
  374. data/lib/ufo/base.rb +0 -35
  375. data/lib/ufo/cancel.rb +0 -23
  376. data/lib/ufo/current.rb +0 -104
  377. data/lib/ufo/default/settings.yml +0 -24
  378. data/lib/ufo/default/templates/main.json.erb +0 -39
  379. data/lib/ufo/destroy.rb +0 -41
  380. data/lib/ufo/docker/variables.rb +0 -26
  381. data/lib/ufo/dsl/helper.rb +0 -79
  382. data/lib/ufo/dsl/outputter.rb +0 -43
  383. data/lib/ufo/dsl/task_definition.rb +0 -108
  384. data/lib/ufo/dsl.rb +0 -96
  385. data/lib/ufo/help/apps.md +0 -12
  386. data/lib/ufo/help/balancer.md +0 -3
  387. data/lib/ufo/help/completions.md +0 -16
  388. data/lib/ufo/help/completions_script.md +0 -1
  389. data/lib/ufo/help/current.md +0 -65
  390. data/lib/ufo/help/deploy.md +0 -38
  391. data/lib/ufo/help/destroy.md +0 -9
  392. data/lib/ufo/help/docker/base.md +0 -49
  393. data/lib/ufo/help/docker/name.md +0 -16
  394. data/lib/ufo/help/docker.md +0 -6
  395. data/lib/ufo/help/init.md +0 -91
  396. data/lib/ufo/help/network/init.md +0 -13
  397. data/lib/ufo/help/ps.md +0 -27
  398. data/lib/ufo/help/releases.md +0 -16
  399. data/lib/ufo/help/resources.md +0 -20
  400. data/lib/ufo/help/rollback.md +0 -35
  401. data/lib/ufo/help/scale.md +0 -26
  402. data/lib/ufo/help/ship.md +0 -95
  403. data/lib/ufo/help/ships.md +0 -35
  404. data/lib/ufo/help/stop.md +0 -7
  405. data/lib/ufo/help/task.md +0 -27
  406. data/lib/ufo/help/tasks/build.md +0 -158
  407. data/lib/ufo/help/tasks/register.md +0 -14
  408. data/lib/ufo/help/tasks.md +0 -7
  409. data/lib/ufo/help/upgrade/v3to4.md +0 -3
  410. data/lib/ufo/help.rb +0 -9
  411. data/lib/ufo/init.rb +0 -119
  412. data/lib/ufo/network/fetch.rb +0 -48
  413. data/lib/ufo/network/helper.rb +0 -23
  414. data/lib/ufo/network/init.rb +0 -26
  415. data/lib/ufo/network.rb +0 -21
  416. data/lib/ufo/ps.rb +0 -129
  417. data/lib/ufo/scale.rb +0 -28
  418. data/lib/ufo/setting/profile.rb +0 -44
  419. data/lib/ufo/setting/security_groups.rb +0 -22
  420. data/lib/ufo/setting.rb +0 -75
  421. data/lib/ufo/settings.rb +0 -20
  422. data/lib/ufo/ship.rb +0 -103
  423. data/lib/ufo/stack/builder/conditions.rb +0 -23
  424. data/lib/ufo/stack/builder/parameters.rb +0 -45
  425. data/lib/ufo/stack/builder/resources/base.rb +0 -4
  426. data/lib/ufo/stack/builder/resources/dns.rb +0 -17
  427. data/lib/ufo/stack/builder/resources/elb.rb +0 -45
  428. data/lib/ufo/stack/builder/resources/listener.rb +0 -42
  429. data/lib/ufo/stack/builder/resources/listener_ssl.rb +0 -16
  430. data/lib/ufo/stack/builder/resources/roles/base.rb +0 -22
  431. data/lib/ufo/stack/builder/resources/roles/execution_role.rb +0 -4
  432. data/lib/ufo/stack/builder/resources/roles/task_role.rb +0 -4
  433. data/lib/ufo/stack/builder/resources/security_group/base.rb +0 -4
  434. data/lib/ufo/stack/builder/resources.rb +0 -20
  435. data/lib/ufo/stack/builder.rb +0 -26
  436. data/lib/ufo/stack/context.rb +0 -253
  437. data/lib/ufo/stack/helper.rb +0 -55
  438. data/lib/ufo/stack/template_body.rb +0 -13
  439. data/lib/ufo/stack.rb +0 -213
  440. data/lib/ufo/status.rb +0 -56
  441. data/lib/ufo/stop.rb +0 -49
  442. data/lib/ufo/task.rb +0 -225
  443. data/lib/ufo/tasks/builder.rb +0 -40
  444. data/lib/ufo/tasks/register.rb +0 -90
  445. data/lib/ufo/template_scope.rb +0 -57
  446. data/lib/ufo/util.rb +0 -69
  447. data/spec/lib/apps_spec.rb +0 -20
  448. data/spec/lib/builder_spec.rb +0 -23
  449. data/spec/lib/cli_spec.rb +0 -73
  450. data/spec/lib/completion_spec.rb +0 -18
  451. data/spec/lib/ps_spec.rb +0 -14
  452. data/spec/lib/register_spec.rb +0 -49
  453. data/spec/lib/setting_spec.rb +0 -18
  454. data/spec/lib/ship_spec.rb +0 -46
  455. data/spec/lib/stack/status_spec.rb +0 -76
  456. data/spec/lib/stop_spec.rb +0 -13
  457. data/spec/lib/task_spec.rb +0 -54
@@ -0,0 +1,76 @@
1
+ class Ufo::CLI
2
+ class Scale < Base
3
+ delegate :service, :service?, :stack_resources, to: :info
4
+
5
+ def initialize(options={})
6
+ super
7
+ @desired = options[:desired]
8
+ @min = options[:min]
9
+ @max = options[:max]
10
+ end
11
+
12
+ def update
13
+ unless service?
14
+ logger.error "ERROR: Unable to find the #{service}.".color(:red)
15
+ logger.error "Are you sure you are trying to scale the right app?"
16
+ exit 1
17
+ end
18
+
19
+ unless @desired || @min || @max
20
+ logger.info <<~EOL
21
+ No --desired --min or --max options provided
22
+ Not taking any actions
23
+ EOL
24
+ return
25
+ end
26
+
27
+ logger.info "Configuring scaling settings for #{@stack_name}"
28
+ set_desired_count
29
+ set_autoscaling
30
+ warning
31
+ end
32
+
33
+ def set_desired_count
34
+ return unless @desired
35
+ ecs.update_service(
36
+ service: service.service_name,
37
+ cluster: @cluster,
38
+ desired_count: @desired
39
+ )
40
+ logger.info "Configured desired count to #{@desired}"
41
+ end
42
+
43
+ def set_autoscaling
44
+ return unless @min || @max
45
+ scalable_target = stack_resources.find do |r|
46
+ r.logical_resource_id == "ScalingTarget"
47
+ end
48
+ # service/dev/app1-web-dev-EcsService-Q0XkN6VtxGWv|ecs:service:DesiredCount|ecs
49
+ resource_id, scalable_dimension, service_namespace = scalable_target.physical_resource_id.split('|')
50
+ applicationautoscaling.register_scalable_target(
51
+ max_capacity: @max,
52
+ min_capacity: @min,
53
+ resource_id: resource_id,
54
+ scalable_dimension: scalable_dimension,
55
+ service_namespace: service_namespace,
56
+ )
57
+ logger.info "Configured autoscaling to min: #{@min} max: #{@max}"
58
+ end
59
+
60
+ def warning
61
+ return unless Ufo.config.scale.warning
62
+ logger.info <<~EOL
63
+ Note: The settings are temporary.
64
+ They can be overwritten in the next `ufo ship` deploy.
65
+ To make the settings permanent update your ufo config.
66
+
67
+ See: https://ufoships.com/docs/config/
68
+
69
+ You can also turn off this warning with
70
+
71
+ config.scaling.warning = false
72
+
73
+ EOL
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,28 @@
1
+ class Ufo::CLI
2
+ class Ship < Base
3
+ include Ufo::Concerns
4
+
5
+ def run
6
+ are_you_sure?
7
+ build_task_definition
8
+ deploy.run
9
+ ps.run
10
+ end
11
+
12
+ def build_task_definition
13
+ return if @options[:rollback]
14
+ build.docker
15
+ build.task_definition
16
+ end
17
+
18
+ private
19
+ def are_you_sure?
20
+ message = "Will deploy stack #{@stack_name.color(:green)}"
21
+ if @options[:yes]
22
+ logger.info message
23
+ else
24
+ sure?(message)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,8 @@
1
+ class Ufo::CLI
2
+ class Status < Base
3
+ def run
4
+ stack = Ufo::Cfn::Stack.new(@options)
5
+ stack.status.wait
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,49 @@
1
+ class Ufo::CLI
2
+ class Stop < Base
3
+ def run
4
+ service = info.service
5
+ return unless service # brand new deploy
6
+
7
+ @deployments = service.deployments
8
+ if @deployments.size >= 1
9
+ stop(service.service_name)
10
+ end
11
+ end
12
+
13
+ def stop(service_name)
14
+ tasks = service_tasks(service_name)
15
+ show(tasks, preview: true) unless @options[:yes]
16
+ sure?
17
+ tasks.each do |task|
18
+ if @options[:stop_old_tasks]
19
+ next if task["task_definition_arn"] == latest_deployed_arn
20
+ end
21
+ logger.debug "stop task #{task["task_arn"]}"
22
+ meth = "stop_task"
23
+ ecs.stop_task(cluster: @cluster, task: task["task_arn"], reason: "stop by ufo")
24
+ end
25
+ logger.info "Stopping tasks"
26
+ show(tasks, preview: false) if @options[:yes]
27
+ end
28
+
29
+ def show(tasks, preview: true)
30
+ logger.info "Will stop the following tasks:" if preview
31
+ ps = Ps.new(@options)
32
+ ps.display_tasks(tasks)
33
+ end
34
+
35
+ # latest deployment task definition arn
36
+ def latest_deployed_arn
37
+ latest = @deployments.sort_by do |deployment|
38
+ Time.parse(deployment["created_at"].to_s)
39
+ end.last
40
+ latest["task_definition"]
41
+ end
42
+
43
+ def service_tasks(service_name)
44
+ all_task_arns = ecs.list_tasks(cluster: @cluster, service_name: service_name).task_arns
45
+ return [] if all_task_arns.empty?
46
+ ecs.describe_tasks(cluster: @cluster, tasks: all_task_arns).tasks
47
+ end
48
+ end
49
+ end
@@ -1,5 +1,5 @@
1
- module Ufo
2
- class Tasks < Command
1
+ class Ufo::CLI
2
+ class Tasks < Ufo::Command
3
3
  desc "build", "Build task definitions."
4
4
  long_desc Help.text("tasks:build")
5
5
  option :image_override, desc: "Override image in task definition for quick testing"
@@ -1,5 +1,5 @@
1
- module Ufo
2
- class Upgrade < Command
1
+ class Ufo::CLI
2
+ class Upgrade < Ufo::Command
3
3
  desc "v2to3", "Upgrade from version 2 to 3."
4
4
  def v2to3
5
5
  Upgrade3.new(options).run
data/lib/ufo/cli.rb CHANGED
@@ -3,199 +3,123 @@ require 'ufo/command'
3
3
 
4
4
  module Ufo
5
5
  class CLI < Command
6
- class_option :verbose, type: :boolean
7
- class_option :mute, type: :boolean
8
- class_option :noop, type: :boolean
9
- class_option :cluster, desc: "Cluster. Overrides .ufo/settings.yml."
6
+ include Help
7
+ opts = Opts.new(self)
10
8
 
11
- desc "network SUBCOMMAND", "network subcommands"
12
- long_desc Help.text(:network)
13
- subcommand "network", Network
9
+ desc "central SUBCOMMAND", "central subcommands"
10
+ long_desc Help.text(:central)
11
+ subcommand "central", Central
14
12
 
15
13
  desc "docker SUBCOMMAND", "docker subcommands"
16
14
  long_desc Help.text(:docker)
17
15
  subcommand "docker", Docker
18
16
 
19
- desc "tasks SUBCOMMAND", "task definition subcommands"
20
- long_desc Help.text(:tasks)
21
- subcommand "tasks", Tasks
22
-
23
- desc "upgrade SUBCOMMAND", "upgrade subcommands"
24
- long_desc Help.text(:upgrade)
25
- subcommand "upgrade", Upgrade
26
-
27
- long_desc Help.text(:init)
28
- Init.cli_options.each do |args|
29
- option(*args)
30
- end
31
- register(Init, "init", "init", "Set up initial ufo files.")
32
-
33
- # common options to deploy. ship, and ships command
34
- ship_options = Proc.new do
35
- # All elb options remember their 'state'
36
- option :ecr_keep, type: :numeric, desc: "ECR specific cleanup of old images. Specifies how many images to keep. Only runs if the images are ECR images. Defaults keeps all images."
37
- option :elb, desc: "Decides to create elb, not create elb or use existing target group."
38
- option :elb_eip_ids, type: :array, desc: "EIP Allocation ids to use for network load balancer."
39
- option :elb_type, desc: "ELB type: application or network. Keep current deployed elb type when not specified."
40
- option :scheduling_strategy, desc: "Scheduling strategy to use for the service. IE: replica, daemon"
41
- option :stop_old_tasks, type: :boolean, default: false, desc: "Stop old tasks as part of deployment to speed it up"
42
- option :task, desc: "ECS task name, to override the task name convention."
43
- option :wait, type: :boolean, desc: "Wait for deployment to complete", default: true
44
- option :image_override, desc: "Override image in task definition for quick testing"
45
- end
46
-
47
- desc "deploy SERVICE", "Deploy task definition to ECS service without re-building the definition."
48
- long_desc Help.text(:deploy)
49
- ship_options.call
50
- option :register, type: :boolean, desc: "Register task definition", default: true
51
- option :build, type: :boolean, desc: "Build task definition", default: true
52
- def deploy(service=:current)
53
- service = service == :current ? Current.service! : service
54
- task_definition = options[:task] || service # convention
55
- Tasks::Builder.build(options) if options[:build]
56
- Tasks::Register.register(task_definition, options) if options[:register]
57
- ship = Ship.new(service, options.merge(task_definition: task_definition))
58
- ship.deploy
59
- end
60
-
61
- desc "ship SERVICE", "Builds and ships container image to the ECS service."
62
- long_desc Help.text(:ship)
63
- ship_options.call
64
- def ship(service=:current)
65
- service = service == :current ? Current.service! : service
66
- builder = build_docker
67
-
68
- task_definition = options[:task] || service # convention
69
- Tasks::Builder.ship(task_definition, options)
70
- ship = Ship.new(service, options.merge(task_definition: task_definition))
71
- ship.deploy
17
+ desc "new SUBCOMMAND", "new subcommands"
18
+ long_desc Help.text(:new)
19
+ subcommand "new", New
72
20
 
73
- cleanup(builder.image_name)
21
+ desc "build", "Build docker image, task definition, cloudformation template"
22
+ long_desc Help.text(:build)
23
+ opts.docker
24
+ def build
25
+ Build.new(options).build
74
26
  end
75
27
 
76
- desc "rollback SERVICE VERSION", "Rolls back to older task definition."
77
- long_desc Help.text(:rollback)
78
- option :wait, type: :boolean, desc: "Wait for deployment to complete", default: true
79
- def rollback(service=:current, version)
80
- service = service == :current ? Current.service! : service
81
- rollback = Rollback.new(service, options.merge(version: version))
82
- rollback.deploy
83
- end
84
-
85
- desc "ships [LIST_OF_SERVICES]", "Builds and ships same container image to multiple ECS services."
86
- long_desc Help.text(:ships)
87
- ship_options.call
88
- option :wait, type: :boolean, desc: "Wait for deployment to complete", default: false
89
- def ships(*services)
90
- builder = build_docker
91
-
92
- if services.empty? && !Current.services&.empty?
93
- services = Current.services
94
- end
95
- services.each_with_index do |service|
96
- service_name, task_definition_name = service.split(':')
97
- task_definition = task_definition_name || service_name # convention
98
- Tasks::Builder.ship(task_definition, options)
99
- ship = Ship.new(service, options.merge(task_definition: task_definition))
100
- ship.deploy
101
- end
102
-
103
- cleanup(builder.image_name)
104
- end
105
-
106
- desc "task TASK_DEFINITION", "Run a one-time task."
107
- long_desc Help.text(:task)
108
- option :task_only, type: :boolean, desc: "Skip docker and task register steps. Only run the task."
109
- option :wait, type: :boolean, aliases: 'w', desc: "Wait for task to finish.", default: false
110
- option :timeout, type: :numeric, aliases: 't', desc: "How long to wait for task to finish.", default: 600
111
- option :command, type: :array, aliases: 'c', desc: "Override the command used for the container"
112
- def task(task_definition)
113
- Docker::Builder.build(options) unless @options[:task_only]
114
- Tasks::Builder.ship(task_definition, options) unless @options[:task_only]
115
- Task.new(task_definition, options).run
116
- end
117
-
118
- desc "cancel SERVICE", "Cancel creation or update of the ECS service."
28
+ desc "cancel", "Cancel creation or update of the ECS service."
119
29
  long_desc Help.text(:cancel)
120
- option :sure, type: :boolean, desc: "By pass are you sure prompt."
121
- def cancel(service=:current)
122
- task_definition = options[:task] || service # convention
123
- Cancel.new(service, options).run
30
+ option :yes, aliases: :y, type: :boolean, desc: "By pass are you sure prompt."
31
+ def cancel
32
+ Cancel.new(options).run
124
33
  end
125
34
 
126
- desc "current SERVICE", "Switch the current service. Saves to `.ufo/current`"
127
- long_desc Help.text(:current)
128
- option :rm, type: :boolean, desc: "Remove all current settings. Removes `.ufo/current`"
129
- option :service, desc: "Sets service as a current setting."
130
- option :services, type: :array, desc: "Sets services as a current setting. This is used for ufo ships."
131
- option :env_extra, desc: "Sets UFO_ENV_EXTRA as a current setting."
132
- def current
133
- Current.new(options).run
35
+ desc "clean", "Removes `.ufo/output` folders"
36
+ opts.yes
37
+ def clean
38
+ Clean.new(options).run
134
39
  end
135
40
 
136
- desc "destroy SERVICE", "Destroy the ECS service."
41
+ desc "destroy", "Destroy the ECS service."
137
42
  long_desc Help.text(:destroy)
138
- option :sure, type: :boolean, desc: "By pass are you sure prompt."
43
+ option :yes, aliases: :y, type: :boolean, desc: "By pass are you sure prompt."
139
44
  option :wait, type: :boolean, desc: "Wait for completion", default: true
140
- def destroy(service=:current)
141
- task_definition = options[:task] || service # convention
142
- Destroy.new(service, options).bye
45
+ def destroy
46
+ Destroy.new(options).run
143
47
  end
144
48
 
145
- desc "apps", "List apps."
146
- long_desc Help.text(:apps)
147
- option :clusters, type: :array, desc: "List of clusters"
148
- def apps
149
- Apps.new(options).list_all
49
+ desc "exec", "Exec into container"
50
+ long_desc Help.text(:exec)
51
+ option :container, desc: "Container name to exec into. Default to role or first found"
52
+ option :command, aliases: :c, desc: "Command to run. Default is configured config.exec.command option"
53
+ def exec
54
+ Exec.new(options).run
150
55
  end
151
56
 
152
- desc "resources SERVICE", "The ECS service resources."
153
- long_desc Help.text(:resources)
154
- def resources(service=:current)
155
- Info.new(service, options).run
57
+ long_desc Help.text("init")
58
+ New::Init.options.each { |args| option(*args) }
59
+ register(New::Init, "init", "init", "Generate starter .ufo structure")
60
+
61
+ desc "logs", "Prints out logs"
62
+ long_desc Help.text(:logs)
63
+ option :follow, default: true, type: :boolean, desc: " Whether to continuously poll for new logs. To exit from this mode, use Control-C."
64
+ option :since, desc: "From what time to begin displaying logs. By default, logs will be displayed starting from 1 minutes in the past. The value provided can be an ISO 8601 timestamp or a relative time."
65
+ option :format, default: "short", desc: "The format to display the logs. IE: detailed or short. With detailed, the log stream name is also shown."
66
+ option :filter_pattern, desc: "The filter pattern to use. If not provided, all the events are matched"
67
+ def logs
68
+ Logs.new(options).run
156
69
  end
157
70
 
158
- desc "scale SERVICE COUNT", "Scale the ECS service."
159
- long_desc Help.text(:scale)
160
- def scale(service=:current, count)
161
- Scale.new(service, count, options).update
71
+ desc "releases", "Show possible 'releases' or task definitions for the service."
72
+ long_desc Help.text(:releases)
73
+ def releases
74
+ Releases.new(options).list
75
+ end
76
+
77
+ desc "rollback VERSION", "Rolls back to older task definition."
78
+ long_desc Help.text(:rollback)
79
+ option :wait, type: :boolean, desc: "Wait for deployment to complete", default: true
80
+ def rollback(version)
81
+ Rollback.new(options.merge(version: version)).deploy
162
82
  end
163
83
 
164
- desc "ps SERVICE", "Show process info on ECS service."
84
+ desc "ps", "Show process info on ECS service."
165
85
  long_desc Help.text(:ps)
166
- option :summary, type: :boolean, default: true, desc: "Display summary header info."
167
- option :extra, type: :boolean, default: false, desc: "Display extra debugging columns."
168
86
  option :status, default: "all", desc: "Status filter: all, pending, stopped, running."
169
- def ps(service=:current)
170
- Ps.new(service, options).run
87
+ # not setting format default so we can use Ufo.config.ps.format and dont want to trigger a config load this early
88
+ option :format, desc: "Output formats: #{CliFormat.formats.join(', ')}"
89
+ def ps
90
+ Ps.new(options).run
171
91
  end
172
92
 
173
- desc "releases SERVICE", "Show possible 'releases' or task definitions for the service."
174
- long_desc Help.text(:releases)
175
- def releases(service=:current)
176
- Releases.new(service, options).list
93
+ desc "scale", "Scale the ECS service"
94
+ long_desc Help.text(:scale)
95
+ option :desired, type: :numeric, desc: "Desired count"
96
+ option :min, type: :numeric, desc: "Minimum capacity"
97
+ option :max, type: :numeric, desc: "Maximum capacity"
98
+ def scale
99
+ Scale.new(options).update
177
100
  end
178
101
 
179
- desc "stop SERVICE", "Stop tasks from old deployments. Can speed up deployments with network load balancer."
180
- long_desc Help.text(:stop)
181
- def stop(service=:current)
182
- Stop.new(service, options).run
102
+ desc "ship", "Deploy app to ECS"
103
+ long_desc Help.text(:ship)
104
+ option :wait, type: :boolean, desc: "Wait for deployment to complete", default: true
105
+ option :image, aliases: :i, desc: "Override image in task definition for quick testing"
106
+ opts.docker
107
+ opts.yes
108
+ def ship
109
+ Ship.new(options).run
183
110
  end
184
111
 
185
- desc "status SERVICE", "Status of ECS service. Essentially, status of CloudFormation stack"
112
+ desc "status", "Status of ECS service. Essentially, status of CloudFormation stack"
186
113
  long_desc Help.text(:status)
187
- def status(service=:current)
188
- Status.new(service, options).run
114
+ def status
115
+ Status.new(options).run
189
116
  end
190
117
 
191
- desc "logs", "Prints out logs"
192
- long_desc Help.text(:logs)
193
- option :follow, default: true, type: :boolean, desc: " Whether to continuously poll for new logs. To exit from this mode, use Control-C."
194
- option :since, desc: "From what time to begin displaying logs. By default, logs will be displayed starting from 1 minutes in the past. The value provided can be an ISO 8601 timestamp or a relative time."
195
- option :format, default: "detailed", desc: "The format to display the logs. IE: detailed or short. With detailed, the log stream name is also shown."
196
- option :filter_pattern, desc: "The filter pattern to use. If not provided, all the events are matched"
197
- def logs(service=:current)
198
- Logs.new(service, options).run
118
+ desc "stop", "Stop tasks"
119
+ long_desc Help.text(:stop)
120
+ opts.yes
121
+ def stop
122
+ Stop.new(options).run
199
123
  end
200
124
 
201
125
  desc "completion *PARAMS", "Prints words for auto-completion."
@@ -214,19 +138,5 @@ module Ufo
214
138
  def version
215
139
  puts VERSION
216
140
  end
217
-
218
- no_tasks do
219
- def build_docker
220
- builder = Docker::Builder.new(options)
221
- builder.build
222
- builder.push
223
- builder
224
- end
225
-
226
- def cleanup(image_name)
227
- Docker::Cleaner.new(image_name, options).cleanup
228
- Ecr::Cleaner.new(image_name, options).cleanup
229
- end
230
- end
231
141
  end
232
142
  end
data/lib/ufo/command.rb CHANGED
@@ -11,12 +11,36 @@ class Thor
11
11
  end
12
12
  end
13
13
  end
14
+
15
+ module Util
16
+ # Hack to fix issue when -h produces extra ufo command in help. IE:
17
+ #
18
+ # $ bundle exec ufo blueprint -h
19
+ # Commands:
20
+ # ...
21
+ # ufo ufo:blueprint:new BLUEPRINT_NAME <= weird
22
+ #
23
+ # It looks like thor_classes_in is only used to generate the help menu.
24
+ #
25
+ def self.thor_classes_in(*)
26
+ []
27
+ end
28
+ end
14
29
  end
15
30
 
16
31
  module Ufo
17
32
  class Command < Thor
18
33
  class << self
34
+ include Ufo::Utils::Logging
35
+
19
36
  def dispatch(m, args, options, config)
37
+ # Old note: Configuring the DslEvalulator requires Ufo.root and Ufo.logger which
38
+ # loads Ufo.config and Ufo::Config#load_project_config
39
+ # This requires Ufo.role.
40
+ # So we set Ufo.role before triggering Ufo.config loading
41
+ configure_dsl_evaluator
42
+ check_project!(args)
43
+
20
44
  # Allow calling for help via:
21
45
  # ufo command help
22
46
  # ufo command -h
@@ -26,7 +50,6 @@ module Ufo
26
50
  # as well thor's normal way:
27
51
  #
28
52
  # ufo help command
29
- help_flags = Thor::HELP_MAPPINGS + ["help"]
30
53
  if args.length > 1 && !(args & help_flags).empty?
31
54
  args -= help_flags
32
55
  args.insert(-2, "help")
@@ -43,6 +66,38 @@ module Ufo
43
66
  super
44
67
  end
45
68
 
69
+ # Uses Ufo.logger and Ufo.root which loads Ufo.config.
70
+ # See comment where configure_dsl_evaluator is used about Ufo.role
71
+ def configure_dsl_evaluator
72
+ DslEvaluator.configure do |config|
73
+ config.backtrace.select_pattern = Ufo.root.to_s
74
+ config.logger = Ufo.logger
75
+ config.on_exception = :exit
76
+ config.root = Ufo.root
77
+ end
78
+ end
79
+
80
+ def help_flags
81
+ Thor::HELP_MAPPINGS + ["help"]
82
+ end
83
+ private :help_flags
84
+
85
+ def subcommand?
86
+ !!caller.detect { |l| l.include?('in subcommand') }
87
+ end
88
+
89
+ def check_project!(args)
90
+ command_name = args.first
91
+ return if subcommand?
92
+ return if command_name.nil?
93
+ return if help_flags.include?(args.last) # IE: -h help
94
+ return if %w[-h -v --version central init version].include?(command_name)
95
+ return if File.exist?("#{Ufo.root}/.ufo")
96
+
97
+ logger.error "ERROR: It doesnt look like this is a ufo project. Are you sure you are in a ufo project?".color(:red)
98
+ ENV['UFO_TEST'] ? raise : exit(1)
99
+ end
100
+
46
101
  # Override command_help to include the description at the top of the
47
102
  # long_description.
48
103
  def command_help(shell, command_name)
@@ -0,0 +1,11 @@
1
+ module Ufo::Concerns
2
+ module Autoscaling
3
+ def autoscaling_enabled?
4
+ autoscaling.enabled && autoscaling.min_capacity && autoscaling.max_capacity
5
+ end
6
+
7
+ def autoscaling
8
+ Ufo.config.autoscaling
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ module Ufo::Concerns
2
+ module Names
3
+ extend Memoist
4
+ def names
5
+ Ufo::Names.new
6
+ end
7
+ memoize :names
8
+ end
9
+ end
@@ -0,0 +1,26 @@
1
+ module Ufo
2
+ module Concerns
3
+ extend Memoist
4
+ include Names
5
+
6
+ def build
7
+ Ufo::CLI::Build.new(@options)
8
+ end
9
+ memoize :build
10
+
11
+ def deploy
12
+ Ufo::Cfn::Deploy.new(@options)
13
+ end
14
+ memoize :deploy
15
+
16
+ def info
17
+ Ufo::Info.new(@options)
18
+ end
19
+ memoize :info
20
+
21
+ def ps
22
+ Ufo::CLI::Ps.new(@options)
23
+ end
24
+ memoize :ps
25
+ end
26
+ end
@@ -0,0 +1,13 @@
1
+ class Ufo::Config
2
+ class Inits
3
+ class << self
4
+ include DslEvaluator
5
+
6
+ def run_all
7
+ Dir.glob("#{Ufo.root}/.ufo/config/inits/*.rb").each do |path|
8
+ evaluate_file(path)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end