lono 7.5.2 → 8.0.0.pre.rc3

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 (517) hide show
  1. checksums.yaml +4 -4
  2. data/.cody/README.md +5 -15
  3. data/.cody/acceptance/bin/build.sh +52 -0
  4. data/.cody/acceptance/buildspec.yml +10 -0
  5. data/.cody/acceptance/project.rb +6 -0
  6. data/.cody/{role.rb → acceptance/role.rb} +0 -0
  7. data/.cody/shared/script/install/lono.sh +40 -0
  8. data/.cody/shared/script/install.sh +5 -0
  9. data/CHANGELOG.md +46 -5
  10. data/CONTRIBUTING.md +2 -2
  11. data/Gemfile +3 -1
  12. data/LICENSE.txt +201 -1
  13. data/README.md +6 -11
  14. data/lib/lono/api/client.rb +3 -2
  15. data/lib/lono/app/callable_option/concern.rb +12 -0
  16. data/lib/lono/app/callable_option.rb +56 -0
  17. data/lib/lono/app/inits.rb +13 -0
  18. data/lib/lono/app.rb +73 -0
  19. data/lib/lono/autoloader.rb +3 -2
  20. data/lib/lono/aws_services/helper.rb +41 -6
  21. data/lib/lono/aws_services.rb +37 -6
  22. data/lib/lono/blueprint.rb +3 -11
  23. data/lib/lono/booter.rb +28 -0
  24. data/lib/lono/builder/allow/base.rb +54 -0
  25. data/lib/lono/builder/allow/env.rb +17 -0
  26. data/lib/lono/builder/allow/region.rb +20 -0
  27. data/lib/lono/builder/allow.rb +8 -0
  28. data/lib/lono/builder/configset/combiner.rb +145 -0
  29. data/lib/lono/builder/configset/definition/base.rb +47 -0
  30. data/lib/lono/builder/configset/definition/context.rb +29 -0
  31. data/lib/lono/{configset/strategy/helpers/dsl → builder/configset/definition/dsl/syntax}/auth.rb +1 -1
  32. data/lib/lono/{configset/strategy/helpers/dsl/core.rb → builder/configset/definition/dsl/syntax/content.rb} +11 -3
  33. data/lib/lono/{configset/strategy/helpers/dsl/syntax.rb → builder/configset/definition/dsl/syntax/core.rb} +15 -9
  34. data/lib/lono/{configset/strategy/helpers/dsl → builder/configset/definition/dsl/syntax}/package.rb +1 -1
  35. data/lib/lono/builder/configset/definition/dsl/syntax.rb +5 -0
  36. data/lib/lono/{configset/strategy → builder/configset/definition}/dsl.rb +10 -14
  37. data/lib/lono/{configset/strategy → builder/configset/definition}/erb.rb +13 -16
  38. data/lib/lono/builder/configset/definition.rb +18 -0
  39. data/lib/lono/builder/configset/evaluator.rb +10 -0
  40. data/lib/lono/builder/configset/registration.rb +35 -0
  41. data/lib/lono/builder/context.rb +40 -0
  42. data/lib/lono/builder/dsl/evaluator.rb +45 -0
  43. data/lib/lono/builder/dsl/finalizer/base.rb +8 -0
  44. data/lib/lono/builder/dsl/finalizer/configsets.rb +20 -0
  45. data/lib/lono/builder/dsl/finalizer/files/base.rb +4 -0
  46. data/lib/lono/builder/dsl/finalizer/files/build.rb +58 -0
  47. data/lib/lono/builder/dsl/finalizer/files/replace.rb +31 -0
  48. data/lib/lono/builder/dsl/finalizer/files.rb +9 -0
  49. data/lib/lono/{template/strategy → builder}/dsl/finalizer/parameter_groups.rb +6 -5
  50. data/lib/lono/builder/dsl/finalizer.rb +15 -0
  51. data/lib/lono/{template/strategy/dsl/builder/helpers/ec2_helper.rb → builder/dsl/helpers/ec2.rb} +3 -3
  52. data/lib/lono/builder/dsl/helpers/files.rb +7 -0
  53. data/lib/lono/builder/dsl/helpers/partials.rb +140 -0
  54. data/lib/lono/{template/strategy/dsl/builder/helpers/s3_helper.rb → builder/dsl/helpers/s3.rb} +3 -3
  55. data/lib/lono/{template/context/ssm_fetcher.rb → builder/dsl/helpers/ssm/fetcher.rb} +5 -3
  56. data/lib/lono/{template/context/helpers.rb → builder/dsl/helpers/ssm.rb} +3 -3
  57. data/lib/lono/{template/strategy/dsl/builder/helpers/stack_helper.rb → builder/dsl/helpers/stack.rb} +14 -9
  58. data/lib/lono/{template/strategy/dsl/builder/helpers/tags_helper.rb → builder/dsl/helpers/tags.rb} +2 -2
  59. data/lib/lono/builder/dsl/helpers/template_file.rb +66 -0
  60. data/lib/lono/builder/dsl/helpers.rb +5 -0
  61. data/lib/lono/builder/dsl/syntax/core/base.rb +22 -0
  62. data/lib/lono/{template/strategy/dsl/builder/section → builder/dsl/syntax/core}/condition.rb +1 -1
  63. data/lib/lono/{template/strategy/dsl/builder/section → builder/dsl/syntax/core}/mapping.rb +1 -1
  64. data/lib/lono/{template/strategy/dsl/builder/section → builder/dsl/syntax/core}/output.rb +1 -1
  65. data/lib/lono/{template/strategy/dsl/builder/section → builder/dsl/syntax/core}/parameter.rb +1 -1
  66. data/lib/lono/{template/strategy/dsl/builder/section → builder/dsl/syntax/core}/resource/property_mover.rb +12 -2
  67. data/lib/lono/{template/strategy/dsl/builder/section → builder/dsl/syntax/core}/resource.rb +1 -1
  68. data/lib/lono/{template/strategy/dsl/builder/section → builder/dsl/syntax/core}/section.rb +1 -1
  69. data/lib/lono/builder/dsl/syntax/core/squeezer.rb +38 -0
  70. data/lib/lono/{template/strategy/dsl/builder/section/methods.rb → builder/dsl/syntax/core.rb} +8 -8
  71. data/lib/lono/{template/strategy/dsl/builder → builder/dsl/syntax}/fn.rb +2 -2
  72. data/lib/lono/{template/strategy/dsl/builder → builder/dsl}/syntax/parameter_group.rb +1 -1
  73. data/lib/lono/builder/dsl/syntax.rb +9 -0
  74. data/lib/lono/builder/dsl.rb +14 -0
  75. data/lib/lono/{param/generator.rb → builder/param.rb} +24 -22
  76. data/lib/lono/builder/template/aws_service.rb +15 -0
  77. data/lib/lono/builder/template/bashify.rb +43 -0
  78. data/lib/lono/{output/template.rb → builder/template/output.rb} +14 -7
  79. data/lib/lono/{template → builder/template}/post_processor.rb +4 -4
  80. data/lib/lono/builder/template/upload.rb +8 -0
  81. data/lib/lono/builder/template.rb +55 -0
  82. data/lib/lono/{template/strategy/dsl/builder → builder/util}/stringify.rb +1 -1
  83. data/lib/lono/bundler/cli/base.rb +10 -0
  84. data/lib/lono/bundler/cli/bundle.rb +44 -0
  85. data/lib/lono/bundler/cli/clean.rb +27 -0
  86. data/lib/lono/bundler/cli/help/bundle.md +3 -0
  87. data/lib/lono/bundler/cli/help.rb +11 -0
  88. data/lib/lono/bundler/cli.rb +7 -0
  89. data/lib/lono/bundler/component/concerns/local_concern.rb +10 -0
  90. data/lib/lono/bundler/component/concerns/notation_concern.rb +59 -0
  91. data/lib/lono/bundler/component/concerns/path_concern.rb +68 -0
  92. data/lib/lono/bundler/component/concerns/stack_concern.rb +60 -0
  93. data/lib/lono/bundler/component/fetcher/base.rb +27 -0
  94. data/lib/lono/bundler/component/fetcher/gcs.rb +69 -0
  95. data/lib/lono/bundler/component/fetcher/git.rb +69 -0
  96. data/lib/lono/bundler/component/fetcher/local.rb +15 -0
  97. data/lib/lono/bundler/component/fetcher/s3.rb +66 -0
  98. data/lib/lono/bundler/component/fetcher.rb +18 -0
  99. data/lib/lono/bundler/component/http/concern.rb +45 -0
  100. data/lib/lono/bundler/component/http/source.rb +19 -0
  101. data/lib/lono/bundler/component/org_repo.rb +65 -0
  102. data/lib/lono/bundler/component/props/extension.rb +18 -0
  103. data/lib/lono/bundler/component/props/typer.rb +41 -0
  104. data/lib/lono/bundler/component/props.rb +122 -0
  105. data/lib/lono/bundler/component/registry.rb +136 -0
  106. data/lib/lono/bundler/component.rb +52 -0
  107. data/lib/lono/bundler/config.rb +18 -0
  108. data/lib/lono/bundler/dsl/syntax.rb +46 -0
  109. data/lib/lono/bundler/dsl.rb +21 -0
  110. data/lib/lono/bundler/exporter/base.rb +6 -0
  111. data/lib/lono/bundler/exporter/copy.rb +22 -0
  112. data/lib/lono/bundler/exporter.rb +50 -0
  113. data/lib/lono/bundler/extract/tar.rb +33 -0
  114. data/lib/lono/bundler/extract/zip.rb +16 -0
  115. data/lib/lono/bundler/info.rb +39 -0
  116. data/lib/lono/bundler/list.rb +26 -0
  117. data/lib/lono/bundler/lockfile/version_comparer.rb +56 -0
  118. data/lib/lono/bundler/lockfile/yamler.rb +36 -0
  119. data/lib/lono/bundler/lockfile.rb +66 -0
  120. data/lib/lono/bundler/lonofile.rb +32 -0
  121. data/lib/lono/bundler/runner.rb +27 -0
  122. data/lib/lono/bundler/syncer.rb +70 -0
  123. data/lib/lono/bundler/util/git.rb +37 -0
  124. data/lib/lono/bundler/util/logging.rb +7 -0
  125. data/lib/lono/bundler/util/sure.rb +5 -0
  126. data/lib/lono/{bundle.rb → bundler.rb} +38 -4
  127. data/lib/lono/cfn/base.rb +9 -195
  128. data/lib/lono/cfn/cancel.rb +12 -29
  129. data/lib/lono/cfn/concerns/build.rb +10 -0
  130. data/lib/lono/cfn/concerns/template_output.rb +10 -0
  131. data/lib/lono/cfn/concerns.rb +43 -0
  132. data/lib/lono/cfn/delete.rb +8 -32
  133. data/lib/lono/cfn/deploy/base.rb +4 -0
  134. data/lib/lono/cfn/deploy/iam.rb +48 -0
  135. data/lib/lono/cfn/deploy/notification.rb +8 -0
  136. data/lib/lono/cfn/deploy/operable.rb +18 -0
  137. data/lib/lono/cfn/deploy/opts.rb +49 -0
  138. data/lib/lono/cfn/deploy/rollback.rb +46 -0
  139. data/lib/lono/cfn/deploy/tags.rb +18 -0
  140. data/lib/lono/cfn/deploy.rb +100 -5
  141. data/lib/lono/cfn/download.rb +4 -7
  142. data/lib/lono/cfn/output.rb +49 -0
  143. data/lib/lono/cfn/plan/base.rb +19 -0
  144. data/lib/lono/cfn/plan/changeset/base.rb +19 -0
  145. data/lib/lono/cfn/plan/changeset/notifications.rb +24 -0
  146. data/lib/lono/cfn/plan/changeset/outputs.rb +25 -0
  147. data/lib/lono/cfn/plan/changeset/resources.rb +48 -0
  148. data/lib/lono/cfn/plan/changeset/tags.rb +16 -0
  149. data/lib/lono/cfn/plan/changeset.rb +136 -0
  150. data/lib/lono/cfn/plan/concerns.rb +10 -0
  151. data/lib/lono/cfn/plan/delete.rb +16 -0
  152. data/lib/lono/cfn/plan/diff/base.rb +10 -0
  153. data/lib/lono/cfn/plan/diff/data.rb +62 -0
  154. data/lib/lono/cfn/plan/diff/file.rb +57 -0
  155. data/lib/lono/cfn/plan/new.rb +26 -0
  156. data/lib/lono/cfn/{preview → plan}/param.rb +26 -34
  157. data/lib/lono/cfn/plan/summary.rb +16 -0
  158. data/lib/lono/cfn/plan/template.rb +28 -0
  159. data/lib/lono/cfn/plan.rb +34 -0
  160. data/lib/lono/cfn/show.rb +30 -0
  161. data/lib/lono/cfn/status.rb +1 -1
  162. data/lib/lono/cli/abstract.rb +11 -0
  163. data/lib/lono/cli/base.rb +11 -0
  164. data/lib/lono/cli/build.rb +47 -0
  165. data/lib/lono/cli/bundle.rb +21 -0
  166. data/lib/lono/cli/cfn/opts.rb +59 -0
  167. data/lib/lono/cli/cfn.rb +19 -0
  168. data/lib/lono/cli/clean.rb +23 -0
  169. data/lib/lono/cli/code.rb +22 -0
  170. data/lib/lono/{completion.rb → cli/completion.rb} +2 -2
  171. data/lib/lono/{help → cli/help}/blueprint/new.md +4 -4
  172. data/lib/lono/{help/generate.md → cli/help/build.md} +6 -6
  173. data/lib/lono/{help → cli/help}/cfn/cancel.md +0 -0
  174. data/lib/lono/cli/help/cfn/download.md +3 -0
  175. data/lib/lono/{help → cli/help}/cfn/preview.md +9 -8
  176. data/lib/lono/{help → cli/help}/cfn/status.md +0 -1
  177. data/lib/lono/cli/help/cfn.md +4 -0
  178. data/lib/lono/{help → cli/help}/code/convert.md +0 -0
  179. data/lib/lono/{help → cli/help}/code/import.md +2 -2
  180. data/lib/lono/{help → cli/help}/completion.md +3 -3
  181. data/lib/lono/{help → cli/help}/completion_script.md +0 -0
  182. data/lib/lono/{help → cli/help}/configsets.md +0 -0
  183. data/lib/lono/cli/help/down.md +13 -0
  184. data/lib/lono/cli/help/new/helper/blueprint.md +17 -0
  185. data/lib/lono/cli/help/new/helper/project.md +16 -0
  186. data/lib/lono/cli/help/new/project.md +34 -0
  187. data/lib/lono/{help → cli/help}/param/generate.md +0 -0
  188. data/lib/lono/cli/help/param.md +6 -0
  189. data/lib/lono/{help → cli/help}/pro/blueprints.md +0 -0
  190. data/lib/lono/{help → cli/help}/pro/configsets.md +0 -0
  191. data/lib/lono/{help → cli/help}/script/build.md +0 -0
  192. data/lib/lono/{help → cli/help}/script/upload.md +0 -0
  193. data/lib/lono/cli/help/seed.md +24 -0
  194. data/lib/lono/cli/help/summary.md +33 -0
  195. data/lib/lono/{help → cli/help}/template/bashify.md +0 -0
  196. data/lib/lono/cli/help/template/generate.md +7 -0
  197. data/lib/lono/{help → cli/help}/template.md +0 -0
  198. data/lib/lono/cli/help/up.md +30 -0
  199. data/lib/lono/{help → cli/help}/user_data.md +3 -3
  200. data/lib/lono/cli/help.rb +56 -0
  201. data/lib/lono/cli/list.rb +25 -0
  202. data/lib/lono/cli/new/blueprint.rb +29 -0
  203. data/lib/lono/cli/new/concerns.rb +16 -0
  204. data/lib/lono/cli/new/configset.rb +37 -0
  205. data/lib/lono/{extension/new.rb → cli/new/extension.rb} +2 -10
  206. data/lib/lono/cli/new/helper/blueprint.rb +26 -0
  207. data/lib/lono/cli/new/helper/project.rb +24 -0
  208. data/lib/lono/cli/new/helper.rb +13 -0
  209. data/lib/lono/cli/new/project.rb +77 -0
  210. data/lib/lono/cli/new/sequence.rb +56 -0
  211. data/lib/lono/cli/new/shim.rb +59 -0
  212. data/lib/lono/cli/new/test/blueprint.rb +23 -0
  213. data/lib/lono/cli/new/test/sequence.rb +10 -0
  214. data/lib/lono/cli/new/test.rb +8 -0
  215. data/lib/lono/cli/new.rb +27 -0
  216. data/lib/lono/{opts.rb → cli/opts.rb} +9 -12
  217. data/lib/lono/{s3.rb → cli/s3.rb} +9 -7
  218. data/lib/lono/cli/script/base.rb +5 -0
  219. data/lib/lono/cli/script/build.rb +72 -0
  220. data/lib/lono/cli/script/upload.rb +49 -0
  221. data/lib/lono/{script.rb → cli/script.rb} +2 -2
  222. data/lib/lono/cli/seed.rb +9 -0
  223. data/lib/lono/cli/status.rb +18 -0
  224. data/lib/lono/cli/test.rb +35 -0
  225. data/lib/lono/cli.rb +78 -109
  226. data/lib/lono/command.rb +27 -1
  227. data/lib/lono/component.rb +29 -0
  228. data/lib/lono/concerns/aws_info.rb +14 -0
  229. data/lib/lono/concerns/names.rb +9 -0
  230. data/lib/lono/configset.rb +11 -10
  231. data/lib/lono/core.rb +25 -54
  232. data/lib/lono/ext/core/module.rb +31 -0
  233. data/lib/lono/ext/core/object.rb +32 -0
  234. data/lib/lono/ext/core/string.rb +9 -0
  235. data/lib/lono/ext.rb +4 -0
  236. data/lib/lono/files/base.rb +12 -0
  237. data/lib/lono/files/builder.rb +37 -0
  238. data/lib/lono/files/compressor.rb +53 -0
  239. data/lib/lono/files/concerns/post_processing.rb +35 -0
  240. data/lib/lono/files/concerns/registration.rb +13 -0
  241. data/lib/lono/files/registry.rb +6 -0
  242. data/lib/lono/files.rb +37 -0
  243. data/lib/lono/importer/base.rb +6 -6
  244. data/lib/lono/importer/download.rb +7 -7
  245. data/lib/lono/importer/dsl.rb +3 -3
  246. data/lib/lono/importer/service/coder.rb +67 -63
  247. data/lib/lono/importer.rb +1 -10
  248. data/lib/lono/inspector/base.rb +7 -7
  249. data/lib/lono/inspector/summary.rb +18 -19
  250. data/lib/lono/layering/layer.rb +112 -0
  251. data/lib/lono/layering.rb +13 -55
  252. data/lib/lono/logger/formatter.rb +13 -0
  253. data/lib/lono/logger.rb +32 -0
  254. data/lib/lono/names.rb +50 -0
  255. data/lib/lono/plugin/meta.rb +30 -0
  256. data/lib/lono/plugin/tester.rb +13 -0
  257. data/lib/lono/plugin.rb +10 -0
  258. data/lib/lono/s3/aws_setup.rb +4 -3
  259. data/lib/lono/s3/bucket.rb +42 -42
  260. data/lib/lono/s3/rollback.rb +8 -0
  261. data/lib/lono/s3/uploader.rb +33 -34
  262. data/lib/lono/script/base.rb +3 -3
  263. data/lib/lono/script/build.rb +11 -12
  264. data/lib/lono/script/upload.rb +7 -7
  265. data/lib/lono/seeder.rb +110 -0
  266. data/lib/lono/user_data.rb +10 -13
  267. data/lib/lono/utils/logging.rb +7 -0
  268. data/lib/lono/utils/{pretty_time.rb → pretty.rb} +6 -2
  269. data/lib/lono/utils/quit.rb +7 -0
  270. data/lib/lono/utils/rsync.rb +4 -2
  271. data/lib/lono/utils/sure.rb +4 -4
  272. data/lib/lono/version.rb +1 -1
  273. data/lib/lono/yamler/validator.rb +7 -22
  274. data/lib/lono.rb +15 -12
  275. data/lib/templates/blueprint/template.rb +2 -0
  276. data/lib/templates/configset/configset.rb +2 -0
  277. data/lib/templates/examples/blueprint/template.rb +9 -0
  278. data/lib/templates/{configset/lib → examples/configset}/configset.rb +0 -0
  279. data/lib/templates/helper/%underscore_name%_helper.rb.tt +6 -0
  280. data/lib/templates/{skeleton → project}/.gitignore +1 -2
  281. data/lib/templates/project/Gemfile.tt +11 -0
  282. data/lib/templates/project/README.md +9 -0
  283. data/lib/templates/project/config/app.rb +3 -0
  284. data/lib/templates/shim/lono +7 -0
  285. data/lono.gemspec +51 -44
  286. metadata +282 -296
  287. data/.circleci/README.md +0 -3
  288. data/.circleci/config.yml +0 -58
  289. data/.cody/acceptance.sh +0 -49
  290. data/.cody/buildspec.yml +0 -9
  291. data/.cody/demo.rb +0 -38
  292. data/.cody/project.rb +0 -6
  293. data/.gitmodules +0 -3
  294. data/lib/lono/abstract_base.rb +0 -25
  295. data/lib/lono/app_file/base.rb +0 -28
  296. data/lib/lono/app_file/build/lambda_layer/ruby_packager.rb +0 -153
  297. data/lib/lono/app_file/build/lambda_layer.rb +0 -20
  298. data/lib/lono/app_file/build.rb +0 -84
  299. data/lib/lono/app_file/registry/item.rb +0 -24
  300. data/lib/lono/app_file/registry.rb +0 -16
  301. data/lib/lono/app_file/upload.rb +0 -12
  302. data/lib/lono/aws_services/stack.rb +0 -41
  303. data/lib/lono/aws_services/stack_set.rb +0 -41
  304. data/lib/lono/blueprint/configset/loader.rb +0 -7
  305. data/lib/lono/blueprint/helper.rb +0 -24
  306. data/lib/lono/blueprint/meta.rb +0 -30
  307. data/lib/lono/blueprint/new.rb +0 -127
  308. data/lib/lono/blueprint/root.rb +0 -25
  309. data/lib/lono/cfn/create.rb +0 -41
  310. data/lib/lono/cfn/opts.rb +0 -88
  311. data/lib/lono/cfn/preview/changeset.rb +0 -168
  312. data/lib/lono/cfn/preview/codediff.rb +0 -41
  313. data/lib/lono/cfn/preview/diff_viewer.rb +0 -23
  314. data/lib/lono/cfn/rollback.rb +0 -26
  315. data/lib/lono/cfn/update.rb +0 -71
  316. data/lib/lono/cfn.rb +0 -75
  317. data/lib/lono/clean.rb +0 -14
  318. data/lib/lono/code.rb +0 -22
  319. data/lib/lono/configset/combiner.rb +0 -162
  320. data/lib/lono/configset/evaluate_file.rb +0 -8
  321. data/lib/lono/configset/generator.rb +0 -57
  322. data/lib/lono/configset/list.rb +0 -67
  323. data/lib/lono/configset/meta/dsl.rb +0 -12
  324. data/lib/lono/configset/meta.rb +0 -19
  325. data/lib/lono/configset/new.rb +0 -77
  326. data/lib/lono/configset/preparer.rb +0 -44
  327. data/lib/lono/configset/register/base.rb +0 -122
  328. data/lib/lono/configset/register/blueprint.rb +0 -16
  329. data/lib/lono/configset/register/dsl.rb +0 -14
  330. data/lib/lono/configset/register/project.rb +0 -13
  331. data/lib/lono/configset/resolver.rb +0 -47
  332. data/lib/lono/configset/s3_file/build.rb +0 -33
  333. data/lib/lono/configset/s3_file/item.rb +0 -38
  334. data/lib/lono/configset/s3_file/registry.rb +0 -12
  335. data/lib/lono/configset/s3_file/upload.rb +0 -12
  336. data/lib/lono/configset/strategy/base.rb +0 -83
  337. data/lib/lono/configset/strategy/helpers/dsl.rb +0 -8
  338. data/lib/lono/configset/strategy/helpers/erb.rb +0 -9
  339. data/lib/lono/conventions.rb +0 -23
  340. data/lib/lono/core/config.rb +0 -22
  341. data/lib/lono/default/settings.yml +0 -21
  342. data/lib/lono/extension/helper.rb +0 -13
  343. data/lib/lono/extension/list.rb +0 -40
  344. data/lib/lono/extension.rb +0 -9
  345. data/lib/lono/extensions/dsl.rb +0 -11
  346. data/lib/lono/extensions/loader.rb +0 -30
  347. data/lib/lono/extensions/preparer.rb +0 -26
  348. data/lib/lono/extensions/register.rb +0 -15
  349. data/lib/lono/extensions.rb +0 -18
  350. data/lib/lono/file_uploader.rb +0 -21
  351. data/lib/lono/finder/base.rb +0 -152
  352. data/lib/lono/finder/blueprint/configset.rb +0 -17
  353. data/lib/lono/finder/blueprint.rb +0 -11
  354. data/lib/lono/finder/configset.rb +0 -11
  355. data/lib/lono/finder/extension.rb +0 -11
  356. data/lib/lono/generate.rb +0 -111
  357. data/lib/lono/help/cfn/create.md +0 -26
  358. data/lib/lono/help/cfn/delete.md +0 -13
  359. data/lib/lono/help/cfn/deploy.md +0 -21
  360. data/lib/lono/help/cfn/download.md +0 -3
  361. data/lib/lono/help/cfn/update.md +0 -49
  362. data/lib/lono/help/cfn.md +0 -7
  363. data/lib/lono/help/new.md +0 -57
  364. data/lib/lono/help/param.md +0 -6
  365. data/lib/lono/help/seed.md +0 -23
  366. data/lib/lono/help/set_instances/delete.md +0 -21
  367. data/lib/lono/help/set_instances/deploy.md +0 -31
  368. data/lib/lono/help/set_instances/list.md +0 -14
  369. data/lib/lono/help/set_instances/status.md +0 -15
  370. data/lib/lono/help/set_instances/sync.md +0 -92
  371. data/lib/lono/help/sets/delete.md +0 -8
  372. data/lib/lono/help/sets/deploy.md +0 -76
  373. data/lib/lono/help/sets/status.md +0 -23
  374. data/lib/lono/help/summary.md +0 -33
  375. data/lib/lono/help/template/generate.md +0 -7
  376. data/lib/lono/help/upgrade.md +0 -1
  377. data/lib/lono/help/xgraph.md +0 -16
  378. data/lib/lono/help.rb +0 -15
  379. data/lib/lono/importer/erb.rb +0 -31
  380. data/lib/lono/inspector/graph.rb +0 -125
  381. data/lib/lono/jade/circular.rb +0 -26
  382. data/lib/lono/jade/materializer/final.rb +0 -10
  383. data/lib/lono/jade/materializer/gems_builder.rb +0 -81
  384. data/lib/lono/jade/materializer/source.rb +0 -54
  385. data/lib/lono/jade/materializer.rb +0 -15
  386. data/lib/lono/jade/registry.rb +0 -64
  387. data/lib/lono/jade.rb +0 -110
  388. data/lib/lono/jadespec.rb +0 -68
  389. data/lib/lono/new/helper.rb +0 -15
  390. data/lib/lono/new.rb +0 -95
  391. data/lib/lono/param.rb +0 -14
  392. data/lib/lono/pro/base.rb +0 -16
  393. data/lib/lono/pro/repo.rb +0 -28
  394. data/lib/lono/pro.rb +0 -15
  395. data/lib/lono/project_checker.rb +0 -35
  396. data/lib/lono/registration/base.rb +0 -37
  397. data/lib/lono/registration/check.rb +0 -15
  398. data/lib/lono/registration/temp.rb +0 -53
  399. data/lib/lono/registration/user.rb +0 -60
  400. data/lib/lono/seed/base.rb +0 -116
  401. data/lib/lono/seed/service_role.rb +0 -11
  402. data/lib/lono/seed.rb +0 -39
  403. data/lib/lono/sequence.rb +0 -35
  404. data/lib/lono/set_instances/base.rb +0 -30
  405. data/lib/lono/set_instances/changeable.rb +0 -53
  406. data/lib/lono/set_instances/create.rb +0 -7
  407. data/lib/lono/set_instances/delete.rb +0 -47
  408. data/lib/lono/set_instances/deploy.rb +0 -52
  409. data/lib/lono/set_instances/list.rb +0 -13
  410. data/lib/lono/set_instances/opts.rb +0 -37
  411. data/lib/lono/set_instances/status.rb +0 -12
  412. data/lib/lono/set_instances/sync.rb +0 -181
  413. data/lib/lono/set_instances/update.rb +0 -15
  414. data/lib/lono/set_instances.rb +0 -54
  415. data/lib/lono/sets/base.rb +0 -50
  416. data/lib/lono/sets/create.rb +0 -27
  417. data/lib/lono/sets/delete.rb +0 -43
  418. data/lib/lono/sets/deploy.rb +0 -11
  419. data/lib/lono/sets/list.rb +0 -35
  420. data/lib/lono/sets/opts.rb +0 -18
  421. data/lib/lono/sets/preview/codediff.rb +0 -35
  422. data/lib/lono/sets/preview/param.rb +0 -32
  423. data/lib/lono/sets/status/instance/base.rb +0 -120
  424. data/lib/lono/sets/status/instance/completed.rb +0 -35
  425. data/lib/lono/sets/status/instance/deleted.rb +0 -32
  426. data/lib/lono/sets/status/instance/show.rb +0 -7
  427. data/lib/lono/sets/status/instance.rb +0 -20
  428. data/lib/lono/sets/status/instances.rb +0 -136
  429. data/lib/lono/sets/status.rb +0 -128
  430. data/lib/lono/sets/summarize.rb +0 -22
  431. data/lib/lono/sets/time_spent.rb +0 -11
  432. data/lib/lono/sets/update.rb +0 -74
  433. data/lib/lono/sets/waiter.rb +0 -23
  434. data/lib/lono/sets.rb +0 -34
  435. data/lib/lono/setting.rb +0 -75
  436. data/lib/lono/template/aws_service.rb +0 -20
  437. data/lib/lono/template/bashify.rb +0 -39
  438. data/lib/lono/template/configset_injector.rb +0 -52
  439. data/lib/lono/template/context/loader/load_files.rb +0 -24
  440. data/lib/lono/template/context/loader.rb +0 -52
  441. data/lib/lono/template/context.rb +0 -29
  442. data/lib/lono/template/evaluate.rb +0 -40
  443. data/lib/lono/template/generator.rb +0 -23
  444. data/lib/lono/template/helper.rb +0 -152
  445. data/lib/lono/template/strategy/base.rb +0 -4
  446. data/lib/lono/template/strategy/common/helpers.rb +0 -44
  447. data/lib/lono/template/strategy/dsl/builder/helpers/core_helper.rb +0 -14
  448. data/lib/lono/template/strategy/dsl/builder/helpers/file_helper.rb +0 -48
  449. data/lib/lono/template/strategy/dsl/builder/helpers.rb +0 -16
  450. data/lib/lono/template/strategy/dsl/builder/section/base.rb +0 -30
  451. data/lib/lono/template/strategy/dsl/builder/squeezer.rb +0 -24
  452. data/lib/lono/template/strategy/dsl/builder/syntax/extend_with.rb +0 -9
  453. data/lib/lono/template/strategy/dsl/builder/syntax.rb +0 -11
  454. data/lib/lono/template/strategy/dsl/builder.rb +0 -59
  455. data/lib/lono/template/strategy/dsl/finalizer.rb +0 -12
  456. data/lib/lono/template/strategy/dsl.rb +0 -14
  457. data/lib/lono/template/strategy/erb.rb +0 -82
  458. data/lib/lono/template/strategy/source.rb +0 -8
  459. data/lib/lono/template/template.rb +0 -54
  460. data/lib/lono/template/upload.rb +0 -23
  461. data/lib/lono/template/util.rb +0 -8
  462. data/lib/lono/template.rb +0 -24
  463. data/lib/lono/upgrade.rb +0 -20
  464. data/lib/lono/utils/generators/tree.rb +0 -18
  465. data/lib/lono/utils/item/file_methods.rb +0 -29
  466. data/lib/lono/utils/item/zip.rb +0 -42
  467. data/lib/templates/blueprint/%blueprint_name%.gemspec.tt +0 -45
  468. data/lib/templates/blueprint/.gitignore +0 -11
  469. data/lib/templates/blueprint/CHANGELOG.md +0 -7
  470. data/lib/templates/blueprint/Gemfile +0 -4
  471. data/lib/templates/blueprint/README.md.tt +0 -33
  472. data/lib/templates/blueprint/Rakefile.tt +0 -9
  473. data/lib/templates/blueprint/seed/configs.rb +0 -28
  474. data/lib/templates/blueprint_types/dsl/app/templates/%blueprint_name%.rb +0 -36
  475. data/lib/templates/blueprint_types/dsl/app/user_data/bootstrap.sh +0 -2
  476. data/lib/templates/blueprint_types/erb/app/definitions/base.rb.tt +0 -1
  477. data/lib/templates/blueprint_types/erb/app/templates/%blueprint_name%.yml +0 -67
  478. data/lib/templates/configset/%configset_name%.gemspec.tt +0 -42
  479. data/lib/templates/configset/.gitignore +0 -10
  480. data/lib/templates/configset/CHANGELOG.md +0 -7
  481. data/lib/templates/configset/Gemfile +0 -4
  482. data/lib/templates/configset/README.md.tt +0 -3
  483. data/lib/templates/configset/Rakefile.tt +0 -9
  484. data/lib/templates/extension/%extension_name%.gemspec.tt +0 -46
  485. data/lib/templates/extension/.gitignore +0 -11
  486. data/lib/templates/extension/.rspec +0 -3
  487. data/lib/templates/extension/CHANGELOG.md +0 -7
  488. data/lib/templates/extension/Gemfile.tt +0 -4
  489. data/lib/templates/extension/Rakefile.tt +0 -9
  490. data/lib/templates/extension/spec/spec_helper.rb.tt +0 -29
  491. data/lib/templates/skeleton/Gemfile +0 -3
  492. data/lib/templates/skeleton/README.md +0 -58
  493. data/lib/templates/skeleton/configs/settings.yml +0 -13
  494. data/vendor/cfn-status/CHANGELOG.md +0 -14
  495. data/vendor/cfn-status/Gemfile +0 -4
  496. data/vendor/cfn-status/Gemfile.lock +0 -49
  497. data/vendor/cfn-status/LICENSE.txt +0 -21
  498. data/vendor/cfn-status/README.md +0 -58
  499. data/vendor/cfn-status/Rakefile +0 -6
  500. data/vendor/cfn-status/bin/console +0 -14
  501. data/vendor/cfn-status/bin/setup +0 -8
  502. data/vendor/cfn-status/cfn-status.gemspec +0 -30
  503. data/vendor/cfn-status/lib/cfn-status.rb +0 -1
  504. data/vendor/cfn-status/lib/cfn_status/aws_service.rb +0 -51
  505. data/vendor/cfn-status/lib/cfn_status/version.rb +0 -3
  506. data/vendor/cfn-status/lib/cfn_status.rb +0 -245
  507. data/vendor/cfn-status/spec/fixtures/cfn/pages/fresh/describe_stack_events-1.json +0 -1103
  508. data/vendor/cfn-status/spec/fixtures/cfn/pages/fresh/describe_stack_events-2.json +0 -1104
  509. data/vendor/cfn-status/spec/fixtures/cfn/pages/fresh/describe_stack_events-3.json +0 -1103
  510. data/vendor/cfn-status/spec/fixtures/cfn/pages/updating/describe_stack_events-1.json +0 -1103
  511. data/vendor/cfn-status/spec/fixtures/cfn/pages/updating/describe_stack_events-2.json +0 -1104
  512. data/vendor/cfn-status/spec/fixtures/cfn/pages/updating/describe_stack_events-3.json +0 -1103
  513. data/vendor/cfn-status/spec/fixtures/cfn/stack-events-complete.json +0 -1080
  514. data/vendor/cfn-status/spec/fixtures/cfn/stack-events-in-progress.json +0 -1080
  515. data/vendor/cfn-status/spec/fixtures/cfn/stack-events-update-rollback-complete.json +0 -1086
  516. data/vendor/cfn-status/spec/lib/cfn_status_spec.rb +0 -153
  517. data/vendor/cfn-status/spec/spec_helper.rb +0 -14
@@ -1,41 +1,24 @@
1
- class Lono::Cfn
2
- class Cancel
3
- include Lono::AwsServices
4
- include Lono::Utils::Sure
5
-
6
- def initialize(options={})
7
- @options = options
8
- @stack = options[:stack]
9
- end
10
-
1
+ module Lono::Cfn
2
+ class Cancel < Base
11
3
  def run
12
- if @options[:noop]
13
- puts "NOOP Canceling #{@stack} stack"
14
- return
15
- end
16
-
17
- stack = find_stack(@stack)
4
+ stack = find_stack(@stack_name)
18
5
  unless stack
19
- puts "The '#{@stack}' stack does not exist. Unable to cancel"
20
- exit 1
6
+ logger.info "The '#{@stack_name}' stack does not exist. Unable to cancel"
7
+ quit 1
21
8
  end
22
9
 
23
- puts "Canceling updates to #{@stack}."
24
- puts "Current stack status: #{stack.stack_status}"
10
+ logger.info "Canceling updates to #{@stack_name}."
11
+ logger.info "Current stack status: #{stack.stack_status}"
25
12
  if stack.stack_status == "CREATE_IN_PROGRESS"
26
- cfn.delete_stack(stack_name: @stack)
27
- puts "Canceling stack creation."
13
+ cfn.delete_stack(stack_name: @stack_name)
14
+ logger.info "Canceling stack creation."
28
15
  elsif stack.stack_status == "UPDATE_IN_PROGRESS"
29
- cfn.cancel_update_stack(stack_name: @stack)
30
- puts "Canceling stack update."
16
+ cfn.cancel_update_stack(stack_name: @stack_name)
17
+ logger.info "Canceling stack update."
31
18
  status.wait if @options[:wait]
32
19
  else
33
- puts "The stack is not in a state to that is cancelable: #{stack.stack_status}"
20
+ logger.info "The stack is not in a state to that is cancelable: #{stack.stack_status}"
34
21
  end
35
22
  end
36
-
37
- def status
38
- @status ||= Status.new(@stack)
39
- end
40
23
  end
41
24
  end
@@ -0,0 +1,10 @@
1
+ module Lono::Cfn::Concerns
2
+ module Build
3
+ extend Memoist
4
+
5
+ def build
6
+ Lono::CLI::Build.new(@options)
7
+ end
8
+ memoize :build
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Lono::Cfn::Concerns
2
+ module TemplateOutput
3
+ extend Memoist
4
+
5
+ def template_output
6
+ Lono::Builder::Template::Output.new(@blueprint)
7
+ end
8
+ memoize :template_output
9
+ end
10
+ end
@@ -0,0 +1,43 @@
1
+ module Lono::Cfn
2
+ module Concerns
3
+ extend Memoist
4
+
5
+ include Concerns::Build
6
+ include Concerns::TemplateOutput
7
+
8
+ def iam
9
+ Deploy::Iam.new(@options)
10
+ end
11
+ memoize :iam
12
+
13
+ def notification
14
+ Deploy::Notification.new(@options)
15
+ end
16
+ memoize :notification
17
+
18
+ def rollback
19
+ Deploy::Rollback.new(@options)
20
+ end
21
+ memoize :rollback
22
+
23
+ def operable
24
+ Deploy::Operable.new(@options)
25
+ end
26
+ memoize :operable
27
+
28
+ def plan
29
+ Plan.new(@options.merge(build: build, iam: iam))
30
+ end
31
+ memoize :plan
32
+
33
+ def status
34
+ Status.new(@stack)
35
+ end
36
+ memoize :status
37
+
38
+ def tags
39
+ Deploy::Tags.new(@options)
40
+ end
41
+ memoize :tags
42
+ end
43
+ end
@@ -1,38 +1,14 @@
1
- class Lono::Cfn
2
- class Delete
3
- include Lono::AwsServices
4
- include Lono::Utils::Sure
5
-
6
- def initialize(options={})
7
- @options = options
8
- @stack = options.delete(:stack)
9
- end
10
-
1
+ module Lono::Cfn
2
+ class Delete < Base
11
3
  def run
12
- message = "Deleting #{@stack} stack."
13
- if @options[:noop]
14
- puts "NOOP #{message}"
4
+ plan.for_delete
5
+ sure?("Are you sure you want to delete the #{@stack} stack?")
6
+ cfn.delete_stack(stack_name: @stack)
7
+ if @options[:wait]
8
+ status.wait
15
9
  else
16
- sure?("Are you sure you want to delete the #{@stack} stack?")
17
-
18
- if stack_exists?(@stack)
19
- cfn.delete_stack(stack_name: @stack)
20
- puts message
21
- else
22
- puts "#{@stack.inspect} stack does not exist".color(:red)
23
- return
24
- end
10
+ logger.info "Deleting stack #{@stack}"
25
11
  end
26
-
27
- return unless @options[:wait]
28
- start_time = Time.now
29
- status.wait unless @options[:noop]
30
- took = Time.now - start_time
31
- puts "Time took for stack deletion: #{status.pretty_time(took).color(:green)}."
32
- end
33
-
34
- def status
35
- @status ||= Status.new(@stack)
36
12
  end
37
13
  end
38
14
  end
@@ -0,0 +1,4 @@
1
+ class Lono::Cfn::Deploy
2
+ class Base < Lono::Cfn::Base
3
+ end
4
+ end
@@ -0,0 +1,48 @@
1
+ class Lono::Cfn::Deploy
2
+ class Iam < Base
3
+ attr_reader :options
4
+
5
+ def rerun?(e)
6
+ # e.message is "Requires capabilities : [CAPABILITY_IAM]"
7
+ # grab CAPABILITY_IAM with regexp
8
+ capabilities = e.message.match(/\[(.*)\]/)[1]
9
+ confirm = prompt(capabilities)
10
+ if confirm =~ /^y/
11
+ logger.info "Re-running: #{command_with_iam(capabilities).color(:green)}"
12
+ @retry_capabilities = [capabilities]
13
+ true
14
+ else
15
+ logger.info "Exited"
16
+ quit 1
17
+ end
18
+ end
19
+
20
+ def prompt(capabilities)
21
+ logger.info <<~EOL
22
+ This stack will create IAM resources. Please approve to run the command again with #{capabilities} capabilities.
23
+
24
+ #{command_with_iam(capabilities)}
25
+
26
+ You can also avoid this prompt by setting config.up.capabilities in config/app.rb
27
+ See: https://lono.cloud/docs/config/reference/
28
+
29
+ EOL
30
+ logger.print "Please confirm (y/N) "
31
+ $stdin.gets
32
+ end
33
+
34
+ def command_with_iam(capabilities)
35
+ "lono #{Lono.argv.join(' ')} --capabilities #{capabilities}"
36
+ end
37
+
38
+ def capabilities
39
+ return @retry_capabilities if @retry_capabilities
40
+ return @options[:capabilities] if @options[:capabilities]
41
+ if @options[:iam]
42
+ ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"]
43
+ else
44
+ Lono.config.up.capabilities
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,8 @@
1
+ class Lono::Cfn::Deploy
2
+ class Notification < Base
3
+ def arns
4
+ arns = @options["notification_arns"] || Lono.config.up.notification_arns
5
+ arns == [''] ? [] : arns # allow removing the notification_arns setting
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,18 @@
1
+ class Lono::Cfn::Deploy
2
+ class Operable < Base
3
+ def check!
4
+ status = stack_status
5
+ unless status =~ /_COMPLETE$/ || status == "UPDATE_ROLLBACK_FAILED"
6
+ logger.info "Cannot create run operation on stack #{@stack} is not in an updatable state. Stack status: #{status}".color(:red)
7
+ quit 1
8
+ end
9
+ end
10
+
11
+ # All CloudFormation states listed here:
12
+ # http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-describing-stacks.html
13
+ def stack_status
14
+ resp = cfn.describe_stacks(stack_name: @stack)
15
+ resp.stacks[0].stack_status
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,49 @@
1
+ class Lono::Cfn::Deploy
2
+ class Opts < Base
3
+ def initialize(blueprint, meth, iam, options={})
4
+ @blueprint, @meth, @iam, @options = blueprint, meth, iam, options
5
+ end
6
+
7
+ def values
8
+ # important to use local options variable to not stomp on @options
9
+ options = @options.clone.compact
10
+ options[:capabilities] = @iam.capabilities if @iam.capabilities
11
+ options[:disable_rollback] = disable_rollback if !disable_rollback.nil? && @meth != "create_change_set"
12
+ options[:notification_arns] = notification.arns if notification.arns
13
+ options[:tags] = tags.values unless tags.values.nil?
14
+ options[:template_url] = template_url
15
+ options.reject { |k,v| v.nil? }
16
+ end
17
+
18
+ def show
19
+ logger.debug "Options passed to #{@meth}"
20
+ vals = values
21
+ vals[:template_body] = "Hidden due to size... View at: #{pretty_path(@blueprint.output_path)}" if vals[:template_body]
22
+ logger.debug YAML.dump(vals.deep_stringify_keys)
23
+ end
24
+
25
+ # Uploads the template to s3 to allow larger templates.
26
+ #
27
+ # template_body: 51,200 bytes - filesystem limit
28
+ # template_url: 1MB - s3 limit
29
+ #
30
+ # Reference: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html
31
+ def template_url
32
+ url_path = @blueprint.output_path.sub("#{Lono.root}/",'')
33
+ url = Lono::S3::Uploader.new(url_path).presigned_url
34
+ # Interesting dont need presign query string. For stack sets it actually breaks it. So removing.
35
+ url.gsub!(/\.yml.*/, ".yml")
36
+ url.sub!(/\?.*/,'')
37
+ url
38
+ end
39
+ memoize :template_url
40
+
41
+ def disable_rollback
42
+ if !@options[:rollback].nil?
43
+ !@options[:rollback]
44
+ elsif !Lono.config.up.rollback.nil?
45
+ !Lono.config.up.rollback
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,46 @@
1
+ class Lono::Cfn::Deploy
2
+ class Rollback < Base
3
+ def delete_stack
4
+ return unless complete?
5
+ logger.info "Existing stack in ROLLBACK_COMPLETE state. Deleting stack before continuing."
6
+ cfn.delete_stack(stack_name: @stack)
7
+ status.wait
8
+ status.reset
9
+ true
10
+ end
11
+
12
+ def continue_update
13
+ continue_update?
14
+ options = {stack_name: @stack}
15
+ show_options(options, "continue_update_rollback")
16
+ begin
17
+ cfn.continue_update_rollback(options)
18
+ rescue Aws::CloudFormation::Errors::ValidationError => e
19
+ logger.info "ERROR: Continue update: #{e.message}".color(:red)
20
+ quit 1
21
+ end
22
+ end
23
+
24
+ def continue_update?
25
+ logger.info <<~EOL
26
+ The stack is in the UPDATE_ROLLBACK_FAILED state. More info here: https://amzn.to/2IiEjc5
27
+ Would you like to try to continue the update rollback? (y/N)
28
+ EOL
29
+
30
+ yes = @options[:yes] ? "y" : $stdin.gets
31
+ unless yes =~ /^y/
32
+ logger.info "Exiting without continuing the update rollback."
33
+ quit 0
34
+ end
35
+ end
36
+
37
+ def complete?
38
+ stack&.stack_status == 'ROLLBACK_COMPLETE'
39
+ end
40
+
41
+ def stack
42
+ find_stack(@stack)
43
+ end
44
+ memoize :stack
45
+ end
46
+ end
@@ -0,0 +1,18 @@
1
+ class Lono::Cfn::Deploy
2
+ class Tags < Base
3
+ # Maps to CloudFormation format. Example:
4
+ #
5
+ # {"a"=>"1", "b"=>"2"}
6
+ # To
7
+ # [{key: "a", value: "1"}, {key: "b", value: "2"}]
8
+ #
9
+ def values
10
+ tags = Lono.config.up.tags
11
+ return if tags.nil? # nil = keep current tags. [] = remove all tags
12
+
13
+ tags.map do |k,v|
14
+ { key: k.to_s, value: v }
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,11 +1,106 @@
1
- class Lono::Cfn
1
+ module Lono::Cfn
2
2
  class Deploy < Base
3
- def save(parameters)
4
- if stack_exists?(@stack)
5
- Update.new(@options).save(parameters)
3
+ def run
4
+ start_message
5
+ perform # create or update
6
+ success = status.wait
7
+ if success
8
+ finish_message
9
+ logger.info "" # newline
10
+ end
11
+ outputs
12
+ end
13
+
14
+ def perform
15
+ build.all
16
+ @action = create? ? "create" : "update"
17
+ send(@action)
18
+ rescue Aws::CloudFormation::Errors::InsufficientCapabilitiesException => e
19
+ @sure = true
20
+ yes = iam.rerun?(e)
21
+ retry if yes
22
+ rescue Aws::CloudFormation::Errors::ValidationError => e
23
+ case e.message
24
+ when /No updates/ # No updates are to be performed.
25
+ logger.info "WARN: #{e.message}".color(:yellow)
26
+ when /UPDATE_ROLLBACK_FAILED/ # https://amzn.to/2IiEjc5
27
+ rollback.continue_update
28
+ when /YAML not well-formed/ # happens if a value is a serialize Ruby Object. See: https://gist.github.com/tongueroo/737531d0bc8c92d92b5cd00493e15d9e
29
+ # e.message: Template format error: YAML not well-formed. (line 207, column 9)
30
+ print_code(e)
6
31
  else
7
- Create.new(@options).save(parameters)
32
+ logger.info "ERROR: #{e.message}".color(:red)
33
+ logger.info "Check: #{pretty_path(@blueprint.output_path)}"
34
+ quit 1
35
+ end
36
+ end
37
+
38
+ def print_code(exception)
39
+ md = exception.message.match(/line (\d+),/)
40
+ line_number = md[1]
41
+ logger.error "Template for debugging: #{pretty_path(@blueprint.output_path)}"
42
+ if md
43
+ DslEvaluator.print_code(@blueprint.output_path, line_number)
44
+ exit 1
45
+ else
46
+ raise
47
+ end
48
+ end
49
+
50
+ def create
51
+ plan.for_create
52
+ @sure || sure?("Going to create stack #{@stack} with blueprint #{@blueprint.name}.")
53
+ upload_files
54
+ options = {
55
+ stack_name: @stack,
56
+ parameters: build.parameters,
57
+ }
58
+ opts = Opts.new(@blueprint, "create_stack", iam, options)
59
+ opts.show
60
+ options = opts.values
61
+ cfn.create_stack(options)
62
+ end
63
+
64
+ def update
65
+ if rollback.delete_stack
66
+ create
67
+ return
68
+ end
69
+
70
+ operable.check!
71
+ changeset = plan.for_update
72
+ !changeset.changed? || @sure || sure?("Are you sure you want to update the #{@stack} stack?")
73
+ upload_files
74
+ changeset.execute_change_set
75
+ end
76
+
77
+ # Upload files right before create_stack or execute_change_set
78
+ # Its better to upload here as part of a deploy vs a build
79
+ # IE: lono build should try not to do a remote write to s3 if possible
80
+ def upload_files
81
+ # Files built and compressed in
82
+ # Lono::Builder::Dsl::Finalizer::Files::Build#build_files
83
+ Lono::Files.files.each do |file| # using singular file, but is like a "file_list"
84
+ file.upload
8
85
  end
9
86
  end
87
+
88
+ def create?
89
+ !stack_exists?(@stack)
90
+ end
91
+
92
+ def start_message
93
+ action = self.class.to_s.split('::').last
94
+ logger.info "#{action}ing #{@stack.color(:green)} stack"
95
+ end
96
+
97
+ def finish_message
98
+ message = "#{@action.capitalize}d #{@stack.color(:green)} stack."
99
+ logger.info message unless @options[:mute]
100
+ end
101
+
102
+ def outputs
103
+ Output.new(@options).run
104
+ end
10
105
  end
11
106
  end
@@ -1,14 +1,11 @@
1
1
  require 'json'
2
2
  require 'open-uri'
3
3
 
4
- class Lono::Cfn
5
- class Download < Lono::AbstractBase
6
- include Lono::AwsServices
7
-
4
+ module Lono::Cfn
5
+ class Download < Base
8
6
  def run
9
7
  pretty_path = download_path.sub("#{Lono.root}/", '')
10
- puts "Downloading template to: #{pretty_path}"
11
- return if @options[:noop]
8
+ logger.info "Downloading template to: #{pretty_path}"
12
9
  download_template
13
10
  end
14
11
 
@@ -41,7 +38,7 @@ class Lono::Cfn
41
38
  end
42
39
 
43
40
  def download_path
44
- "#{Lono.config.output_path}/#{@blueprint}/templates/#{@blueprint}.yml"
41
+ "#{Lono.root}/output/#{@blueprint.name}/templates/#{@blueprint.name}.yml"
45
42
  end
46
43
 
47
44
  def name
@@ -0,0 +1,49 @@
1
+ module Lono::Cfn
2
+ class Output < Base
3
+ def run
4
+ stack = find_stack(@stack)
5
+ unless stack
6
+ logger.info "ERROR: stack #{@stack} not found".color(:red)
7
+ quit 1
8
+ end
9
+
10
+ outputs = stack.outputs.map(&:to_h)
11
+ logger.info <<~EOL
12
+ #{"Outputs:".color(:green)}
13
+
14
+ EOL
15
+ if outputs.empty?
16
+ logger.stdout outputs.inspect
17
+ else
18
+ logger.stdout pretty(outputs)
19
+ end
20
+ end
21
+
22
+ private
23
+ # Input:
24
+ #
25
+ # [{
26
+ # output_key: "SecurityGroup",
27
+ # output_value: "demo-dev-SecurityGroup-142DZFIEG3G9L"
28
+ # }]
29
+ #
30
+ # Output:
31
+ #
32
+ # { "SecurityGroup" => "demo-dev-SecurityGroup-142DZFIEG3G9L" }
33
+ #
34
+ def pretty(outputs)
35
+ outs = outputs.inject({}) do |result,h|
36
+ result.merge!(h[:output_key] => h[:output_value])
37
+ end
38
+ default = {format: "equal"}
39
+ options = default.merge(@options.symbolize_keys)
40
+ presenter = CliFormat::Presenter.new(options)
41
+ presenter.header = ["Key", "Value"] unless presenter.format == "equal"
42
+ outs.keys.sort.each do |k|
43
+ row = [k,outs[k]]
44
+ presenter.rows << row
45
+ end
46
+ presenter.show
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,19 @@
1
+ class Lono::Cfn::Plan
2
+ class Base < Lono::Cfn::Base
3
+ def initialize(options={})
4
+ super
5
+ # Allow build and iam to be passed from Cfn::Deploy. Reasons:
6
+ #
7
+ # 1. build.all only needs to be called once.
8
+ # 2. iam.capabilities can be adjusted with retry
9
+ # 3. objects are passed in a clear single direction.
10
+ #
11
+ # However, for CLI commands like `lono plan`, no objects are passed.
12
+ # In this case, new instances are created. In both cases the same options
13
+ # to the build and iam instances are used.
14
+ #
15
+ @build = options[:build] || build
16
+ @iam = options[:iam] || iam
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ class Lono::Cfn::Plan::Changeset
2
+ class Base
3
+ extend Memoist
4
+ include Lono::AwsServices
5
+ include Lono::Utils::Logging
6
+ include Lono::Cfn::Concerns::TemplateOutput
7
+
8
+ def initialize(options={})
9
+ @blueprint = options[:blueprint]
10
+ @change_set = options[:change_set]
11
+ @stack = options[:stack]
12
+ end
13
+
14
+ def stack
15
+ find_stack(@stack)
16
+ end
17
+ memoize :stack
18
+ end
19
+ end
@@ -0,0 +1,24 @@
1
+ class Lono::Cfn::Plan::Changeset
2
+ class Notifications < Base
3
+ def changes
4
+ old = stack.notification_arns
5
+ new = @change_set.notification_arns
6
+ added = new - old
7
+ removed = old - new
8
+ return if added.empty? && removed.empty?
9
+
10
+ logger.info "Changes to notifications"
11
+ log = Proc.new do |k|
12
+ logger.info " #{k}"
13
+ end
14
+ unless added.empty?
15
+ logger.info "Added:"
16
+ added.each(&log)
17
+ end
18
+ unless removed.empty?
19
+ logger.info "Removed:"
20
+ removed.each(&log)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,25 @@
1
+ class Lono::Cfn::Plan::Changeset
2
+ class Outputs < Base
3
+ # Not enough info to show value changes. Show whats possible: Added and Removed keys
4
+ def changes
5
+ old_keys = stack.outputs.map { |output| output[:output_key] }
6
+ new_keys = template_output.outputs.map { |k,_| k }
7
+ added_keys = new_keys - old_keys
8
+ removed_keys = old_keys - new_keys
9
+ return if added_keys.empty? && removed_keys.empty?
10
+
11
+ logger.info "Changes to outputs"
12
+ log = Proc.new do |k|
13
+ logger.info " #{k}"
14
+ end
15
+ unless added_keys.empty?
16
+ logger.info "Added:"
17
+ added_keys.each(&log)
18
+ end
19
+ unless removed_keys.empty?
20
+ logger.info "Removed:"
21
+ removed_keys.each(&log)
22
+ end
23
+ end
24
+ end
25
+ end