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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e11b921dfd30c66a4207c1dd61a0b4861465fd1b99657f54c71f7b6556b14a60
4
- data.tar.gz: e904b55c7d413f5ba941fd71ea79bc72f492faf94e7484b13be5edb966e0b63c
3
+ metadata.gz: 1f7705c4016b08dd205ad9209ee255b6cd3411fea731183b6c859b28cf900990
4
+ data.tar.gz: 4eb918b33c3a87ed71fbc64e3a0dbac8766a02ccbf15d7e35b863a26f7fd78a3
5
5
  SHA512:
6
- metadata.gz: bfa6504eccbac3d06a264d0e719195d896ecaaf7b4a86f4e9267b3665bbb986b92fca0b16f45f117d670e891223fbe5df88236e3ef3bc8812fcad4274e221b51
7
- data.tar.gz: 1eb60fe3d3661c39e37c610b3a22d987ecc71b681bb3d4429fde26e19bfe706d03ee8e16602917c739258ab01331e2bac1219e7f78a2586b5a4d7bf69c368ee2
6
+ metadata.gz: c65f585f02f1a54afa5c3c2c0a36378e219b8490eec8321d1dd18f9cec4026108f39e11215d0ec964b1842dbca8ade66d4f7e0b256c41386f86eb0db60f931b2
7
+ data.tar.gz: 16226423b75d58394e9e92dcd4562629e9defc5ed46a2acad4e0f049deca9e0c525e2ddaec984eaac616edebe996c1e8e154f3ea3fbb73ae8dfd108bd68958cf
data/.cody/README.md ADDED
@@ -0,0 +1,19 @@
1
+ # Overview
2
+
3
+ CodeBuild is used to run **acceptance-level tests**.
4
+
5
+ ## Deploy Project
6
+
7
+ To update the CodeBuild project that handles deployment:
8
+
9
+ cody deploy ufo -t acceptance
10
+
11
+ ## Start Build
12
+
13
+ To start a CodeBuild build:
14
+
15
+ cody start ufo -t acceptance
16
+
17
+ To specify a branch:
18
+
19
+ cody start ufo -t acceptance -b feature
@@ -0,0 +1,90 @@
1
+ #!/bin/bash
2
+
3
+ final_status=0
4
+ function capture_status {
5
+ if [ "$?" -ne "0" ] && [ $final_status -ne 1 ] ; then
6
+ final_status=1
7
+ fi
8
+ }
9
+
10
+ set -eu
11
+ # will build from /tmp because terraspace/Gemfile may interfere
12
+ cd /tmp
13
+ export PATH=~/bin:$PATH # ~/bin/ufo wrapper
14
+
15
+ # Create empty folder for project
16
+ mkdir demo
17
+ cd demo
18
+
19
+ # Create ECR repo - it might already exist
20
+ aws ecr create-repository --repository-name test/demo || true
21
+ REPO=$(aws ecr describe-repositories --repository-name test/demo | jq -r '.repositories[].repositoryUri')
22
+
23
+ # DockerHub
24
+ # toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating
25
+ docker login --username $DOCKER_USER --password $DOCKER_PASS
26
+ TOKEN=$(curl -s --user "$DOCKER_USER:$DOCKER_PASS" "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq -r .token)
27
+ echo "Current rate limit:"
28
+ curl -s --head -H "Authorization: Bearer $TOKEN" https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest
29
+
30
+ set -x
31
+
32
+ # Generate .ufo files/structure
33
+ ufo init --app testapp --repo $REPO
34
+
35
+ # Review generated files
36
+ cat Dockerfile
37
+ cat .ufo/config.rb
38
+ cat .ufo/resources/task_definitions/web.yml
39
+ cat .ufo/vars/base.rb
40
+ cat .ufo/vars/dev.rb
41
+
42
+ # Deploy
43
+ ufo ship -y
44
+ # Check
45
+ ufo ps
46
+ ENDPOINT=$(ufo ps 2>&1 | grep ELB | sed 's/.*ELB: //')
47
+ curl -s $ENDPOINT | grep title # should be success. IE: exit 0
48
+
49
+ # Change
50
+ cat << EOF > .ufo/vars/dev.rb
51
+ @cpu = 512
52
+ @memory = 512
53
+ EOF
54
+
55
+ cat << EOF > .ufo/config/web/dev.rb
56
+ Ufo.configure do |config|
57
+ config.autoscaling.max_capacity = 3
58
+ end
59
+ EOF
60
+
61
+ # Update
62
+ ufo clean -y # dont have to but good to test ufo clean
63
+ ufo ship -y
64
+ # Check
65
+ ufo ps # see full output for debugging
66
+ ufo ps 2>&1 | grep 'Max: 3' # should be success. IE: exit 0
67
+ # grab task id - json output goes to stdout
68
+ TASK=$(ufo ps --format json | jq -r '.[0].Task')
69
+ echo "TASK $TASK"
70
+
71
+ # TODO: create fargate spot cluster
72
+ CLUSTER=dev
73
+ # Just show for now. Might have to add wait logic to confirm new settings
74
+ aws ecs describe-tasks --cluster $CLUSTER --tasks $TASK \
75
+ | jq '.tasks[].containers[] | {cpu: .cpu, memory: .memory}'
76
+
77
+ # Destroy
78
+ ufo destroy -y
79
+ # Check
80
+ ufo ps
81
+ ufo ps 2>&1 | grep No | grep found # should be success. IE: exit 0
82
+
83
+ ## Also test different roles like worker
84
+
85
+ export UFO_ROLE=worker
86
+ ufo ship -y
87
+ ufo ps # see full output for debugging
88
+ ufo ps 2>&1 | grep Stack | grep worker # should be success. IE: exit 0
89
+ ufo destroy -y
90
+ ufo ps 2>&1 | grep No | grep found # should be success. IE: exit 0
@@ -0,0 +1,10 @@
1
+ version: 0.2
2
+
3
+ phases:
4
+ install:
5
+ runtime-versions:
6
+ ruby: latest
7
+ build:
8
+ commands:
9
+ - .cody/shared/script/install.sh
10
+ - .cody/acceptance/bin/build.sh
@@ -0,0 +1,11 @@
1
+ github_url("https://github.com/boltops-tools/ufo")
2
+ linux_image("aws/codebuild/amazonlinux2-x86_64-standard:3.0")
3
+ environment_variables(
4
+ DOCKER_USER: "ssm:/codebuild/ufo/DOCKER_USER",
5
+ DOCKER_PASS: "ssm:/codebuild/ufo/DOCKER_PASS",
6
+ )
7
+
8
+ # triggers(
9
+ # webhook: true,
10
+ # filter_groups: [[{type: "EVENT", pattern: "PUSH"}]]
11
+ # )
@@ -0,0 +1,28 @@
1
+ iam_policy(
2
+ "application-autoscaling",
3
+ "cloudformation",
4
+ "ec2",
5
+ "ecr",
6
+ "ecs",
7
+ "elasticloadbalancing",
8
+ "elasticloadbalancingv2",
9
+ "iam", # to create .ufo/resources/iam_roles
10
+ "logs",
11
+ "route53",
12
+ "ssm", # for codebuild to pull in ssm parameter
13
+ )
14
+
15
+ iam_policy(
16
+ Action: [
17
+ "iam:PassRole",
18
+ ],
19
+ Effect: "Allow",
20
+ Resource: "*",
21
+ Condition: {
22
+ StringLike: {
23
+ "iam:PassedToService": [
24
+ "ecs-tasks.amazonaws.com"
25
+ ]
26
+ }
27
+ }
28
+ )
@@ -0,0 +1,40 @@
1
+ #!/bin/bash
2
+
3
+ set -eux
4
+
5
+ export PATH=~/bin:$PATH
6
+
7
+ cat << 'EOF' > ~/.gemrc
8
+ ---
9
+ :backtrace: false
10
+ :bulk_threshold: 1000
11
+ :sources:
12
+ - https://rubygems.org
13
+ :update_sources: true
14
+ :verbose: true
15
+ benchmark: false
16
+ install: "--no-ri --no-rdoc --no-document"
17
+ update: "--no-ri --no-rdoc --no-document"
18
+ EOF
19
+
20
+ gem install bundler # upgrade bundler
21
+
22
+ # In original ufo source and install ufo
23
+ cd $CODEBUILD_SRC_DIR # ufo folder - in case code is added later above this that uses cd
24
+ bundle install
25
+ bundle exec rake install
26
+
27
+ mkdir -p ~/bin
28
+ cat << EOF > ~/bin/ufo
29
+ #!/bin/bash
30
+ # If there's a Gemfile, assume we're in a ufo project with a Gemfile for ufo
31
+ if [ -f Gemfile ]; then
32
+ exec bundle exec $CODEBUILD_SRC_DIR/exe/ufo "\$@"
33
+ else
34
+ exec $CODEBUILD_SRC_DIR/exe/ufo "\$@"
35
+ fi
36
+ EOF
37
+
38
+ cat ~/bin/ufo
39
+
40
+ chmod a+x ~/bin/ufo
@@ -0,0 +1,5 @@
1
+ #!/bin/bash
2
+
3
+ set -eu
4
+
5
+ .cody/shared/script/install/ufo.sh
@@ -0,0 +1,28 @@
1
+ name: Ruby
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+ - v6
8
+
9
+ pull_request:
10
+
11
+ jobs:
12
+ build:
13
+ runs-on: ubuntu-latest
14
+ name: Ruby ${{ matrix.ruby }}
15
+ strategy:
16
+ matrix:
17
+ ruby:
18
+ - '3.0.3'
19
+
20
+ steps:
21
+ - uses: actions/checkout@v2
22
+ - name: Set up Ruby
23
+ uses: ruby/setup-ruby@v1
24
+ with:
25
+ ruby-version: ${{ matrix.ruby }}
26
+ bundler-cache: true
27
+ - name: Run the default task
28
+ run: bundle exec rspec
data/CHANGELOG.md CHANGED
@@ -3,6 +3,9 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  This project *tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
5
5
 
6
+ ## [6.0.0] - 2022-03-05
7
+ - [#125](https://github.com/tongueroo/ufo/pull/125) v6: major ufo upgrades and new structure
8
+
6
9
  ## [5.0.7] - 2021-12-18
7
10
  - [#123](https://github.com/tongueroo/ufo/pull/123) fix activesupport require
8
11
 
@@ -433,7 +436,7 @@ This project *tries* to adhere to [Semantic Versioning](http://semver.org/), eve
433
436
 
434
437
  ## [0.1.1]
435
438
 
436
- - rename `ufo docker full_image_name` to `ufo docker image_name`
439
+ - rename `ufo docker docker_image` to `ufo docker image_name`
437
440
 
438
441
  ## [0.1.0]
439
442
 
data/Gemfile CHANGED
@@ -2,5 +2,3 @@ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem dependencies in ufo.gemspec
4
4
  gemspec
5
-
6
- gem "codeclimate-test-reporter", group: :test, require: nil
data/README.md CHANGED
@@ -4,7 +4,6 @@
4
4
 
5
5
  # UFO: ECS Deploy Tool
6
6
 
7
- [![CircleCI](https://circleci.com/gh/tongueroo/ufo.svg?style=svg)](https://circleci.com/gh/tongueroo/ufo)
8
7
  [![Join the chat at https://gitter.im/tongueroo/ufo](https://badges.gitter.im/tongueroo/ufo.svg)](https://gitter.im/tongueroo/ufo?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
9
8
  [![Support](https://img.shields.io/badge/get-support-blue.svg)](https://boltops.com?utm_source=badge&utm_medium=badge&utm_campaign=ufo)
10
9
 
@@ -12,13 +11,7 @@
12
11
 
13
12
  Please **watch/star** this repo to help grow and support the project.
14
13
 
15
- Ufo is a tool that builds Docker images and deploys them to [AWS ECS](https://aws.amazon.com/ecs/). The main command is `ufo ship`. Here's summary of what it does:
16
-
17
- 1. Builds a docker image.
18
- 2. Generates and registers the ECS template definition.
19
- 3. Deploys the ECS template definition to the ECS service.
20
-
21
- Ufo deploys a task definition that is written in a templating language that is easily and fully controllable.
14
+ UFO provides convenient tooling to make it easier and more fun to work with ECS. UFO tries to bring a heroku-like experience to ECS.
22
15
 
23
16
  See [ufoships.com](http://ufoships.com) for full documentation.
24
17
 
@@ -32,30 +25,6 @@ If you are upgrading, please refer to the [Upgrading docs](https://ufoships.com/
32
25
 
33
26
  Full installation instructions are at [Install Ufo](http://ufoships.com/docs/install/).
34
27
 
35
- ## Quick Start
36
-
37
- To quickly demonstrate how simple it is to use ufo we will use an example app from [tongueroo/demo-ufo](https://github.com/tongueroo/demo-ufo). The app is a barebones sinatra app. Here are the steps:
38
-
39
- gem install ufo
40
- git clone https://github.com/tongueroo/demo-ufo.git demo
41
- cd demo
42
- ufo init --image=tongueroo/demo-ufo
43
- ufo ship demo-web
44
-
45
- Congratulations, you have successfully used ufo to deploy to an ECS service.
46
-
47
- ## Load Balancer Support
48
-
49
- Ufo can also create a load balancer as part of creating the ECS service if you wish. Underneath the hood, ufo uses CloudFormation to create the load balancer. More information can be found at the [load balancer support docs](https://ufoships.com/docs/extras/load-balancer/).
50
-
51
- ## Articles
52
-
53
- * [UFO How to Create Unlimited Extra Environments](https://blog.boltops.com/2018/07/12/ufo-how-to-create-unlimited-extra-environments)
54
- * [UFO and ECS Fargate Introduction Tutorial](https://blog.boltops.com/2018/07/11/ufo-and-ecs-fargate-introduction-tutorial)
55
- * [UFO ECS Deployment Tool Introduction](https://blog.boltops.com/2018/07/06/ufo-ecs-deployment-tool-introduction)
56
- * [UFO Version 4 Release: Load Balancer Support](https://blog.boltops.com/2018/07/05/ufo-version-4-release)
57
- * [UFO Ship on AWS ECS Presentation](http://www.slideshare.net/tongueroo/ufo-ship-for-aws-ecs-70885296)
58
-
59
28
  ## Contributing
60
29
 
61
30
  Bug reports and pull requests are welcome on GitHub at [https://github.com/tongueroo/ufo/issues](https://github.com/tongueroo/ufo/issues).
@@ -0,0 +1,4 @@
1
+ # Simple starter example
2
+ FROM nginx
3
+ EXPOSE 80
4
+ CMD ["nginx", "-g", "daemon off;"]
@@ -0,0 +1,6 @@
1
+ module <%= class_name %>Helper
2
+ # Your code goes here
3
+ # def custom_method
4
+ # ...
5
+ # end
6
+ end
@@ -0,0 +1,6 @@
1
+ Ufo.configure do |config|
2
+ config.autoscaling.enabled = true
3
+ config.autoscaling.min_capacity = 1
4
+ config.autoscaling.max_capacity = 1
5
+ config.autoscaling.target_value = 50.0
6
+ end
@@ -0,0 +1,6 @@
1
+ Ufo.configure do |config|
2
+ config.autoscaling.max_capacity = 2
3
+
4
+ # config.elb.ssl.enabled = true
5
+ # config.elb.ssl.certificates = "arn:aws:acm:us-west-2:111111111111:certificate/EXAMPLE"
6
+ end
@@ -0,0 +1,6 @@
1
+ Ufo.configure do |config|
2
+ config.autoscaling.max_capacity = 3
3
+
4
+ # config.elb.ssl.enabled = true
5
+ # config.elb.ssl.certificates = "arn:aws:acm:us-west-2:111111111111:certificate/EXAMPLE"
6
+ end
@@ -0,0 +1,39 @@
1
+ Ufo.configure do |config|
2
+ config.logger.level = "info" # IE: info or debug
3
+ config.app = "<%= @app %>" # UFO_APP takes higher precedence if set
4
+ config.docker.repo = "<%= @repo %>"
5
+ # config.ecs.cluster = ":ENV" # :ENV pattern is replaced with UFO_ENV. Default is UFO_ENV=dev
6
+
7
+ # See VPC Docs: https://ufoships.com/docs/config/vpc/
8
+ # When not set, it's assumed that the ECS cluster using default vpc and default subnets.
9
+ # Notice the ability to use `stack_output` helpers to set the values.
10
+ # config.vpc.id = stack_output("vpc-:ENV.Vpc")
11
+ # config.vpc.subnets.ecs = stack_output("vpc-:ENV.PrivateAppSubnets").split(',')
12
+ # config.vpc.subnets.elb = stack_output("vpc-:ENV.PublicSubnets").split(',')
13
+
14
+ # See AutoScaling Docs: https://ufoships.com/docs/features/autoscaling/
15
+ # config.autoscaling.enabled = true
16
+ # config.autoscaling.min_capacity = 2
17
+ # config.autoscaling.max_capacity = 3
18
+ # config.autoscaling.target_value = 50.0
19
+
20
+ # See Route DNS Docs: https://ufoships.com/docs/features/dns-route53-support/
21
+ # config.dns.domain = "domain.com"
22
+
23
+ # See ufo exec Docs: https://ufoships.com/docs/intro/ufo-exec/
24
+ # bash is default but may not be available your Docker image
25
+ # Configure to /bin/sh if needed
26
+ # config.ecs.default_execute_command = "/bin/bash"
27
+
28
+ # See: https://ufoships.com/docs/config/reference/
29
+ # config.ps.summary = false # false to turn off the summary at top of ufo ps output
30
+ # config.ps.format = "table" # Examples: csv table tab json
31
+
32
+ # See: https://ufoships.com/docs/config/reference/
33
+ # Note: the `-` (minus sign) in front rejects the pattern
34
+ # config.logs.filter_pattern = '- "HealthChecker"'
35
+
36
+ # See: https://ufoships.com/docs/config/reference/
37
+ # You may want to set to false if your docker build and push process takes a while
38
+ # config.ship.docker.quiet = false # default is true.
39
+ end
@@ -0,0 +1,23 @@
1
+ # Example starter execution role.
2
+ # IAM Role permissions that EC2 Instance or host needs.
3
+ #
4
+ # Docs: https://ufoships.com/docs/iam-roles/
5
+ #
6
+ # Starter IAM permissions for secrets, ssm, and minimal ecr and cloudwatch permissions
7
+ iam_policy("SsmParameterStore",
8
+ Action: [
9
+ "ssm:GetParameters",
10
+ ],
11
+ Effect: "Allow",
12
+ Resource: "*"
13
+ )
14
+ iam_policy("SecretsManager",
15
+ Action: [
16
+ "secretsmanager:GetSecretValue",
17
+ ],
18
+ Effect: "Allow",
19
+ Resource: "*"
20
+ )
21
+ # AmazonECSTaskExecutionRolePolicy includes use cases. Minimal ecr and logs permissions.
22
+ # See: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html
23
+ managed_iam_policy("service-role/AmazonECSTaskExecutionRolePolicy")
@@ -0,0 +1,20 @@
1
+ # Example starter execution role.
2
+ # IAM Role permissions that the ECS Task or container needs.
3
+ #
4
+ # Docs: https://ufoships.com/docs/intro/task-iam/
5
+ #
6
+ # For `ufo exec` of `aws ecs execute-command`
7
+ # See: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-exec.html#ecs-exec-enabling-and-using
8
+ iam_policy("EcsExecuteCommand",
9
+ Action: [
10
+ "ssmmessages:CreateControlChannel",
11
+ "ssmmessages:CreateDataChannel",
12
+ "ssmmessages:OpenControlChannel",
13
+ "ssmmessages:OpenDataChannel",
14
+ ],
15
+ Effect: "Allow",
16
+ Resource: "*",
17
+ )
18
+
19
+ # Managed policies examples:
20
+ # managed_iam_policy("AmazonSSMReadOnlyAccess")
@@ -0,0 +1,29 @@
1
+ ---
2
+ family: <%= @family %>
3
+ # "bridge" is default because "awsvpc" requires specific instance types and
4
+ # ECS tasks to run on private subnets.
5
+ # Note: However, bridge mode requires user to open up EC2 instances ports: 49153-65535
6
+ networkMode: bridge
7
+ containerDefinitions:
8
+ - name: <%= @name %>
9
+ image: <%= @image %>
10
+ cpu: <%= @cpu %>
11
+ memory: <%= @memory %>
12
+ memoryReservation: <%= @memory_reservation %>
13
+ <% if @container_port -%>
14
+ portMappings:
15
+ - containerPort: <%= @container_port %>
16
+ protocol: tcp
17
+ <% end -%>
18
+ command: <%= @command.to_json %>
19
+ environment: <%= @environment.to_json if @environment %>
20
+ secrets: <%= @secrets.to_json if @secrets %>
21
+ <% if @awslogs_group -%>
22
+ logConfiguration:
23
+ logDriver: awslogs
24
+ options:
25
+ awslogs-group: "<%= @awslogs_group %>"
26
+ awslogs-region: "<%= @awslogs_region || 'us-east-1' %>"
27
+ awslogs-stream-prefix: "<%= @awslogs_stream_prefix %>"
28
+ <% end -%>
29
+ essential: true
@@ -0,0 +1,20 @@
1
+ # Example .ufo/vars/base.rb
2
+ # Ufo docs
3
+ # Variables: http://ufoships.com/docs/variables/
4
+ # Helpers: http://ufoships.com/docs/helpers/
5
+
6
+ @family = family # Also: task_definition_name
7
+ @name = role # IE: web worker clock
8
+ @image = docker_image # includes the git sha org/repo:ufo-[sha].
9
+ # Docs: https://ufoships.com/docs/helpers/builtin/secrets/
10
+ # @environment = env_file(".env")
11
+ # @secrets = secrets_file(".secrets")
12
+ @cpu = 256
13
+ @memory = 256
14
+ @memory_reservation = 256
15
+
16
+ @awslogs_group = ["ecs/#{Ufo.app}", Ufo.env, Ufo.extra].compact.join('-')
17
+ @awslogs_stream_prefix = role
18
+ @awslogs_region = aws_region
19
+
20
+ @container_port = dockerfile_port # parsed from Dockerfile
@@ -0,0 +1,4 @@
1
+ # Example .ufo/vars/dev.rb
2
+ # Docs: https://ufoships.com/docs/layering/variables/
3
+
4
+ @cpu = 384
@@ -0,0 +1,4 @@
1
+ # Example .ufo/vars/prod.rb
2
+ # Docs: https://ufoships.com/docs/layering/variables/
3
+
4
+ @cpu = 256
@@ -0,0 +1,118 @@
1
+ require "aws-sdk-applicationautoscaling"
2
+ require "aws-sdk-cloudformation"
3
+ require "aws-sdk-cloudwatchlogs"
4
+ require "aws-sdk-ec2"
5
+ require "aws-sdk-ecr"
6
+ require "aws-sdk-ecs"
7
+ require "aws-sdk-elasticloadbalancingv2"
8
+ require "aws-sdk-ssm"
9
+
10
+ require "aws_mfa_secure/ext/aws" # add MFA support
11
+ require "cfn_status"
12
+
13
+ module Ufo
14
+ module AwsServices
15
+ extend Memoist
16
+
17
+ def applicationautoscaling
18
+ Aws::ApplicationAutoScaling::Client.new(aws_options)
19
+ end
20
+ memoize :applicationautoscaling
21
+
22
+ def cloudformation
23
+ Aws::CloudFormation::Client.new(aws_options)
24
+ end
25
+ memoize :cloudformation
26
+
27
+ def cloudwatchlogs
28
+ Aws::CloudWatchLogs::Client.new(aws_options)
29
+ end
30
+ memoize :cloudwatchlogs
31
+
32
+ def ec2
33
+ Aws::EC2::Client.new(aws_options)
34
+ end
35
+ memoize :ec2
36
+
37
+ def ecr
38
+ Aws::ECR::Client.new(aws_options)
39
+ end
40
+ memoize :ecr
41
+
42
+ def ecs
43
+ Aws::ECS::Client.new(aws_options)
44
+ end
45
+ memoize :ecs
46
+
47
+ def elb
48
+ Aws::ElasticLoadBalancingV2::Client.new(aws_options)
49
+ end
50
+ memoize :elb
51
+
52
+ def ssm_client
53
+ Aws::SSM::Client.new
54
+ end
55
+ memoize :ssm_client
56
+
57
+ # Override the AWS retry settings with AWS clients.
58
+ #
59
+ # The aws-sdk-core has exponential backup with this formula:
60
+ #
61
+ # 2 ** c.retries * c.config.retry_base_delay
62
+ #
63
+ # Source:
64
+ # https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-core/lib/aws-sdk-core/plugins/retry_errors.rb
65
+ #
66
+ # So the max delay will be 2 ** 7 * 0.6 = 76.8s
67
+ #
68
+ # Only scoping this to deploy because dont want to affect people's application that use the aws sdk.
69
+ #
70
+ # There is also additional rate backoff logic elsewhere, since this is only scoped to deploys.
71
+ #
72
+ # Useful links:
73
+ # https://github.com/aws/aws-sdk-ruby/blob/master/gems/aws-sdk-core/lib/aws-sdk-core/plugins/retry_errors.rb
74
+ # https://docs.aws.amazon.com/apigateway/latest/developerguide/limits.html
75
+ #
76
+ def aws_options
77
+ options = {
78
+ retry_limit: 7, # default: 3
79
+ retry_base_delay: 0.6, # default: 0.3
80
+ }
81
+ options.merge!(
82
+ log_level: :debug,
83
+ logger: Logger.new($stdout),
84
+ ) if ENV['UFO_DEBUG_AWS_SDK']
85
+ options
86
+ end
87
+
88
+ def find_stack(stack_name)
89
+ resp = cloudformation.describe_stacks(stack_name: stack_name)
90
+ resp.stacks.first
91
+ rescue Aws::CloudFormation::Errors::ValidationError => e
92
+ # example: Stack with id demo-web does not exist
93
+ if e.message =~ /Stack with/ && e.message =~ /does not exist/
94
+ nil
95
+ else
96
+ raise
97
+ end
98
+ end
99
+
100
+ def task_definition_arns(family, max_items=10)
101
+ resp = ecs.list_task_definitions(
102
+ family_prefix: family,
103
+ sort: "DESC",
104
+ )
105
+ arns = resp.task_definition_arns
106
+ arns = arns.select do |arn|
107
+ task_definition = arn.split('/').last.split(':').first
108
+ task_definition == family
109
+ end
110
+ arns[0..max_items]
111
+ end
112
+
113
+ def status
114
+ CfnStatus.new(@stack_name) # NOTE: @stack_name must be set in the including Class
115
+ end
116
+ memoize :status
117
+ end
118
+ end
data/lib/ufo/booter.rb ADDED
@@ -0,0 +1,27 @@
1
+ module Ufo
2
+ module Booter
3
+ def boot
4
+ run_hooks
5
+ end
6
+
7
+ # Special boot hooks run super early.
8
+ # Useful for setting env vars and other early things.
9
+ #
10
+ # .ufo/boot.rb
11
+ # .ufo/boot/dev.rb
12
+ #
13
+ def run_hooks
14
+ run_hook
15
+ run_hook(Ufo.env)
16
+ Ufo::Config::Inits.run_all
17
+ end
18
+
19
+ def run_hook(env=nil)
20
+ name = env ? "boot/#{env}" : "boot"
21
+ path = "#{Ufo.root}/.ufo/#{name}.rb" # IE: .ufo/boot/dev.rb
22
+ require path if File.exist?(path)
23
+ end
24
+
25
+ extend self
26
+ end
27
+ end
@@ -0,0 +1,7 @@
1
+ module Ufo::Cfn
2
+ class Base < Ufo::CLI::Base
3
+ extend Memoist
4
+ include Ufo::AwsServices
5
+ include Ufo::Concerns # info
6
+ end
7
+ end