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.
- checksums.yaml +4 -4
- data/.cody/README.md +5 -15
- data/.cody/acceptance/bin/build.sh +52 -0
- data/.cody/acceptance/buildspec.yml +10 -0
- data/.cody/acceptance/project.rb +6 -0
- data/.cody/{role.rb → acceptance/role.rb} +0 -0
- data/.cody/shared/script/install/lono.sh +40 -0
- data/.cody/shared/script/install.sh +5 -0
- data/CHANGELOG.md +46 -5
- data/CONTRIBUTING.md +2 -2
- data/Gemfile +3 -1
- data/LICENSE.txt +201 -1
- data/README.md +6 -11
- data/lib/lono/api/client.rb +3 -2
- data/lib/lono/app/callable_option/concern.rb +12 -0
- data/lib/lono/app/callable_option.rb +56 -0
- data/lib/lono/app/inits.rb +13 -0
- data/lib/lono/app.rb +73 -0
- data/lib/lono/autoloader.rb +3 -2
- data/lib/lono/aws_services/helper.rb +41 -6
- data/lib/lono/aws_services.rb +37 -6
- data/lib/lono/blueprint.rb +3 -11
- data/lib/lono/booter.rb +28 -0
- data/lib/lono/builder/allow/base.rb +54 -0
- data/lib/lono/builder/allow/env.rb +17 -0
- data/lib/lono/builder/allow/region.rb +20 -0
- data/lib/lono/builder/allow.rb +8 -0
- data/lib/lono/builder/configset/combiner.rb +145 -0
- data/lib/lono/builder/configset/definition/base.rb +47 -0
- data/lib/lono/builder/configset/definition/context.rb +29 -0
- data/lib/lono/{configset/strategy/helpers/dsl → builder/configset/definition/dsl/syntax}/auth.rb +1 -1
- data/lib/lono/{configset/strategy/helpers/dsl/core.rb → builder/configset/definition/dsl/syntax/content.rb} +11 -3
- data/lib/lono/{configset/strategy/helpers/dsl/syntax.rb → builder/configset/definition/dsl/syntax/core.rb} +15 -9
- data/lib/lono/{configset/strategy/helpers/dsl → builder/configset/definition/dsl/syntax}/package.rb +1 -1
- data/lib/lono/builder/configset/definition/dsl/syntax.rb +5 -0
- data/lib/lono/{configset/strategy → builder/configset/definition}/dsl.rb +10 -14
- data/lib/lono/{configset/strategy → builder/configset/definition}/erb.rb +13 -16
- data/lib/lono/builder/configset/definition.rb +18 -0
- data/lib/lono/builder/configset/evaluator.rb +10 -0
- data/lib/lono/builder/configset/registration.rb +35 -0
- data/lib/lono/builder/context.rb +40 -0
- data/lib/lono/builder/dsl/evaluator.rb +45 -0
- data/lib/lono/builder/dsl/finalizer/base.rb +8 -0
- data/lib/lono/builder/dsl/finalizer/configsets.rb +20 -0
- data/lib/lono/builder/dsl/finalizer/files/base.rb +4 -0
- data/lib/lono/builder/dsl/finalizer/files/build.rb +58 -0
- data/lib/lono/builder/dsl/finalizer/files/replace.rb +31 -0
- data/lib/lono/builder/dsl/finalizer/files.rb +9 -0
- data/lib/lono/{template/strategy → builder}/dsl/finalizer/parameter_groups.rb +6 -5
- data/lib/lono/builder/dsl/finalizer.rb +15 -0
- data/lib/lono/{template/strategy/dsl/builder/helpers/ec2_helper.rb → builder/dsl/helpers/ec2.rb} +3 -3
- data/lib/lono/builder/dsl/helpers/files.rb +7 -0
- data/lib/lono/builder/dsl/helpers/partials.rb +140 -0
- data/lib/lono/{template/strategy/dsl/builder/helpers/s3_helper.rb → builder/dsl/helpers/s3.rb} +3 -3
- data/lib/lono/{template/context/ssm_fetcher.rb → builder/dsl/helpers/ssm/fetcher.rb} +5 -3
- data/lib/lono/{template/context/helpers.rb → builder/dsl/helpers/ssm.rb} +3 -3
- data/lib/lono/{template/strategy/dsl/builder/helpers/stack_helper.rb → builder/dsl/helpers/stack.rb} +14 -9
- data/lib/lono/{template/strategy/dsl/builder/helpers/tags_helper.rb → builder/dsl/helpers/tags.rb} +2 -2
- data/lib/lono/builder/dsl/helpers/template_file.rb +66 -0
- data/lib/lono/builder/dsl/helpers.rb +5 -0
- data/lib/lono/builder/dsl/syntax/core/base.rb +22 -0
- data/lib/lono/{template/strategy/dsl/builder/section → builder/dsl/syntax/core}/condition.rb +1 -1
- data/lib/lono/{template/strategy/dsl/builder/section → builder/dsl/syntax/core}/mapping.rb +1 -1
- data/lib/lono/{template/strategy/dsl/builder/section → builder/dsl/syntax/core}/output.rb +1 -1
- data/lib/lono/{template/strategy/dsl/builder/section → builder/dsl/syntax/core}/parameter.rb +1 -1
- data/lib/lono/{template/strategy/dsl/builder/section → builder/dsl/syntax/core}/resource/property_mover.rb +12 -2
- data/lib/lono/{template/strategy/dsl/builder/section → builder/dsl/syntax/core}/resource.rb +1 -1
- data/lib/lono/{template/strategy/dsl/builder/section → builder/dsl/syntax/core}/section.rb +1 -1
- data/lib/lono/builder/dsl/syntax/core/squeezer.rb +38 -0
- data/lib/lono/{template/strategy/dsl/builder/section/methods.rb → builder/dsl/syntax/core.rb} +8 -8
- data/lib/lono/{template/strategy/dsl/builder → builder/dsl/syntax}/fn.rb +2 -2
- data/lib/lono/{template/strategy/dsl/builder → builder/dsl}/syntax/parameter_group.rb +1 -1
- data/lib/lono/builder/dsl/syntax.rb +9 -0
- data/lib/lono/builder/dsl.rb +14 -0
- data/lib/lono/{param/generator.rb → builder/param.rb} +24 -22
- data/lib/lono/builder/template/aws_service.rb +15 -0
- data/lib/lono/builder/template/bashify.rb +43 -0
- data/lib/lono/{output/template.rb → builder/template/output.rb} +14 -7
- data/lib/lono/{template → builder/template}/post_processor.rb +4 -4
- data/lib/lono/builder/template/upload.rb +8 -0
- data/lib/lono/builder/template.rb +55 -0
- data/lib/lono/{template/strategy/dsl/builder → builder/util}/stringify.rb +1 -1
- data/lib/lono/bundler/cli/base.rb +10 -0
- data/lib/lono/bundler/cli/bundle.rb +44 -0
- data/lib/lono/bundler/cli/clean.rb +27 -0
- data/lib/lono/bundler/cli/help/bundle.md +3 -0
- data/lib/lono/bundler/cli/help.rb +11 -0
- data/lib/lono/bundler/cli.rb +7 -0
- data/lib/lono/bundler/component/concerns/local_concern.rb +10 -0
- data/lib/lono/bundler/component/concerns/notation_concern.rb +59 -0
- data/lib/lono/bundler/component/concerns/path_concern.rb +68 -0
- data/lib/lono/bundler/component/concerns/stack_concern.rb +60 -0
- data/lib/lono/bundler/component/fetcher/base.rb +27 -0
- data/lib/lono/bundler/component/fetcher/gcs.rb +69 -0
- data/lib/lono/bundler/component/fetcher/git.rb +69 -0
- data/lib/lono/bundler/component/fetcher/local.rb +15 -0
- data/lib/lono/bundler/component/fetcher/s3.rb +66 -0
- data/lib/lono/bundler/component/fetcher.rb +18 -0
- data/lib/lono/bundler/component/http/concern.rb +45 -0
- data/lib/lono/bundler/component/http/source.rb +19 -0
- data/lib/lono/bundler/component/org_repo.rb +65 -0
- data/lib/lono/bundler/component/props/extension.rb +18 -0
- data/lib/lono/bundler/component/props/typer.rb +41 -0
- data/lib/lono/bundler/component/props.rb +122 -0
- data/lib/lono/bundler/component/registry.rb +136 -0
- data/lib/lono/bundler/component.rb +52 -0
- data/lib/lono/bundler/config.rb +18 -0
- data/lib/lono/bundler/dsl/syntax.rb +46 -0
- data/lib/lono/bundler/dsl.rb +21 -0
- data/lib/lono/bundler/exporter/base.rb +6 -0
- data/lib/lono/bundler/exporter/copy.rb +22 -0
- data/lib/lono/bundler/exporter.rb +50 -0
- data/lib/lono/bundler/extract/tar.rb +33 -0
- data/lib/lono/bundler/extract/zip.rb +16 -0
- data/lib/lono/bundler/info.rb +39 -0
- data/lib/lono/bundler/list.rb +26 -0
- data/lib/lono/bundler/lockfile/version_comparer.rb +56 -0
- data/lib/lono/bundler/lockfile/yamler.rb +36 -0
- data/lib/lono/bundler/lockfile.rb +66 -0
- data/lib/lono/bundler/lonofile.rb +32 -0
- data/lib/lono/bundler/runner.rb +27 -0
- data/lib/lono/bundler/syncer.rb +70 -0
- data/lib/lono/bundler/util/git.rb +37 -0
- data/lib/lono/bundler/util/logging.rb +7 -0
- data/lib/lono/bundler/util/sure.rb +5 -0
- data/lib/lono/{bundle.rb → bundler.rb} +38 -4
- data/lib/lono/cfn/base.rb +9 -195
- data/lib/lono/cfn/cancel.rb +12 -29
- data/lib/lono/cfn/concerns/build.rb +10 -0
- data/lib/lono/cfn/concerns/template_output.rb +10 -0
- data/lib/lono/cfn/concerns.rb +43 -0
- data/lib/lono/cfn/delete.rb +8 -32
- data/lib/lono/cfn/deploy/base.rb +4 -0
- data/lib/lono/cfn/deploy/iam.rb +48 -0
- data/lib/lono/cfn/deploy/notification.rb +8 -0
- data/lib/lono/cfn/deploy/operable.rb +18 -0
- data/lib/lono/cfn/deploy/opts.rb +49 -0
- data/lib/lono/cfn/deploy/rollback.rb +46 -0
- data/lib/lono/cfn/deploy/tags.rb +18 -0
- data/lib/lono/cfn/deploy.rb +100 -5
- data/lib/lono/cfn/download.rb +4 -7
- data/lib/lono/cfn/output.rb +49 -0
- data/lib/lono/cfn/plan/base.rb +19 -0
- data/lib/lono/cfn/plan/changeset/base.rb +19 -0
- data/lib/lono/cfn/plan/changeset/notifications.rb +24 -0
- data/lib/lono/cfn/plan/changeset/outputs.rb +25 -0
- data/lib/lono/cfn/plan/changeset/resources.rb +48 -0
- data/lib/lono/cfn/plan/changeset/tags.rb +16 -0
- data/lib/lono/cfn/plan/changeset.rb +136 -0
- data/lib/lono/cfn/plan/concerns.rb +10 -0
- data/lib/lono/cfn/plan/delete.rb +16 -0
- data/lib/lono/cfn/plan/diff/base.rb +10 -0
- data/lib/lono/cfn/plan/diff/data.rb +62 -0
- data/lib/lono/cfn/plan/diff/file.rb +57 -0
- data/lib/lono/cfn/plan/new.rb +26 -0
- data/lib/lono/cfn/{preview → plan}/param.rb +26 -34
- data/lib/lono/cfn/plan/summary.rb +16 -0
- data/lib/lono/cfn/plan/template.rb +28 -0
- data/lib/lono/cfn/plan.rb +34 -0
- data/lib/lono/cfn/show.rb +30 -0
- data/lib/lono/cfn/status.rb +1 -1
- data/lib/lono/cli/abstract.rb +11 -0
- data/lib/lono/cli/base.rb +11 -0
- data/lib/lono/cli/build.rb +47 -0
- data/lib/lono/cli/bundle.rb +21 -0
- data/lib/lono/cli/cfn/opts.rb +59 -0
- data/lib/lono/cli/cfn.rb +19 -0
- data/lib/lono/cli/clean.rb +23 -0
- data/lib/lono/cli/code.rb +22 -0
- data/lib/lono/{completion.rb → cli/completion.rb} +2 -2
- data/lib/lono/{help → cli/help}/blueprint/new.md +4 -4
- data/lib/lono/{help/generate.md → cli/help/build.md} +6 -6
- data/lib/lono/{help → cli/help}/cfn/cancel.md +0 -0
- data/lib/lono/cli/help/cfn/download.md +3 -0
- data/lib/lono/{help → cli/help}/cfn/preview.md +9 -8
- data/lib/lono/{help → cli/help}/cfn/status.md +0 -1
- data/lib/lono/cli/help/cfn.md +4 -0
- data/lib/lono/{help → cli/help}/code/convert.md +0 -0
- data/lib/lono/{help → cli/help}/code/import.md +2 -2
- data/lib/lono/{help → cli/help}/completion.md +3 -3
- data/lib/lono/{help → cli/help}/completion_script.md +0 -0
- data/lib/lono/{help → cli/help}/configsets.md +0 -0
- data/lib/lono/cli/help/down.md +13 -0
- data/lib/lono/cli/help/new/helper/blueprint.md +17 -0
- data/lib/lono/cli/help/new/helper/project.md +16 -0
- data/lib/lono/cli/help/new/project.md +34 -0
- data/lib/lono/{help → cli/help}/param/generate.md +0 -0
- data/lib/lono/cli/help/param.md +6 -0
- data/lib/lono/{help → cli/help}/pro/blueprints.md +0 -0
- data/lib/lono/{help → cli/help}/pro/configsets.md +0 -0
- data/lib/lono/{help → cli/help}/script/build.md +0 -0
- data/lib/lono/{help → cli/help}/script/upload.md +0 -0
- data/lib/lono/cli/help/seed.md +24 -0
- data/lib/lono/cli/help/summary.md +33 -0
- data/lib/lono/{help → cli/help}/template/bashify.md +0 -0
- data/lib/lono/cli/help/template/generate.md +7 -0
- data/lib/lono/{help → cli/help}/template.md +0 -0
- data/lib/lono/cli/help/up.md +30 -0
- data/lib/lono/{help → cli/help}/user_data.md +3 -3
- data/lib/lono/cli/help.rb +56 -0
- data/lib/lono/cli/list.rb +25 -0
- data/lib/lono/cli/new/blueprint.rb +29 -0
- data/lib/lono/cli/new/concerns.rb +16 -0
- data/lib/lono/cli/new/configset.rb +37 -0
- data/lib/lono/{extension/new.rb → cli/new/extension.rb} +2 -10
- data/lib/lono/cli/new/helper/blueprint.rb +26 -0
- data/lib/lono/cli/new/helper/project.rb +24 -0
- data/lib/lono/cli/new/helper.rb +13 -0
- data/lib/lono/cli/new/project.rb +77 -0
- data/lib/lono/cli/new/sequence.rb +56 -0
- data/lib/lono/cli/new/shim.rb +59 -0
- data/lib/lono/cli/new/test/blueprint.rb +23 -0
- data/lib/lono/cli/new/test/sequence.rb +10 -0
- data/lib/lono/cli/new/test.rb +8 -0
- data/lib/lono/cli/new.rb +27 -0
- data/lib/lono/{opts.rb → cli/opts.rb} +9 -12
- data/lib/lono/{s3.rb → cli/s3.rb} +9 -7
- data/lib/lono/cli/script/base.rb +5 -0
- data/lib/lono/cli/script/build.rb +72 -0
- data/lib/lono/cli/script/upload.rb +49 -0
- data/lib/lono/{script.rb → cli/script.rb} +2 -2
- data/lib/lono/cli/seed.rb +9 -0
- data/lib/lono/cli/status.rb +18 -0
- data/lib/lono/cli/test.rb +35 -0
- data/lib/lono/cli.rb +78 -109
- data/lib/lono/command.rb +27 -1
- data/lib/lono/component.rb +29 -0
- data/lib/lono/concerns/aws_info.rb +14 -0
- data/lib/lono/concerns/names.rb +9 -0
- data/lib/lono/configset.rb +11 -10
- data/lib/lono/core.rb +25 -54
- data/lib/lono/ext/core/module.rb +31 -0
- data/lib/lono/ext/core/object.rb +32 -0
- data/lib/lono/ext/core/string.rb +9 -0
- data/lib/lono/ext.rb +4 -0
- data/lib/lono/files/base.rb +12 -0
- data/lib/lono/files/builder.rb +37 -0
- data/lib/lono/files/compressor.rb +53 -0
- data/lib/lono/files/concerns/post_processing.rb +35 -0
- data/lib/lono/files/concerns/registration.rb +13 -0
- data/lib/lono/files/registry.rb +6 -0
- data/lib/lono/files.rb +37 -0
- data/lib/lono/importer/base.rb +6 -6
- data/lib/lono/importer/download.rb +7 -7
- data/lib/lono/importer/dsl.rb +3 -3
- data/lib/lono/importer/service/coder.rb +67 -63
- data/lib/lono/importer.rb +1 -10
- data/lib/lono/inspector/base.rb +7 -7
- data/lib/lono/inspector/summary.rb +18 -19
- data/lib/lono/layering/layer.rb +112 -0
- data/lib/lono/layering.rb +13 -55
- data/lib/lono/logger/formatter.rb +13 -0
- data/lib/lono/logger.rb +32 -0
- data/lib/lono/names.rb +50 -0
- data/lib/lono/plugin/meta.rb +30 -0
- data/lib/lono/plugin/tester.rb +13 -0
- data/lib/lono/plugin.rb +10 -0
- data/lib/lono/s3/aws_setup.rb +4 -3
- data/lib/lono/s3/bucket.rb +42 -42
- data/lib/lono/s3/rollback.rb +8 -0
- data/lib/lono/s3/uploader.rb +33 -34
- data/lib/lono/script/base.rb +3 -3
- data/lib/lono/script/build.rb +11 -12
- data/lib/lono/script/upload.rb +7 -7
- data/lib/lono/seeder.rb +110 -0
- data/lib/lono/user_data.rb +10 -13
- data/lib/lono/utils/logging.rb +7 -0
- data/lib/lono/utils/{pretty_time.rb → pretty.rb} +6 -2
- data/lib/lono/utils/quit.rb +7 -0
- data/lib/lono/utils/rsync.rb +4 -2
- data/lib/lono/utils/sure.rb +4 -4
- data/lib/lono/version.rb +1 -1
- data/lib/lono/yamler/validator.rb +7 -22
- data/lib/lono.rb +15 -12
- data/lib/templates/blueprint/template.rb +2 -0
- data/lib/templates/configset/configset.rb +2 -0
- data/lib/templates/examples/blueprint/template.rb +9 -0
- data/lib/templates/{configset/lib → examples/configset}/configset.rb +0 -0
- data/lib/templates/helper/%underscore_name%_helper.rb.tt +6 -0
- data/lib/templates/{skeleton → project}/.gitignore +1 -2
- data/lib/templates/project/Gemfile.tt +11 -0
- data/lib/templates/project/README.md +9 -0
- data/lib/templates/project/config/app.rb +3 -0
- data/lib/templates/shim/lono +7 -0
- data/lono.gemspec +51 -44
- metadata +282 -296
- data/.circleci/README.md +0 -3
- data/.circleci/config.yml +0 -58
- data/.cody/acceptance.sh +0 -49
- data/.cody/buildspec.yml +0 -9
- data/.cody/demo.rb +0 -38
- data/.cody/project.rb +0 -6
- data/.gitmodules +0 -3
- data/lib/lono/abstract_base.rb +0 -25
- data/lib/lono/app_file/base.rb +0 -28
- data/lib/lono/app_file/build/lambda_layer/ruby_packager.rb +0 -153
- data/lib/lono/app_file/build/lambda_layer.rb +0 -20
- data/lib/lono/app_file/build.rb +0 -84
- data/lib/lono/app_file/registry/item.rb +0 -24
- data/lib/lono/app_file/registry.rb +0 -16
- data/lib/lono/app_file/upload.rb +0 -12
- data/lib/lono/aws_services/stack.rb +0 -41
- data/lib/lono/aws_services/stack_set.rb +0 -41
- data/lib/lono/blueprint/configset/loader.rb +0 -7
- data/lib/lono/blueprint/helper.rb +0 -24
- data/lib/lono/blueprint/meta.rb +0 -30
- data/lib/lono/blueprint/new.rb +0 -127
- data/lib/lono/blueprint/root.rb +0 -25
- data/lib/lono/cfn/create.rb +0 -41
- data/lib/lono/cfn/opts.rb +0 -88
- data/lib/lono/cfn/preview/changeset.rb +0 -168
- data/lib/lono/cfn/preview/codediff.rb +0 -41
- data/lib/lono/cfn/preview/diff_viewer.rb +0 -23
- data/lib/lono/cfn/rollback.rb +0 -26
- data/lib/lono/cfn/update.rb +0 -71
- data/lib/lono/cfn.rb +0 -75
- data/lib/lono/clean.rb +0 -14
- data/lib/lono/code.rb +0 -22
- data/lib/lono/configset/combiner.rb +0 -162
- data/lib/lono/configset/evaluate_file.rb +0 -8
- data/lib/lono/configset/generator.rb +0 -57
- data/lib/lono/configset/list.rb +0 -67
- data/lib/lono/configset/meta/dsl.rb +0 -12
- data/lib/lono/configset/meta.rb +0 -19
- data/lib/lono/configset/new.rb +0 -77
- data/lib/lono/configset/preparer.rb +0 -44
- data/lib/lono/configset/register/base.rb +0 -122
- data/lib/lono/configset/register/blueprint.rb +0 -16
- data/lib/lono/configset/register/dsl.rb +0 -14
- data/lib/lono/configset/register/project.rb +0 -13
- data/lib/lono/configset/resolver.rb +0 -47
- data/lib/lono/configset/s3_file/build.rb +0 -33
- data/lib/lono/configset/s3_file/item.rb +0 -38
- data/lib/lono/configset/s3_file/registry.rb +0 -12
- data/lib/lono/configset/s3_file/upload.rb +0 -12
- data/lib/lono/configset/strategy/base.rb +0 -83
- data/lib/lono/configset/strategy/helpers/dsl.rb +0 -8
- data/lib/lono/configset/strategy/helpers/erb.rb +0 -9
- data/lib/lono/conventions.rb +0 -23
- data/lib/lono/core/config.rb +0 -22
- data/lib/lono/default/settings.yml +0 -21
- data/lib/lono/extension/helper.rb +0 -13
- data/lib/lono/extension/list.rb +0 -40
- data/lib/lono/extension.rb +0 -9
- data/lib/lono/extensions/dsl.rb +0 -11
- data/lib/lono/extensions/loader.rb +0 -30
- data/lib/lono/extensions/preparer.rb +0 -26
- data/lib/lono/extensions/register.rb +0 -15
- data/lib/lono/extensions.rb +0 -18
- data/lib/lono/file_uploader.rb +0 -21
- data/lib/lono/finder/base.rb +0 -152
- data/lib/lono/finder/blueprint/configset.rb +0 -17
- data/lib/lono/finder/blueprint.rb +0 -11
- data/lib/lono/finder/configset.rb +0 -11
- data/lib/lono/finder/extension.rb +0 -11
- data/lib/lono/generate.rb +0 -111
- data/lib/lono/help/cfn/create.md +0 -26
- data/lib/lono/help/cfn/delete.md +0 -13
- data/lib/lono/help/cfn/deploy.md +0 -21
- data/lib/lono/help/cfn/download.md +0 -3
- data/lib/lono/help/cfn/update.md +0 -49
- data/lib/lono/help/cfn.md +0 -7
- data/lib/lono/help/new.md +0 -57
- data/lib/lono/help/param.md +0 -6
- data/lib/lono/help/seed.md +0 -23
- data/lib/lono/help/set_instances/delete.md +0 -21
- data/lib/lono/help/set_instances/deploy.md +0 -31
- data/lib/lono/help/set_instances/list.md +0 -14
- data/lib/lono/help/set_instances/status.md +0 -15
- data/lib/lono/help/set_instances/sync.md +0 -92
- data/lib/lono/help/sets/delete.md +0 -8
- data/lib/lono/help/sets/deploy.md +0 -76
- data/lib/lono/help/sets/status.md +0 -23
- data/lib/lono/help/summary.md +0 -33
- data/lib/lono/help/template/generate.md +0 -7
- data/lib/lono/help/upgrade.md +0 -1
- data/lib/lono/help/xgraph.md +0 -16
- data/lib/lono/help.rb +0 -15
- data/lib/lono/importer/erb.rb +0 -31
- data/lib/lono/inspector/graph.rb +0 -125
- data/lib/lono/jade/circular.rb +0 -26
- data/lib/lono/jade/materializer/final.rb +0 -10
- data/lib/lono/jade/materializer/gems_builder.rb +0 -81
- data/lib/lono/jade/materializer/source.rb +0 -54
- data/lib/lono/jade/materializer.rb +0 -15
- data/lib/lono/jade/registry.rb +0 -64
- data/lib/lono/jade.rb +0 -110
- data/lib/lono/jadespec.rb +0 -68
- data/lib/lono/new/helper.rb +0 -15
- data/lib/lono/new.rb +0 -95
- data/lib/lono/param.rb +0 -14
- data/lib/lono/pro/base.rb +0 -16
- data/lib/lono/pro/repo.rb +0 -28
- data/lib/lono/pro.rb +0 -15
- data/lib/lono/project_checker.rb +0 -35
- data/lib/lono/registration/base.rb +0 -37
- data/lib/lono/registration/check.rb +0 -15
- data/lib/lono/registration/temp.rb +0 -53
- data/lib/lono/registration/user.rb +0 -60
- data/lib/lono/seed/base.rb +0 -116
- data/lib/lono/seed/service_role.rb +0 -11
- data/lib/lono/seed.rb +0 -39
- data/lib/lono/sequence.rb +0 -35
- data/lib/lono/set_instances/base.rb +0 -30
- data/lib/lono/set_instances/changeable.rb +0 -53
- data/lib/lono/set_instances/create.rb +0 -7
- data/lib/lono/set_instances/delete.rb +0 -47
- data/lib/lono/set_instances/deploy.rb +0 -52
- data/lib/lono/set_instances/list.rb +0 -13
- data/lib/lono/set_instances/opts.rb +0 -37
- data/lib/lono/set_instances/status.rb +0 -12
- data/lib/lono/set_instances/sync.rb +0 -181
- data/lib/lono/set_instances/update.rb +0 -15
- data/lib/lono/set_instances.rb +0 -54
- data/lib/lono/sets/base.rb +0 -50
- data/lib/lono/sets/create.rb +0 -27
- data/lib/lono/sets/delete.rb +0 -43
- data/lib/lono/sets/deploy.rb +0 -11
- data/lib/lono/sets/list.rb +0 -35
- data/lib/lono/sets/opts.rb +0 -18
- data/lib/lono/sets/preview/codediff.rb +0 -35
- data/lib/lono/sets/preview/param.rb +0 -32
- data/lib/lono/sets/status/instance/base.rb +0 -120
- data/lib/lono/sets/status/instance/completed.rb +0 -35
- data/lib/lono/sets/status/instance/deleted.rb +0 -32
- data/lib/lono/sets/status/instance/show.rb +0 -7
- data/lib/lono/sets/status/instance.rb +0 -20
- data/lib/lono/sets/status/instances.rb +0 -136
- data/lib/lono/sets/status.rb +0 -128
- data/lib/lono/sets/summarize.rb +0 -22
- data/lib/lono/sets/time_spent.rb +0 -11
- data/lib/lono/sets/update.rb +0 -74
- data/lib/lono/sets/waiter.rb +0 -23
- data/lib/lono/sets.rb +0 -34
- data/lib/lono/setting.rb +0 -75
- data/lib/lono/template/aws_service.rb +0 -20
- data/lib/lono/template/bashify.rb +0 -39
- data/lib/lono/template/configset_injector.rb +0 -52
- data/lib/lono/template/context/loader/load_files.rb +0 -24
- data/lib/lono/template/context/loader.rb +0 -52
- data/lib/lono/template/context.rb +0 -29
- data/lib/lono/template/evaluate.rb +0 -40
- data/lib/lono/template/generator.rb +0 -23
- data/lib/lono/template/helper.rb +0 -152
- data/lib/lono/template/strategy/base.rb +0 -4
- data/lib/lono/template/strategy/common/helpers.rb +0 -44
- data/lib/lono/template/strategy/dsl/builder/helpers/core_helper.rb +0 -14
- data/lib/lono/template/strategy/dsl/builder/helpers/file_helper.rb +0 -48
- data/lib/lono/template/strategy/dsl/builder/helpers.rb +0 -16
- data/lib/lono/template/strategy/dsl/builder/section/base.rb +0 -30
- data/lib/lono/template/strategy/dsl/builder/squeezer.rb +0 -24
- data/lib/lono/template/strategy/dsl/builder/syntax/extend_with.rb +0 -9
- data/lib/lono/template/strategy/dsl/builder/syntax.rb +0 -11
- data/lib/lono/template/strategy/dsl/builder.rb +0 -59
- data/lib/lono/template/strategy/dsl/finalizer.rb +0 -12
- data/lib/lono/template/strategy/dsl.rb +0 -14
- data/lib/lono/template/strategy/erb.rb +0 -82
- data/lib/lono/template/strategy/source.rb +0 -8
- data/lib/lono/template/template.rb +0 -54
- data/lib/lono/template/upload.rb +0 -23
- data/lib/lono/template/util.rb +0 -8
- data/lib/lono/template.rb +0 -24
- data/lib/lono/upgrade.rb +0 -20
- data/lib/lono/utils/generators/tree.rb +0 -18
- data/lib/lono/utils/item/file_methods.rb +0 -29
- data/lib/lono/utils/item/zip.rb +0 -42
- data/lib/templates/blueprint/%blueprint_name%.gemspec.tt +0 -45
- data/lib/templates/blueprint/.gitignore +0 -11
- data/lib/templates/blueprint/CHANGELOG.md +0 -7
- data/lib/templates/blueprint/Gemfile +0 -4
- data/lib/templates/blueprint/README.md.tt +0 -33
- data/lib/templates/blueprint/Rakefile.tt +0 -9
- data/lib/templates/blueprint/seed/configs.rb +0 -28
- data/lib/templates/blueprint_types/dsl/app/templates/%blueprint_name%.rb +0 -36
- data/lib/templates/blueprint_types/dsl/app/user_data/bootstrap.sh +0 -2
- data/lib/templates/blueprint_types/erb/app/definitions/base.rb.tt +0 -1
- data/lib/templates/blueprint_types/erb/app/templates/%blueprint_name%.yml +0 -67
- data/lib/templates/configset/%configset_name%.gemspec.tt +0 -42
- data/lib/templates/configset/.gitignore +0 -10
- data/lib/templates/configset/CHANGELOG.md +0 -7
- data/lib/templates/configset/Gemfile +0 -4
- data/lib/templates/configset/README.md.tt +0 -3
- data/lib/templates/configset/Rakefile.tt +0 -9
- data/lib/templates/extension/%extension_name%.gemspec.tt +0 -46
- data/lib/templates/extension/.gitignore +0 -11
- data/lib/templates/extension/.rspec +0 -3
- data/lib/templates/extension/CHANGELOG.md +0 -7
- data/lib/templates/extension/Gemfile.tt +0 -4
- data/lib/templates/extension/Rakefile.tt +0 -9
- data/lib/templates/extension/spec/spec_helper.rb.tt +0 -29
- data/lib/templates/skeleton/Gemfile +0 -3
- data/lib/templates/skeleton/README.md +0 -58
- data/lib/templates/skeleton/configs/settings.yml +0 -13
- data/vendor/cfn-status/CHANGELOG.md +0 -14
- data/vendor/cfn-status/Gemfile +0 -4
- data/vendor/cfn-status/Gemfile.lock +0 -49
- data/vendor/cfn-status/LICENSE.txt +0 -21
- data/vendor/cfn-status/README.md +0 -58
- data/vendor/cfn-status/Rakefile +0 -6
- data/vendor/cfn-status/bin/console +0 -14
- data/vendor/cfn-status/bin/setup +0 -8
- data/vendor/cfn-status/cfn-status.gemspec +0 -30
- data/vendor/cfn-status/lib/cfn-status.rb +0 -1
- data/vendor/cfn-status/lib/cfn_status/aws_service.rb +0 -51
- data/vendor/cfn-status/lib/cfn_status/version.rb +0 -3
- data/vendor/cfn-status/lib/cfn_status.rb +0 -245
- data/vendor/cfn-status/spec/fixtures/cfn/pages/fresh/describe_stack_events-1.json +0 -1103
- data/vendor/cfn-status/spec/fixtures/cfn/pages/fresh/describe_stack_events-2.json +0 -1104
- data/vendor/cfn-status/spec/fixtures/cfn/pages/fresh/describe_stack_events-3.json +0 -1103
- data/vendor/cfn-status/spec/fixtures/cfn/pages/updating/describe_stack_events-1.json +0 -1103
- data/vendor/cfn-status/spec/fixtures/cfn/pages/updating/describe_stack_events-2.json +0 -1104
- data/vendor/cfn-status/spec/fixtures/cfn/pages/updating/describe_stack_events-3.json +0 -1103
- data/vendor/cfn-status/spec/fixtures/cfn/stack-events-complete.json +0 -1080
- data/vendor/cfn-status/spec/fixtures/cfn/stack-events-in-progress.json +0 -1080
- data/vendor/cfn-status/spec/fixtures/cfn/stack-events-update-rollback-complete.json +0 -1086
- data/vendor/cfn-status/spec/lib/cfn_status_spec.rb +0 -153
- data/vendor/cfn-status/spec/spec_helper.rb +0 -14
data/lib/lono/app.rb
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
module Lono
|
|
2
|
+
class App
|
|
3
|
+
extend Memoist
|
|
4
|
+
include DslEvaluator
|
|
5
|
+
include Singleton
|
|
6
|
+
include Lono::Utils::Logging
|
|
7
|
+
|
|
8
|
+
attr_reader :config
|
|
9
|
+
def initialize
|
|
10
|
+
@config = defaults
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def defaults
|
|
14
|
+
config = ActiveSupport::OrderedOptions.new
|
|
15
|
+
|
|
16
|
+
config.allow = ActiveSupport::OrderedOptions.new
|
|
17
|
+
config.allow.envs = nil
|
|
18
|
+
config.allow.regions = nil
|
|
19
|
+
config.deny = ActiveSupport::OrderedOptions.new
|
|
20
|
+
config.deny.envs = nil
|
|
21
|
+
config.deny.regions = nil
|
|
22
|
+
|
|
23
|
+
config.layering = ActiveSupport::OrderedOptions.new
|
|
24
|
+
config.layering.names = {}
|
|
25
|
+
|
|
26
|
+
config.log = ActiveSupport::OrderedOptions.new
|
|
27
|
+
config.log.root = Lono.log_root
|
|
28
|
+
config.logger = lono_logger
|
|
29
|
+
config.logger.formatter = Logger::Formatter.new
|
|
30
|
+
config.logger.level = ENV['LONO_LOG_LEVEL'] || :info
|
|
31
|
+
|
|
32
|
+
config.names = ActiveSupport::OrderedOptions.new
|
|
33
|
+
config.names.output = ActiveSupport::OrderedOptions.new
|
|
34
|
+
config.names.output.expand = true
|
|
35
|
+
config.names.output.stack = ":BLUEPRINT-:ENV" # does not include APP by default. Think this is more common
|
|
36
|
+
config.names.stack = ":APP-:BLUEPRINT-:ENV"
|
|
37
|
+
|
|
38
|
+
config.plan = ActiveSupport::OrderedOptions.new
|
|
39
|
+
config.plan.changeset = true
|
|
40
|
+
config.plan.params = "full"
|
|
41
|
+
config.plan.template = "summary" # summary is same as true
|
|
42
|
+
|
|
43
|
+
config.seed = ActiveSupport::OrderedOptions.new
|
|
44
|
+
config.seed.where = "config"
|
|
45
|
+
|
|
46
|
+
config.test = ActiveSupport::OrderedOptions.new
|
|
47
|
+
config.test.framework = "rspec"
|
|
48
|
+
|
|
49
|
+
config.up = ActiveSupport::OrderedOptions.new
|
|
50
|
+
config.up.capabilities = nil
|
|
51
|
+
config.up.notification_arns = nil
|
|
52
|
+
config.up.rollback = true
|
|
53
|
+
config.up.tags = nil
|
|
54
|
+
|
|
55
|
+
config
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def lono_logger
|
|
59
|
+
Logger.new(ENV['LONO_LOG_PATH'] || $stderr)
|
|
60
|
+
end
|
|
61
|
+
memoize :lono_logger
|
|
62
|
+
|
|
63
|
+
def configure
|
|
64
|
+
yield(@config)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def load_project_config
|
|
68
|
+
evaluate_file("#{Lono.root}/config/app.rb")
|
|
69
|
+
path = "#{Lono.root}/config/envs/#{Lono.env}.rb"
|
|
70
|
+
evaluate_file(path)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
data/lib/lono/autoloader.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
require "lono/
|
|
2
|
-
Lono::
|
|
1
|
+
require "lono/bundler"
|
|
2
|
+
Lono::Bundler.setup
|
|
3
3
|
require "zeitwerk"
|
|
4
4
|
|
|
5
5
|
module Lono
|
|
@@ -17,6 +17,7 @@ module Lono
|
|
|
17
17
|
loader.inflector = Inflector.new
|
|
18
18
|
loader.push_dir(File.dirname(__dir__)) # lib
|
|
19
19
|
loader.log! if ENV["LONO_AUTOLOAD_LOG"]
|
|
20
|
+
loader.ignore("#{__dir__}/ext.rb")
|
|
20
21
|
loader.setup
|
|
21
22
|
end
|
|
22
23
|
end
|
|
@@ -1,14 +1,49 @@
|
|
|
1
1
|
module Lono::AwsServices
|
|
2
2
|
module Helper
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
def stack_exists?(stack_name)
|
|
4
|
+
exist = nil
|
|
5
|
+
begin
|
|
6
|
+
# When the stack does not exist an exception is raised. Example:
|
|
7
|
+
# Aws::CloudFormation::Errors::ValidationError: Stack with id blah does not exist
|
|
8
|
+
cfn.describe_stacks(stack_name: stack_name)
|
|
9
|
+
exist = true
|
|
10
|
+
rescue Aws::CloudFormation::Errors::ValidationError => e
|
|
11
|
+
if e.message =~ /does not exist/
|
|
12
|
+
exist = false
|
|
13
|
+
elsif e.message.include?("'stackName' failed to satisfy constraint")
|
|
14
|
+
# Example of e.message when describe_stack with invalid stack name
|
|
15
|
+
# "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:/._+]*"
|
|
16
|
+
logger.info "Invalid stack name: #{stack_name}"
|
|
17
|
+
logger.info "Full error message: #{e.message}"
|
|
18
|
+
exit 1
|
|
19
|
+
else
|
|
20
|
+
raise # re-raise exception because unsure what other errors can happen
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
exist
|
|
24
|
+
end
|
|
5
25
|
|
|
6
|
-
def
|
|
7
|
-
|
|
26
|
+
def find_stack(stack_name)
|
|
27
|
+
resp = cfn.describe_stacks(stack_name: stack_name)
|
|
28
|
+
resp.stacks.first
|
|
29
|
+
rescue Aws::CloudFormation::Errors::ValidationError => e
|
|
30
|
+
# example: Stack with id demo-web does not exist
|
|
31
|
+
if e.message =~ /Stack with/ && e.message =~ /does not exist/
|
|
32
|
+
nil
|
|
33
|
+
else
|
|
34
|
+
raise
|
|
35
|
+
end
|
|
8
36
|
end
|
|
9
37
|
|
|
10
|
-
def
|
|
11
|
-
|
|
38
|
+
def find_stack_resources(stack_name)
|
|
39
|
+
resp = cfn.describe_stack_resources(stack_name: stack_name)
|
|
40
|
+
resp.stack_resources
|
|
41
|
+
rescue Aws::CloudFormation::Errors::ValidationError => e
|
|
42
|
+
if e.message.include?("does not exist")
|
|
43
|
+
nil
|
|
44
|
+
else
|
|
45
|
+
raise
|
|
46
|
+
end
|
|
12
47
|
end
|
|
13
48
|
end
|
|
14
49
|
end
|
data/lib/lono/aws_services.rb
CHANGED
|
@@ -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
|
data/lib/lono/blueprint.rb
CHANGED
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
module Lono
|
|
2
|
-
class Blueprint <
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
option(*args)
|
|
6
|
-
end
|
|
7
|
-
register(New, "new", "new NAME", "Generates new lono blueprint.")
|
|
8
|
-
|
|
9
|
-
desc "list", "Lists project blueprints"
|
|
10
|
-
long_desc Help.text("blueprint/list")
|
|
11
|
-
def list
|
|
12
|
-
Finder::Blueprint.list
|
|
2
|
+
class Blueprint < Component
|
|
3
|
+
def output_path
|
|
4
|
+
"#{Lono.root}/output/#{@name}/template.yml"
|
|
13
5
|
end
|
|
14
6
|
end
|
|
15
7
|
end
|
data/lib/lono/booter.rb
ADDED
|
@@ -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,54 @@
|
|
|
1
|
+
class Lono::Builder::Allow
|
|
2
|
+
class Base < Lono::CLI::Base
|
|
3
|
+
include Lono::App::CallableOption::Concern
|
|
4
|
+
|
|
5
|
+
def check!
|
|
6
|
+
messages = []
|
|
7
|
+
unless allowed?
|
|
8
|
+
messages << message # message is interface method
|
|
9
|
+
end
|
|
10
|
+
unless messages.empty?
|
|
11
|
+
puts "ERROR: The configs do not allow this.".color(:red)
|
|
12
|
+
puts messages
|
|
13
|
+
exit 1
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def allowed?
|
|
18
|
+
if allows.nil? && denys.nil?
|
|
19
|
+
true
|
|
20
|
+
elsif denys.nil?
|
|
21
|
+
allows.include?(check_value)
|
|
22
|
+
elsif allows.nil?
|
|
23
|
+
!denys.include?(check_value)
|
|
24
|
+
else
|
|
25
|
+
allows.include?(check_value) && !denys.include?(check_value)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def allows
|
|
30
|
+
callable_option(
|
|
31
|
+
config_name: "config.allow.#{config_name}",
|
|
32
|
+
config_value: config.dig(:allow, config_name),
|
|
33
|
+
passed_args: [@blueprint],
|
|
34
|
+
)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def denys
|
|
38
|
+
callable_option(
|
|
39
|
+
config_name: "config.deny.#{config_name}",
|
|
40
|
+
config_value: config.dig(:deny, config_name),
|
|
41
|
+
passed_args: [@blueprint],
|
|
42
|
+
)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
private
|
|
46
|
+
def config
|
|
47
|
+
Lono.config
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def config_name
|
|
51
|
+
self.class.to_s.split('::').last.underscore.pluralize.to_sym # ActiveSuport::HashWithIndifferentAccess#dig requires symbol
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
class Lono::Builder::Allow
|
|
2
|
+
class Env < Base
|
|
3
|
+
# interface method
|
|
4
|
+
def message
|
|
5
|
+
messages = []
|
|
6
|
+
messages << "This env is not allowed to be used: LONO_ENV=#{Lono.env}"
|
|
7
|
+
messages << "Allow envs: #{allows.join(', ')}" if allows
|
|
8
|
+
messages << "Deny envs: #{denys.join(', ')}" if denys
|
|
9
|
+
messages.join("\n")
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# interface method
|
|
13
|
+
def check_value
|
|
14
|
+
Lono.env
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
class Lono::Builder::Allow
|
|
2
|
+
class Region < Base
|
|
3
|
+
include Lono::Concerns::AwsInfo
|
|
4
|
+
|
|
5
|
+
# interface method
|
|
6
|
+
def message
|
|
7
|
+
messages = []
|
|
8
|
+
word = config_name.to_s # IE: regions or locations
|
|
9
|
+
messages << "This #{word.singularize} is not allowed to be used: Detected current #{word.singularize}=#{current_region}"
|
|
10
|
+
messages << "Allow #{word}: #{allows.join(', ')}" if allows
|
|
11
|
+
messages << "Deny #{word}: #{denys.join(', ')}" if denys
|
|
12
|
+
messages.join("\n")
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# interface method
|
|
16
|
+
def check_value
|
|
17
|
+
region
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
module Lono::Builder::Configset
|
|
2
|
+
class Combiner < Lono::CLI::Base
|
|
3
|
+
def initialize(options={})
|
|
4
|
+
super
|
|
5
|
+
@cfn = options[:cfn] # merge from Dsl::Finalizer::Configsets#run
|
|
6
|
+
@metas = options[:metas] # merge from Configset::Evaluator#evaluate
|
|
7
|
+
@configsets = []
|
|
8
|
+
@map = {} # stores resource logical id => metadata cfn-init
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Returns metadata map structure
|
|
12
|
+
#
|
|
13
|
+
# {"Instance"=>
|
|
14
|
+
# {"Metadata"=>
|
|
15
|
+
# {"AWS::CloudFormation::Init"=>
|
|
16
|
+
#
|
|
17
|
+
def combine
|
|
18
|
+
return @map if metas_empty?
|
|
19
|
+
add_existing
|
|
20
|
+
add_built
|
|
21
|
+
build_map # metadata map
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def metas_empty?
|
|
25
|
+
@metas.empty?
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def add_existing
|
|
29
|
+
existing_configsets.each do |configset|
|
|
30
|
+
add(configset)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def add_built
|
|
35
|
+
@metas.each do |meta|
|
|
36
|
+
definition = Definition.new(@options.merge(meta: meta))
|
|
37
|
+
configset = definition.evaluate
|
|
38
|
+
add(configset)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Useful for specs
|
|
43
|
+
def add(configset)
|
|
44
|
+
found = @configsets.detect { |c| c.name == configset.name && c.resource == configset.resource }
|
|
45
|
+
@configsets << configset unless found
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Each metadata has this structure:
|
|
49
|
+
#
|
|
50
|
+
# {"Metadata"=>
|
|
51
|
+
# {"AWS::CloudFormation::Init"=>
|
|
52
|
+
# {"configSets"=>{"default"=>["aaa1", "aaa2"]},
|
|
53
|
+
# "aaa1"=>{"commands"=>{"test"=>{"command"=>"echo from-aaa1 > test1.txt"}}},
|
|
54
|
+
# "aaa2"=>
|
|
55
|
+
# {"commands"=>{"test"=>{"command"=>"echo from-aaa2 > test1.txt"}}}}}}
|
|
56
|
+
#
|
|
57
|
+
def build_map
|
|
58
|
+
metadata_map = {}
|
|
59
|
+
configsets_map = {}
|
|
60
|
+
|
|
61
|
+
@configsets.each_with_index do |configset, i|
|
|
62
|
+
padded_i = "%03d" % i
|
|
63
|
+
|
|
64
|
+
name, resource, metadata = configset.name, configset.resource, configset.metadata
|
|
65
|
+
configsets = configsets_map[resource] ||= {}
|
|
66
|
+
|
|
67
|
+
validate_structure!(name, metadata)
|
|
68
|
+
|
|
69
|
+
new_metadata = metadata["Metadata"].dup
|
|
70
|
+
init = new_metadata["AWS::CloudFormation::Init"] # important: adjust data by reference
|
|
71
|
+
|
|
72
|
+
if init.key?("configSets")
|
|
73
|
+
# validate_simple!(name, new_metadata["AWS::CloudFormation::Init"]["configSets"]) # validate original configset for only simple elements
|
|
74
|
+
|
|
75
|
+
# 1. expand each config as its own config, flattening to top-level
|
|
76
|
+
cs = init.delete("configSets") # Only support configSets with simple Array of Strings
|
|
77
|
+
new_config_set = {}
|
|
78
|
+
new_config_set[name] = cs["default"].map {|c| "#{padded_i}_#{c}" }
|
|
79
|
+
init.transform_keys! { |c| "#{padded_i}_#{c}" }
|
|
80
|
+
|
|
81
|
+
# Rebuild default configSet, append the new complex ConfigSet structure with each iteration
|
|
82
|
+
configsets["default"] ||= []
|
|
83
|
+
configsets["default"] << {"ConfigSet" => name}
|
|
84
|
+
configsets.merge!(new_config_set) # add each config from #1 to the top-level
|
|
85
|
+
|
|
86
|
+
init["configSets"] = configsets # replace new configset
|
|
87
|
+
else # simple config
|
|
88
|
+
init["configSets"] = configsets # adjust data by reference
|
|
89
|
+
configsets["default"] ||= []
|
|
90
|
+
configsets["default"] << {"ConfigSet" => name}
|
|
91
|
+
|
|
92
|
+
# build new config
|
|
93
|
+
config_key = "#{padded_i}_single_generated"
|
|
94
|
+
configsets[name] = [config_key]
|
|
95
|
+
new_config = {config_key => init["config"]}
|
|
96
|
+
# replace old config with new one
|
|
97
|
+
init.delete("config") # delete original simple config
|
|
98
|
+
init.merge!(new_config)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
metadata_map[resource] ||= {"Metadata" => {}}
|
|
102
|
+
metadata_map[resource]["Metadata"].deep_merge!(new_metadata)
|
|
103
|
+
@map[resource] = metadata_map[resource]
|
|
104
|
+
end
|
|
105
|
+
@map
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# Normalized/convert cfn template to mimic the registry format
|
|
109
|
+
def existing_configsets
|
|
110
|
+
configsets = []
|
|
111
|
+
@cfn["Resources"].each do |logical_id, attributes|
|
|
112
|
+
cloudformation_init = attributes.dig("Metadata", "AWS::CloudFormation::Init")
|
|
113
|
+
next unless cloudformation_init
|
|
114
|
+
|
|
115
|
+
configset = Lono::Configset.new(name: "#{logical_id}OriginalConfigset", resource: logical_id)
|
|
116
|
+
configset.metadata = {"Metadata" => attributes["Metadata"]} # wrap metadata to create right structure
|
|
117
|
+
configsets << configset
|
|
118
|
+
end
|
|
119
|
+
configsets
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def validate_structure!(name, metadata)
|
|
123
|
+
return if metadata.is_a?(Hash) && metadata.dig("Metadata", "AWS::CloudFormation::Init")
|
|
124
|
+
|
|
125
|
+
puts "ERROR: The #{name} configset does not appear to have a AWS::CloudFormation::Init key".color(:red)
|
|
126
|
+
puts "Please double check the #{name} configset.yml structure"
|
|
127
|
+
exit 1
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def validate_simple!(name, cs)
|
|
131
|
+
has_complex_type = cs["default"].detect { |s| !s.is_a?(String) }
|
|
132
|
+
return unless has_complex_type
|
|
133
|
+
message =<<~EOL
|
|
134
|
+
ERROR: The configset #{name} has a configSets property with a complex type.
|
|
135
|
+
configSets:
|
|
136
|
+
|
|
137
|
+
#{cs}
|
|
138
|
+
|
|
139
|
+
lono configsets only supports combining configSets with an Array of Strings.
|
|
140
|
+
EOL
|
|
141
|
+
puts message.color(:red)
|
|
142
|
+
exit 1
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
class Lono::Builder::Configset::Definition
|
|
2
|
+
class Base < Lono::CLI::Base
|
|
3
|
+
include DslEvaluator
|
|
4
|
+
include Lono::Builder::Dsl::Syntax
|
|
5
|
+
include Lono::Utils::Pretty
|
|
6
|
+
include Context
|
|
7
|
+
|
|
8
|
+
# Really only use @path in Configset DSL and ERB evaluation.
|
|
9
|
+
# However, configsets are built within the CloudFormation template and can use
|
|
10
|
+
# things instrinic functions like `ref` like would normally have access to.
|
|
11
|
+
# So configsets need the same context
|
|
12
|
+
#
|
|
13
|
+
# Configset::Definition::Base < Lono::CLI::Base
|
|
14
|
+
#
|
|
15
|
+
# for
|
|
16
|
+
#
|
|
17
|
+
# include Lono::Builder::Dsl::Syntax
|
|
18
|
+
#
|
|
19
|
+
def initialize(options={})
|
|
20
|
+
super
|
|
21
|
+
@meta = @options[:meta]
|
|
22
|
+
@configset = Lono::Configset.new(@meta)
|
|
23
|
+
expose_instance_variables
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# This context is used by the DSL evaluation. Expose variables so user can use them in configset definitions.
|
|
27
|
+
# Example:
|
|
28
|
+
#
|
|
29
|
+
# "/etc/cfn/hooks.d/cfn-auto-reloader.conf":
|
|
30
|
+
# content:
|
|
31
|
+
# Fn::Sub:
|
|
32
|
+
# ...
|
|
33
|
+
# path=Resources.<%= @resource %>.Metadata.AWS::CloudFormation::Init
|
|
34
|
+
#
|
|
35
|
+
def expose_instance_variables
|
|
36
|
+
@name = @meta[:name]
|
|
37
|
+
@resource = @meta[:resource]
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def wrap_with_metadata(cloudformation_init)
|
|
41
|
+
full = {"Metadata" => {}}
|
|
42
|
+
full["Metadata"]["AWS::CloudFormation::Init"] = cloudformation_init["AWS::CloudFormation::Init"]
|
|
43
|
+
full["Metadata"]["AWS::CloudFormation::Authentication"] = authentication if authentication # only on dsl
|
|
44
|
+
full.deep_stringify_keys.dup # metadata
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
class Lono::Builder::Configset::Definition
|
|
2
|
+
module Context
|
|
3
|
+
include DslEvaluator
|
|
4
|
+
|
|
5
|
+
def load_context
|
|
6
|
+
load_vars
|
|
7
|
+
load_helpers
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Docs: https://lono.cloud/docs/configsets/layering/
|
|
11
|
+
# Layering is simple enough to keep in this method.
|
|
12
|
+
def load_vars
|
|
13
|
+
logger.debug "Layers for configset #{@configset.name}:"
|
|
14
|
+
evaluate_layer("#{@configset.root}/vars.rb") # source defaults
|
|
15
|
+
evaluate_layer("#{Lono.root}/config/configsets/#{@configset.name}/vars.rb") # source overrides
|
|
16
|
+
evaluate_layer("#{@blueprint.root}/config/configsets/vars/#{@configset.name}.rb") # blueprint overrides
|
|
17
|
+
evaluate_layer("#{Lono.root}/config/blueprints/#{@blueprint.name}/configsets/vars/#{@configset.name}.rb") # user overrides
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def evaluate_layer(path)
|
|
21
|
+
logger.debug " #{pretty_path(path)}" if File.exist?(path) || ENV['LONO_SHOW_ALL_LAYERS']
|
|
22
|
+
evaluate_file(path)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def load_helpers
|
|
26
|
+
load_helper_files("#{@configset.root}/helpers", type: :configset)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
module Lono::Configset::
|
|
2
|
-
module
|
|
1
|
+
module Lono::Builder::Configset::Definition::Dsl::Syntax
|
|
2
|
+
module Content
|
|
3
3
|
def content_file(path)
|
|
4
|
-
content_path = "#{
|
|
4
|
+
content_path = "#{file_root}/content"
|
|
5
5
|
file = "#{content_path}/#{path}"
|
|
6
6
|
if File.exist?(file)
|
|
7
7
|
IO.read(file)
|
|
@@ -10,6 +10,14 @@ module Lono::Configset::Strategy::Helpers::Dsl
|
|
|
10
10
|
end
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
+
def file_root
|
|
14
|
+
if @configset
|
|
15
|
+
@configset.root
|
|
16
|
+
else
|
|
17
|
+
@blueprint.root
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
13
21
|
def s3_key(name)
|
|
14
22
|
Lono::Configset::S3File::Registry.register(name, blueprint: @blueprint, configset: @configset, root: @root)
|
|
15
23
|
"file://configset/#{@configset}/#{name}"
|
|
@@ -1,7 +1,20 @@
|
|
|
1
|
-
module Lono::Configset::
|
|
2
|
-
module
|
|
1
|
+
module Lono::Builder::Configset::Definition::Dsl::Syntax
|
|
2
|
+
module Core
|
|
3
3
|
extend Memoist
|
|
4
4
|
|
|
5
|
+
#
|
|
6
|
+
# The configset method is different with configset registration vs configset definition
|
|
7
|
+
#
|
|
8
|
+
# definition: app/configsets/httpd/configset.rb
|
|
9
|
+
# registration: app/blueprints/demo/configsets.rb
|
|
10
|
+
#
|
|
11
|
+
def configset(current)
|
|
12
|
+
@tracked << current
|
|
13
|
+
previous, @current = @current, current
|
|
14
|
+
yield
|
|
15
|
+
@current = previous
|
|
16
|
+
end
|
|
17
|
+
|
|
5
18
|
%w[package group user file service].each do |meth|
|
|
6
19
|
section = meth.pluralize
|
|
7
20
|
define_method(meth) do |k, props={}|
|
|
@@ -53,13 +66,6 @@ module Lono::Configset::Strategy::Helpers::Dsl
|
|
|
53
66
|
current_structure(@current)["sources"].deep_merge!(item)
|
|
54
67
|
end
|
|
55
68
|
|
|
56
|
-
def configset(current)
|
|
57
|
-
@tracked << current
|
|
58
|
-
previous, @current = @current, current
|
|
59
|
-
yield
|
|
60
|
-
@current = previous
|
|
61
|
-
end
|
|
62
|
-
|
|
63
69
|
private
|
|
64
70
|
def current_structure(configset)
|
|
65
71
|
@structure[configset] ||= {}
|