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,39 @@
1
+ module Lono::Bundler
2
+ class Info < CLI::Base
3
+ def run
4
+ file = LB.config.lockfile
5
+ unless File.exist?(file)
6
+ logger.info "No #{file} found".color(:red)
7
+ logger.info "Maybe run: lono bundle"
8
+ return
9
+ end
10
+
11
+ name = @options[:component]
12
+ all = lockfile.components.find_all { |c| c.name == @options[:component] }
13
+ all = all.select { |c| c.type == @options[:type] } if @options[:type]
14
+ if all.size > 1
15
+ logger.info "Multiple components found with different types"
16
+ end
17
+
18
+ all.each do |found|
19
+ show(found)
20
+ end
21
+ unless all.size > 0
22
+ logger.info "Could not find component in #{LB.config.lockfile}: #{name}".color(:red)
23
+ end
24
+ end
25
+
26
+ def show(component)
27
+ props = component.props.reject { |k,v| k == :name }.stringify_keys # for sort
28
+ puts "#{component.name}:"
29
+ props.keys.sort.each do |k|
30
+ v = props[k]
31
+ puts " #{k}: #{v}" unless v.blank?
32
+ end
33
+ end
34
+
35
+ def lockfile
36
+ Lockfile.instance
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,26 @@
1
+ module Lono::Bundler
2
+ class List < CLI::Base
3
+ def run
4
+ file = LB.config.lockfile
5
+ unless File.exist?(file)
6
+ logger.info "No #{file} found".color(:red)
7
+ logger.info "Maybe run: lono bundle"
8
+ return
9
+ end
10
+
11
+ logger.info "Components included by #{file}\n\n"
12
+ presenter = CliFormat::Presenter.new(@options.merge(format: "table"))
13
+ presenter.header = ["Name", "Type"]
14
+ lockfile.components.each do |component|
15
+ row = [component.name, component.type]
16
+ presenter.rows << row
17
+ end
18
+ presenter.show
19
+ logger.info "\nUse `lono bundle info` to print more detailed information about a component"
20
+ end
21
+
22
+ def lockfile
23
+ Lockfile.instance
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,56 @@
1
+ class Lono::Bundler::Lockfile
2
+ class VersionComparer
3
+ attr_reader :reason, :changed
4
+ def initialize(locked, current)
5
+ @locked, @current = locked, current
6
+ @changed = false
7
+ end
8
+
9
+ def changed?
10
+ @changed
11
+ end
12
+
13
+ # Tricky logic, maybe spec this.
14
+ #
15
+ # no components specified:
16
+ # lono bundle update # no components specified => update all
17
+ # lono bundle install # no Lonofile.lock => update all
18
+ # components specified:
19
+ # lono bundle update s3 # explicit component => update s3
20
+ # lono bundle install s3 # errors: not possible to specify componentule for install command
21
+ #
22
+ # Note: Install with specific components wipes existing components. Not worth it to support.
23
+ #
24
+ def run
25
+ @changed = false
26
+
27
+ # Most props are "strict" version checks. So if user changes options generally in the component line
28
+ # the Lonofile.lock will get updated, which is expected behavior.
29
+ props = @locked.props.keys + @current.props.keys
30
+ strict_versions = props.uniq.sort - [:sha, :type]
31
+ strict_versions.each do |version|
32
+ @changed = @locked.send(version) != @current.send(version)
33
+ if @changed
34
+ @reason = reason_message(version)
35
+ return @changed
36
+ end
37
+ end
38
+
39
+ # Lots of nuance with the sha check that works differently
40
+ # Only check when set.
41
+ # Also in update mode then always check it.
42
+ @changed = @current.sha && !@locked.sha.include?(@current.sha) ||
43
+ LB.update_mode? && !@current.latest_sha.include?(@locked.sha)
44
+ if @changed
45
+ @reason = reason_message("sha")
46
+ return @changed
47
+ end
48
+
49
+ @changed
50
+ end
51
+
52
+ def reason_message(version)
53
+ "Replacing component #{@current.name} because #{version} is different in Lonofile and Lonofile.lock"
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,36 @@
1
+ require "yaml"
2
+
3
+ class Lono::Bundler::Lockfile
4
+ class Yamler
5
+ def initialize(components)
6
+ @components = components.sort_by(&:name)
7
+ end
8
+
9
+ def dump
10
+ YAML.dump(data)
11
+ end
12
+
13
+ def data
14
+ @components.map do |component|
15
+ item(component)
16
+ end
17
+ end
18
+
19
+ def item(component)
20
+ props = component.props.dup # passthrough: name, url, version, ref, tag, branch etc
21
+ props[:sha] ||= component.latest_sha
22
+ props.delete_if { |k,v| v.nil? }
23
+ props.deep_stringify_keys
24
+ end
25
+
26
+ def write
27
+ IO.write(LB.config.lockfile, dump)
28
+ end
29
+
30
+ class << self
31
+ def write(components)
32
+ new(components).write
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,66 @@
1
+ require "yaml"
2
+
3
+ module Lono::Bundler
4
+ class Lockfile
5
+ include Singleton
6
+ include LB::Util::Logging
7
+
8
+ # [{"name"=>"vpc",
9
+ # "type"=>"blueprint",
10
+ # "sha"=>"52328b2b5197f9b95e3005cfcfb99595040ee45b",
11
+ # "source"=>"org/terraform-aws-vpc",
12
+ # "url"=>"https://github.com/org/terraform-aws-vpc"},
13
+ # {"name" => "instance",
14
+ # "type"=>"blueprint",
15
+ # "sha"=>"570cca3ea7b25e3af1961dc57b27ca2c129b934a",
16
+ # "source"=>"org/terraform-aws-instance",
17
+ # "url"=>"https://github.com/org/terraform-aws-instance"}]
18
+ @@components = nil
19
+ def components
20
+ return @@components if @@components
21
+ lockfile = LB.config.lockfile
22
+ components = File.exist?(lockfile) ? YAML.load_file(lockfile) : []
23
+ @@components = components.map do |props|
24
+ Component.new(props)
25
+ end
26
+ end
27
+
28
+ # update (if version mismatch) or create (if missing)
29
+ def sync(component)
30
+ replace!(component) if changed?(component)
31
+ end
32
+
33
+ # component built from Lonofile
34
+ def changed?(component)
35
+ # missing componentule case
36
+ found = components.find { |locked_component| locked_component.name == component.name }
37
+ unless found
38
+ logger.debug "Replacing component: #{component.name}. Not found in Lonofile.lock"
39
+ return true
40
+ end
41
+
42
+ comparer = VersionComparer.new(found, component)
43
+ comparer.run
44
+ logger.debug("REASON: #{comparer.reason}") if comparer.reason
45
+ comparer.changed?
46
+ end
47
+
48
+ def replace!(component)
49
+ # components are immediately fresh from writing to @@components directly
50
+ @@components.delete_if { |c| c.name == component.name && c.type == component.type }
51
+ @@components << component
52
+ @@components.sort_by!(&:name)
53
+ end
54
+
55
+ def prune(removed_components)
56
+ removals = removed_components.map(&:name)
57
+ @@components.delete_if { |m| removals.include?(m.name) }
58
+ end
59
+
60
+ class << self
61
+ def write
62
+ Yamler.write(@@components) if @@components
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,32 @@
1
+ module Lono::Bundler
2
+ class Lonofile
3
+ include Singleton
4
+ extend Memoist
5
+ include LB::Util::Logging
6
+
7
+ # dsl meta example:
8
+ # {:global=>{{:org=>"boltopspro"},
9
+ # :components=>[{:source=>"git@github.com:boltopspro/vpc", :type=>"blueprint", :name=>"vpc"}]
10
+ # }
11
+ def components
12
+ LB.dsl.meta[:components].map do |options|
13
+ Component.new(options)
14
+ end
15
+ end
16
+ memoize :components
17
+
18
+ # Checks if any of the components defined in Lonofile has an inferred an org
19
+ # In this case the org must be set
20
+ # When a source is set with an inferred org and org is not set it looks like this:
21
+ #
22
+ # dsl.meta has {:source=>"terraform-random-pet"}
23
+ # component.source = "terraform-random-pet"
24
+ #
25
+ # Using info to detect that the org is missing and the Lonofile definition
26
+ # has at least one component line that has an inferred org.
27
+ #
28
+ def missing_org?
29
+ components.detect { |component| component.source.split('/').size == 1 } && LB.config.org.nil?
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,27 @@
1
+ module Lono::Bundler
2
+ class Runner < CLI::Base
3
+ def run
4
+ Syncer.new(@options).run
5
+ Exporter.new(@options).run
6
+ # finish_message
7
+ end
8
+
9
+ def finish_message
10
+ no_components_found = true
11
+ export_paths.each do |path|
12
+ found = Dir.exist?(path) && !Dir.empty?(path)
13
+ next unless found
14
+ logger.info "components saved to #{path}"
15
+ no_components_found = false
16
+ end
17
+
18
+ logger.info("No components were found.") if no_components_found
19
+ end
20
+
21
+ def export_paths
22
+ export_paths = Lonofile.instance.mods.map(&:export_to).compact.uniq
23
+ export_paths << LB.config.export_to
24
+ export_paths
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,70 @@
1
+ module Lono::Bundler
2
+ class Syncer
3
+ include LB::Util::Logging
4
+
5
+ def initialize(options={})
6
+ @options = options
7
+ @component = @options[:component]
8
+ end
9
+
10
+ def run
11
+ validate!
12
+ FileUtils.rm_f(LB.config.lockfile) if update_all?
13
+ logger.info "Bundling with #{LB.config.lonofile}..."
14
+ if File.exist?(LB.config.lockfile)
15
+ sync
16
+ else
17
+ create
18
+ end
19
+ LB::Lockfile.write
20
+ end
21
+
22
+ def sync
23
+ sync_components
24
+ removal_components = subtract(lockfile.components, lonofile.components)
25
+ lockfile.prune(removal_components)
26
+ end
27
+
28
+ def create
29
+ sync_components
30
+ end
31
+
32
+ def sync_components
33
+ # VersionComparer is used in lockfile.sync and does heavy lifting to check if component should be updated and replaced
34
+ lonofile.components.each do |component|
35
+ next unless sync?(component)
36
+ logger.debug "Syncing #{component.name}"
37
+ lockfile.sync(component) # update (if version mismatch) or create (if missing)
38
+ end
39
+ end
40
+
41
+ def sync?(component)
42
+ names = @options[:components]
43
+ names.blank? or names.include?(component.name)
44
+ end
45
+
46
+ def validate!
47
+ return unless lonofile.missing_org?
48
+ logger.error "ERROR: org must be set in the #{LB.config.lonofile}.".color(:red)
49
+ logger.error "Please set org in the Lonofile"
50
+ exit 1
51
+ end
52
+
53
+ def update_all?
54
+ LB.update_mode? && @options[:components].empty?
55
+ end
56
+
57
+ def subtract(components1, components2)
58
+ component2_names = components2.map(&:name)
59
+ components1.select { |component1| !component2_names.include?(component1.name) }
60
+ end
61
+
62
+ def lonofile
63
+ Lonofile.instance
64
+ end
65
+
66
+ def lockfile
67
+ Lockfile.instance
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,37 @@
1
+ module Lono::Bundler::Util
2
+ module Git
3
+ include Logging
4
+
5
+ def sh(command)
6
+ command = "#{command} 2>&1" # always need output for the sha
7
+ logger.debug "=> #{command}"
8
+ out = `#{command}`
9
+ unless $?.success?
10
+ if command.include?("git")
11
+ raise LB::GitError.new("#{command}\n#{out}")
12
+ else
13
+ logger.error "ERROR: running #{command}".color(:red)
14
+ logger.error out
15
+ exit $?.exitstatus
16
+ end
17
+ end
18
+ out
19
+ end
20
+
21
+ def git(command)
22
+ sh("git #{command}")
23
+ rescue LB::GitError => e
24
+ action, version = command.split(' ')
25
+ if action == "checkout" && version !~ /^v/
26
+ command = "checkout v#{version}"
27
+ retry
28
+ else
29
+ logger.error "ERROR: There was a git error".color(:red)
30
+ logger.error "Current dir: #{Dir.pwd}"
31
+ logger.error "The error occur when running:"
32
+ logger.error e.message
33
+ end
34
+ exit 1
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,7 @@
1
+ module Lono::Bundler::Util
2
+ module Logging
3
+ def logger
4
+ Lono::Bundler.logger
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ module Lono::Bundler::Util
2
+ module Sure
3
+ include Lono::Utils::Sure
4
+ end
5
+ end
@@ -1,6 +1,7 @@
1
1
  module Lono
2
- # Named Bundle vs Bundler to avoid having to fully qualify ::Bundler
3
- module Bundle
2
+ module Bundler
3
+ extend Memoist
4
+
4
5
  # Looks like for zeitwerk module autovivification to work `bundle exec` must be called.
5
6
  # This allows zeitwork module autovivification to work even if the user has not called lono with `bundle exec lono`.
6
7
  # Bundler.setup is essentially the same as `bundle exec`
@@ -9,7 +10,7 @@ module Lono
9
10
  def setup
10
11
  return unless gemfile?
11
12
  Kernel.require "bundler/setup"
12
- Bundler.setup # Same as Bundler.setup(:default)
13
+ ::Bundler.setup # Same as Bundler.setup(:default)
13
14
  rescue LoadError => e
14
15
  handle_error(e)
15
16
  end
@@ -17,7 +18,7 @@ module Lono
17
18
  def require
18
19
  return unless gemfile?
19
20
  Kernel.require "bundler/setup"
20
- Bundler.require(*bundler_groups)
21
+ ::Bundler.require(*bundler_groups)
21
22
  rescue LoadError => e
22
23
  handle_error(e)
23
24
  end
@@ -50,5 +51,38 @@ module Lono
50
51
  end
51
52
 
52
53
  extend self
54
+
55
+ @@logger = nil
56
+ def logger
57
+ config.logger
58
+ end
59
+
60
+ def logger=(v)
61
+ @@logger = v
62
+ end
63
+
64
+ def config
65
+ Config.instance.config
66
+ end
67
+
68
+ # DSL is evaluated once lazily when it get used
69
+ def dsl
70
+ dsl = Dsl.new
71
+ dsl.run
72
+ dsl
73
+ end
74
+ memoize :dsl
75
+
76
+ @@update_mode = false
77
+ def update_mode
78
+ @@update_mode
79
+ end
80
+ alias_method :update_mode?, :update_mode
81
+
82
+ def update_mode=(v)
83
+ @@update_mode = v
84
+ end
53
85
  end
54
86
  end
87
+
88
+ LB = Lono::Bundler
data/lib/lono/cfn/base.rb CHANGED
@@ -1,201 +1,15 @@
1
- require "lono"
2
-
3
- class Lono::Cfn
4
- class Base < Lono::AbstractBase
1
+ module Lono::Cfn
2
+ class Base < Lono::CLI::Base
5
3
  extend Memoist
4
+
6
5
  include Lono::AwsServices
7
6
  include Lono::Utils::Sure
7
+ include Lono::Utils::Logging
8
+ include Lono::Utils::Pretty
9
+ include Lono::Utils::Quit
8
10
 
9
- def starting_message
10
- action = self.class.to_s.split('::').last
11
- puts "#{action} #{@stack.color(:green)} stack..."
12
- end
13
-
14
- def run
15
- starting_message
16
- parameters = generate_all
17
- begin
18
- save(parameters) # defined in the sub class
19
- rescue Aws::CloudFormation::Errors::InsufficientCapabilitiesException => e
20
- yes = rerun_with_iam?(e)
21
- retry if yes
22
- rescue Aws::CloudFormation::Errors::ValidationError => e
23
- if e.message.include?("No updates") # No updates are to be performed.
24
- puts "WARN: #{e.message}".color(:yellow)
25
- elsif e.message.include?("UPDATE_ROLLBACK_FAILED") # https://amzn.to/2IiEjc5
26
- continue_update_rollback
27
- else
28
- puts "ERROR: #{e.message}".color(:red)
29
- exit 1
30
- end
31
- end
32
-
33
- return unless @options[:wait]
34
-
35
- success = false
36
- if !@options[:noop]
37
- success = status.wait
38
- end
39
-
40
- # exit code for cfn.rb cli, so there's less duplication
41
- exit 1 unless success
42
- success
43
- end
44
-
45
- def continue_update_rollback_sure?
46
- puts <<~EOL
47
- The stack is in the UPDATE_ROLLBACK_FAILED state. More info here: https://amzn.to/2IiEjc5
48
- Would you like to try to continue the update rollback? (y/N)
49
- EOL
50
-
51
- sure = @options[:sure] ? "y" : $stdin.gets
52
- unless sure =~ /^y/
53
- puts "Exiting without continuing the update rollback."
54
- exit 0
55
- end
56
- end
57
-
58
- def continue_update_rollback
59
- continue_update_rollback_sure?
60
- options = {stack_name: @stack}
61
- show_options(options, "cfn.continue_update_rollback")
62
- begin
63
- cfn.continue_update_rollback(options)
64
- rescue Aws::CloudFormation::Errors::ValidationError => e
65
- puts "ERROR5: #{e.message}".color(:red)
66
- exit 1
67
- end
68
- end
69
-
70
- def delete_rollback_stack
71
- rollback = Rollback.new(@stack)
72
- rollback.delete_stack
73
- end
74
-
75
- def status
76
- Status.new(@stack)
77
- end
78
- memoize :status
79
-
80
- def rerun_with_iam?(e)
81
- # e.message is "Requires capabilities : [CAPABILITY_IAM]"
82
- # grab CAPABILITY_IAM with regexp
83
- capabilities = e.message.match(/\[(.*)\]/)[1]
84
- confirm = prompt_for_iam(capabilities)
85
- if confirm =~ /^y/
86
- @options.merge!(capabilities: [capabilities])
87
- puts "Re-running: #{command_with_iam(capabilities).color(:green)}"
88
- true
89
- else
90
- puts "Exited"
91
- exit 1
92
- end
93
- end
94
-
95
- def prompt_for_iam(capabilities)
96
- puts "This stack will create IAM resources. Please approve to run the command again with #{capabilities} capabilities."
97
- puts " #{command_with_iam(capabilities)}"
98
-
99
- puts "Please confirm (y/N)"
100
- $stdin.gets
101
- end
102
-
103
- def command_with_iam(capabilities)
104
- "#{File.basename($0)} #{ARGV.join(' ')} --capabilities #{capabilities}"
105
- end
106
-
107
- def generate_all
108
- Lono::Generate.new(@options).all
109
- end
110
-
111
- # Maps to CloudFormation format. Example:
112
- #
113
- # {"a"=>"1", "b"=>"2"}
114
- # To
115
- # [{key: "a", value: "1"}, {key: "b", value: "2"}]
116
- #
117
- def tags
118
- tags = @options[:tags] || []
119
- tags = tags.map do |k,v|
120
- { key: k, value: v }
121
- end
122
-
123
- update_operation = %w[Preview Update].include?(self.class.to_s)
124
- if tags.empty? && update_operation
125
- resp = cfn.describe_stacks(stack_name: @stack)
126
- tags = resp.stacks.first.tags
127
- tags = tags.map(&:to_h)
128
- end
129
-
130
- tags
131
- end
132
-
133
- def exit_unless_updatable!
134
- return true if testing_update?
135
- return false if @options[:noop]
136
-
137
- status = stack_status
138
- unless status =~ /_COMPLETE$/ || status == "UPDATE_ROLLBACK_FAILED"
139
- puts "Cannot create a change set for the stack because the #{@stack} is not in an updatable state. Stack status: #{status}".color(:red)
140
- quit(1)
141
- end
142
- end
143
-
144
- # All CloudFormation states listed here:
145
- # http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-describing-stacks.html
146
- def stack_status
147
- return true if testing_update?
148
- return false if @options[:noop]
149
- resp = cfn.describe_stacks(stack_name: @stack)
150
- resp.stacks[0].stack_status
151
- end
152
-
153
- # To allow mocking in specs
154
- def quit(signal)
155
- exit signal
156
- end
157
-
158
- def capabilities
159
- return @options[:capabilities] if @options[:capabilities]
160
- if @options[:sure] || @options[:iam]
161
- ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"]
162
- end
163
- end
164
-
165
- def notification_arns
166
- @setting ||= Lono::Setting.new
167
- settings = @setting.data
168
- arns = @options["notification_arns"] || settings["notification_arns"]
169
- arns == [''] ? [] : arns # allow removing the notification_arns setting
170
- end
171
-
172
- def show_options(options, meth=nil)
173
- options = options.clone.compact
174
- if options[:template_body] # continue_update_rollback
175
- options[:template_body] = "Hidden due to size... View at: #{pretty_path(template_path)}"
176
- options[:template_url] = options[:template_url].sub(/\?.*/,'')
177
- end
178
- to = meth || "AWS API"
179
- puts "Parameters passed to #{to}:"
180
- puts YAML.dump(options.deep_stringify_keys)
181
- end
182
-
183
- # Lono always uploads the template to s3 so we can use much larger templates.
184
- #
185
- # template_body: 51,200 bytes - filesystem limit
186
- # template_url: 460,800 bytes - s3 limit
187
- #
188
- # Reference: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html
189
- def set_template_url!(options)
190
- url_path = template_path.sub("#{Lono.root}/",'')
191
- url = Lono::S3::Uploader.new(url_path).presigned_url
192
- url.gsub!(/\.yml.*/, ".yml") # Interesting dont need presign query string. For stack sets it actually breaks it. So removing.
193
- options[:template_url] = url
194
- options
195
- end
11
+ include Concerns
196
12
 
197
- def pretty_path(path)
198
- path.sub("#{Lono.root}/",'')
199
- end
13
+ delegate :template_path, to: :build
200
14
  end
201
- end
15
+ end