lono 7.5.1 → 8.0.0.pre.rc2

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 (465) 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 +36 -4
  10. data/CONTRIBUTING.md +2 -2
  11. data/Gemfile +5 -1
  12. data/LICENSE.txt +201 -1
  13. data/README.md +6 -12
  14. data/lib/lono/api/client.rb +3 -2
  15. data/lib/lono/app/inits.rb +13 -0
  16. data/lib/lono/app.rb +74 -0
  17. data/lib/lono/app_file/base.rb +1 -1
  18. data/lib/lono/app_file/build/lambda_layer/ruby_packager.rb +9 -9
  19. data/lib/lono/app_file/build/lambda_layer.rb +3 -3
  20. data/lib/lono/app_file/build.rb +10 -15
  21. data/lib/lono/app_file/registry/item.rb +4 -4
  22. data/lib/lono/app_file/upload.rb +1 -1
  23. data/lib/lono/autoloader.rb +2 -2
  24. data/lib/lono/aws_services/helper.rb +43 -6
  25. data/lib/lono/aws_services.rb +37 -6
  26. data/lib/lono/blueprint.rb +18 -9
  27. data/lib/lono/booter.rb +28 -0
  28. data/lib/lono/builder/context/generic.rb +11 -0
  29. data/lib/lono/{template/context/loader → builder/context/loaders}/load_files.rb +5 -6
  30. data/lib/lono/builder/context/loaders.rb +35 -0
  31. data/lib/lono/builder/context/params.rb +6 -0
  32. data/lib/lono/builder/context/template.rb +4 -0
  33. data/lib/lono/builder/dsl/evaluator.rb +94 -0
  34. data/lib/lono/builder/dsl/finalizer/configsets.rb +41 -0
  35. data/lib/lono/{template/strategy → builder}/dsl/finalizer/parameter_groups.rb +2 -2
  36. data/lib/lono/{template/strategy → builder}/dsl/finalizer.rb +2 -1
  37. data/lib/lono/{template/strategy/dsl/builder/helpers/ec2_helper.rb → builder/dsl/helpers/ec2.rb} +3 -3
  38. data/lib/lono/builder/dsl/helpers/partials.rb +145 -0
  39. data/lib/lono/{template/strategy/dsl/builder/helpers/s3_helper.rb → builder/dsl/helpers/s3.rb} +3 -3
  40. data/lib/lono/{template/context/ssm_fetcher.rb → builder/dsl/helpers/ssm/fetcher.rb} +2 -2
  41. data/lib/lono/{template/context/helpers.rb → builder/dsl/helpers/ssm.rb} +3 -3
  42. data/lib/lono/{template/strategy/dsl/builder/helpers/stack_helper.rb → builder/dsl/helpers/stack.rb} +14 -9
  43. data/lib/lono/{template/strategy/dsl/builder/helpers/tags_helper.rb → builder/dsl/helpers/tags.rb} +2 -2
  44. data/lib/lono/builder/dsl/helpers/template_file.rb +54 -0
  45. data/lib/lono/{template/strategy/dsl/builder → builder/dsl}/helpers.rb +3 -4
  46. data/lib/lono/builder/dsl/syntax/core/base.rb +22 -0
  47. data/lib/lono/{template/strategy/dsl/builder/section → builder/dsl/syntax/core}/condition.rb +1 -1
  48. data/lib/lono/{template/strategy/dsl/builder/section → builder/dsl/syntax/core}/mapping.rb +1 -1
  49. data/lib/lono/{template/strategy/dsl/builder/section → builder/dsl/syntax/core}/output.rb +1 -1
  50. data/lib/lono/{template/strategy/dsl/builder/section → builder/dsl/syntax/core}/parameter.rb +1 -1
  51. data/lib/lono/{template/strategy/dsl/builder/section → builder/dsl/syntax/core}/resource/property_mover.rb +1 -1
  52. data/lib/lono/{template/strategy/dsl/builder/section → builder/dsl/syntax/core}/resource.rb +1 -1
  53. data/lib/lono/{template/strategy/dsl/builder/section → builder/dsl/syntax/core}/section.rb +1 -1
  54. data/lib/lono/{template/strategy/dsl/builder → builder/dsl/syntax/core}/squeezer.rb +1 -1
  55. data/lib/lono/{template/strategy/dsl/builder/section/methods.rb → builder/dsl/syntax/core.rb} +8 -8
  56. data/lib/lono/{template/strategy/dsl/builder → builder/dsl/syntax}/fn.rb +2 -2
  57. data/lib/lono/{template/strategy/dsl/builder → builder/dsl}/syntax/parameter_group.rb +1 -1
  58. data/lib/lono/builder/dsl/syntax.rb +9 -0
  59. data/lib/lono/builder/dsl.rb +14 -0
  60. data/lib/lono/{param/generator.rb → builder/param.rb} +21 -22
  61. data/lib/lono/builder/template/aws_service.rb +15 -0
  62. data/lib/lono/builder/template/bashify.rb +43 -0
  63. data/lib/lono/{output/template.rb → builder/template/output.rb} +14 -7
  64. data/lib/lono/{template → builder/template}/post_processor.rb +4 -4
  65. data/lib/lono/{template → builder/template}/upload.rb +3 -5
  66. data/lib/lono/builder/template.rb +55 -0
  67. data/lib/lono/{template/strategy/dsl/builder → builder/util}/stringify.rb +1 -1
  68. data/lib/lono/bundler/cli/base.rb +10 -0
  69. data/lib/lono/bundler/cli/bundle.rb +44 -0
  70. data/lib/lono/bundler/cli/clean.rb +27 -0
  71. data/lib/lono/bundler/cli/help/bundle.md +3 -0
  72. data/lib/lono/bundler/cli/help.rb +11 -0
  73. data/lib/lono/bundler/cli.rb +7 -0
  74. data/lib/lono/bundler/component/concerns/local_concern.rb +10 -0
  75. data/lib/lono/bundler/component/concerns/notation_concern.rb +59 -0
  76. data/lib/lono/bundler/component/concerns/path_concern.rb +68 -0
  77. data/lib/lono/bundler/component/concerns/stack_concern.rb +60 -0
  78. data/lib/lono/bundler/component/fetcher/base.rb +27 -0
  79. data/lib/lono/bundler/component/fetcher/gcs.rb +69 -0
  80. data/lib/lono/bundler/component/fetcher/git.rb +69 -0
  81. data/lib/lono/bundler/component/fetcher/local.rb +15 -0
  82. data/lib/lono/bundler/component/fetcher/s3.rb +66 -0
  83. data/lib/lono/bundler/component/fetcher.rb +18 -0
  84. data/lib/lono/bundler/component/http/concern.rb +45 -0
  85. data/lib/lono/bundler/component/http/source.rb +19 -0
  86. data/lib/lono/bundler/component/org_repo.rb +65 -0
  87. data/lib/lono/bundler/component/props/extension.rb +18 -0
  88. data/lib/lono/bundler/component/props/typer.rb +41 -0
  89. data/lib/lono/bundler/component/props.rb +122 -0
  90. data/lib/lono/bundler/component/registry.rb +136 -0
  91. data/lib/lono/bundler/component.rb +52 -0
  92. data/lib/lono/bundler/config.rb +18 -0
  93. data/lib/lono/bundler/dsl/syntax.rb +46 -0
  94. data/lib/lono/bundler/dsl.rb +21 -0
  95. data/lib/lono/bundler/exporter/base.rb +6 -0
  96. data/lib/lono/bundler/exporter/copy.rb +22 -0
  97. data/lib/lono/bundler/exporter.rb +50 -0
  98. data/lib/lono/bundler/extract/tar.rb +33 -0
  99. data/lib/lono/bundler/extract/zip.rb +16 -0
  100. data/lib/lono/bundler/info.rb +39 -0
  101. data/lib/lono/bundler/list.rb +26 -0
  102. data/lib/lono/bundler/lockfile/version_comparer.rb +56 -0
  103. data/lib/lono/bundler/lockfile/yamler.rb +36 -0
  104. data/lib/lono/bundler/lockfile.rb +66 -0
  105. data/lib/lono/bundler/lonofile.rb +32 -0
  106. data/lib/lono/bundler/runner.rb +27 -0
  107. data/lib/lono/bundler/syncer.rb +70 -0
  108. data/lib/lono/bundler/util/git.rb +37 -0
  109. data/lib/lono/bundler/util/logging.rb +7 -0
  110. data/lib/lono/bundler/util/sure.rb +5 -0
  111. data/lib/lono/{bundle.rb → bundler.rb} +38 -4
  112. data/lib/lono/cfn/base.rb +9 -195
  113. data/lib/lono/cfn/cancel.rb +9 -26
  114. data/lib/lono/cfn/concerns/build.rb +10 -0
  115. data/lib/lono/cfn/concerns/template_output.rb +10 -0
  116. data/lib/lono/cfn/concerns.rb +43 -0
  117. data/lib/lono/cfn/delete.rb +8 -32
  118. data/lib/lono/cfn/deploy/base.rb +4 -0
  119. data/lib/lono/cfn/deploy/iam.rb +48 -0
  120. data/lib/lono/cfn/deploy/notification.rb +8 -0
  121. data/lib/lono/cfn/deploy/operable.rb +18 -0
  122. data/lib/lono/cfn/deploy/opts.rb +49 -0
  123. data/lib/lono/cfn/deploy/rollback.rb +46 -0
  124. data/lib/lono/cfn/deploy/tags.rb +18 -0
  125. data/lib/lono/cfn/deploy.rb +71 -5
  126. data/lib/lono/cfn/download.rb +5 -7
  127. data/lib/lono/cfn/output.rb +49 -0
  128. data/lib/lono/cfn/plan/base.rb +19 -0
  129. data/lib/lono/cfn/plan/changeset/base.rb +19 -0
  130. data/lib/lono/cfn/plan/changeset/notifications.rb +24 -0
  131. data/lib/lono/cfn/plan/changeset/outputs.rb +25 -0
  132. data/lib/lono/cfn/plan/changeset/resources.rb +48 -0
  133. data/lib/lono/cfn/plan/changeset/tags.rb +16 -0
  134. data/lib/lono/cfn/plan/changeset.rb +136 -0
  135. data/lib/lono/cfn/plan/concerns.rb +10 -0
  136. data/lib/lono/cfn/plan/delete.rb +16 -0
  137. data/lib/lono/cfn/plan/diff/base.rb +10 -0
  138. data/lib/lono/cfn/plan/diff/data.rb +52 -0
  139. data/lib/lono/cfn/plan/diff/file.rb +57 -0
  140. data/lib/lono/cfn/plan/new.rb +26 -0
  141. data/lib/lono/cfn/{preview → plan}/param.rb +26 -34
  142. data/lib/lono/cfn/plan/summary.rb +16 -0
  143. data/lib/lono/cfn/plan/template.rb +28 -0
  144. data/lib/lono/cfn/plan.rb +33 -0
  145. data/lib/lono/cfn/show.rb +30 -0
  146. data/lib/lono/cfn/status.rb +1 -1
  147. data/lib/lono/cli/abstract.rb +17 -0
  148. data/lib/lono/cli/base.rb +9 -0
  149. data/lib/lono/cli/build.rb +91 -0
  150. data/lib/lono/cli/bundle.rb +21 -0
  151. data/lib/lono/cli/cfn/opts.rb +59 -0
  152. data/lib/lono/cli/cfn.rb +19 -0
  153. data/lib/lono/cli/clean.rb +22 -0
  154. data/lib/lono/{code.rb → cli/code.rb} +2 -2
  155. data/lib/lono/{completion.rb → cli/completion.rb} +2 -2
  156. data/lib/lono/{help → cli/help}/blueprint/new.md +4 -4
  157. data/lib/lono/{help/generate.md → cli/help/build.md} +6 -6
  158. data/lib/lono/{help → cli/help}/cfn/cancel.md +0 -0
  159. data/lib/lono/cli/help/cfn/download.md +3 -0
  160. data/lib/lono/{help → cli/help}/cfn/preview.md +9 -8
  161. data/lib/lono/{help → cli/help}/cfn/status.md +0 -1
  162. data/lib/lono/cli/help/cfn.md +4 -0
  163. data/lib/lono/{help → cli/help}/code/convert.md +0 -0
  164. data/lib/lono/{help → cli/help}/code/import.md +2 -2
  165. data/lib/lono/{help → cli/help}/completion.md +3 -3
  166. data/lib/lono/{help → cli/help}/completion_script.md +0 -0
  167. data/lib/lono/{help → cli/help}/configsets.md +0 -0
  168. data/lib/lono/cli/help/down.md +13 -0
  169. data/lib/lono/cli/help/new/project.md +34 -0
  170. data/lib/lono/{help → cli/help}/param/generate.md +0 -0
  171. data/lib/lono/cli/help/param.md +6 -0
  172. data/lib/lono/{help → cli/help}/pro/blueprints.md +0 -0
  173. data/lib/lono/{help → cli/help}/pro/configsets.md +0 -0
  174. data/lib/lono/{help → cli/help}/script/build.md +0 -0
  175. data/lib/lono/{help → cli/help}/script/upload.md +0 -0
  176. data/lib/lono/cli/help/seed.md +24 -0
  177. data/lib/lono/cli/help/summary.md +33 -0
  178. data/lib/lono/{help → cli/help}/template/bashify.md +0 -0
  179. data/lib/lono/cli/help/template/generate.md +7 -0
  180. data/lib/lono/{help → cli/help}/template.md +0 -0
  181. data/lib/lono/cli/help/up.md +30 -0
  182. data/lib/lono/{help → cli/help}/user_data.md +3 -3
  183. data/lib/lono/cli/help.rb +56 -0
  184. data/lib/lono/cli/list.rb +28 -0
  185. data/lib/lono/cli/new/blueprint.rb +33 -0
  186. data/lib/lono/cli/new/concerns.rb +16 -0
  187. data/lib/lono/{configset/new.rb → cli/new/configset.rb} +2 -9
  188. data/lib/lono/{extension/new.rb → cli/new/extension.rb} +2 -10
  189. data/lib/lono/cli/new/helper.rb +32 -0
  190. data/lib/lono/cli/new/project.rb +77 -0
  191. data/lib/lono/cli/new/sequence.rb +51 -0
  192. data/lib/lono/cli/new/shim.rb +59 -0
  193. data/lib/lono/cli/new/test/blueprint.rb +23 -0
  194. data/lib/lono/cli/new/test/sequence.rb +10 -0
  195. data/lib/lono/cli/new/test.rb +8 -0
  196. data/lib/lono/cli/new.rb +31 -0
  197. data/lib/lono/{opts.rb → cli/opts.rb} +9 -12
  198. data/lib/lono/{s3.rb → cli/s3.rb} +9 -7
  199. data/lib/lono/cli/script/base.rb +5 -0
  200. data/lib/lono/cli/script/build.rb +72 -0
  201. data/lib/lono/cli/script/upload.rb +49 -0
  202. data/lib/lono/{script.rb → cli/script.rb} +2 -2
  203. data/lib/lono/cli/seed.rb +9 -0
  204. data/lib/lono/cli/test.rb +35 -0
  205. data/lib/lono/cli.rb +81 -109
  206. data/lib/lono/command.rb +27 -0
  207. data/lib/lono/configset/{generator.rb → builder.rb} +9 -7
  208. data/lib/lono/configset/combiner.rb +8 -6
  209. data/lib/lono/configset/evaluate_file.rb +1 -1
  210. data/lib/lono/configset/meta.rb +1 -1
  211. data/lib/lono/configset/s3_file/build.rb +5 -4
  212. data/lib/lono/configset/s3_file/item.rb +1 -1
  213. data/lib/lono/configset/s3_file/upload.rb +2 -2
  214. data/lib/lono/configset/strategy/base.rb +6 -6
  215. data/lib/lono/configset/strategy/helpers/dsl/core.rb +1 -1
  216. data/lib/lono/core.rb +25 -54
  217. data/lib/lono/importer/base.rb +5 -5
  218. data/lib/lono/importer/download.rb +7 -7
  219. data/lib/lono/importer/dsl.rb +3 -3
  220. data/lib/lono/importer/service/coder.rb +67 -63
  221. data/lib/lono/importer.rb +1 -10
  222. data/lib/lono/inspector/base.rb +7 -7
  223. data/lib/lono/inspector/summary.rb +19 -17
  224. data/lib/lono/layering/layer.rb +126 -0
  225. data/lib/lono/layering.rb +13 -55
  226. data/lib/lono/logger/formatter.rb +13 -0
  227. data/lib/lono/logger.rb +34 -0
  228. data/lib/lono/lookup.rb +12 -0
  229. data/lib/lono/names.rb +50 -0
  230. data/lib/lono/plugin/meta.rb +30 -0
  231. data/lib/lono/plugin/tester.rb +13 -0
  232. data/lib/lono/plugin.rb +10 -0
  233. data/lib/lono/s3/aws_setup.rb +4 -3
  234. data/lib/lono/s3/bucket.rb +42 -42
  235. data/lib/lono/s3/rollback.rb +8 -0
  236. data/lib/lono/s3/uploader.rb +10 -12
  237. data/lib/lono/script/base.rb +3 -3
  238. data/lib/lono/script/build.rb +11 -12
  239. data/lib/lono/script/upload.rb +7 -7
  240. data/lib/lono/{seed → seeder}/service_role.rb +1 -1
  241. data/lib/lono/{seed/base.rb → seeder.rb} +38 -35
  242. data/lib/lono/user_data.rb +8 -13
  243. data/lib/lono/utils/contexts.rb +15 -0
  244. data/lib/lono/utils/item/zip.rb +5 -5
  245. data/lib/lono/utils/logging.rb +7 -0
  246. data/lib/lono/utils/{pretty_time.rb → pretty.rb} +6 -2
  247. data/lib/lono/utils/quit.rb +7 -0
  248. data/lib/lono/utils/rsync.rb +4 -2
  249. data/lib/lono/utils/sure.rb +4 -4
  250. data/lib/lono/version.rb +1 -1
  251. data/lib/lono.rb +7 -11
  252. data/lib/templates/blueprint/template.rb +2 -0
  253. data/lib/templates/configset/{lib/configset.rb → configset.rb} +0 -0
  254. data/lib/templates/examples/blueprint/template.rb +9 -0
  255. data/lib/templates/helper/%underscore_name%_helper.rb.tt +6 -0
  256. data/lib/templates/{skeleton → project}/.gitignore +1 -2
  257. data/lib/templates/project/Gemfile.tt +11 -0
  258. data/lib/templates/project/README.md +9 -0
  259. data/lib/templates/project/config/app.rb +3 -0
  260. data/lib/templates/shim/lono +7 -0
  261. data/lono.gemspec +51 -43
  262. metadata +260 -273
  263. data/.circleci/README.md +0 -3
  264. data/.circleci/config.yml +0 -58
  265. data/.cody/acceptance.sh +0 -49
  266. data/.cody/buildspec.yml +0 -9
  267. data/.cody/demo.rb +0 -38
  268. data/.cody/project.rb +0 -6
  269. data/.gitmodules +0 -3
  270. data/lib/lono/abstract_base.rb +0 -25
  271. data/lib/lono/aws_services/stack.rb +0 -41
  272. data/lib/lono/aws_services/stack_set.rb +0 -41
  273. data/lib/lono/blueprint/configset/loader.rb +0 -7
  274. data/lib/lono/blueprint/helper.rb +0 -24
  275. data/lib/lono/blueprint/meta.rb +0 -30
  276. data/lib/lono/blueprint/new.rb +0 -127
  277. data/lib/lono/blueprint/root.rb +0 -25
  278. data/lib/lono/cfn/create.rb +0 -41
  279. data/lib/lono/cfn/opts.rb +0 -88
  280. data/lib/lono/cfn/preview/changeset.rb +0 -168
  281. data/lib/lono/cfn/preview/codediff.rb +0 -41
  282. data/lib/lono/cfn/preview/diff_viewer.rb +0 -23
  283. data/lib/lono/cfn/rollback.rb +0 -26
  284. data/lib/lono/cfn/update.rb +0 -71
  285. data/lib/lono/cfn.rb +0 -75
  286. data/lib/lono/clean.rb +0 -14
  287. data/lib/lono/configset/list.rb +0 -67
  288. data/lib/lono/configset/preparer.rb +0 -44
  289. data/lib/lono/configset/register/base.rb +0 -122
  290. data/lib/lono/configset/register/blueprint.rb +0 -16
  291. data/lib/lono/configset/register/dsl.rb +0 -14
  292. data/lib/lono/configset/register/project.rb +0 -13
  293. data/lib/lono/configset/resolver.rb +0 -47
  294. data/lib/lono/configset.rb +0 -16
  295. data/lib/lono/conventions.rb +0 -23
  296. data/lib/lono/core/config.rb +0 -22
  297. data/lib/lono/default/settings.yml +0 -21
  298. data/lib/lono/ext/bundler.rb +0 -7
  299. data/lib/lono/extension/helper.rb +0 -13
  300. data/lib/lono/extension/list.rb +0 -40
  301. data/lib/lono/extension.rb +0 -9
  302. data/lib/lono/extensions/dsl.rb +0 -11
  303. data/lib/lono/extensions/loader.rb +0 -30
  304. data/lib/lono/extensions/preparer.rb +0 -26
  305. data/lib/lono/extensions/register.rb +0 -15
  306. data/lib/lono/extensions.rb +0 -18
  307. data/lib/lono/file_uploader.rb +0 -21
  308. data/lib/lono/finder/base.rb +0 -152
  309. data/lib/lono/finder/blueprint/configset.rb +0 -17
  310. data/lib/lono/finder/blueprint.rb +0 -11
  311. data/lib/lono/finder/configset.rb +0 -11
  312. data/lib/lono/finder/extension.rb +0 -11
  313. data/lib/lono/generate.rb +0 -107
  314. data/lib/lono/help/cfn/create.md +0 -26
  315. data/lib/lono/help/cfn/delete.md +0 -13
  316. data/lib/lono/help/cfn/deploy.md +0 -21
  317. data/lib/lono/help/cfn/download.md +0 -3
  318. data/lib/lono/help/cfn/update.md +0 -49
  319. data/lib/lono/help/cfn.md +0 -7
  320. data/lib/lono/help/new.md +0 -57
  321. data/lib/lono/help/param.md +0 -6
  322. data/lib/lono/help/seed.md +0 -23
  323. data/lib/lono/help/set_instances/delete.md +0 -21
  324. data/lib/lono/help/set_instances/deploy.md +0 -31
  325. data/lib/lono/help/set_instances/list.md +0 -14
  326. data/lib/lono/help/set_instances/status.md +0 -15
  327. data/lib/lono/help/set_instances/sync.md +0 -92
  328. data/lib/lono/help/sets/delete.md +0 -8
  329. data/lib/lono/help/sets/deploy.md +0 -76
  330. data/lib/lono/help/sets/status.md +0 -23
  331. data/lib/lono/help/summary.md +0 -33
  332. data/lib/lono/help/template/generate.md +0 -7
  333. data/lib/lono/help/upgrade.md +0 -1
  334. data/lib/lono/help/xgraph.md +0 -16
  335. data/lib/lono/help.rb +0 -15
  336. data/lib/lono/importer/erb.rb +0 -31
  337. data/lib/lono/inspector/graph.rb +0 -125
  338. data/lib/lono/jade/circular.rb +0 -26
  339. data/lib/lono/jade/materializer/final.rb +0 -10
  340. data/lib/lono/jade/materializer/gems_builder.rb +0 -81
  341. data/lib/lono/jade/materializer/source.rb +0 -54
  342. data/lib/lono/jade/materializer.rb +0 -15
  343. data/lib/lono/jade/registry.rb +0 -64
  344. data/lib/lono/jade.rb +0 -110
  345. data/lib/lono/jadespec.rb +0 -68
  346. data/lib/lono/new/helper.rb +0 -15
  347. data/lib/lono/new.rb +0 -95
  348. data/lib/lono/param.rb +0 -14
  349. data/lib/lono/pro/base.rb +0 -16
  350. data/lib/lono/pro/repo.rb +0 -28
  351. data/lib/lono/pro.rb +0 -15
  352. data/lib/lono/project_checker.rb +0 -35
  353. data/lib/lono/registration/base.rb +0 -37
  354. data/lib/lono/registration/check.rb +0 -15
  355. data/lib/lono/registration/temp.rb +0 -53
  356. data/lib/lono/registration/user.rb +0 -60
  357. data/lib/lono/seed.rb +0 -39
  358. data/lib/lono/sequence.rb +0 -35
  359. data/lib/lono/set_instances/base.rb +0 -30
  360. data/lib/lono/set_instances/changeable.rb +0 -53
  361. data/lib/lono/set_instances/create.rb +0 -7
  362. data/lib/lono/set_instances/delete.rb +0 -47
  363. data/lib/lono/set_instances/deploy.rb +0 -52
  364. data/lib/lono/set_instances/list.rb +0 -13
  365. data/lib/lono/set_instances/opts.rb +0 -37
  366. data/lib/lono/set_instances/status.rb +0 -12
  367. data/lib/lono/set_instances/sync.rb +0 -181
  368. data/lib/lono/set_instances/update.rb +0 -15
  369. data/lib/lono/set_instances.rb +0 -54
  370. data/lib/lono/sets/base.rb +0 -50
  371. data/lib/lono/sets/create.rb +0 -27
  372. data/lib/lono/sets/delete.rb +0 -43
  373. data/lib/lono/sets/deploy.rb +0 -11
  374. data/lib/lono/sets/list.rb +0 -35
  375. data/lib/lono/sets/opts.rb +0 -18
  376. data/lib/lono/sets/preview/codediff.rb +0 -35
  377. data/lib/lono/sets/preview/param.rb +0 -32
  378. data/lib/lono/sets/status/instance/base.rb +0 -120
  379. data/lib/lono/sets/status/instance/completed.rb +0 -35
  380. data/lib/lono/sets/status/instance/deleted.rb +0 -32
  381. data/lib/lono/sets/status/instance/show.rb +0 -7
  382. data/lib/lono/sets/status/instance.rb +0 -20
  383. data/lib/lono/sets/status/instances.rb +0 -136
  384. data/lib/lono/sets/status.rb +0 -128
  385. data/lib/lono/sets/summarize.rb +0 -22
  386. data/lib/lono/sets/time_spent.rb +0 -11
  387. data/lib/lono/sets/update.rb +0 -74
  388. data/lib/lono/sets/waiter.rb +0 -23
  389. data/lib/lono/sets.rb +0 -34
  390. data/lib/lono/setting.rb +0 -75
  391. data/lib/lono/template/aws_service.rb +0 -20
  392. data/lib/lono/template/bashify.rb +0 -39
  393. data/lib/lono/template/configset_injector.rb +0 -52
  394. data/lib/lono/template/context/loader.rb +0 -52
  395. data/lib/lono/template/context.rb +0 -29
  396. data/lib/lono/template/evaluate.rb +0 -40
  397. data/lib/lono/template/generator.rb +0 -23
  398. data/lib/lono/template/helper.rb +0 -152
  399. data/lib/lono/template/strategy/base.rb +0 -4
  400. data/lib/lono/template/strategy/common/helpers.rb +0 -44
  401. data/lib/lono/template/strategy/dsl/builder/helpers/core_helper.rb +0 -14
  402. data/lib/lono/template/strategy/dsl/builder/helpers/file_helper.rb +0 -48
  403. data/lib/lono/template/strategy/dsl/builder/section/base.rb +0 -30
  404. data/lib/lono/template/strategy/dsl/builder/syntax/extend_with.rb +0 -9
  405. data/lib/lono/template/strategy/dsl/builder/syntax.rb +0 -11
  406. data/lib/lono/template/strategy/dsl/builder.rb +0 -59
  407. data/lib/lono/template/strategy/dsl.rb +0 -14
  408. data/lib/lono/template/strategy/erb.rb +0 -82
  409. data/lib/lono/template/strategy/source.rb +0 -8
  410. data/lib/lono/template/template.rb +0 -54
  411. data/lib/lono/template/util.rb +0 -8
  412. data/lib/lono/template.rb +0 -24
  413. data/lib/lono/upgrade.rb +0 -20
  414. data/lib/lono/utils/generators/tree.rb +0 -18
  415. data/lib/templates/blueprint/%blueprint_name%.gemspec.tt +0 -45
  416. data/lib/templates/blueprint/.gitignore +0 -11
  417. data/lib/templates/blueprint/CHANGELOG.md +0 -7
  418. data/lib/templates/blueprint/Gemfile +0 -4
  419. data/lib/templates/blueprint/README.md.tt +0 -33
  420. data/lib/templates/blueprint/Rakefile.tt +0 -9
  421. data/lib/templates/blueprint/seed/configs.rb +0 -28
  422. data/lib/templates/blueprint_types/dsl/app/templates/%blueprint_name%.rb +0 -36
  423. data/lib/templates/blueprint_types/dsl/app/user_data/bootstrap.sh +0 -2
  424. data/lib/templates/blueprint_types/erb/app/definitions/base.rb.tt +0 -1
  425. data/lib/templates/blueprint_types/erb/app/templates/%blueprint_name%.yml +0 -67
  426. data/lib/templates/configset/%configset_name%.gemspec.tt +0 -42
  427. data/lib/templates/configset/.gitignore +0 -10
  428. data/lib/templates/configset/CHANGELOG.md +0 -7
  429. data/lib/templates/configset/Gemfile +0 -4
  430. data/lib/templates/configset/README.md.tt +0 -3
  431. data/lib/templates/configset/Rakefile.tt +0 -9
  432. data/lib/templates/extension/%extension_name%.gemspec.tt +0 -46
  433. data/lib/templates/extension/.gitignore +0 -11
  434. data/lib/templates/extension/.rspec +0 -3
  435. data/lib/templates/extension/CHANGELOG.md +0 -7
  436. data/lib/templates/extension/Gemfile.tt +0 -4
  437. data/lib/templates/extension/Rakefile.tt +0 -9
  438. data/lib/templates/extension/spec/spec_helper.rb.tt +0 -29
  439. data/lib/templates/skeleton/Gemfile +0 -3
  440. data/lib/templates/skeleton/README.md +0 -58
  441. data/lib/templates/skeleton/configs/settings.yml +0 -13
  442. data/vendor/cfn-status/CHANGELOG.md +0 -14
  443. data/vendor/cfn-status/Gemfile +0 -4
  444. data/vendor/cfn-status/Gemfile.lock +0 -49
  445. data/vendor/cfn-status/LICENSE.txt +0 -21
  446. data/vendor/cfn-status/README.md +0 -58
  447. data/vendor/cfn-status/Rakefile +0 -6
  448. data/vendor/cfn-status/bin/console +0 -14
  449. data/vendor/cfn-status/bin/setup +0 -8
  450. data/vendor/cfn-status/cfn-status.gemspec +0 -30
  451. data/vendor/cfn-status/lib/cfn-status.rb +0 -1
  452. data/vendor/cfn-status/lib/cfn_status/aws_service.rb +0 -51
  453. data/vendor/cfn-status/lib/cfn_status/version.rb +0 -3
  454. data/vendor/cfn-status/lib/cfn_status.rb +0 -245
  455. data/vendor/cfn-status/spec/fixtures/cfn/pages/fresh/describe_stack_events-1.json +0 -1103
  456. data/vendor/cfn-status/spec/fixtures/cfn/pages/fresh/describe_stack_events-2.json +0 -1104
  457. data/vendor/cfn-status/spec/fixtures/cfn/pages/fresh/describe_stack_events-3.json +0 -1103
  458. data/vendor/cfn-status/spec/fixtures/cfn/pages/updating/describe_stack_events-1.json +0 -1103
  459. data/vendor/cfn-status/spec/fixtures/cfn/pages/updating/describe_stack_events-2.json +0 -1104
  460. data/vendor/cfn-status/spec/fixtures/cfn/pages/updating/describe_stack_events-3.json +0 -1103
  461. data/vendor/cfn-status/spec/fixtures/cfn/stack-events-complete.json +0 -1080
  462. data/vendor/cfn-status/spec/fixtures/cfn/stack-events-in-progress.json +0 -1080
  463. data/vendor/cfn-status/spec/fixtures/cfn/stack-events-update-rollback-complete.json +0 -1086
  464. data/vendor/cfn-status/spec/lib/cfn_status_spec.rb +0 -153
  465. data/vendor/cfn-status/spec/spec_helper.rb +0 -14
@@ -4,10 +4,10 @@ class Lono::AppFile::Build::LambdaLayer
4
4
  include Lono::Utils::Rsync
5
5
 
6
6
  def initialize(blueprint, registry_item)
7
- @blueprint, @registry_item = blueprint, registry_item
7
+ @blueprint.name, @registry_item = blueprint, registry_item
8
8
 
9
9
  @registry_name = @registry_item.name.sub(/\/$/,'')
10
- @app_root = "#{Lono.blueprint_root}/app/files/#{@registry_name}"
10
+ @app_root = "#{@blueprint.root}/app/files/#{@registry_name}"
11
11
  end
12
12
 
13
13
  def build
@@ -42,7 +42,7 @@ class Lono::AppFile::Build::LambdaLayer
42
42
 
43
43
  # create symlink in output path not the cache path
44
44
  symlink_dest = "#{output_area}/vendor/gems/ruby/#{ruby_folder}"
45
- puts "symlink_dest #{symlink_dest}"
45
+ logger.info "symlink_dest #{symlink_dest}"
46
46
  FileUtils.rm_rf(symlink_dest) # blow away original 2.5.0 folder
47
47
 
48
48
  # Create symlink that will point to the gems in the Lambda Layer:
@@ -68,7 +68,7 @@ class Lono::AppFile::Build::LambdaLayer
68
68
  # project gets built again not all the gems from get installed from the
69
69
  # beginning.
70
70
  def bundle_install
71
- puts "Bundling: running bundle install in cache area: #{cache_area}."
71
+ logger.info "Bundling: running bundle install in cache area: #{cache_area}."
72
72
 
73
73
  rsync(output_area, cache_area)
74
74
 
@@ -85,15 +85,15 @@ class Lono::AppFile::Build::LambdaLayer
85
85
  FileUtils.rm_rf("#{cache_area}/.bundle")
86
86
  require "bundler" # dynamically require bundler so user can use any bundler
87
87
  setup_bundle_config(cache_area)
88
- Bundler.with_unbundled_env do
88
+ ::Bundler.with_unbundled_env do
89
89
  sh "cd #{cache_area} && env bundle install"
90
90
  end
91
91
 
92
92
  remove_bundled_with("#{cache_area}/Gemfile.lock")
93
93
  # Fixes really tricky bug where Gemfile and Gemfile.lock is out-of-sync. Details: https://gist.github.com/tongueroo/b5b0d0c924a4a1633eee514795e4b04b
94
- FileUtils.cp("#{cache_area}/Gemfile.lock", "#{Lono.config.output_path}/#{@blueprint}/files/#{@registry_name}/Gemfile.lock")
94
+ FileUtils.cp("#{cache_area}/Gemfile.lock", "#{Lono.root}/output/#{@blueprint.name}/files/#{@registry_name}/Gemfile.lock")
95
95
 
96
- puts 'Bundle install success.'
96
+ logger.info 'Bundle install success.'
97
97
  end
98
98
 
99
99
  # Remove the BUNDLED WITH line since we don't control the bundler gem version on AWS Lambda
@@ -130,11 +130,11 @@ EOL
130
130
  end
131
131
 
132
132
  def output_area
133
- "#{Lono.config.output_path}/#{@blueprint}/files/#{@registry_name}"
133
+ "#{Lono.root}/output/#{@blueprint.name}/files/#{@registry_name}"
134
134
  end
135
135
 
136
136
  def build_area
137
- "#{Lono.config.output_path}/#{@blueprint}/lambda_layers/#{@registry_name}"
137
+ "#{Lono.root}/output/#{@blueprint.name}/lambda_layers/#{@registry_name}"
138
138
  end
139
139
 
140
140
  def cache_area
@@ -1,19 +1,19 @@
1
1
  class Lono::AppFile::Build
2
2
  class LambdaLayer
3
3
  def initialize(blueprint, registry_item)
4
- @blueprint, @registry_item = blueprint, registry_item
4
+ @blueprint.name, @registry_item = blueprint, registry_item
5
5
  end
6
6
 
7
7
  def build
8
8
  lang = @registry_item.options[:lang]
9
9
  unless lang =~ /ruby/
10
- puts "WARN: Currently only support ruby lambda layers".color(:yellow)
10
+ logger.info "WARN: Currently only support ruby lambda layers".color(:yellow)
11
11
  return
12
12
  end
13
13
 
14
14
  klass_name = "Lono::AppFile::Build::LambdaLayer::#{lang.camelize}Packager"
15
15
  klass = klass_name.constantize
16
- packager = klass.new(@blueprint, @registry_item)
16
+ packager = klass.new(@blueprint.name, @registry_item)
17
17
  packager.build
18
18
  end
19
19
  end
@@ -5,12 +5,12 @@ module Lono::AppFile
5
5
  include Lono::Utils::Item::Zip
6
6
 
7
7
  def initialize_variables
8
- @output_files_path = "#{Lono.config.output_path}/#{@blueprint}/files"
8
+ @output_files_path = "#{Lono.root}/output/#{@blueprint.name}/files"
9
9
  end
10
10
 
11
11
  def run
12
12
  return unless detect_files?
13
- puts "Building app/files for blueprint #{@blueprint}"
13
+ logger.info "Building app/files"
14
14
  build_all
15
15
  end
16
16
 
@@ -29,11 +29,11 @@ module Lono::AppFile
29
29
  end
30
30
  missing_paths = missing.map { |item| item.src_path }.uniq
31
31
  unless missing_paths.empty?
32
- puts "ERROR: These app/files are missing were used by the s3_key method but are missing".color(:red)
32
+ logger.info "ERROR: These app/files are missing were used by the s3_key method but are missing".color(:red)
33
33
  missing_paths.each do |path|
34
- puts " #{path}"
34
+ logger.info " #{path}"
35
35
  end
36
- puts "Please double check that they exist."
36
+ logger.info "Please double check that they exist."
37
37
  exit 1
38
38
  end
39
39
  end
@@ -51,32 +51,27 @@ module Lono::AppFile
51
51
  if item.type == "lambda_layer" || item.exist?
52
52
  zip(item)
53
53
  else
54
- puts "WARN: #{item.src_path} does not exist. Double check that the path is correct in the s3_key call.".color(:yellow)
54
+ logger.info "WARN: #{item.src_path} does not exist. Double check that the path is correct in the s3_key call.".color(:yellow)
55
55
  end
56
56
  end
57
57
  end
58
58
 
59
59
  def copy_to_output
60
- override_source_paths("#{Lono.blueprint_root}/app/files")
60
+ override_source_paths("#{@blueprint.root}/app/files")
61
61
  self.destination_root = @output_files_path
62
- directory(".", verbose: false, context: context.get_binding) # Thor::Action
62
+ directory(".", verbose: false, context: template_context.get_binding) # Thor::Action
63
63
  end
64
64
 
65
- def context
66
- Lono::Template::Context.new(@options)
67
- end
68
- memoize :context
69
-
70
65
  def clean_output
71
66
  FileUtils.rm_rf(@output_files_path)
72
67
  end
73
68
 
74
69
  def detect_files?
75
- app_files = Dir["#{Lono.blueprint_root}/app/files/*"]
70
+ app_files = Dir["#{@blueprint.root}/app/files/*"]
76
71
  if app_files.empty?
77
72
  false
78
73
  else
79
- puts "Detected app/files for blueprint #{@blueprint}"
74
+ logger.info "Detected app/files"
80
75
  true
81
76
  end
82
77
  end
@@ -5,19 +5,19 @@ class Lono::AppFile::Registry
5
5
 
6
6
  attr_reader :name, :options, :type
7
7
  def initialize(name, blueprint, options={})
8
- @name, @blueprint, @options = name, blueprint, options
8
+ @name, @blueprint.name, @options = name, blueprint, options
9
9
  @type = options[:type] || "file"
10
10
  end
11
11
 
12
12
  def src_path
13
- "#{Lono.blueprint_root}/app/files/#{@name}"
13
+ "#{@blueprint.root}/app/files/#{@name}"
14
14
  end
15
15
 
16
16
  def output_path
17
17
  if @type == "file"
18
- "#{Lono.root}/output/#{@blueprint}/files/#{@name}"
18
+ "#{Lono.root}/output/#{@blueprint.name}/files/#{@name}"
19
19
  else
20
- "#{Lono.root}/output/#{@blueprint}/lambda_layers/#{@name}/opt"
20
+ "#{Lono.root}/output/#{@blueprint.name}/lambda_layers/#{@name}/opt"
21
21
  end
22
22
  end
23
23
  end
@@ -2,7 +2,7 @@ module Lono::AppFile
2
2
  class Upload < Base
3
3
  def upload
4
4
  return unless Registry.items.size > 0
5
- puts "Uploading app/files..."
5
+ logger.info "Uploading app/files..."
6
6
 
7
7
  Registry.items.each do |item|
8
8
  Lono::S3::Uploader.new(item.zip_file_path).upload
@@ -1,5 +1,5 @@
1
- require "lono/bundle"
2
- Lono::Bundle.setup
1
+ require "lono/bundler"
2
+ Lono::Bundler.setup
3
3
  require "zeitwerk"
4
4
 
5
5
  module Lono
@@ -1,14 +1,51 @@
1
1
  module Lono::AwsServices
2
2
  module Helper
3
- include Stack
4
- include StackSet
3
+ def stack_exists?(stack_name)
4
+ return false if ENV['LONO_NOOP']
5
5
 
6
- def rollback_complete?(stack)
7
- stack&.stack_status == 'ROLLBACK_COMPLETE'
6
+ exist = nil
7
+ begin
8
+ # When the stack does not exist an exception is raised. Example:
9
+ # Aws::CloudFormation::Errors::ValidationError: Stack with id blah does not exist
10
+ cfn.describe_stacks(stack_name: stack_name)
11
+ exist = true
12
+ rescue Aws::CloudFormation::Errors::ValidationError => e
13
+ if e.message =~ /does not exist/
14
+ exist = false
15
+ elsif e.message.include?("'stackName' failed to satisfy constraint")
16
+ # Example of e.message when describe_stack with invalid stack name
17
+ # "1 validation error detected: Value 'instance_and_route53' at 'stackName' failed to satisfy constraint: Member must satisfy regular expression pattern: [a-zA-Z][-a-zA-Z0-9]*|arn:[-a-zA-Z0-9:/._+]*"
18
+ logger.info "Invalid stack name: #{stack_name}"
19
+ logger.info "Full error message: #{e.message}"
20
+ exit 1
21
+ else
22
+ raise # re-raise exception because unsure what other errors can happen
23
+ end
24
+ end
25
+ exist
8
26
  end
9
27
 
10
- def testing_update?
11
- ENV['LONO_TEST'] && self.class.name == "LonoCfn::Update"
28
+ def find_stack(stack_name)
29
+ resp = cfn.describe_stacks(stack_name: stack_name)
30
+ resp.stacks.first
31
+ rescue Aws::CloudFormation::Errors::ValidationError => e
32
+ # example: Stack with id demo-web does not exist
33
+ if e.message =~ /Stack with/ && e.message =~ /does not exist/
34
+ nil
35
+ else
36
+ raise
37
+ end
38
+ end
39
+
40
+ def find_stack_resources(stack_name)
41
+ resp = cfn.describe_stack_resources(stack_name: stack_name)
42
+ resp.stack_resources
43
+ rescue Aws::CloudFormation::Errors::ValidationError => e
44
+ if e.message.include?("does not exist")
45
+ nil
46
+ else
47
+ raise
48
+ end
12
49
  end
13
50
  end
14
51
  end
@@ -11,27 +11,27 @@ module Lono
11
11
  include Helper
12
12
 
13
13
  def cfn
14
- Aws::CloudFormation::Client.new
14
+ Aws::CloudFormation::Client.new(aws_options)
15
15
  end
16
16
  memoize :cfn
17
17
 
18
18
  def ec2
19
- Aws::EC2::Client.new
19
+ Aws::EC2::Client.new(aws_options)
20
20
  end
21
21
  memoize :ec2
22
22
 
23
23
  def iam
24
- Aws::IAM::Client.new
24
+ Aws::IAM::Client.new(aws_options)
25
25
  end
26
26
  memoize :iam
27
27
 
28
28
  def s3
29
- Aws::S3::Client.new
29
+ Aws::S3::Client.new(aws_options)
30
30
  end
31
31
  memoize :s3
32
32
 
33
33
  def s3_resource
34
- Aws::S3::Resource.new
34
+ Aws::S3::Resource.new(aws_options)
35
35
  end
36
36
  memoize :s3_resource
37
37
 
@@ -41,8 +41,39 @@ module Lono
41
41
  memoize :s3_presigner
42
42
 
43
43
  def sts
44
- Aws::STS::Client.new # part of aws-sdk-core
44
+ Aws::STS::Client.new(aws_options) # part of aws-sdk-core
45
45
  end
46
46
  memoize :sts
47
+
48
+ # Override the AWS retry settings with Lono AWS clients.
49
+ #
50
+ # The aws-sdk-core has exponential backup with this formula:
51
+ #
52
+ # 2 ** c.retries * c.config.retry_base_delay
53
+ #
54
+ # Source:
55
+ # https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-core/lib/aws-sdk-core/plugins/retry_errors.rb
56
+ #
57
+ # So the max delay will be 2 ** 7 * 0.6 = 76.8s
58
+ #
59
+ # Only scoping this to deploy because dont want to affect people's application that use the aws sdk.
60
+ #
61
+ # There is also additional rate backoff logic elsewhere, since this is only scoped to deploys.
62
+ #
63
+ # Useful links:
64
+ # https://github.com/aws/aws-sdk-ruby/blob/master/gems/aws-sdk-core/lib/aws-sdk-core/plugins/retry_errors.rb
65
+ # https://docs.aws.amazon.com/apigateway/latest/developerguide/limits.html
66
+ #
67
+ def aws_options
68
+ options = {
69
+ retry_limit: 7, # default: 3
70
+ retry_base_delay: 0.6, # default: 0.3
71
+ }
72
+ options.merge!(
73
+ log_level: :debug,
74
+ logger: Logger.new($stdout),
75
+ ) if ENV['LONO_DEBUG_AWS_SDK']
76
+ options
77
+ end
47
78
  end
48
79
  end
@@ -1,15 +1,24 @@
1
1
  module Lono
2
- class Blueprint < Command
3
- long_desc Help.text("blueprint/new")
4
- New.cli_options.each do |args|
5
- option(*args)
2
+ class Blueprint
3
+ attr_reader :name
4
+ def initialize(options={})
5
+ @options = options
6
+ @name = options[:blueprint]
6
7
  end
7
- register(New, "new", "new NAME", "Generates new lono blueprint.")
8
8
 
9
- desc "list", "Lists project blueprints"
10
- long_desc Help.text("blueprint/list")
11
- def list
12
- Finder::Blueprint.list
9
+ def exist?
10
+ !root.nil?
11
+ end
12
+
13
+ def root
14
+ paths = Dir.glob("#{Lono.root}/{app,vendor}/blueprints/*")
15
+ paths.find do |path|
16
+ path.include?("blueprints/#{@name}")
17
+ end
18
+ end
19
+
20
+ def output_path
21
+ "#{Lono.root}/output/#{@name}/template.yml"
13
22
  end
14
23
  end
15
24
  end
@@ -0,0 +1,28 @@
1
+ module Lono
2
+ module Booter
3
+ def boot
4
+ run_hooks
5
+ Lono::Bundler.require # load plugins
6
+ end
7
+
8
+ # Special boot hooks run super early.
9
+ # Useful for setting env vars and other early things.
10
+ #
11
+ # config/boot.rb
12
+ # config/boot/dev.rb
13
+ #
14
+ def run_hooks
15
+ run_hook
16
+ run_hook(Lono.env)
17
+ Lono::App::Inits.run_all
18
+ end
19
+
20
+ def run_hook(env=nil)
21
+ name = env ? "boot/#{env}" : "boot"
22
+ path = "#{Lono.root}/config/#{name}.rb"
23
+ require path if File.exist?(path)
24
+ end
25
+
26
+ extend self
27
+ end
28
+ end
@@ -0,0 +1,11 @@
1
+ module Lono::Builder::Context
2
+ class Generic < Lono::CLI::Base
3
+ include Lono::Builder::Dsl::Syntax
4
+
5
+ # For Lono::AppFile::Build usage of Thor::Action directory
6
+ # For some reason a send(:binding) doesnt work but get_binding like this works.
7
+ def get_binding
8
+ binding
9
+ end
10
+ end
11
+ end
@@ -1,13 +1,12 @@
1
- module Lono::Template::Context::Loader
1
+ module Lono::Builder::Context::Loaders
2
2
  module LoadFiles
3
3
  # Load custom helper methods from project
4
- def load_files(root)
5
- paths = Dir.glob("#{root}/**/*.rb")
4
+ def load_files(dir)
5
+ paths = Dir.glob("#{dir}/**/*.rb")
6
6
  paths.sort_by! { |p| p.size } # so namespaces are loaded first
7
7
  paths.each do |path|
8
- # lib = gem extensions
9
- # app = project extensions
10
- filename = path.sub(%r{.*/lib/},'').sub(%r{.*/app/helpers/},'').sub('.rb','')
8
+ # helpers = blueprint or project extensions
9
+ filename = path.sub(%r{.*/helpers/},'').sub('.rb','')
11
10
  module_name = filename.camelize
12
11
 
13
12
  # Prepend a period so require works LONO_ROOT is set to a relative path without a period.
@@ -0,0 +1,35 @@
1
+ module Lono::Builder::Context
2
+ module Loaders
3
+ include LoadFiles
4
+
5
+ # Variables in base.rb are overridden by their environment specific variables
6
+ # file. Example, file LONO_ENV=dev:
7
+ #
8
+ # config/vars/base.rb
9
+ # config/vars/dev.rb - will override any variables in base.rb
10
+ # config/vars/base.rb
11
+ # config/vars/dev.rb - will override any variables in base.rb
12
+ #
13
+ def load_variables
14
+ layers = Lono::Layering::Layer.new(@blueprint, "vars").paths
15
+ layers.each do |layer|
16
+ evaluate_variables_file(layer)
17
+ end
18
+ end
19
+
20
+ # Load the variables defined in config/vars/* to make available in lono scope.
21
+ #
22
+ # NOTE: Was only able to make instance variables avaialble with instance_eval, wasnt able to make local variables
23
+ # available.
24
+ def evaluate_variables_file(path)
25
+ return unless File.exist?(path)
26
+ instance_eval(IO.read(path), path)
27
+ end
28
+
29
+ # Load blueprint helpers
30
+ # blueprint helpers override extension helpers
31
+ def load_blueprint_helpers
32
+ load_files("#{@blueprint.root}/#{Lono.config.paths.helpers}")
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,6 @@
1
+ module Lono::Builder::Context
2
+ class Params < Generic
3
+ # Overriding output resource DSL method
4
+ alias_method :output, :stack_output
5
+ end
6
+ end
@@ -0,0 +1,4 @@
1
+ module Lono::Builder::Context
2
+ class Template < Generic
3
+ end
4
+ end
@@ -0,0 +1,94 @@
1
+ class Lono::Builder::Dsl
2
+ class Evaluator < Lono::CLI::Base
3
+ include Lono::Builder::Context::Loaders
4
+ include Lono::Builder::Dsl::Syntax
5
+ include Lono::Utils::Pretty
6
+
7
+ def initialize(options={})
8
+ super
9
+ @template_path = "#{@blueprint.root}/template.rb"
10
+ @parameters = [] # built by parameter_groups.rb
11
+ @cfn = {}
12
+ end
13
+
14
+ def build
15
+ # TODO: load_all_extension_helpers # after Extensions::Preparer#run
16
+ load_variables unless seed? # both blueprint and project variables
17
+ load_blueprint_helpers
18
+ evaluate_template_paths(@template_path) # modifies @cfn
19
+ finalize
20
+ to_yaml
21
+ @cfn
22
+ end
23
+
24
+ def finalize
25
+ o = @options.merge(parameters: @parameters)
26
+ @cfn = Finalizer.new(@cfn, o).run
27
+ end
28
+
29
+ def to_yaml
30
+ # https://stackoverflow.com/questions/24508364/how-to-emit-yaml-in-ruby-expanding-aliases
31
+ # Trick to prevent YAML from emitting aliases
32
+ @cfn = YAML.load(@cfn.to_json)
33
+ end
34
+
35
+ # Dont want any existing files to prevent building the blueprint.
36
+ # This means that parameters cannot be based on vars. It's a trade-off.
37
+ def seed?
38
+ ARGV[0] == "seed"
39
+ end
40
+
41
+ # Example path: /full/path/to/project/app/blueprints/demo/template.rb
42
+ def evaluate_template_paths(path)
43
+ ext = File.extname(path)
44
+ folder = path.sub(ext, '')
45
+ expr = "#{folder}/**/*.rb"
46
+ evaluate_template_path(path) # process top-level template.rb first
47
+ Dir.glob(expr).each do |path|
48
+ evaluate_template_path(path)
49
+ end
50
+ end
51
+
52
+ def evaluate_template_path(path)
53
+ return unless File.exist?(path)
54
+ instance_eval(File.read(path), path)
55
+ rescue Exception => e
56
+ template_evaluation_error(e)
57
+ exit 1
58
+ end
59
+
60
+ # Prints out a user friendly task_definition error message
61
+ #
62
+ # Backtrace lines are different for OSes:
63
+ #
64
+ # windows: "C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/terraspace-1.1.1/lib/terraspace/builder.rb:34:in `build'"
65
+ # linux: "/home/ec2-user/.rvm/gems/ruby-3.0.3/gems/terraspace-1.1.1/lib/terraspace/compiler/dsl/syntax/mod.rb:4:in `<module:Mod>'"
66
+ #
67
+ def template_evaluation_error(e)
68
+ lines = e.backtrace.reject { |l| l.include?("/lib/lono/") }
69
+ error_info = lines.first
70
+ parts = error_info.split(':')
71
+ windows = error_info.match(/^[a-zA-Z]:/)
72
+ path = windows ? parts[1] : parts[0]
73
+ line_no = windows ? parts[2] : parts[1]
74
+ line_no = line_no.to_i
75
+ logger.debug e.message
76
+ logger.error "Error evaluating #{pretty_path(path)}".color(:red)
77
+ logger.error "Here's the line with the error:\n\n"
78
+
79
+ contents = IO.read(path)
80
+ content_lines = contents.split("\n")
81
+ context = 5 # lines of context
82
+ top, bottom = [line_no-context-1, 0].max, line_no+context-1
83
+ spacing = content_lines.size.to_s.size
84
+ content_lines[top..bottom].each_with_index do |line_content, index|
85
+ line_number = top+index+1
86
+ if line_number == line_no
87
+ logger.printf("%#{spacing}d %s\n".color(:red), line_number, line_content)
88
+ else
89
+ logger.printf("%#{spacing}d %s\n", line_number, line_content)
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,41 @@
1
+ class Lono::Builder::Dsl::Finalizer
2
+ class Configsets
3
+ extend Memoist
4
+
5
+ def initialize(cfn)
6
+ @cfn = cfn
7
+ end
8
+
9
+ def run
10
+ @cfn = add # overwrite
11
+ @cfn
12
+ end
13
+
14
+ def add
15
+ metadata_map.each do |logical_id, metadata_configset|
16
+ resource = @cfn["Resources"][logical_id]
17
+
18
+ unless resource
19
+ logger.info "WARN: Resources.#{logical_id} not found in the template. Are you sure you are specifying the correct resource id in your configsets configs?".color(:yellow)
20
+ next
21
+ end
22
+
23
+ resource["Metadata"] ||= metadata_configset["Metadata"]
24
+
25
+ # metdata = resource["Metadata"] ||= {}
26
+ # metdata["AWS::CloudFormation::Init"] ||= {}
27
+ # # The metadata_configset has been combined with the original AWS::CloudFormation::Init if it exists
28
+ # metdata["AWS::CloudFormation::Init"] = metadata_configset["AWS::CloudFormation::Init"]
29
+ end
30
+
31
+ @cfn
32
+ end
33
+
34
+ def metadata_map
35
+ []
36
+ # combiner = Lono::Configset::Combiner.new(@cfn, @options)
37
+ # combiner.metadata_map
38
+ end
39
+ memoize :metadata_map
40
+ end
41
+ end
@@ -1,7 +1,7 @@
1
- class Lono::Template::Strategy::Dsl::Finalizer
1
+ class Lono::Builder::Dsl::Finalizer
2
2
  class ParameterGroups
3
3
  extend Memoist
4
- include Lono::Template::Strategy::Dsl::Builder::Stringify
4
+ include Lono::Builder::Util::Stringify
5
5
 
6
6
  def initialize(cfn, parameters)
7
7
  @cfn, @parameters = cfn, parameters
@@ -1,4 +1,4 @@
1
- class Lono::Template::Strategy::Dsl
1
+ class Lono::Builder::Dsl
2
2
  class Finalizer
3
3
  def initialize(cfn, options={})
4
4
  @cfn, @options = cfn, options
@@ -6,6 +6,7 @@ class Lono::Template::Strategy::Dsl
6
6
 
7
7
  def run
8
8
  @cfn = ParameterGroups.new(@cfn, @options[:parameters]).run
9
+ @cfn = Configsets.new(@cfn).run
9
10
  @cfn
10
11
  end
11
12
  end
@@ -1,5 +1,5 @@
1
- module Lono::Template::Strategy::Dsl::Builder::Helpers
2
- module Ec2Helper
1
+ module Lono::Builder::Dsl::Helpers
2
+ module Ec2
3
3
  extend Memoist
4
4
 
5
5
  def default_vpc
@@ -20,7 +20,7 @@ module Lono::Template::Strategy::Dsl::Builder::Helpers
20
20
  def key_pairs(regexp=nil)
21
21
  resp = ec2.describe_key_pairs
22
22
  key_names = resp.key_pairs.map(&:key_name)
23
- key_names.select! { |k| k =~ regexp }
23
+ key_names.select! { |k| k =~ regexp } if regexp
24
24
  key_names
25
25
  end
26
26
  end