ufo 5.0.7 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.
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