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
@@ -0,0 +1,48 @@
1
+ class Lono::Cfn::Plan::Changeset
2
+ class Resources < Base
3
+ def changes
4
+ return if @change_set.changes.empty?
5
+ logger.info "Resource Changes"
6
+ changes = @change_set.changes.sort_by do |change|
7
+ change["resource_change"]["action"]
8
+ end
9
+ changes.each do |change|
10
+ display_change(change)
11
+ end
12
+ end
13
+
14
+ # Private: formats a Aws::CloudFormation::Types::Change in pretty human readable form
15
+ #
16
+ # change - Aws::CloudFormation::Types::Change
17
+ #
18
+ # Examples
19
+ #
20
+ # display_change(change)
21
+ # => Remove AWS::Route53::RecordSet: DnsRecord testsubdomain.sub.tongueroo.com
22
+ #
23
+ # Returns nil
24
+ #
25
+ # change.to_h
26
+ # {:type=>"Resource",
27
+ # :resource_change=>
28
+ # {:action=>"Remove",
29
+ # :logical_resource_id=>"DnsRecord",
30
+ # :physical_resource_id=>"testsubdomain.sub.tongueroo.com",
31
+ # :resource_type=>"AWS::Route53::RecordSet",
32
+ # :scope=>[],
33
+ # :details=>[]}}
34
+ def display_change(change)
35
+ message = if change.type == "Resource"
36
+ c = change.resource_change
37
+ " #{c.action} #{c.resource_type}: #{c.logical_resource_id} #{c.physical_resource_id}"
38
+ else
39
+ change.to_h
40
+ end
41
+
42
+ colors = { Remove: :red, Add: :green, Modify: :yellow }
43
+ action = change.resource_change.action.to_sym
44
+ message = message.color(colors[action]) if colors.has_key?(action)
45
+ logger.info message
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,16 @@
1
+ class Lono::Cfn::Plan::Changeset
2
+ class Tags < Base
3
+ def changes
4
+ old = simplify(stack.tags)
5
+ new = simplify(@change_set.tags)
6
+ diff = Lono::Cfn::Plan::Diff::Data.new(old, new)
7
+ diff.show("Tag Changes:")
8
+ end
9
+
10
+ def simplify(tags)
11
+ tags.inject({}) do |result, i|
12
+ result.merge(i.key => i.value)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,136 @@
1
+ class Lono::Cfn::Plan
2
+ class Changeset < Base
3
+ # used by deploy to see whether or not to continue and bypass sure prompt
4
+ attr_reader :changed
5
+ alias_method :changed?, :changed
6
+
7
+ # Override run from Base superclass, the run method is different enough with Preview
8
+ def create
9
+ @build.all
10
+ @changed = false
11
+ logger.info "Change Set Changes:".color(:green) if Lono.config.plan.changeset
12
+ preview_change_set
13
+ logger.info "" # newline
14
+ end
15
+
16
+ def display_changes(change_set)
17
+ options = {change_set: change_set, blueprint: @blueprint, stack: @stack}
18
+ Tags.new(options).changes
19
+ Outputs.new(options).changes
20
+ Resources.new(options).changes
21
+ Notifications.new(options).changes
22
+ end
23
+
24
+ def preview_change_set
25
+ create_change_set
26
+ change_set = wait_for_change_set
27
+ @changed = change_set.status == "CREATE_COMPLETE"
28
+ handle_out(change_set)
29
+ display(change_set)
30
+ end
31
+
32
+ def wait_for_change_set
33
+ change_set = describe_change_set
34
+ newline_needed = false
35
+ until change_set_finished?(change_set) do
36
+ change_set = describe_change_set
37
+ sleep 1
38
+ unless newline_needed
39
+ logger.print "Determining Change Set"
40
+ end
41
+ newline_needed = true
42
+ logger.print '.'
43
+ end
44
+ logger.print "\n" if newline_needed
45
+ change_set
46
+ end
47
+
48
+ def create_change_set
49
+ unless stack_exists?(@stack)
50
+ logger.info "WARN: Cannot create a change set for the stack because the #{@stack} does not exists.".color(:yellow)
51
+ return false
52
+ end
53
+ operable.check!
54
+
55
+ options = {
56
+ change_set_name: change_set_name,
57
+ stack_name: @stack,
58
+ parameters: @build.parameters,
59
+ }
60
+
61
+ opts = Lono::Cfn::Deploy::Opts.new(@blueprint, "create_change_set", @iam, options)
62
+ opts.show
63
+ options = opts.values
64
+
65
+ begin
66
+ # Tricky for preview need to set capabilities so that it gets updated. For Base#run save within the begin block already.
67
+ options[:capabilities] = iam.capabilities # ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"]
68
+ resp = cfn.create_change_set(options)
69
+ rescue Aws::CloudFormation::Errors::InsufficientCapabilitiesException => e
70
+ # If coming from cfn_preview_command automatically add iam capabilities
71
+ cfn_preview_command = ARGV.join(" ").include?("cfn preview")
72
+ if cfn_preview_command
73
+ # e.message is "Requires capabilities : [CAPABILITY_IAM]"
74
+ # grab CAPABILITY_IAM with regexp
75
+ capabilities = e.message.match(/\[(.*)\]/)[1]
76
+ @options.merge!(capabilities: [capabilities])
77
+ retry
78
+ end
79
+ yes = iam.rerun?(e)
80
+ @options = iam.options
81
+ retry if yes
82
+ end
83
+ end
84
+
85
+ def display(change_set)
86
+ return unless Lono.config.plan.changeset
87
+ case change_set.status
88
+ when "CREATE_COMPLETE"
89
+ display_changes(change_set)
90
+ when "FAILED"
91
+ logger.info "No changes"
92
+ logger.debug change_set.status_reason # The submitted information didn't contain changes. Submit different information to create a change set.
93
+ else
94
+ raise "hell: never come here"
95
+ end
96
+ change_set
97
+ end
98
+
99
+ def execute_change_set
100
+ return unless @changed
101
+ cfn.execute_change_set(
102
+ change_set_name: change_set_name,
103
+ stack_name: @stack
104
+ )
105
+ end
106
+
107
+ # generates a change set name
108
+ def change_set_name
109
+ @change_set_name ||= "changeset-#{Time.now.strftime("%Y%d%m%H%M%S")}"
110
+ end
111
+
112
+ private
113
+ def change_set_finished?(change_set)
114
+ change_set.status =~ /_COMPLETE/ || change_set.status == "FAILED"
115
+ end
116
+
117
+ def describe_change_set
118
+ cfn.describe_change_set(
119
+ change_set_name: change_set_name,
120
+ stack_name: @stack
121
+ )
122
+ end
123
+
124
+ def handle_out(change_set)
125
+ out = @options[:out]
126
+ return unless out
127
+ logger.info "Change Set ARN: #{change_set.change_set_id}"
128
+ if change_set.status == "FAILED"
129
+ logger.info "Note: #{change_set.status_reason}"
130
+ end
131
+ logger.info "Change Set info saved to #{out}"
132
+ FileUtils.mkdir_p(File.dirname(out))
133
+ IO.write(out, JSON.pretty_generate(change_set.to_h))
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,10 @@
1
+ class Lono::Cfn::Plan
2
+ module Concerns
3
+ extend Memoist
4
+
5
+ def summary
6
+ Summary.new
7
+ end
8
+ memoize :summary
9
+ end
10
+ end
@@ -0,0 +1,16 @@
1
+ class Lono::Cfn::Plan
2
+ class Delete < Lono::Cfn::Base
3
+ include Concerns
4
+
5
+ def run
6
+ stack = find_stack(@stack)
7
+ unless stack
8
+ logger.info "ERROR: stack #{@stack} not found".color(:red)
9
+ quit 1
10
+ end
11
+
12
+ logger.info "Will delete".color(:green)
13
+ Lono::Cfn::Show.new(@options).print
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,10 @@
1
+ module Lono::Cfn::Plan::Diff
2
+ class Base
3
+ include Lono::Utils::Logging
4
+ include Lono::Utils::Pretty
5
+
6
+ def initialize(options={})
7
+ @options = options
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,62 @@
1
+ module Lono::Cfn::Plan::Diff
2
+ class Data < Base
3
+ extend Memoist
4
+
5
+ def initialize(old, new)
6
+ @old = old
7
+ @new = new
8
+ end
9
+
10
+ def show(header_message=nil)
11
+ changes = calculate
12
+ if !changes && header_message
13
+ return
14
+ end
15
+ logger.info header_message if header_message
16
+
17
+ unless @added_keys.empty?
18
+ logger.info "Added:"
19
+ @added_keys.each do |k|
20
+ logger.info " #{k}: #{@new[k]}"
21
+ end
22
+ end
23
+ unless @removed_keys.empty?
24
+ logger.info "Removed:"
25
+ @removed_keys.each do |k|
26
+ logger.info " #{k}: #{@old[k]}"
27
+ end
28
+ end
29
+ unless @modified_keys.empty?
30
+ logger.info "Modified:"
31
+ @modified_keys.each do |k|
32
+ logger.info " #{k}: #{show_old(@old[k])} -> #{@new[k]}"
33
+ end
34
+ end
35
+
36
+ unless changes
37
+ logger.info "No changes"
38
+ end
39
+ end
40
+
41
+ def show_old(v)
42
+ if v.nil?
43
+ '(unset)'
44
+ elsif v == ''
45
+ "''"
46
+ else
47
+ v
48
+ end
49
+ end
50
+
51
+ def calculate
52
+ @added_keys = @new.keys - @old.keys
53
+ @removed_keys = @old.keys - @new.keys
54
+ all_keys = (@old.keys + @new.keys).uniq
55
+ kept_keys = all_keys - @added_keys - @removed_keys
56
+ @modified_keys = kept_keys.select { |k| @old[k] != @new[k] }
57
+ no_changes = @added_keys.empty? && @removed_keys.empty? && @modified_keys.empty?
58
+ !no_changes
59
+ end
60
+ memoize :calculate
61
+ end
62
+ end
@@ -0,0 +1,57 @@
1
+ module Lono::Cfn::Plan::Diff
2
+ class File < Base
3
+ def show(existing_path, new_path)
4
+ if @options[:mode] == true || @options[:mode] == "summary"
5
+ summary(existing_path, new_path)
6
+ else # full
7
+ full(existing_path, new_path)
8
+ end
9
+ end
10
+
11
+ def summary(existing_path, new_path)
12
+ command = "diff #{existing_path} #{new_path} -u -s"
13
+ # actually use diff but show colordiff in pretty_command
14
+ pretty_command = "#{diff_viewer} #{pretty_path(existing_path)} #{pretty_path(new_path)}"
15
+ logger.info "=> #{pretty_command}"
16
+ out = `#{command}`
17
+ lines = out.split("\n")
18
+ lines.reject! { |l| l =~ /^\+\+\+ / || l =~ /^--- / } # remove header lines
19
+ stats = lines.inject(Hash.new(0)) do |stats,line|
20
+ char = line[0] # first char will be - +
21
+ case char
22
+ when '+'
23
+ stats[:insertions] += 1
24
+ when '-'
25
+ stats[:deletions] += 1
26
+ end
27
+ stats
28
+ end
29
+ if stats.all? { |_,count| count == 0 }
30
+ logger.info "No changes"
31
+ else
32
+ logger.info " #{stats[:insertions]} insertions(+), #{stats[:deletions]} deletions(-)"
33
+ end
34
+ end
35
+
36
+ def full(existing_path, new_path)
37
+ command = "#{diff_viewer} #{existing_path} #{new_path}"
38
+ pretty_command = "#{diff_viewer} #{pretty_path(existing_path)} #{pretty_path(new_path)}"
39
+ logger.info "=> #{pretty_command}"
40
+ out = `#{command}`
41
+ if out.strip == ''
42
+ logger.info "No changes"
43
+ else
44
+ logger.info out
45
+ end
46
+ end
47
+
48
+ def diff_viewer
49
+ return ENV['LONO_DIFF'] if ENV['LONO_DIFF']
50
+ colordiff_installed = system("type colordiff > /dev/null 2>&1")
51
+ unless colordiff_installed
52
+ logger.info "INFO: colordiff it not available. Recommend installing it."
53
+ end
54
+ colordiff_installed ? "colordiff" : "diff"
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,26 @@
1
+ class Lono::Cfn::Plan
2
+ class New < Lono::Cfn::Base
3
+ include Concerns
4
+
5
+ def run
6
+ if resource_types.empty?
7
+ logger.info "ERROR: At least one Resource member must be defined in the template".color(:red)
8
+ quit 1
9
+ end
10
+
11
+ logger.info "Will create".color(:green)
12
+ summary.print(resource_types)
13
+ end
14
+
15
+ def resource_types
16
+ resources = template_output.resources
17
+ return {} unless resources
18
+
19
+ types = Hash.new(0)
20
+ resources.each do |logical_id, resource|
21
+ types[resource["Type"]] += 1
22
+ end
23
+ types
24
+ end
25
+ end
26
+ end
@@ -1,25 +1,14 @@
1
- module Lono::Cfn::Preview
2
- class Param < Lono::Cfn::Base
3
- delegate :required_parameters, :optional_parameters, :parameters, :data,
4
- to: :output_template
5
-
6
- include DiffViewer
7
- include Lono::AwsServices
8
-
1
+ class Lono::Cfn::Plan
2
+ class Param < Base
9
3
  def run
10
- return unless stack_exists?(@stack)
11
-
12
- generated_parameters # eager call generated_parameters so its output is above Parameter Diff Preview
13
- puts "Parameter Diff Preview:".color(:green)
14
- if @options[:noop]
15
- puts "NOOP CloudFormation parameters preview for #{@stack} update"
16
- return
17
- end
18
-
4
+ return unless Lono.config.plan.params && stack_exists?(@stack)
5
+ logger.info "Parameter Changes:".color(:green)
19
6
  write_to_tmp(existing_path, existing_params)
20
7
  write_to_tmp(new_path, new_params)
21
-
22
- show_diff(existing_path, new_path)
8
+ logger.debug "=> diff #{pretty_path(existing_path)} #{pretty_path(new_path)}"
9
+ diff = Diff::Data.new(json_load(existing_path), json_load(new_path))
10
+ diff.show
11
+ logger.info "" # newline
23
12
  end
24
13
 
25
14
  def existing_params
@@ -30,11 +19,21 @@ module Lono::Cfn::Preview
30
19
  memoize :existing_params
31
20
 
32
21
  def new_params
33
- params = optional_params.merge(generated_parameters)
22
+ parameters = @build.parameters
23
+ params = normalize(parameters)
24
+ params = optional_params.merge(params)
25
+ params = replace_noecho_values!(params)
34
26
  subtract(params, noecho_params)
35
27
  end
36
28
 
37
- # Remove items with the same key. The value can be different. This removes the noecho params.
29
+ def replace_noecho_values!(params)
30
+ template_output.parameters.each do |key, data|
31
+ params[key] = '**** (NoEcho)' if data['NoEcho'] # mimic noecho
32
+ end
33
+ params
34
+ end
35
+
36
+ # Remove existing items with the same key. The value can be different. This removes the noecho params.
38
37
  def subtract(h1,h2)
39
38
  hash = h1.reject do |k,v|
40
39
  h2.keys.include?(k)
@@ -42,15 +41,9 @@ module Lono::Cfn::Preview
42
41
  Hash[hash.sort_by {|k,v| k}]
43
42
  end
44
43
 
45
- def generated_parameters
46
- parameters = generate_all
47
- normalize(parameters)
48
- end
49
- memoize :generated_parameters
50
-
51
44
  def optional_params
52
45
  # normalizing to simple Hash
53
- optional_parameters.inject({}) do |result,(k,v)|
46
+ template_output.optional_parameters.inject({}) do |result,(k,v)|
54
47
  result.merge(k => v["Default"].to_s)
55
48
  end
56
49
  end
@@ -69,11 +62,6 @@ module Lono::Cfn::Preview
69
62
  memoize :stack_parameters
70
63
 
71
64
  private
72
- def output_template
73
- Lono::Output::Template.new(@blueprint, @template)
74
- end
75
- memoize :output_template
76
-
77
65
  def write_to_tmp(path, hash)
78
66
  text = JSON.pretty_generate(hash)
79
67
  FileUtils.mkdir_p(File.dirname(path))
@@ -104,7 +92,11 @@ module Lono::Cfn::Preview
104
92
  end
105
93
 
106
94
  def tmp_base
107
- "/tmp/lono/params-preview"
95
+ "/tmp/lono/diff/params"
96
+ end
97
+
98
+ def json_load(path)
99
+ JSON.load(IO.read(path))
108
100
  end
109
101
  end
110
102
  end
@@ -0,0 +1,16 @@
1
+ class Lono::Cfn::Plan
2
+ class Summary
3
+ include Lono::Utils::Logging
4
+
5
+ def print(resource_types)
6
+ types = resource_types.sort_by {|r| r[0]} # Hash -> 2D Array
7
+ types.each do |a|
8
+ type, count = a
9
+ logger.info "%3s %s" % [count, type]
10
+ end
11
+ total = types.inject(0) { |sum,(type,count)| sum += count }
12
+ logger.info "%3s %s" % [total, "Total"]
13
+ logger.info "" # newline
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,28 @@
1
+ class Lono::Cfn::Plan
2
+ class Template < Base
3
+ def run
4
+ return unless Lono.config.plan.template
5
+ @build.all
6
+ logger.info "Template Changes:".color(:green)
7
+ download_existing_cfn_template
8
+ diff = Diff::File.new(mode: Lono.config.plan.template)
9
+ diff.show(existing_template_path, new_cfn_template)
10
+ logger.info "" # newline
11
+ end
12
+
13
+ def download_existing_cfn_template
14
+ resp = cfn.get_template(stack_name: @stack, template_stage: "Original")
15
+ FileUtils.mkdir_p(File.dirname(existing_template_path))
16
+ IO.write(existing_template_path, resp.template_body)
17
+ end
18
+
19
+ # for clarity
20
+ def new_cfn_template
21
+ @blueprint.output_path
22
+ end
23
+
24
+ def existing_template_path
25
+ "/tmp/lono/diff/template/existing.yml"
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,34 @@
1
+ module Lono::Cfn
2
+ class Plan < Base
3
+ def run
4
+ build.all
5
+ if stack_exists?(@stack)
6
+ for_update
7
+ else
8
+ for_create
9
+ end
10
+ end
11
+
12
+ def for_update
13
+ # Allow passing down of the build object from Cfn::Deploy so build.all only runs once.
14
+ # Fallback to creating new build object but still pass one build object instance down.
15
+ @options[:build] ||= build
16
+ if @options[:iam] == true
17
+ @options[:iam] = Lono::Cfn::Deploy::Iam.new(@options)
18
+ end
19
+ Template.new(@options).run
20
+ Param.new(@options).run
21
+ changeset = Changeset.new(@options)
22
+ changeset.create
23
+ changeset # return changeset so it can be executed
24
+ end
25
+
26
+ def for_create
27
+ New.new(@options).run
28
+ end
29
+
30
+ def for_delete
31
+ Delete.new(@options).run
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,30 @@
1
+ module Lono::Cfn
2
+ class Show < Base
3
+ include Plan::Concerns
4
+
5
+ def run
6
+ logger.info "Info for stack: #{@stack.color(:green)}"
7
+ logger.info "Resources:".color(:green)
8
+ print
9
+ Output.new(@options).run
10
+ end
11
+
12
+ def print
13
+ summary.print(resource_types)
14
+ end
15
+
16
+ def resource_types
17
+ resources = find_stack_resources(@stack)
18
+ unless resources
19
+ logger.info "ERROR: Stack #{@stack} not found".color(:red)
20
+ exit 1
21
+ end
22
+
23
+ types = Hash.new(0)
24
+ resources.each do |resource|
25
+ types[resource.resource_type] += 1
26
+ end
27
+ types
28
+ end
29
+ end
30
+ end
@@ -1,4 +1,4 @@
1
- class Lono::Cfn
1
+ module Lono::Cfn
2
2
  class Status < CfnStatus
3
3
  end
4
4
  end
@@ -0,0 +1,11 @@
1
+ class Lono::CLI
2
+ class Abstract
3
+ extend Memoist
4
+ include Lono::Utils::Logging
5
+ include Lono::Utils::Pretty
6
+
7
+ def initialize(options={})
8
+ @options = options
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ class Lono::CLI
2
+ class Base < Abstract
3
+ include Lono::Concerns::Names
4
+
5
+ def initialize(options={})
6
+ super
7
+ @blueprint = Lono::Blueprint.new(options.merge(name: options[:blueprint]))
8
+ @stack = names.stack
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,47 @@
1
+ class Lono::CLI
2
+ class Build < Base
3
+ def all
4
+ check_allow!
5
+ Clean.new(@options.merge(mute: true)).run
6
+ ensure_s3_bucket_exist
7
+ template_builder.run # build with placeholders IE: file://app/files/index.rb
8
+ upload_templates
9
+ parameters = param_builder.build # Writes the json file in CamelCase keys format
10
+ logger.info "" # newline
11
+ parameters
12
+ end
13
+ memoize :all
14
+ alias_method :parameters, :all
15
+
16
+ def check_allow!
17
+ Lono::Builder::Allow.new(@options).check!
18
+ end
19
+
20
+ def ensure_s3_bucket_exist
21
+ return unless upload?
22
+ bucket = Lono::S3::Bucket.new
23
+ return if bucket.exist?
24
+ bucket.deploy
25
+ end
26
+
27
+ def upload_templates
28
+ return unless upload?
29
+ Lono::Builder::Template::Upload.new(@options).run
30
+ end
31
+
32
+ def param_builder
33
+ Lono::Builder::Param.new(@options)
34
+ end
35
+ memoize :param_builder
36
+
37
+ def template_builder
38
+ Lono::Builder::Template.new(@options) # write templates to disk
39
+ end
40
+ memoize :template_builder
41
+
42
+ # Useful for dev and debugging
43
+ def upload?
44
+ ENV['LONO_UPLOAD'] != '0'
45
+ end
46
+ end
47
+ end