jets-fs 1.6.10
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 +7 -0
- data/.circleci/bin/commit_docs.sh +26 -0
- data/.circleci/config.yml +126 -0
- data/.codebuild/README.md +68 -0
- data/.codebuild/bin/jets +3 -0
- data/.codebuild/buildspec-base.yml +14 -0
- data/.codebuild/integration.sh +72 -0
- data/.codebuild/jets.postman_collection.json +323 -0
- data/.codebuild/scripts/install-docker.sh +12 -0
- data/.codebuild/scripts/install-dynamodb-local.sh +22 -0
- data/.codebuild/scripts/install-java.sh +22 -0
- data/.codebuild/scripts/install-node.sh +4 -0
- data/.github/ISSUE_TEMPLATE.md +7 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +73 -0
- data/.github/ISSUE_TEMPLATE/documentation.md +27 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +64 -0
- data/.github/ISSUE_TEMPLATE/question.md +16 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +42 -0
- data/.gitignore +24 -0
- data/.gitmodules +6 -0
- data/.python-version +1 -0
- data/.rspec +4 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +533 -0
- data/Dockerfile +16 -0
- data/Dockerfile.base +53 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +190 -0
- data/Guardfile +22 -0
- data/LICENSE.txt +22 -0
- data/Procfile +2 -0
- data/README.md +203 -0
- data/Rakefile +21 -0
- data/backers.md +16 -0
- data/bin/release +9 -0
- data/buildspec.yml +18 -0
- data/exe/jets +14 -0
- data/jets.gemspec +61 -0
- data/lib/jets.rb +71 -0
- data/lib/jets/application.rb +308 -0
- data/lib/jets/aws_info.rb +111 -0
- data/lib/jets/aws_services.rb +60 -0
- data/lib/jets/aws_services/stack_status.rb +59 -0
- data/lib/jets/booter.rb +130 -0
- data/lib/jets/builders.rb +16 -0
- data/lib/jets/builders/code_builder.rb +379 -0
- data/lib/jets/builders/code_size.rb +57 -0
- data/lib/jets/builders/gem_replacer.rb +76 -0
- data/lib/jets/builders/handler_generator.rb +172 -0
- data/lib/jets/builders/lambda_layer.rb +69 -0
- data/lib/jets/builders/md5.rb +60 -0
- data/lib/jets/builders/md5_zip.rb +61 -0
- data/lib/jets/builders/purger.rb +35 -0
- data/lib/jets/builders/rack_packager.rb +51 -0
- data/lib/jets/builders/rackup_wrappers/rackup +19 -0
- data/lib/jets/builders/rackup_wrappers/rackup.rb +7 -0
- data/lib/jets/builders/reconfigure_rails.rb +114 -0
- data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +16 -0
- data/lib/jets/builders/ruby_packager.rb +207 -0
- data/lib/jets/builders/shim_vars.rb +5 -0
- data/lib/jets/builders/shim_vars/app.rb +78 -0
- data/lib/jets/builders/shim_vars/base.rb +25 -0
- data/lib/jets/builders/shim_vars/shared.rb +37 -0
- data/lib/jets/builders/templates/handler.rb +12 -0
- data/lib/jets/builders/tidy.rb +107 -0
- data/lib/jets/builders/util.rb +31 -0
- data/lib/jets/camelizer.rb +67 -0
- data/lib/jets/cfn.rb +6 -0
- data/lib/jets/cfn/builders.rb +20 -0
- data/lib/jets/cfn/builders/api_deployment_builder.rb +58 -0
- data/lib/jets/cfn/builders/api_gateway_builder.rb +80 -0
- data/lib/jets/cfn/builders/base_child_builder.rb +82 -0
- data/lib/jets/cfn/builders/controller_builder.rb +42 -0
- data/lib/jets/cfn/builders/function_builder.rb +14 -0
- data/lib/jets/cfn/builders/interface.rb +127 -0
- data/lib/jets/cfn/builders/job_builder.rb +14 -0
- data/lib/jets/cfn/builders/parent_builder.rb +93 -0
- data/lib/jets/cfn/builders/rule_builder.rb +24 -0
- data/lib/jets/cfn/builders/shared_builder.rb +14 -0
- data/lib/jets/cfn/ship.rb +189 -0
- data/lib/jets/cfn/status.rb +212 -0
- data/lib/jets/cfn/upload.rb +139 -0
- data/lib/jets/cli.rb +189 -0
- data/lib/jets/commands.rb +27 -0
- data/lib/jets/commands/base.rb +164 -0
- data/lib/jets/commands/build.rb +217 -0
- data/lib/jets/commands/call.rb +174 -0
- data/lib/jets/commands/call/anonymous_guesser.rb +96 -0
- data/lib/jets/commands/call/autoload_guesser.rb +112 -0
- data/lib/jets/commands/call/base_guesser.rb +33 -0
- data/lib/jets/commands/call/guesser.rb +48 -0
- data/lib/jets/commands/clean.rb +23 -0
- data/lib/jets/commands/clean/base.rb +24 -0
- data/lib/jets/commands/clean/build.rb +13 -0
- data/lib/jets/commands/clean/log.rb +107 -0
- data/lib/jets/commands/console.rb +13 -0
- data/lib/jets/commands/db.rb +15 -0
- data/lib/jets/commands/db/environment-task.rake +3 -0
- data/lib/jets/commands/db/tasks.rb +44 -0
- data/lib/jets/commands/dbconsole.rb +131 -0
- data/lib/jets/commands/delete.rb +143 -0
- data/lib/jets/commands/deploy.rb +131 -0
- data/lib/jets/commands/dynamodb.rb +22 -0
- data/lib/jets/commands/dynamodb/migrate.rb +9 -0
- data/lib/jets/commands/dynamodb/migrator.rb +36 -0
- data/lib/jets/commands/gems.rb +21 -0
- data/lib/jets/commands/help.rb +9 -0
- data/lib/jets/commands/help/build.md +6 -0
- data/lib/jets/commands/help/call.md +61 -0
- data/lib/jets/commands/help/clean/build.md +5 -0
- data/lib/jets/commands/help/clean/log.md +5 -0
- data/lib/jets/commands/help/console.md +18 -0
- data/lib/jets/commands/help/db/generate.md +8 -0
- data/lib/jets/commands/help/dbconsole.md +9 -0
- data/lib/jets/commands/help/delete.md +22 -0
- data/lib/jets/commands/help/deploy.md +32 -0
- data/lib/jets/commands/help/dynamodb/generate.md +52 -0
- data/lib/jets/commands/help/dynamodb/migrate.md +4 -0
- data/lib/jets/commands/help/gems/check.md +8 -0
- data/lib/jets/commands/help/generate.md +22 -0
- data/lib/jets/commands/help/import/rack.md +13 -0
- data/lib/jets/commands/help/import/rails.md +11 -0
- data/lib/jets/commands/help/new.md +42 -0
- data/lib/jets/commands/help/routes.md +16 -0
- data/lib/jets/commands/help/runner.md +17 -0
- data/lib/jets/commands/help/server.md +15 -0
- data/lib/jets/commands/help/status.md +14 -0
- data/lib/jets/commands/help/upgrade.md +5 -0
- data/lib/jets/commands/help/url.md +6 -0
- data/lib/jets/commands/import.rb +18 -0
- data/lib/jets/commands/import/base.rb +49 -0
- data/lib/jets/commands/import/cheatsheet.rb +35 -0
- data/lib/jets/commands/import/rack.rb +16 -0
- data/lib/jets/commands/import/rail.rb +74 -0
- data/lib/jets/commands/import/sequence.rb +90 -0
- data/lib/jets/commands/import/templates/config/database.yml +26 -0
- data/lib/jets/commands/import/templates/submodules-cheatsheet.md +89 -0
- data/lib/jets/commands/main.rb +152 -0
- data/lib/jets/commands/markdown.rb +8 -0
- data/lib/jets/commands/markdown/creator.rb +58 -0
- data/lib/jets/commands/markdown/index.rb +27 -0
- data/lib/jets/commands/markdown/page.rb +125 -0
- data/lib/jets/commands/markdown/shell.rb +11 -0
- data/lib/jets/commands/new.rb +157 -0
- data/lib/jets/commands/rake_command.rb +61 -0
- data/lib/jets/commands/rake_tasks.rb +45 -0
- data/lib/jets/commands/runner.rb +18 -0
- data/lib/jets/commands/sequence.rb +99 -0
- data/lib/jets/commands/stack_info.rb +30 -0
- data/lib/jets/commands/templates/skeleton/.gitignore +12 -0
- data/lib/jets/commands/templates/skeleton/.jetskeep +1 -0
- data/lib/jets/commands/templates/skeleton/.rspec +3 -0
- data/lib/jets/commands/templates/skeleton/Gemfile.tt +35 -0
- data/lib/jets/commands/templates/skeleton/Procfile +7 -0
- data/lib/jets/commands/templates/skeleton/README.md +11 -0
- data/lib/jets/commands/templates/skeleton/Rakefile +2 -0
- data/lib/jets/commands/templates/skeleton/app/controllers/application_controller.rb +2 -0
- data/lib/jets/commands/templates/skeleton/app/helpers/application_helper.rb +2 -0
- data/lib/jets/commands/templates/skeleton/app/jobs/application_job.rb +4 -0
- data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +2 -0
- data/lib/jets/commands/templates/skeleton/app/models/application_record.rb +3 -0
- data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +25 -0
- data/lib/jets/commands/templates/skeleton/config.ru +5 -0
- data/lib/jets/commands/templates/skeleton/config/application.rb.tt +66 -0
- data/lib/jets/commands/templates/skeleton/config/database.yml.tt +26 -0
- data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +22 -0
- data/lib/jets/commands/templates/skeleton/config/environments/development.rb +4 -0
- data/lib/jets/commands/templates/skeleton/config/environments/production.rb +4 -0
- data/lib/jets/commands/templates/skeleton/config/routes.rb +9 -0
- data/lib/jets/commands/templates/skeleton/db/.gitkeep +0 -0
- data/lib/jets/commands/templates/skeleton/public/404.html +67 -0
- data/lib/jets/commands/templates/skeleton/public/422.html +67 -0
- data/lib/jets/commands/templates/skeleton/public/500.html +66 -0
- data/lib/jets/commands/templates/skeleton/public/favicon.ico +0 -0
- data/lib/jets/commands/templates/skeleton/public/index.html.tt +91 -0
- data/lib/jets/commands/templates/skeleton/spec/controllers/posts_controller_spec.rb +15 -0
- data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-index.json +51 -0
- data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-show.json +53 -0
- data/lib/jets/commands/templates/skeleton/spec/spec_helper.rb.tt +30 -0
- data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +14 -0
- data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +24 -0
- data/lib/jets/commands/templates/webpacker/app/javascript/src/jets/crud.js +87 -0
- data/lib/jets/commands/upgrade.rb +146 -0
- data/lib/jets/commands/upgrade/templates/bin/webpack +19 -0
- data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +19 -0
- data/lib/jets/commands/url.rb +68 -0
- data/lib/jets/commands/webpacker_template.rb +18 -0
- data/lib/jets/controller.rb +16 -0
- data/lib/jets/controller/base.rb +103 -0
- data/lib/jets/controller/callbacks.rb +62 -0
- data/lib/jets/controller/cookies.rb +40 -0
- data/lib/jets/controller/cookies/jar.rb +269 -0
- data/lib/jets/controller/layout.rb +17 -0
- data/lib/jets/controller/middleware.rb +5 -0
- data/lib/jets/controller/middleware/cors.rb +60 -0
- data/lib/jets/controller/middleware/local.rb +119 -0
- data/lib/jets/controller/middleware/local/api_gateway.rb +93 -0
- data/lib/jets/controller/middleware/local/mimic_aws_call.rb +38 -0
- data/lib/jets/controller/middleware/local/route_matcher.rb +97 -0
- data/lib/jets/controller/middleware/main.rb +46 -0
- data/lib/jets/controller/middleware/webpacker_setup.rb +6 -0
- data/lib/jets/controller/params.rb +87 -0
- data/lib/jets/controller/rack.rb +5 -0
- data/lib/jets/controller/rack/adapter.rb +63 -0
- data/lib/jets/controller/rack/env.rb +105 -0
- data/lib/jets/controller/redirection.rb +55 -0
- data/lib/jets/controller/rendering.rb +84 -0
- data/lib/jets/controller/rendering/rack_renderer.rb +238 -0
- data/lib/jets/controller/request.rb +29 -0
- data/lib/jets/controller/response.rb +61 -0
- data/lib/jets/core.rb +211 -0
- data/lib/jets/core_ext/kernel.rb +56 -0
- data/lib/jets/db.rb +15 -0
- data/lib/jets/dotenv.rb +39 -0
- data/lib/jets/erb.rb +51 -0
- data/lib/jets/generator.rb +41 -0
- data/lib/jets/generator/templates/erb/controller/view.html.erb +2 -0
- data/lib/jets/generator/templates/erb/scaffold/_form.html.erb +39 -0
- data/lib/jets/generator/templates/erb/scaffold/edit.html.erb +6 -0
- data/lib/jets/generator/templates/erb/scaffold/index.html.erb +29 -0
- data/lib/jets/generator/templates/erb/scaffold/new.html.erb +5 -0
- data/lib/jets/generator/templates/erb/scaffold/show.html.erb +9 -0
- data/lib/jets/generator/templates/rails/assets/javascript.js +2 -0
- data/lib/jets/generator/templates/rails/assets/stylesheet.css +4 -0
- data/lib/jets/generator/templates/rails/controller/controller.rb +13 -0
- data/lib/jets/generator/templates/rails/helper/helper.rb +4 -0
- data/lib/jets/generator/templates/rails/scaffold/scaffold.css +80 -0
- data/lib/jets/generator/templates/rails/scaffold_controller/api_controller.rb +62 -0
- data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +79 -0
- data/lib/jets/inflections.rb +32 -0
- data/lib/jets/internal/app/controllers/jets/public_controller.rb +31 -0
- data/lib/jets/internal/app/controllers/jets/rack_controller.rb +25 -0
- data/lib/jets/internal/app/functions/jets/base_path.rb +153 -0
- data/lib/jets/internal/app/jobs/jets/preheat_job.rb +62 -0
- data/lib/jets/io.rb +14 -0
- data/lib/jets/job.rb +4 -0
- data/lib/jets/job/base.rb +29 -0
- data/lib/jets/job/dsl.rb +108 -0
- data/lib/jets/klass.rb +109 -0
- data/lib/jets/lambda.rb +18 -0
- data/lib/jets/lambda/dsl.rb +384 -0
- data/lib/jets/lambda/function.rb +29 -0
- data/lib/jets/lambda/function_constructor.rb +55 -0
- data/lib/jets/lambda/functions.rb +34 -0
- data/lib/jets/lambda/task.rb +111 -0
- data/lib/jets/logger.rb +24 -0
- data/lib/jets/mega.rb +7 -0
- data/lib/jets/mega/hash_converter.rb +25 -0
- data/lib/jets/mega/request.rb +140 -0
- data/lib/jets/mega/request/source.rb +21 -0
- data/lib/jets/middleware.rb +38 -0
- data/lib/jets/middleware/configurator.rb +84 -0
- data/lib/jets/middleware/default_stack.rb +49 -0
- data/lib/jets/middleware/layer.rb +34 -0
- data/lib/jets/middleware/stack.rb +77 -0
- data/lib/jets/naming.rb +49 -0
- data/lib/jets/overrides/lambda.rb +1 -0
- data/lib/jets/overrides/lambda/marshaller.rb +31 -0
- data/lib/jets/overrides/rails.rb +4 -0
- data/lib/jets/overrides/rails/asset_tag_helper.rb +114 -0
- data/lib/jets/overrides/rails/common_methods.rb +20 -0
- data/lib/jets/overrides/rails/rendering_helper.rb +26 -0
- data/lib/jets/overrides/rails/url_helper.rb +25 -0
- data/lib/jets/poly_fun.rb +82 -0
- data/lib/jets/poly_fun/base_executor.rb +125 -0
- data/lib/jets/poly_fun/lambda_executor.rb +16 -0
- data/lib/jets/poly_fun/node_error.rb +8 -0
- data/lib/jets/poly_fun/node_executor.rb +54 -0
- data/lib/jets/poly_fun/python_error.rb +8 -0
- data/lib/jets/poly_fun/python_executor.rb +23 -0
- data/lib/jets/preheat.rb +117 -0
- data/lib/jets/processors.rb +4 -0
- data/lib/jets/processors/deducer.rb +65 -0
- data/lib/jets/processors/main_processor.rb +59 -0
- data/lib/jets/rack_server.rb +80 -0
- data/lib/jets/rdoc.rb +30 -0
- data/lib/jets/resource.rb +74 -0
- data/lib/jets/resource/api_gateway.rb +9 -0
- data/lib/jets/resource/api_gateway/base_path.rb +5 -0
- data/lib/jets/resource/api_gateway/base_path/function.rb +42 -0
- data/lib/jets/resource/api_gateway/base_path/mapping.rb +44 -0
- data/lib/jets/resource/api_gateway/base_path/role.rb +76 -0
- data/lib/jets/resource/api_gateway/cors.rb +61 -0
- data/lib/jets/resource/api_gateway/deployment.rb +78 -0
- data/lib/jets/resource/api_gateway/domain_name.rb +59 -0
- data/lib/jets/resource/api_gateway/method.rb +98 -0
- data/lib/jets/resource/api_gateway/resource.rb +78 -0
- data/lib/jets/resource/api_gateway/rest_api.rb +60 -0
- data/lib/jets/resource/api_gateway/rest_api/change_detection.rb +42 -0
- data/lib/jets/resource/api_gateway/rest_api/logical_id.rb +63 -0
- data/lib/jets/resource/api_gateway/rest_api/routes.rb +11 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +12 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/base.rb +130 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/to.rb +29 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/variable.rb +39 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/collision.rb +123 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/collision/variable_exception.rb +7 -0
- data/lib/jets/resource/associated.rb +26 -0
- data/lib/jets/resource/base.rb +28 -0
- data/lib/jets/resource/child_stack.rb +7 -0
- data/lib/jets/resource/child_stack/api_deployment.rb +56 -0
- data/lib/jets/resource/child_stack/api_gateway.rb +29 -0
- data/lib/jets/resource/child_stack/app_class.rb +112 -0
- data/lib/jets/resource/child_stack/base.rb +24 -0
- data/lib/jets/resource/child_stack/shared.rb +90 -0
- data/lib/jets/resource/config.rb +4 -0
- data/lib/jets/resource/config/config_rule.rb +74 -0
- data/lib/jets/resource/config/managed_rule.rb +15 -0
- data/lib/jets/resource/events.rb +3 -0
- data/lib/jets/resource/events/rule.rb +31 -0
- data/lib/jets/resource/iam.rb +8 -0
- data/lib/jets/resource/iam/application_role.rb +27 -0
- data/lib/jets/resource/iam/base_role_definition.rb +47 -0
- data/lib/jets/resource/iam/class_role.rb +74 -0
- data/lib/jets/resource/iam/function_role.rb +54 -0
- data/lib/jets/resource/iam/managed_policy.rb +22 -0
- data/lib/jets/resource/iam/policy_document.rb +41 -0
- data/lib/jets/resource/lambda.rb +5 -0
- data/lib/jets/resource/lambda/function.rb +216 -0
- data/lib/jets/resource/lambda/function/environment.rb +61 -0
- data/lib/jets/resource/lambda/gem_layer.rb +17 -0
- data/lib/jets/resource/lambda/layer_version.rb +44 -0
- data/lib/jets/resource/permission.rb +45 -0
- data/lib/jets/resource/replacer.rb +77 -0
- data/lib/jets/resource/route53.rb +3 -0
- data/lib/jets/resource/route53/record_set.rb +70 -0
- data/lib/jets/resource/s3.rb +17 -0
- data/lib/jets/resource/sns.rb +3 -0
- data/lib/jets/resource/sqs.rb +3 -0
- data/lib/jets/resource/standardizer.rb +42 -0
- data/lib/jets/route.rb +166 -0
- data/lib/jets/router.rb +175 -0
- data/lib/jets/router/scope.rb +30 -0
- data/lib/jets/rule.rb +4 -0
- data/lib/jets/rule/base.rb +19 -0
- data/lib/jets/rule/dsl.rb +110 -0
- data/lib/jets/spec_helpers.rb +52 -0
- data/lib/jets/spec_helpers/params.rb +10 -0
- data/lib/jets/spec_helpers/request.rb +98 -0
- data/lib/jets/spec_helpers/response.rb +5 -0
- data/lib/jets/stack.rb +103 -0
- data/lib/jets/stack/builder.rb +38 -0
- data/lib/jets/stack/definition.rb +50 -0
- data/lib/jets/stack/function.rb +60 -0
- data/lib/jets/stack/main.rb +5 -0
- data/lib/jets/stack/main/dsl.rb +33 -0
- data/lib/jets/stack/main/extensions/base.rb +45 -0
- data/lib/jets/stack/main/extensions/cloudwatch.rb +19 -0
- data/lib/jets/stack/main/extensions/lambda.rb +71 -0
- data/lib/jets/stack/main/extensions/sns.rb +12 -0
- data/lib/jets/stack/main/extensions/sqs.rb +36 -0
- data/lib/jets/stack/output.rb +38 -0
- data/lib/jets/stack/output/dsl.rb +19 -0
- data/lib/jets/stack/output/lookup.rb +36 -0
- data/lib/jets/stack/parameter.rb +38 -0
- data/lib/jets/stack/parameter/dsl.rb +42 -0
- data/lib/jets/stack/resource.rb +32 -0
- data/lib/jets/stack/resource/dsl.rb +19 -0
- data/lib/jets/tmp_loader.rb +52 -0
- data/lib/jets/turbine.rb +30 -0
- data/lib/jets/turbo.rb +47 -0
- data/lib/jets/turbo/database_yaml.rb +41 -0
- data/lib/jets/turbo/project/.gitignore +12 -0
- data/lib/jets/turbo/project/.jetskeep +1 -0
- data/lib/jets/turbo/project/Gemfile +16 -0
- data/lib/jets/turbo/project/Rakefile +2 -0
- data/lib/jets/turbo/project/app/controllers/application_controller.rb +2 -0
- data/lib/jets/turbo/project/app/helpers/application_helper.rb +2 -0
- data/lib/jets/turbo/project/app/jobs/application_job.rb +4 -0
- data/lib/jets/turbo/project/config.ru +5 -0
- data/lib/jets/turbo/project/config/application.rb +4 -0
- data/lib/jets/turbo/project/config/routes.rb +4 -0
- data/lib/jets/turbo/rail.rb +113 -0
- data/lib/jets/turbo/templates/config/database.yml +26 -0
- data/lib/jets/util.rb +38 -0
- data/lib/jets/version.rb +3 -0
- data/readme/prerelease.md +6 -0
- data/readme/testing.md +60 -0
- metadata +859 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Inheriting classes should implement:
|
|
2
|
+
#
|
|
3
|
+
# definition
|
|
4
|
+
# template_filename
|
|
5
|
+
#
|
|
6
|
+
module Jets::Resource::ChildStack
|
|
7
|
+
class Base < Jets::Resource::Base
|
|
8
|
+
def initialize(s3_bucket, options={})
|
|
9
|
+
@s3_bucket = s3_bucket
|
|
10
|
+
@options = options
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def outputs
|
|
14
|
+
{
|
|
15
|
+
logical_id => "!Ref #{logical_id}",
|
|
16
|
+
}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def template_url
|
|
20
|
+
basename = File.basename(template_filename)
|
|
21
|
+
"https://s3.amazonaws.com/#{@s3_bucket}/jets/cfn-templates/#{basename}"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Implements:
|
|
2
|
+
#
|
|
3
|
+
# definition
|
|
4
|
+
# template_filename
|
|
5
|
+
#
|
|
6
|
+
module Jets::Resource::ChildStack
|
|
7
|
+
class Shared < AppClass
|
|
8
|
+
def initialize(s3_bucket, options={})
|
|
9
|
+
super
|
|
10
|
+
@path = options[:path]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def definition
|
|
14
|
+
logical_id = shared_logical_id
|
|
15
|
+
definition = {
|
|
16
|
+
logical_id => {
|
|
17
|
+
type: "AWS::CloudFormation::Stack",
|
|
18
|
+
properties: child_properties
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
definition[logical_id][:depends_on] = depends_on if depends_on
|
|
22
|
+
definition
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def child_properties
|
|
26
|
+
props = {
|
|
27
|
+
template_url: template_url,
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
props[:parameters] = common_parameters # common child parameters
|
|
31
|
+
# add depends on parameters
|
|
32
|
+
depends_on.each do |dependency|
|
|
33
|
+
dependency_outputs(dependency).each do |output|
|
|
34
|
+
dependency_class = dependency.to_s.classify
|
|
35
|
+
props[:parameters][output] = "!GetAtt #{dependency_class}.Outputs.#{output}"
|
|
36
|
+
end
|
|
37
|
+
end if depends_on
|
|
38
|
+
|
|
39
|
+
props
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def common_parameters
|
|
43
|
+
{
|
|
44
|
+
IamRole: "!GetAtt IamRole.Arn",
|
|
45
|
+
S3Bucket: "!Ref S3Bucket",
|
|
46
|
+
}
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Returns output keys associated with the stack. They are the resource logical ids.
|
|
50
|
+
def dependency_outputs(dependency)
|
|
51
|
+
dependency.to_s.classify.constantize.output_keys
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def depends_on
|
|
55
|
+
return unless current_shared_class.depends_on
|
|
56
|
+
current_shared_class.depends_on.map { |x| x.to_s.singularize.camelize }
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# map the path to a camelized logical_id. Example:
|
|
60
|
+
# /tmp/jets/demo/templates/demo-dev-2-shared-resources.yml to
|
|
61
|
+
# PostsController
|
|
62
|
+
def shared_logical_id
|
|
63
|
+
regexp = Regexp.new(".*#{Jets.config.project_namespace}-shared-") # remove the shared
|
|
64
|
+
shared_name = @path.sub(regexp, '').sub('.yml', '')
|
|
65
|
+
shared_name.underscore.camelize
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# IE: app/resource.rb => Resource
|
|
69
|
+
# Returns Resource class object in the example
|
|
70
|
+
def current_shared_class
|
|
71
|
+
templates_prefix = "#{Jets::Naming.template_path_prefix}-shared-"
|
|
72
|
+
@path.sub(templates_prefix, '')
|
|
73
|
+
.sub(/\.yml$/,'')
|
|
74
|
+
.gsub('-','/')
|
|
75
|
+
.classify
|
|
76
|
+
.constantize # returns actual class
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Tells us if there are any resources defined in the shared class.
|
|
80
|
+
#
|
|
81
|
+
# Returns: Boolean
|
|
82
|
+
def resources?
|
|
83
|
+
current_shared_class.build?
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def template_filename
|
|
87
|
+
"#{Jets.config.project_namespace}-shared-#{current_shared_class.to_s.underscore}.yml"
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
module Jets::Resource::Config
|
|
2
|
+
class ConfigRule < Jets::Resource::Base
|
|
3
|
+
def initialize(app_class, meth, props={})
|
|
4
|
+
@app_class = app_class.to_s
|
|
5
|
+
@meth = meth
|
|
6
|
+
@props = props # associated_properties from dsl.rb
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def definition
|
|
10
|
+
base = {
|
|
11
|
+
config_rule_logical_id => {
|
|
12
|
+
type: "AWS::Config::ConfigRule",
|
|
13
|
+
properties: definition_properties
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
# Explicitly set depends_on to help with CloudFormation random race condition.
|
|
18
|
+
# Seems to be a new CloudFormation and AWS Config resource issue.
|
|
19
|
+
if definition_properties[:source][:owner] == 'CUSTOM_LAMBDA'
|
|
20
|
+
base[config_rule_logical_id][:depends_on] = "{namespace}Permission"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
base
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Do not name this method properties, that is a computed method of `Jets::Resource::Base`
|
|
27
|
+
def definition_properties
|
|
28
|
+
{
|
|
29
|
+
config_rule_name: config_rule_name,
|
|
30
|
+
source: {
|
|
31
|
+
owner: "CUSTOM_LAMBDA",
|
|
32
|
+
source_identifier: "!GetAtt {namespace}LambdaFunction.Arn",
|
|
33
|
+
source_details: [
|
|
34
|
+
{
|
|
35
|
+
event_source: "aws.config",
|
|
36
|
+
message_type: "ConfigurationItemChangeNotification"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
event_source: "aws.config",
|
|
40
|
+
message_type: "OversizedConfigurationItemChangeNotification"
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
}.deep_merge(@props)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def config_rule_logical_id
|
|
48
|
+
"{namespace}_config_rule"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def config_rule_name
|
|
52
|
+
app_class = @app_class.underscore.gsub(/_rule$/,'')
|
|
53
|
+
ns = namespace
|
|
54
|
+
ns = nil if ns == false # for compact
|
|
55
|
+
[ns, "#{app_class}_#{@meth}"].compact.join('_').dasherize
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def namespace
|
|
59
|
+
namespace = nil
|
|
60
|
+
klass = @app_class.constantize
|
|
61
|
+
while klass != Jets::Lambda::Functions
|
|
62
|
+
namespace = klass.rule_namespace
|
|
63
|
+
break if namespace or namespace == false
|
|
64
|
+
klass = klass.superclass
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
if namespace.nil?
|
|
68
|
+
Jets.config.project_namespace
|
|
69
|
+
else
|
|
70
|
+
namespace
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# ManagedRule is just different enough to be a separate class vs being part of the
|
|
2
|
+
# ConfigRule class itself.
|
|
3
|
+
module Jets::Resource::Config
|
|
4
|
+
class ManagedRule < ConfigRule
|
|
5
|
+
def definition_properties
|
|
6
|
+
{
|
|
7
|
+
config_rule_name: config_rule_name,
|
|
8
|
+
source: {
|
|
9
|
+
owner: "AWS",
|
|
10
|
+
source_identifier: @meth.upcase,
|
|
11
|
+
},
|
|
12
|
+
}.deep_merge(@props)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module Jets::Resource::Events
|
|
2
|
+
class Rule < Jets::Resource::Base
|
|
3
|
+
def initialize(props)
|
|
4
|
+
@props = props # associated_properties from dsl.rb
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def definition
|
|
8
|
+
{
|
|
9
|
+
rule_logical_id => {
|
|
10
|
+
type: "AWS::Events::Rule",
|
|
11
|
+
properties: merged_properties
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Do not name this method properties, that is a computed method of `Jets::Resource::Base`
|
|
17
|
+
def merged_properties
|
|
18
|
+
{
|
|
19
|
+
state: "ENABLED",
|
|
20
|
+
targets: [{
|
|
21
|
+
arn: "!GetAtt {namespace}LambdaFunction.Arn",
|
|
22
|
+
id: "{namespace}RuleTarget"
|
|
23
|
+
}]
|
|
24
|
+
}.deep_merge(@props)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def rule_logical_id
|
|
28
|
+
"{namespace}_events_rule"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
module Jets::Resource::Iam
|
|
2
|
+
autoload :BaseRoleDefinition, 'jets/resource/iam/base_role_definition'
|
|
3
|
+
autoload :ApplicationRole, 'jets/resource/iam/application_role'
|
|
4
|
+
autoload :ClassRole, 'jets/resource/iam/class_role'
|
|
5
|
+
autoload :FunctionRole, 'jets/resource/iam/function_role'
|
|
6
|
+
autoload :PolicyDocument, 'jets/resource/iam/policy_document'
|
|
7
|
+
autoload :ManagedPolicy, 'jets/resource/iam/managed_policy'
|
|
8
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Jets::Resource::Iam
|
|
2
|
+
class ApplicationRole < Jets::Resource::Base
|
|
3
|
+
include BaseRoleDefinition
|
|
4
|
+
|
|
5
|
+
def initialize
|
|
6
|
+
@policy_definitions = Jets.config.iam_policy # config.iam_policy contains definitions
|
|
7
|
+
@policy_definitions = @policy_definitions ? [@policy_definitions].flatten : []
|
|
8
|
+
|
|
9
|
+
@managed_policy_definitions = Jets.config.managed_iam_policy # config.managed_iam_policy contains definitions
|
|
10
|
+
@managed_policy_definitions = @managed_policy_definitions ? [@managed_policy_definitions].flatten : []
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def role_logical_id
|
|
14
|
+
"iam_role"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def policy_name
|
|
18
|
+
"#{Jets.config.project_namespace}-application-policy"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def outputs
|
|
22
|
+
{
|
|
23
|
+
logical_id => "!Ref #{logical_id}",
|
|
24
|
+
}
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
module Jets::Resource::Iam
|
|
2
|
+
module BaseRoleDefinition
|
|
3
|
+
attr_reader :policy_definitions, :managed_policy_definitions
|
|
4
|
+
|
|
5
|
+
def definition
|
|
6
|
+
logical_id = role_logical_id
|
|
7
|
+
|
|
8
|
+
# Do not assign pretty role_name because long controller names might hit the 64-char
|
|
9
|
+
# limit. Also, IAM roles are global, so assigning role names prevents cross region deploys.
|
|
10
|
+
definition = {
|
|
11
|
+
logical_id => {
|
|
12
|
+
type: "AWS::IAM::Role",
|
|
13
|
+
properties: {
|
|
14
|
+
path: "/",
|
|
15
|
+
assume_role_policy_document: {
|
|
16
|
+
version: "2012-10-17",
|
|
17
|
+
statement: [{
|
|
18
|
+
effect: "Allow",
|
|
19
|
+
principal: {service: ["lambda.amazonaws.com"]},
|
|
20
|
+
action: ["sts:AssumeRole"]}
|
|
21
|
+
]
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
definition[logical_id][:properties][:policies] = [
|
|
28
|
+
policy_name: "#{policy_name[0..127]}", # required, limited to 128-chars
|
|
29
|
+
policy_document: policy_document,
|
|
30
|
+
] unless policy_document['Statement'].empty?
|
|
31
|
+
|
|
32
|
+
unless managed_policy_arns.empty?
|
|
33
|
+
definition[logical_id][:properties][:managed_policy_arns] = managed_policy_arns
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
definition
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def policy_document
|
|
40
|
+
PolicyDocument.new(@policy_definitions.flatten.uniq).policy_document
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def managed_policy_arns
|
|
44
|
+
ManagedPolicy.new(@managed_policy_definitions.flatten.uniq).arns
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
module Jets::Resource::Iam
|
|
2
|
+
class ClassRole < Jets::Resource::Base
|
|
3
|
+
include BaseRoleDefinition
|
|
4
|
+
|
|
5
|
+
def initialize(app_class)
|
|
6
|
+
@app_class = app_class.to_s # IE: PostsController, HardJob, Hello, HelloFunction
|
|
7
|
+
@policy_definitions = lookup_iam_policies
|
|
8
|
+
@managed_policy_definitions = lookup_managed_iam_policies
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def role_logical_id
|
|
12
|
+
"{namespace}_iam_role".underscore
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def policy_name
|
|
16
|
+
class_namespace = replacements[:namespace].underscore.dasherize
|
|
17
|
+
"#{Jets.config.project_namespace}-#{class_namespace}-policy" # camelized because used as template value
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def replacements
|
|
21
|
+
{
|
|
22
|
+
namespace: @app_class.gsub('::','').camelize, # camelized because can be used as value
|
|
23
|
+
}
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def policy_document
|
|
27
|
+
# Handles precedence inheritance from the ApplicationRole to the ClassRole
|
|
28
|
+
@policy_definitions += application_role.policy_definitions if inherit?
|
|
29
|
+
super
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def managed_policy_arns
|
|
33
|
+
@managed_policy_definitions += application_role.managed_policy_definitions if inherit?
|
|
34
|
+
super
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# There are 2 types of inheritance: from superclasses and from higher precedence policies.
|
|
38
|
+
# This one manages the inheritance for higher precedence policies.
|
|
39
|
+
def inherit?
|
|
40
|
+
!@policy_definitions.empty? || !@managed_policy_definitions.empty?
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def application_role
|
|
44
|
+
Jets::Resource::Iam::ApplicationRole.new
|
|
45
|
+
end
|
|
46
|
+
memoize :application_role
|
|
47
|
+
|
|
48
|
+
# Accounts for inherited class_managed_iam_policy from superclasses
|
|
49
|
+
def lookup_managed_iam_policies
|
|
50
|
+
all_classes.map do |k|
|
|
51
|
+
k.class_managed_iam_policy # class_managed_iam_policy contains definitions
|
|
52
|
+
end.uniq
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Accounts for inherited class_iam_policies from superclasses
|
|
56
|
+
def lookup_iam_policies
|
|
57
|
+
all_classes.map do |k|
|
|
58
|
+
k.class_iam_policy # class_iam_policy contains definitions
|
|
59
|
+
end.uniq
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Class heirachry in top to down order
|
|
63
|
+
def all_classes
|
|
64
|
+
klass = @app_class.constantize
|
|
65
|
+
all_classes = []
|
|
66
|
+
while klass != Object
|
|
67
|
+
all_classes << klass
|
|
68
|
+
klass = klass.superclass
|
|
69
|
+
end
|
|
70
|
+
all_classes.reverse
|
|
71
|
+
end
|
|
72
|
+
memoize :all_classes
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
module Jets::Resource::Iam
|
|
2
|
+
class FunctionRole < Jets::Resource::Base
|
|
3
|
+
include BaseRoleDefinition
|
|
4
|
+
|
|
5
|
+
def initialize(task)
|
|
6
|
+
@task = task
|
|
7
|
+
@policy_definitions = task.iam_policy || [] # iam_policy contains policy definitions
|
|
8
|
+
@managed_policy_definitions = task.managed_iam_policy || [] # managed_iam_policy contains policy definitions
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def role_logical_id
|
|
12
|
+
"{namespace}_iam_role".underscore
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def policy_name
|
|
16
|
+
funcion_namespace = replacements[:namespace].underscore.dasherize
|
|
17
|
+
"#{Jets.config.project_namespace}-#{funcion_namespace}-policy" # camelized because used as template value
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def replacements
|
|
21
|
+
{
|
|
22
|
+
namespace: "#{@task.class_name.gsub('::','')}#{@task.meth.to_s.camelize}", # camelized because can be used as value
|
|
23
|
+
}
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def policy_document
|
|
27
|
+
if inherit?
|
|
28
|
+
@policy_definitions += class_role.policy_definitions + application_role.policy_definitions
|
|
29
|
+
end
|
|
30
|
+
super
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def managed_policy_arns
|
|
34
|
+
if inherit?
|
|
35
|
+
@managed_policy_definitions += class_role.managed_policy_definitions + application_role.managed_policy_definitions
|
|
36
|
+
end
|
|
37
|
+
super
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def inherit?
|
|
41
|
+
!@policy_definitions.empty? || !@managed_policy_definitions.empty?
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def class_role
|
|
45
|
+
Jets::Resource::Iam::ClassRole.new(@task.class_name.constantize)
|
|
46
|
+
end
|
|
47
|
+
memoize :class_role
|
|
48
|
+
|
|
49
|
+
def application_role
|
|
50
|
+
Jets::Resource::Iam::ApplicationRole.new
|
|
51
|
+
end
|
|
52
|
+
memoize :application_role
|
|
53
|
+
end
|
|
54
|
+
end
|