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,63 @@
1
+ module Ufo::Docker
2
+ class State
3
+ include Ufo::Utils::Logging
4
+ include Ufo::Utils::Pretty
5
+
6
+ def initialize(docker_image, options={})
7
+ @docker_image, @options = docker_image, options
8
+ end
9
+
10
+ def update
11
+ data = current_data
12
+ data[Ufo.env] ||= {}
13
+ data[Ufo.env]["base_image"] = @docker_image
14
+ pretty_path = state_path.sub("#{Ufo.root}/", "")
15
+ FileUtils.mkdir_p(File.dirname(state_path))
16
+ IO.write(state_path, YAML.dump(data))
17
+ logger.info "The #{pretty_path} base_image has been updated with the latest base image:".color(:green)
18
+ logger.info " #{@docker_image}".color(:green)
19
+ reminder_message
20
+ end
21
+
22
+ def current_data
23
+ File.exist?(state_path) ? YAML.load_file(state_path) : {}
24
+ end
25
+
26
+ def state_path
27
+ path = "#{Ufo.root}/.ufo/state"
28
+ if ENV['UFO_APP'] # env var activates app path
29
+ path = "#{Ufo.root}/.ufo/state/#{Ufo.app}"
30
+ end
31
+ "#{path}/data.yml"
32
+ end
33
+
34
+ def reminder_message
35
+ return unless Ufo.config.state.reminder
36
+ repo = ENV['UFO_CENTRAL_REPO']
37
+ return unless repo
38
+ logger.info "It looks like you're using a central deployer pattern".color(:yellow)
39
+ logger.info <<~EOL
40
+ Remember to commit the state file:
41
+
42
+ state file: #{pretty_path(state_path)}
43
+ repo: #{repo}
44
+
45
+ EOL
46
+
47
+ unless ENV['UFO_APP']
48
+ logger.info "WARN: It also doesnt look like UFO_ENV is set".color(:yellow)
49
+ logger.info "UFO_ENV should be set when you're using ufo in a central manner"
50
+ end
51
+
52
+ logger.info <<~EOL
53
+ You can disable these reminder messages with:
54
+
55
+ .ufo/config.rb
56
+
57
+ Ufo.configure do |config|
58
+ config.state.reminder = false
59
+ end
60
+ EOL
61
+ end
62
+ end
63
+ end
data/lib/ufo/ecr/auth.rb CHANGED
@@ -17,11 +17,12 @@ This class manipulates the ~/.docker/config.json file which is an internal docke
17
17
  =end
18
18
  module Ufo
19
19
  class Ecr::Auth
20
- include AwsService
20
+ include Ufo::AwsServices
21
+ include Ufo::Utils::Logging
21
22
 
22
- def initialize(full_image_name)
23
- @full_image_name = full_image_name
24
- @repo_domain = "#{full_image_name.split('/').first}"
23
+ def initialize(docker_image)
24
+ @docker_image = docker_image
25
+ @repo_domain = "#{docker_image.split('/').first}"
25
26
  end
26
27
 
27
28
  def update
@@ -32,16 +33,16 @@ module Ufo
32
33
  username, password = Base64.decode64(auth_token).split(':')
33
34
 
34
35
  command = "docker login -u #{username} --password-stdin #{@repo_domain}"
35
- puts "=> #{command}".color(:green)
36
+ logger.debug "=> #{command}".color(:green)
36
37
  *, status = Open3.capture3(command, stdin_data: password)
37
38
  unless status.success?
38
- puts "ERROR: The docker failed to login.".color(:red)
39
+ logger.error "ERROR: The docker failed to login.".color(:red)
39
40
  exit 1
40
41
  end
41
42
  end
42
43
 
43
44
  def ecr_image?
44
- !!(@full_image_name =~ /\.amazonaws\.com/)
45
+ !!(@docker_image =~ /\.amazonaws\.com/)
45
46
  end
46
47
 
47
48
  def fetch_auth_token
@@ -1,25 +1,23 @@
1
1
  require "json"
2
2
 
3
- # Can test:
4
- #
5
- # ufo ship app-web --cluster prod --noop
6
3
  module Ufo
7
4
  class Ecr::Cleaner
8
- include Util
9
- include AwsService
5
+ include Ufo::AwsServices
6
+ include Ufo::Utils::Execute
7
+ include Ufo::Utils::Logging
10
8
 
11
9
  def initialize(docker_image_name, options={})
12
10
  # docker_image_name does not containg the tag
13
11
  # Example: 123456789.dkr.ecr.us-east-1.amazonaws.com/image
14
12
  @docker_image_name = docker_image_name
15
13
  @options = options
16
- @keep = options[:ecr_keep] || settings[:ecr_keep]
14
+ @keep = options[:ecr_keep] || Ufo.config.docker.ecr_keep
17
15
  @tag_prefix = options[:tag_prefix] || "ufo"
18
16
  end
19
17
 
20
18
  def cleanup
21
- return false unless ecr_image?
22
19
  return false unless @keep
20
+ return false unless ecr_image?
23
21
  update_auth_token
24
22
  image_tags = fetch_image_tags
25
23
  delete_tags = image_tags[@keep..-1] # ordered by most recent images first
@@ -36,16 +34,14 @@ module Ufo
36
34
 
37
35
  def delete_images(tags)
38
36
  return if tags.nil? || tags.empty?
39
- unless @options[:mute]
40
- puts "Keeping #{@keep} most recent ECR images."
41
- puts "Deleting these ECR images:"
42
- tag_list = tags.map { |t| " #{repo_name}:#{t}" }
43
- puts tag_list
44
- end
37
+ logger.info "Keeping #{@keep} most recent ECR images."
38
+ logger.info "Deleting these ECR images:"
39
+ tag_list = tags.map { |t| " #{repo_name}:#{t}" }
40
+ logger.info tag_list
45
41
  image_ids = tags.map { |tag| {image_tag: tag} }
46
42
  ecr.batch_delete_image(
47
43
  repository_name: repo_name,
48
- image_ids: image_ids) unless @options[:noop]
44
+ image_ids: image_ids)
49
45
  end
50
46
 
51
47
  def update_auth_token
@@ -0,0 +1,31 @@
1
+ class Module
2
+ # Include all modules within the relative folder. IE: for dsl/syntax/mod/*
3
+ #
4
+ # include Common
5
+ # include Provider
6
+ # # etc
7
+ #
8
+ # Caller lines are different for OSes:
9
+ #
10
+ # windows: "C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/lono-1.1.1/lib/lono/builder.rb:34:in `build'"
11
+ # linux: "/home/ec2-user/.rvm/gems/ruby-3.0.3/gems/lono-1.1.1/lib/lono/compiler/dsl/syntax/mod.rb:4:in `<module:Mod>'"
12
+ #
13
+ def include_modules(dir)
14
+ caller_line = caller[0]
15
+ parts = caller_line.split(':')
16
+ calling_file = caller_line.match(/^[a-zA-Z]:/) ? parts[1] : parts[0]
17
+ parent_dir = File.dirname(calling_file)
18
+
19
+ full_dir = "#{parent_dir}/#{dir}"
20
+ paths = Dir.glob("#{full_dir}/**/*.rb")
21
+ if paths.empty?
22
+ raise "Empty include_modules full_dir: #{full_dir}"
23
+ end
24
+ paths.each do |path|
25
+ regexp = Regexp.new(".*/lib/")
26
+ mod = path.sub(regexp, '').sub('.rb','').camelize
27
+ c = mod.constantize
28
+ include c if c.class == Module
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,11 @@
1
+ require "json"
2
+
3
+ module Ufo
4
+ refine NilClass do
5
+ def to_json
6
+ JSON.generate(self)
7
+ end
8
+ end
9
+ end
10
+
11
+ using Ufo
data/lib/ufo/ext.rb ADDED
@@ -0,0 +1,2 @@
1
+ require_relative "ext/core/module"
2
+ require_relative "ext/core/nil_class"
@@ -1,4 +1,4 @@
1
- module Ufo::Role
1
+ module Ufo::IamRole
2
2
  class Builder
3
3
  def initialize(role_type)
4
4
  @role_type = role_type
@@ -1,11 +1,13 @@
1
- module Ufo::Role
1
+ module Ufo::IamRole
2
2
  class DSL
3
+ include DslEvaluator
4
+
3
5
  def initialize(path)
4
6
  @path = path # IE: .ufo/iam_roles/task_role.rb
5
7
  end
6
8
 
7
9
  def evaluate
8
- instance_eval(IO.read(@path), @path)
10
+ evaluate_file(@path)
9
11
  end
10
12
 
11
13
  def iam_policy(policy_name, statements)
@@ -17,5 +19,9 @@ module Ufo::Role
17
19
  role_type = File.basename(@path).sub('.rb','') # task_role or execution_role
18
20
  Registry.register_managed_policy(role_type, policies)
19
21
  end
22
+
23
+ def aws
24
+ AwsData.new
25
+ end
20
26
  end
21
27
  end
@@ -1,6 +1,6 @@
1
1
  require "set"
2
2
 
3
- module Ufo::Role
3
+ module Ufo::IamRole
4
4
  class Registry
5
5
  class_attribute :policies
6
6
  self.policies = {}
data/lib/ufo/info.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  module Ufo
2
- class Info < Base
2
+ class Info < Ufo::CLI::Base
3
+ include Ufo::AwsServices
4
+
3
5
  def run
4
6
  unless service
5
7
  puts no_service_message
@@ -7,12 +9,15 @@ module Ufo
7
9
  end
8
10
  puts "Resources:"
9
11
  stack_resources.each do |r|
10
- # pp r
11
12
  puts "#{r.logical_resource_id} - #{r.resource_type}:".color(:green)
12
13
  puts " #{r.physical_resource_id}"
13
14
  end
14
15
  end
15
16
 
17
+ def no_service_message
18
+ "No stack #{@stack_name.color(:green)} found"
19
+ end
20
+
16
21
  # Passing in service so method can be used else where.
17
22
  def load_balancer(service)
18
23
  load_balancer = service.load_balancers.first
@@ -33,24 +38,37 @@ module Ufo
33
38
  return unless stack
34
39
 
35
40
  service = stack_resources.find { |r| r.resource_type == "AWS::ECS::Service" }
41
+ return unless service # stack is still creating
36
42
  arn = service.physical_resource_id
37
43
  resp = ecs.describe_services(services: [arn], cluster: @cluster)
38
44
  resp.services.first
39
45
  end
40
46
  memoize :service
41
47
 
48
+ def service?
49
+ !!service
50
+ end
51
+
42
52
  def stack
43
53
  find_stack(@stack_name)
44
54
  end
45
55
  memoize :stack
46
56
 
47
- def route53_dns
57
+ def url
48
58
  return unless stack
49
59
 
50
60
  output = stack.outputs.find do |o|
51
61
  o.output_key == "Route53Dns"
52
62
  end
53
- output.output_value if output
63
+ dns_name = output.output_value if output
64
+ return unless dns_name
65
+
66
+ ssl = stack_resources.detect.find do |r|
67
+ r.logical_resource_id == "ListenerSsl"
68
+ end
69
+
70
+ protocol = ssl ? 'https' : 'http'
71
+ "#{protocol}://#{dns_name}"
54
72
  end
55
73
 
56
74
  def stack_resources
@@ -0,0 +1,95 @@
1
+ require "aws_data"
2
+
3
+ # Layers example
4
+ #
5
+ # .ufo/vars.rb
6
+ # .ufo/vars/base.rb
7
+ # .ufo/vars/dev.rb
8
+ # .ufo/vars/prod.rb
9
+ # .ufo/vars/app1.rb
10
+ # .ufo/vars/app1/base.rb
11
+ # .ufo/vars/app1/dev.rb
12
+ # .ufo/vars/app1/prod.rb
13
+ #
14
+ module Ufo::Layering
15
+ class Layer
16
+ extend Memoist
17
+ include Ufo::Layering
18
+ include Ufo::Utils::Logging
19
+ include Ufo::Utils::Pretty
20
+
21
+ def initialize(task_definition)
22
+ @task_definition = task_definition
23
+ end
24
+
25
+ def paths
26
+ core = full_layers(".ufo/vars")
27
+ app = full_layers(".ufo/vars/#{Ufo.app}")
28
+ paths = core + app
29
+ add_ext!(paths)
30
+ paths.map! { |p| "#{Ufo.root}/#{p}" }
31
+ show_layers(paths)
32
+ paths
33
+ end
34
+
35
+ def full_layering
36
+ # layers defined in Lono::Layering module
37
+ all = layers.map { |layer| layer.sub(/\/$/,'') } # strip trailing slash
38
+ all.inject([]) do |sum, layer|
39
+ sum += layer_levels(layer) unless layer.nil?
40
+ sum
41
+ end
42
+ end
43
+
44
+ # interface method
45
+ def main_layers
46
+ ['']
47
+ end
48
+
49
+ # adds prefix and to each layer pair that has base and Ufo.env. IE:
50
+ #
51
+ # "#{prefix}/base"
52
+ # "#{prefix}/#{Ufo.env}"
53
+ #
54
+ def layer_levels(prefix=nil)
55
+ levels = ["base", Ufo.env]
56
+ levels.map! do |i|
57
+ # base layer has prefix of '', reject with blank so it doesnt produce '//'
58
+ [prefix, i].reject(&:blank?).join('/')
59
+ end
60
+ levels.unshift(prefix) # unless prefix.blank? # IE: params/us-west-2.txt
61
+ levels
62
+ end
63
+
64
+ def add_ext!(paths)
65
+ ext = "rb"
66
+ paths.map! do |path|
67
+ path = path.sub(/\/$/,'') if path.ends_with?('/')
68
+ "#{path}.rb"
69
+ end
70
+ paths
71
+ end
72
+
73
+ def full_layers(dir)
74
+ layers = full_layering.map do |layer|
75
+ "#{dir}/#{layer}"
76
+ end
77
+ role_layers = full_layering.map do |layer|
78
+ "#{dir}/#{@task_definition.role}/#{layer}" # Note: layer can be '' will clean up
79
+ end
80
+ layers += role_layers
81
+ layers.map { |l| l.gsub('//','/') } # cleanup // if layer is ''
82
+ end
83
+
84
+ @@shown_layers = false
85
+ def show_layers(paths)
86
+ return if @@shown_layers
87
+ logger.info "Vars Layers:" if ENV['UFO_SHOW_ALL_LAYERS']
88
+ paths.each do |path|
89
+ show_layer = File.exist?(path) && logger.level <= Logger::DEBUG
90
+ logger.info " #{pretty_path(path)}" if show_layer || ENV['UFO_SHOW_ALL_LAYERS']
91
+ end
92
+ @@shown_layers = true
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,23 @@
1
+ require "active_support/lazy_load_hooks"
2
+
3
+ module Ufo
4
+ module Layering
5
+ def layers
6
+ pre_layers + main_layers + post_layers
7
+ end
8
+
9
+ def main_layers
10
+ super
11
+ end
12
+
13
+ def pre_layers
14
+ []
15
+ end
16
+
17
+ def post_layers
18
+ []
19
+ end
20
+ end
21
+ end
22
+
23
+ ActiveSupport.run_load_hooks(:ufo_layering, Ufo::Layering)
data/lib/ufo/log_group.rb CHANGED
@@ -1,24 +1,20 @@
1
1
  # Use to automatically create the CloudWatch group.
2
2
  # For some reason creating ECS does do this by default.
3
3
  module Ufo
4
- class LogGroup
5
- include AwsService
6
-
7
- def initialize(task_definition, options)
8
- @task_definition, @options = task_definition, options
9
- end
4
+ class LogGroup < Ufo::CLI::Base
5
+ include Ufo::AwsServices
10
6
 
11
7
  def create
12
- puts "Ensuring log group for #{@task_definition.color(:green)} task definition exists"
8
+ logger.debug "Ensuring log group for #{@task_definition.name.color(:green)} task definition exists"
13
9
  return if @options[:noop]
14
10
  return if @options[:rollback] # dont need to create log group because previously deployed
15
11
 
16
- Ufo.check_task_definition!(@task_definition)
12
+ check_task_definition_exists!
17
13
  task_def = JSON.load(IO.read(task_def_path))
18
14
  task_def["containerDefinitions"].each do |container_def|
19
15
  begin
20
16
  log_group_name = container_def["logConfiguration"]["options"]["awslogs-group"]
21
- puts "Log group name: #{log_group_name}"
17
+ logger.debug "Log group name: #{log_group_name}"
22
18
  rescue NoMethodError
23
19
  # silence when the logConfiguration is not specified
24
20
  end
@@ -34,7 +30,19 @@ module Ufo
34
30
  end
35
31
 
36
32
  def task_def_path
37
- "#{Ufo.root}/.ufo/output/#{@task_definition}.json"
33
+ "#{Ufo.root}/.ufo/output/task_definition.json"
34
+ end
35
+
36
+ def check_task_definition_exists!
37
+ return if File.exist?(task_def_path)
38
+ logger.error "ERROR: Unable to find the task definition at #{task_def_path}.".color(:red)
39
+ logger.error <<~EOL
40
+ Please double check that it was built correctly with:
41
+
42
+ ufo build
43
+
44
+ EOL
45
+ exit 1
38
46
  end
39
47
  end
40
48
  end
@@ -0,0 +1,13 @@
1
+ class Ufo::Logger
2
+ class Formatter < ::Logger::Formatter
3
+ def call(severity, time, progname, msg)
4
+ # careful changing the format. All::Summary uses a regexp on this format to remove the timestamp
5
+ "[#{format_datetime(time)} ##{Process.pid} #{progname}]: #{msg}"
6
+ end
7
+
8
+ private
9
+ def format_datetime(time)
10
+ time.strftime("%Y-%m-%dT%H:%M:%S")
11
+ end
12
+ end
13
+ end
data/lib/ufo/logger.rb ADDED
@@ -0,0 +1,32 @@
1
+ require 'logger'
2
+
3
+ module Ufo
4
+ class Logger < ::Logger
5
+ def initialize(*args)
6
+ super
7
+ self.formatter = Formatter.new
8
+ self.level = ENV['UFO_LOG_LEVEL'] || :info # note: only respected when config.logger not set in config/app.rb
9
+ end
10
+
11
+ def format_message(severity, datetime, progname, msg)
12
+ line = if @logdev.dev == $stdout || @logdev.dev == $stderr || @logdev.dev.is_a?(StringIO)
13
+ msg # super simple format if stdout
14
+ else
15
+ super # use the configured formatter
16
+ end
17
+ line =~ /\n$/ ? line : "#{line}\n"
18
+ end
19
+
20
+ # Used to allow output to always go to stdout
21
+ def stdout(msg, newline: true)
22
+ if newline
23
+ puts msg
24
+ else
25
+ print msg
26
+ end
27
+ end
28
+
29
+ public :print
30
+ public :printf
31
+ end
32
+ end
data/lib/ufo/names.rb ADDED
@@ -0,0 +1,69 @@
1
+ module Ufo
2
+ class Names
3
+ extend Memoist
4
+
5
+ attr_reader :role
6
+ def initialize
7
+ @role = Ufo.role
8
+ end
9
+
10
+ def cluster
11
+ expansion(Ufo.config.ecs.cluster) # IE: :ENV => dev
12
+ end
13
+ memoize :cluster
14
+
15
+ def stack
16
+ name = expansion(Ufo.config.names.stack) # IE: :APP-:ROLE-:ENV => demo-web-dev
17
+ [name, Ufo.extra].compact.join('-')
18
+ end
19
+ memoize :stack
20
+
21
+ def task_definition
22
+ expansion(Ufo.config.names.task_definition) # IE: :APP-:ROLE-:ENV => demo-web-dev
23
+ end
24
+ memoize :task_definition
25
+
26
+ def expansion(string, options={})
27
+ return string unless string.is_a?(String) # in case of nil
28
+
29
+ string = string.dup
30
+ vars = string.scan(/:\w+/) # => [":APP", ":ROLE", :ENV"]
31
+ vars.each do |var|
32
+ string.gsub!(var, var_value(var))
33
+ end
34
+ string = strip(string)
35
+ dashes = options[:dasherize].nil? ? true : options[:dasherize]
36
+ string = string.dasherize if dashes
37
+ string
38
+ end
39
+
40
+ def var_value(unexpanded)
41
+ name = unexpanded.sub(':','').downcase
42
+ if respond_to?(name)
43
+ send(name).to_s # pass value straight through
44
+ else
45
+ unexpanded
46
+ end
47
+ end
48
+
49
+ def strip(string)
50
+ string.sub(/^-+/,'').sub(/-+$/,'') # remove leading and trailing -
51
+ .gsub(%r{-+},'-') # remove double dashes are more. IE: -- => -
52
+ end
53
+
54
+ def app
55
+ Ufo.app
56
+ end
57
+
58
+ def env
59
+ Ufo.env
60
+ end
61
+ alias_method :ufo_env, :env
62
+
63
+ delegate :region, to: :aws
64
+ def aws
65
+ AwsData.new
66
+ end
67
+ memoize :aws
68
+ end
69
+ end
data/lib/ufo/param.rb CHANGED
@@ -18,7 +18,8 @@ module Ufo
18
18
  memoize :data
19
19
 
20
20
  def template_scope
21
- @template_scope ||= Ufo::TemplateScope.new(Ufo::DSL::Helper.new, nil)
21
+ self # TODO: add access to helpers like network
22
+ # @template_scope ||= Ufo::TemplateScope.new(Ufo::DSL::Helper.new, nil)
22
23
  end
23
24
  end
24
25
  end
@@ -0,0 +1,7 @@
1
+ class Ufo::TaskDefinition
2
+ class Builder < Ufo::CLI::Base
3
+ def build
4
+ Erb.new(@options).run
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,45 @@
1
+ class Ufo::TaskDefinition
2
+ module Context
3
+ include DslEvaluator
4
+ include Helpers
5
+
6
+ def load_context
7
+ load_variables
8
+ load_custom_helpers
9
+ end
10
+
11
+ def load_variables
12
+ layers = Ufo::Layering::Layer.new(@task_definition).paths
13
+ layers.each do |layer|
14
+ evaluate_file(layer)
15
+ end
16
+ end
17
+
18
+ def load_custom_helpers
19
+ load_helper_files("#{Ufo.root}/.ufo/helpers")
20
+ end
21
+
22
+ # Load custom project helper methods
23
+ def load_helper_files(dir)
24
+ paths = Dir.glob("#{dir}/**/*.rb")
25
+ paths.sort_by! { |p| p.size } # so namespaces are loaded first
26
+ paths.each do |path|
27
+ next unless File.file?(path)
28
+
29
+ filename = path.sub(%r{.*/helpers/},'').sub('.rb','')
30
+ module_name = filename.camelize
31
+
32
+ # Prepend a period so require works when UFO_ROOT is set to a relative path without a period.
33
+ # Example: UFO_ROOT=tmp/ufo_project
34
+ first_char = path[0..0]
35
+ path = "./#{path}" unless %w[. /].include?(first_char)
36
+
37
+ # Examples:
38
+ # path: .ufo/helpers/custom_helper.rb
39
+ # module_name: CustomHelper
40
+ require path
41
+ self.class.send :include, module_name.constantize
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,18 @@
1
+ class Ufo::TaskDefinition::Erb
2
+ class Base < Ufo::CLI::Base
3
+ def initialize(options={})
4
+ super
5
+ @path = options[:path]
6
+ @task_definition = options[:task_definition]
7
+ end
8
+
9
+ def print_code(text)
10
+ lines = text.split("\n")
11
+ lpad = lines.size.to_s.size
12
+ lines.each_with_index do |line,n|
13
+ printf("%#{lpad}d %s\n", n+1, line)
14
+ end
15
+ nil
16
+ end
17
+ end
18
+ end