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,54 @@
1
+ module Ufo::Cfn
2
+ class Deploy < Base
3
+ def run
4
+ ensure_log_group_exist
5
+ ensure_cluster_exist
6
+ stop_old_tasks
7
+ stack = Stack.new(@options)
8
+ success = stack.deploy
9
+
10
+ return unless @options[:wait]
11
+ if success
12
+ puts "Software shipped!"
13
+ else
14
+ puts "Software fail to ship."
15
+ exit 1
16
+ end
17
+ end
18
+
19
+ def ensure_cluster_exist
20
+ return unless Ufo.config.ecs.create_cluster
21
+
22
+ cluster = ecs_clusters.first
23
+ exist = cluster && cluster.status == "ACTIVE"
24
+ return if exist
25
+
26
+ ecs.create_cluster(cluster_name: @cluster)
27
+ logger.info "#{@cluster} cluster created."
28
+ end
29
+
30
+ def ecs_clusters
31
+ ecs.describe_clusters(clusters: [@cluster]).clusters
32
+ end
33
+
34
+ # Start a thread that will poll for ecs deployments and kill of tasks in old deployments.
35
+ # This must be done in a thread because the stack update process is blocking.
36
+ def stop_old_tasks
37
+ return unless @options[:stop_old_tasks]
38
+ return unless @options[:wait] # only works when deployment is blocking
39
+
40
+ Thread.new do
41
+ stop = Ufo::Stop.new(@options.merge(mute: true))
42
+ while true
43
+ stop.log "checking for old tasks and waiting for 10 seconds"
44
+ stop.run
45
+ sleep 10
46
+ end
47
+ end
48
+ end
49
+
50
+ def ensure_log_group_exist
51
+ Ufo::LogGroup.new(@options).create
52
+ end
53
+ end
54
+ end
@@ -1,23 +1,9 @@
1
- class Ufo::Stack::Builder
2
- class Base
3
- include Ufo::Settings
4
-
5
- def initialize
6
- copy_instance_variables
7
- end
8
-
9
- # Copy the instance variables from TemplateScope Stack Builder classes
10
- def copy_instance_variables
11
- context = Ufo::Stack::Builder.context
12
- scope = context.scope
13
- scope.instance_variables.each do |var|
14
- val = scope.instance_variable_get(var)
15
- instance_variable_set(var, val)
16
- end
17
- end
18
-
19
- def self.build
20
- new.build
1
+ class Ufo::Cfn::Stack::Builder
2
+ class Base < Ufo::Cfn::Base
3
+ attr_reader :vars
4
+ def initialize(options={})
5
+ super
6
+ @vars = options[:vars]
21
7
  end
22
8
 
23
9
  # type: elb or ecs
@@ -30,8 +16,7 @@ class Ufo::Stack::Builder
30
16
  # So we will not assign security groups at all for case of workers with no security groups at all.
31
17
  #
32
18
  def security_groups(type)
33
- settings_key = "#{type}_security_groups".to_sym
34
- group_ids = Ufo::Setting::SecurityGroups.new(@service, settings_key).load
19
+ group_ids = Ufo.config.vpc.security_groups[type] || []
35
20
  # no security groups at all
36
21
  return if !managed_security_groups? && group_ids.blank?
37
22
 
@@ -47,8 +32,12 @@ class Ufo::Stack::Builder
47
32
  end
48
33
 
49
34
  def managed_security_groups?
50
- managed = settings[:managed_security_groups]
35
+ managed = Ufo.config.vpc.security_groups.managed
51
36
  managed.nil? ? true : managed
52
37
  end
38
+
39
+ def self.build(options={})
40
+ new(options).build
41
+ end
53
42
  end
54
43
  end
@@ -0,0 +1,25 @@
1
+ class Ufo::Cfn::Stack::Builder
2
+ class Conditions < Base
3
+ def build
4
+ text =<<~EOL
5
+ CreateElbIsTrue:
6
+ Fn::Equals:
7
+ - Ref: CreateElb
8
+ - true
9
+ ElbTargetGroupIsBlank:
10
+ Fn::Equals:
11
+ - Ref: ElbTargetGroup
12
+ - ''
13
+ CreateTargetGroupIsTrue:
14
+ Fn::And:
15
+ - Condition: CreateElbIsTrue
16
+ - Condition: ElbTargetGroupIsBlank
17
+ EcsDesiredCountIsBlank:
18
+ Fn::Equals:
19
+ - Ref: EcsDesiredCount
20
+ - ''
21
+ EOL
22
+ Ufo::Yaml.load(text)
23
+ end
24
+ end
25
+ end
@@ -1,4 +1,4 @@
1
- class Ufo::Stack::Builder
1
+ class Ufo::Cfn::Stack::Builder
2
2
  class Outputs < Base
3
3
  def build
4
4
  outputs = {
@@ -11,7 +11,7 @@ class Ufo::Stack::Builder
11
11
  }
12
12
  }
13
13
 
14
- if @create_route53
14
+ if vars[:create_route53]
15
15
  outputs[:Route53Dns] = {
16
16
  Description: "Route53 Dns",
17
17
  Value: {Ref: "Dns"},
@@ -0,0 +1,34 @@
1
+ class Ufo::Cfn::Stack::Builder
2
+ class Parameters < Base
3
+ def build
4
+ yaml =<<~EOL
5
+ Vpc:
6
+ Description: Existing vpc id
7
+ Type: AWS::EC2::VPC::Id
8
+ ElbSubnets:
9
+ Description: Existing subnet ids for ELB
10
+ Type: List<AWS::EC2::Subnet::Id>
11
+ EcsSubnets:
12
+ Description: Existing subnet ids for ECS
13
+ Type: List<AWS::EC2::Subnet::Id>
14
+ ElbTargetGroup:
15
+ Description: Existing target group
16
+ Type: String
17
+ Default: ''
18
+ CreateElb:
19
+ Description: Create elb
20
+ Type: String
21
+ Default: true
22
+ EcsDesiredCount:
23
+ Description: Ecs desired count
24
+ Type: String
25
+ Default: ''
26
+ EcsSchedulingStrategy:
27
+ Description: The scheduling strategy to use for the service
28
+ Type: String
29
+ Default: REPLICA
30
+ EOL
31
+ YAML.load(yaml).deep_symbolize_keys
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,4 @@
1
+ class Ufo::Cfn::Stack::Builder::Resources
2
+ class Base < Ufo::Cfn::Stack::Builder::Base
3
+ end
4
+ end
@@ -0,0 +1,47 @@
1
+ class Ufo::Cfn::Stack::Builder::Resources
2
+ class Dns < Base
3
+ def build
4
+ return unless vars[:create_route53]
5
+
6
+ props = {
7
+ Name: dns_name, # {stack_name}.yourdomain. dont forget the trailing period
8
+ Comment: dns.comment,
9
+ Type: dns.type, # CNAME
10
+ TTL: dns.ttl, # 60 ttl has special casing
11
+ ResourceRecords: [{"Fn::GetAtt": "Elb.DNSName"}]
12
+ }
13
+ # HostedZoneName: yourdomain. # dont forget the trailing period
14
+ props[:HostedZoneName] = hosted_zone_name if hosted_zone_name
15
+ props[:HostedZoneId] = dns.hosted_zone_id if dns.hosted_zone_id
16
+
17
+ {
18
+ Type: "AWS::Route53::RecordSet",
19
+ Properties: props
20
+ }
21
+ end
22
+
23
+ private
24
+ def dns_name
25
+ return unless dns.domain || dns.name
26
+ name = dns.name # my.domain.com
27
+ name ||= "#{@stack_name}.#{dns.domain}" # demo-web-dev.domain.com
28
+ ensure_trailing_dot(name)
29
+ end
30
+
31
+ def hosted_zone_name
32
+ return if dns.hosted_zone_id # hosted_zone_id takes precedence over hosted_zone_name
33
+ return unless dns.domain || dns.host_zone_name
34
+ name = dns.hosted_zone_name
35
+ name ||= dns.domain
36
+ ensure_trailing_dot(name)
37
+ end
38
+
39
+ def ensure_trailing_dot(s)
40
+ s.ends_with?('.') ? s : "#{s}."
41
+ end
42
+
43
+ def dns
44
+ Ufo.config.dns
45
+ end
46
+ end
47
+ end
@@ -1,12 +1,12 @@
1
- class Ufo::Stack::Builder::Resources
2
- class Ecs < Base
1
+ class Ufo::Cfn::Stack::Builder::Resources
2
+ class EcsService < Base
3
3
  def build
4
4
  attrs = {
5
5
  Type: "AWS::ECS::Service",
6
6
  Properties: properties
7
7
  }
8
8
 
9
- attrs[:DependsOn] = "Listener" if @create_elb
9
+ attrs[:DependsOn] = "Listener" if vars[:create_elb]
10
10
 
11
11
  attrs
12
12
  end
@@ -21,13 +21,14 @@ class Ufo::Stack::Builder::Resources
21
21
  {Ref: "EcsDesiredCount"}
22
22
  ]
23
23
  },
24
+ EnableExecuteCommand: Ufo.config.exec.enabled,
24
25
  LoadBalancers: {
25
26
  "Fn::If": [
26
27
  "CreateTargetGroupIsTrue",
27
28
  [
28
29
  {
29
- ContainerName: @container[:name],
30
- ContainerPort: @container[:port],
30
+ ContainerName: vars[:container][:name],
31
+ ContainerPort: vars[:container][:port],
31
32
  TargetGroupArn: {Ref: "TargetGroup"}
32
33
  }
33
34
  ],
@@ -37,8 +38,8 @@ class Ufo::Stack::Builder::Resources
37
38
  [],
38
39
  [
39
40
  {
40
- ContainerName: @container[:name],
41
- ContainerPort: @container[:port],
41
+ ContainerName: vars[:container][:name],
42
+ ContainerPort: vars[:container][:port],
42
43
  TargetGroupArn: {Ref: "ElbTargetGroup"}
43
44
  }
44
45
  ]
@@ -49,9 +50,9 @@ class Ufo::Stack::Builder::Resources
49
50
  SchedulingStrategy: {Ref: "EcsSchedulingStrategy"}
50
51
  }
51
52
 
52
- props[:TaskDefinition] = @rollback_definition_arn ? @rollback_definition_arn : {Ref: "TaskDefinition"}
53
+ props[:TaskDefinition] = vars[:rollback_task_definition] ? vars[:rollback_task_definition] : {Ref: "TaskDefinition"}
53
54
 
54
- if @container[:network_mode].to_s == 'awsvpc'
55
+ if vars[:container][:network_mode].to_s == 'awsvpc'
55
56
  props[:NetworkConfiguration] = {
56
57
  AwsvpcConfiguration: {
57
58
  Subnets: {Ref: "EcsSubnets"},
@@ -59,7 +60,7 @@ class Ufo::Stack::Builder::Resources
59
60
  }
60
61
  }
61
62
 
62
- if @container[:fargate]
63
+ if vars[:container][:fargate]
63
64
  props[:LaunchType] = "FARGATE"
64
65
  props[:NetworkConfiguration][:AwsvpcConfiguration][:AssignPublicIp] = "ENABLED" # Works with fargate but doesnt seem to work with non-fargate
65
66
  end
@@ -0,0 +1,35 @@
1
+ class Ufo::Cfn::Stack::Builder::Resources
2
+ class Elb < Base
3
+ def build
4
+ {
5
+ Type: "AWS::ElasticLoadBalancingV2::LoadBalancer",
6
+ Condition: "CreateElbIsTrue",
7
+ Properties: properties,
8
+ }
9
+ end
10
+
11
+ def properties
12
+ props = {
13
+ Type: vars[:elb_type],
14
+ Tags: [
15
+ {Key: "Name", Value: @stack_name}
16
+ ],
17
+ Scheme: "internet-facing"
18
+ }
19
+
20
+ props[:SecurityGroups] = security_groups(:elb) if vars[:elb_type] == "application"
21
+ subnets(props)
22
+
23
+ props
24
+ end
25
+
26
+ def subnets(props)
27
+ mappings = Ufo.config.elb.subnet_mappings
28
+ if mappings && vars[:elb_type] == "network"
29
+ props[:SubnetMappings] = mappings
30
+ else
31
+ props[:Subnets] = {Ref: "ElbSubnets"}
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,32 @@
1
+ module Ufo::Cfn::Stack::Builder::Resources::IamRoles
2
+ class Base < Ufo::Cfn::Stack::Builder::Base
3
+ def build
4
+ return unless self.class.build? # important because it runs DSL#evaluate
5
+ Ufo::IamRole::Builder.new(self.class.role_type).build
6
+ end
7
+
8
+ class << self
9
+ def role_type
10
+ self.name.to_s.split("::").last.underscore
11
+ end
12
+
13
+ def build?
14
+ path = lookup_path
15
+ return unless path.nil? || File.exist?(path)
16
+ Ufo::IamRole::DSL.new(path).evaluate # runs the role.rb and registers items
17
+ Ufo::IamRole::Builder.new(role_type).build?
18
+ end
19
+
20
+ def lookup_path
21
+ iam_roles = "#{Ufo.root}/.ufo/resources/iam_roles"
22
+ paths = ["#{Ufo.app}/#{role_type}", "#{role_type}"]
23
+ paths.map! do |path|
24
+ "#{iam_roles}/#{path}.rb"
25
+ end
26
+ paths.find do |path|
27
+ File.exist?(path)
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,4 @@
1
+ module Ufo::Cfn::Stack::Builder::Resources::IamRoles
2
+ class ExecutionRole < Base
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Ufo::Cfn::Stack::Builder::Resources::IamRoles
2
+ class TaskRole < Base
3
+ end
4
+ end
@@ -0,0 +1,65 @@
1
+ class Ufo::Cfn::Stack::Builder::Resources
2
+ class Listener < Base
3
+ def build
4
+ {
5
+ Type: "AWS::ElasticLoadBalancingV2::Listener",
6
+ Condition: "CreateElbIsTrue",
7
+ Properties: properties,
8
+ }
9
+ end
10
+
11
+ def properties
12
+ {
13
+ DefaultActions: default_actions,
14
+ LoadBalancerArn: {Ref: "Elb"},
15
+ Port: port,
16
+ Protocol: protocol,
17
+ }
18
+ end
19
+
20
+ def protocol
21
+ vars[:default_listener_protocol]
22
+ end
23
+
24
+ def port
25
+ 80
26
+ end
27
+
28
+ def default_actions
29
+ elb = Ufo.config.elb
30
+ default_actions = elb.default_actions # allow use to override for full control like redirection support
31
+ return default_actions if default_actions
32
+
33
+ redirect = elb.redirect
34
+ if redirect.enabled
35
+ [redirect_action(redirect)]
36
+ else
37
+ [default_action]
38
+ end
39
+ end
40
+
41
+ def redirect_action(redirect)
42
+ {
43
+ Type: "redirect",
44
+ RedirectConfig: {
45
+ Protocol: redirect.protocol,
46
+ StatusCode: "HTTP_#{redirect.code}", # HTTP_301 and HTTP_302 are valid
47
+ Port: redirect.port,
48
+ }
49
+ }
50
+ end
51
+
52
+ def default_action
53
+ {
54
+ Type: "forward",
55
+ TargetGroupArn: {
56
+ "Fn::If": [
57
+ "ElbTargetGroupIsBlank",
58
+ {Ref: "TargetGroup"},
59
+ {Ref: "ElbTargetGroup"}
60
+ ]
61
+ }
62
+ }
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,44 @@
1
+ class Ufo::Cfn::Stack::Builder::Resources
2
+ class ListenerSsl < Listener
3
+ def build
4
+ return unless vars[:create_listener_ssl]
5
+ super
6
+ end
7
+
8
+ def properties
9
+ props = super
10
+ props[:Certificates] = certificates
11
+ props
12
+ end
13
+
14
+ def protocol
15
+ vars[:default_listener_ssl_protocol]
16
+ end
17
+
18
+ def port
19
+ Ufo.config.elb.ssl.port
20
+ end
21
+
22
+ # Do not use redirect settings. Only use by normal http listener
23
+ def default_actions
24
+ [default_action]
25
+ end
26
+
27
+ # nil on purpose
28
+ def certificates
29
+ ssl = Ufo.config.elb.ssl
30
+ normalize(ssl.certificates)
31
+ end
32
+
33
+ def normalize(*certs)
34
+ certs = certs.flatten
35
+ certs.map do |cert|
36
+ if cert.is_a?(String)
37
+ {CertificateArn: cert}
38
+ else # Assume correct Hash structure
39
+ cert
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,5 @@
1
+ module Ufo::Cfn::Stack::Builder::Resources::Scaling
2
+ class Base < Ufo::Cfn::Stack::Builder::Base
3
+ include Ufo::Concerns::Autoscaling
4
+ end
5
+ end
@@ -0,0 +1,27 @@
1
+ module Ufo::Cfn::Stack::Builder::Resources::Scaling
2
+ class Policy < Base
3
+ def build
4
+ return unless autoscaling_enabled?
5
+
6
+ text =<<~EOL
7
+ Type: AWS::ApplicationAutoScaling::ScalingPolicy
8
+ Properties:
9
+ PolicyName: !Sub "${AWS::StackName}-auto-scaling-policy"
10
+ PolicyType: TargetTrackingScaling
11
+ ScalingTargetId: !Ref ScalingTarget
12
+ TargetTrackingScalingPolicyConfiguration:
13
+ PredefinedMetricSpecification:
14
+ PredefinedMetricType: #{autoscaling.predefined_metric_type}
15
+ TargetValue: #{autoscaling.target_value}
16
+ EOL
17
+
18
+ attrs = Ufo::Yaml.load(text).deep_symbolize_keys
19
+ props = attrs[:Properties]
20
+ conf = props[:TargetTrackingScalingPolicyConfiguration]
21
+ conf[:ScaleInCooldown] = autoscaling.scale_in_cooldown if autoscaling.scale_in_cooldown
22
+ conf[:ScaleOutCooldown] = autoscaling.scale_out_cooldown if autoscaling.scale_out_cooldown
23
+
24
+ attrs
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,33 @@
1
+ module Ufo::Cfn::Stack::Builder::Resources::Scaling
2
+ class Role < Base
3
+ def build
4
+ return unless autoscaling_enabled?
5
+
6
+ text =<<~EOL
7
+ Type: AWS::IAM::Role
8
+ Properties:
9
+ AssumeRolePolicyDocument:
10
+ Statement:
11
+ - Effect: Allow
12
+ Principal:
13
+ Service: [application-autoscaling.amazonaws.com]
14
+ Action: ["sts:AssumeRole"]
15
+ Policies:
16
+ - PolicyName: !Sub "${AWS::StackName}-auto-scaling-policy"
17
+ PolicyDocument:
18
+ Version: "2012-10-17"
19
+ Statement:
20
+ - Effect: Allow
21
+ Action:
22
+ - ecs:DescribeServices
23
+ - ecs:UpdateService
24
+ - cloudwatch:PutMetricAlarm
25
+ - cloudwatch:DescribeAlarms
26
+ - cloudwatch:DeleteAlarms
27
+ Resource:
28
+ - "*"
29
+ EOL
30
+ Ufo::Yaml.load(text).deep_symbolize_keys
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,22 @@
1
+ module Ufo::Cfn::Stack::Builder::Resources::Scaling
2
+ class Target < Base
3
+ def build
4
+ return unless autoscaling_enabled?
5
+
6
+ text =<<~EOL
7
+ Type: AWS::ApplicationAutoScaling::ScalableTarget
8
+ DependsOn: EcsService
9
+ Properties:
10
+ RoleARN: !GetAtt ScalingRole.Arn
11
+ ResourceId: !Join
12
+ - "/"
13
+ - [service, #{@cluster}, !GetAtt [EcsService, Name]]
14
+ ServiceNamespace: ecs
15
+ ScalableDimension: ecs:service:DesiredCount
16
+ MinCapacity: #{autoscaling.min_capacity}
17
+ MaxCapacity: #{autoscaling.max_capacity}
18
+ EOL
19
+ Ufo::Yaml.load(text).deep_symbolize_keys
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,4 @@
1
+ module Ufo::Cfn::Stack::Builder::Resources::SecurityGroup
2
+ class Base < Ufo::Cfn::Stack::Builder::Base
3
+ end
4
+ end
@@ -1,4 +1,4 @@
1
- module Ufo::Stack::Builder::Resources::SecurityGroup
1
+ module Ufo::Cfn::Stack::Builder::Resources::SecurityGroup
2
2
  class Ecs < Base
3
3
  def build
4
4
  return unless managed_security_groups?
@@ -28,11 +28,11 @@ module Ufo::Stack::Builder::Resources::SecurityGroup
28
28
  ]
29
29
  }
30
30
 
31
- if @elb_type == "network"
31
+ if vars[:elb_type] == "network"
32
32
  props[:SecurityGroupIngress] = {
33
33
  IpProtocol: "tcp",
34
- FromPort: @container[:port],
35
- ToPort: @container[:port],
34
+ FromPort: vars[:container][:port],
35
+ ToPort: vars[:container][:port],
36
36
  CidrIp: "0.0.0.0/0",
37
37
  Description: "docker ephemeral port range for network elb",
38
38
  }
@@ -1,8 +1,8 @@
1
- module Ufo::Stack::Builder::Resources::SecurityGroup
1
+ module Ufo::Cfn::Stack::Builder::Resources::SecurityGroup
2
2
  class EcsRule < Base
3
3
  def build
4
4
  return unless managed_security_groups?
5
- return unless @elb_type == "application"
5
+ return unless vars[:elb_type] == "application"
6
6
 
7
7
  {
8
8
  Type: "AWS::EC2::SecurityGroupIngress",
@@ -1,8 +1,8 @@
1
- module Ufo::Stack::Builder::Resources::SecurityGroup
1
+ module Ufo::Cfn::Stack::Builder::Resources::SecurityGroup
2
2
  class Elb < Base
3
3
  def build
4
4
  return unless managed_security_groups?
5
- return unless @elb_type == "application"
5
+ return unless vars[:elb_type] == "application"
6
6
 
7
7
  {
8
8
  Type: "AWS::EC2::SecurityGroup",
@@ -12,8 +12,7 @@ module Ufo::Stack::Builder::Resources::SecurityGroup
12
12
  end
13
13
 
14
14
  def properties
15
- port = cfn.dig(:Listener, :Port) || cfn.dig(:listener, :port) # backwards compatiblity
16
-
15
+ port = Ufo.config.elb.port # 80
17
16
  props = {
18
17
  GroupDescription: "Allow http to client host",
19
18
  VpcId: {Ref: "Vpc"},
@@ -41,8 +40,8 @@ module Ufo::Stack::Builder::Resources::SecurityGroup
41
40
  ]
42
41
  }
43
42
 
44
- if @create_listener_ssl
45
- ssl_port = cfn.dig(:ListenerSsl, :Port) || cfn.dig(:listener_ssl, :port) # backwards compatiblity
43
+ if vars[:create_listener_ssl]
44
+ ssl_port = Ufo.config.elb.ssl.port
46
45
  props[:SecurityGroupIngress] << {
47
46
  IpProtocol: "tcp",
48
47
  FromPort: ssl_port,
@@ -1,4 +1,4 @@
1
- class Ufo::Stack::Builder::Resources
1
+ class Ufo::Cfn::Stack::Builder::Resources
2
2
  class TargetGroup < Base
3
3
  def build
4
4
  {
@@ -17,7 +17,7 @@ class Ufo::Stack::Builder::Resources
17
17
  Value: @stack_name,
18
18
  }
19
19
  ],
20
- Protocol: @default_target_group_protocol,
20
+ Protocol: vars[:default_target_group_protocol],
21
21
  Port: 80,
22
22
  HealthCheckIntervalSeconds: 10,
23
23
  HealthyThresholdCount: 2,
@@ -30,8 +30,8 @@ class Ufo::Stack::Builder::Resources
30
30
  ]
31
31
  }
32
32
 
33
- props[:TargetType] = "ip" if @container[:network_mode] == "awsvpc"
34
- props[:HealthCheckPort] = @container[:port] if @elb_type == "network" && @network_mode == "awsvpc"
33
+ props[:TargetType] = "ip" if vars[:container][:network_mode] == "awsvpc"
34
+ props[:HealthCheckPort] = vars[:container][:port] if vars[:elb_type] == "network" && vars[:network_mode] == "awsvpc"
35
35
 
36
36
  props
37
37
  end