jets.benforeva 3.0.17.pre.mount.pre.fix
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/config.yml +92 -0
- data/.cody/README.md +13 -0
- data/.cody/docs/bin/build.sh +7 -0
- data/.cody/docs/bin/bundler_setup.sh +8 -0
- data/.cody/docs/bin/cli_docs.sh +6 -0
- data/.cody/docs/bin/git_commit.sh +27 -0
- data/.cody/docs/bin/git_setup.sh +12 -0
- data/.cody/docs/bin/subnav.sh +14 -0
- data/.cody/docs/buildspec.yml +10 -0
- data/.cody/docs/project.rb +10 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +84 -0
- data/.github/ISSUE_TEMPLATE/documentation.md +27 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +64 -0
- data/.github/ISSUE_TEMPLATE/question.md +14 -0
- data/.github/ISSUE_TEMPLATE.md +7 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +50 -0
- data/.gitignore +24 -0
- data/.gitmodules +0 -0
- data/.python-version +1 -0
- data/.rspec +4 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +1035 -0
- data/CONDUCT.md +1 -0
- data/CONTRIBUTING.md +1 -0
- data/Dockerfile +16 -0
- data/Dockerfile.base +53 -0
- data/Gemfile +14 -0
- data/Guardfile +22 -0
- data/LICENSE.txt +22 -0
- data/Procfile +2 -0
- data/README.md +212 -0
- data/Rakefile +24 -0
- data/backers.md +20 -0
- data/bin/release +9 -0
- data/exe/jets.benforeva +14 -0
- data/jets.benforeva.gemspec +71 -0
- data/lib/jets/application/defaults.rb +200 -0
- data/lib/jets/application.rb +240 -0
- data/lib/jets/authorizer/base.rb +36 -0
- data/lib/jets/authorizer/dsl.rb +69 -0
- data/lib/jets/authorizer/helpers/iam_helper.rb +47 -0
- data/lib/jets/autoloaders.rb +112 -0
- data/lib/jets/aws_info.rb +111 -0
- data/lib/jets/aws_services/global_memoist.rb +57 -0
- data/lib/jets/aws_services/s3_bucket.rb +34 -0
- data/lib/jets/aws_services/stack_status.rb +64 -0
- data/lib/jets/aws_services.rb +95 -0
- data/lib/jets/booter.rb +167 -0
- data/lib/jets/builders/code_builder.rb +410 -0
- data/lib/jets/builders/code_size.rb +57 -0
- data/lib/jets/builders/gem_replacer.rb +89 -0
- data/lib/jets/builders/handler_generator.rb +186 -0
- data/lib/jets/builders/lambda_layer.rb +68 -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/config/initializers/jets.rb +16 -0
- data/lib/jets/builders/reconfigure_rails.rb +114 -0
- data/lib/jets/builders/ruby_packager.rb +235 -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/bundle.rb +88 -0
- data/lib/jets/camelizer.rb +4 -0
- data/lib/jets/cfn/builders/api_deployment_builder.rb +56 -0
- data/lib/jets/cfn/builders/api_gateway_builder.rb +123 -0
- data/lib/jets/cfn/builders/api_resources_builder.rb +44 -0
- data/lib/jets/cfn/builders/authorizer_builder.rb +67 -0
- data/lib/jets/cfn/builders/base_child_builder.rb +69 -0
- data/lib/jets/cfn/builders/controller_builder.rb +50 -0
- data/lib/jets/cfn/builders/function_builder.rb +14 -0
- data/lib/jets/cfn/builders/interface.rb +133 -0
- data/lib/jets/cfn/builders/job_builder.rb +14 -0
- data/lib/jets/cfn/builders/parent_builder/stagger.rb +34 -0
- data/lib/jets/cfn/builders/parent_builder.rb +130 -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/builders/util/source.rb +21 -0
- data/lib/jets/cfn/built_template.rb +15 -0
- data/lib/jets/cfn/ship.rb +188 -0
- data/lib/jets/cfn/status.rb +10 -0
- data/lib/jets/cfn/template_source.rb +61 -0
- data/lib/jets/cfn/upload.rb +157 -0
- data/lib/jets/cli.rb +208 -0
- data/lib/jets/commands/base.rb +145 -0
- data/lib/jets/commands/build.rb +252 -0
- data/lib/jets/commands/call/anonymous_guesser.rb +96 -0
- data/lib/jets/commands/call/autoload_guesser.rb +136 -0
- data/lib/jets/commands/call/base_guesser.rb +62 -0
- data/lib/jets/commands/call/guesser.rb +48 -0
- data/lib/jets/commands/call.rb +182 -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 +111 -0
- data/lib/jets/commands/clean.rb +19 -0
- data/lib/jets/commands/configure.rb +51 -0
- data/lib/jets/commands/console.rb +12 -0
- data/lib/jets/commands/db/environment-task.rake +3 -0
- data/lib/jets/commands/db/tasks/dummy/app.rb +25 -0
- data/lib/jets/commands/db/tasks/dummy/config.rb +14 -0
- data/lib/jets/commands/db/tasks.rb +34 -0
- data/lib/jets/commands/db.rb +13 -0
- data/lib/jets/commands/dbconsole.rb +134 -0
- data/lib/jets/commands/delete.rb +136 -0
- data/lib/jets/commands/deploy.rb +137 -0
- data/lib/jets/commands/dotenv.rb +9 -0
- data/lib/jets/commands/dynamodb/migrate.rb +9 -0
- data/lib/jets/commands/dynamodb/migrator.rb +36 -0
- data/lib/jets/commands/dynamodb.rb +19 -0
- data/lib/jets/commands/gems.rb +13 -0
- data/lib/jets/commands/help/build.md +6 -0
- data/lib/jets/commands/help/call.md +69 -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/degenerate.md +16 -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 +6 -0
- data/lib/jets/commands/help/generate.md +28 -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 +7 -0
- data/lib/jets/commands/help/url.md +6 -0
- data/lib/jets/commands/help.rb +9 -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/rails.rb +74 -0
- data/lib/jets/commands/import/sequence.rb +90 -0
- data/lib/jets/commands/import/templates/config/database.yml +30 -0
- data/lib/jets/commands/import/templates/submodules-cheatsheet.md +89 -0
- data/lib/jets/commands/import.rb +12 -0
- data/lib/jets/commands/main.rb +166 -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 +173 -0
- data/lib/jets/commands/rake_command.rb +61 -0
- data/lib/jets/commands/rake_tasks.rb +50 -0
- data/lib/jets/commands/runner.rb +16 -0
- data/lib/jets/commands/sequence.rb +105 -0
- data/lib/jets/commands/stack_info.rb +30 -0
- data/lib/jets/commands/templates/skeleton/.env.development.tt +3 -0
- data/lib/jets/commands/templates/skeleton/.env.test +3 -0
- data/lib/jets/commands/templates/skeleton/.env.tt +3 -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 +39 -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 +26 -0
- data/lib/jets/commands/templates/skeleton/config/application.rb.tt +71 -0
- data/lib/jets/commands/templates/skeleton/config/database.yml.tt +27 -0
- data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +22 -0
- data/lib/jets/commands/templates/skeleton/config/environments/development.rb +7 -0
- data/lib/jets/commands/templates/skeleton/config/environments/production.rb +9 -0
- data/lib/jets/commands/templates/skeleton/config/environments/test.rb +7 -0
- data/lib/jets/commands/templates/skeleton/config/routes.rb +9 -0
- data/lib/jets/commands/templates/skeleton/config.ru +5 -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 +23 -0
- data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +24 -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/upgrade/version1.rb +136 -0
- data/lib/jets/commands/upgrade.rb +105 -0
- data/lib/jets/commands/url.rb +69 -0
- data/lib/jets/commands/webpacker_template.rb +18 -0
- data/lib/jets/controller/authorization.rb +91 -0
- data/lib/jets/controller/base.rb +175 -0
- data/lib/jets/controller/callbacks.rb +73 -0
- data/lib/jets/controller/cookies/jar.rb +269 -0
- data/lib/jets/controller/cookies.rb +38 -0
- data/lib/jets/controller/error/invalid_authenticity_token.rb +6 -0
- data/lib/jets/controller/error.rb +4 -0
- data/lib/jets/controller/forgery_protection.rb +43 -0
- data/lib/jets/controller/layout.rb +17 -0
- data/lib/jets/controller/middleware/cors.rb +60 -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 +22 -0
- data/lib/jets/controller/middleware/local.rb +120 -0
- data/lib/jets/controller/middleware/main.rb +53 -0
- data/lib/jets/controller/middleware/reloader.rb +15 -0
- data/lib/jets/controller/middleware/webpacker_setup.rb +6 -0
- data/lib/jets/controller/parameters_filter.rb +29 -0
- data/lib/jets/controller/params.rb +117 -0
- data/lib/jets/controller/rack/adapter.rb +94 -0
- data/lib/jets/controller/rack/env.rb +122 -0
- data/lib/jets/controller/redirection.rb +51 -0
- data/lib/jets/controller/rendering/rack_renderer.rb +267 -0
- data/lib/jets/controller/rendering.rb +96 -0
- data/lib/jets/controller/request.rb +29 -0
- data/lib/jets/controller/response.rb +61 -0
- data/lib/jets/controller/stage.rb +34 -0
- data/lib/jets/controller.rb +3 -0
- data/lib/jets/core.rb +157 -0
- data/lib/jets/core_ext/bundler.rb +7 -0
- data/lib/jets/core_ext/kernel.rb +13 -0
- data/lib/jets/db.rb +15 -0
- data/lib/jets/dotenv/show.rb +11 -0
- data/lib/jets/dotenv/ssm.rb +64 -0
- data/lib/jets/dotenv.rb +48 -0
- data/lib/jets/erb.rb +51 -0
- data/lib/jets/generator/templates/active_job/job/templates/application_job.rb.tt +6 -0
- data/lib/jets/generator/templates/active_job/job/templates/job.rb.tt +8 -0
- data/lib/jets/generator/templates/erb/controller/view.html.erb +2 -0
- data/lib/jets/generator/templates/erb/scaffold/_form.html.erb +34 -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/generator.rb +112 -0
- data/lib/jets/inflections.rb +32 -0
- data/lib/jets/internal/app/controllers/jets/bare_controller.rb +16 -0
- data/lib/jets/internal/app/controllers/jets/mailers_controller.rb +97 -0
- data/lib/jets/internal/app/controllers/jets/mount_controller.rb +63 -0
- data/lib/jets/internal/app/controllers/jets/public_controller.rb +31 -0
- data/lib/jets/internal/app/controllers/jets/rack_controller.rb +12 -0
- data/lib/jets/internal/app/functions/jets/base_path.rb +18 -0
- data/lib/jets/internal/app/functions/jets/base_path_mapping.rb +100 -0
- data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +9 -0
- data/lib/jets/internal/app/jobs/jets/preheat_job.rb +70 -0
- data/lib/jets/internal/app/shared/functions/jets/s3_bucket_config.rb +33 -0
- data/lib/jets/internal/app/views/jets/mailers/email.html.erb +145 -0
- data/lib/jets/internal/app/views/jets/mailers/index.html.erb +8 -0
- data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +6 -0
- data/lib/jets/internal/turbines/jets/mailer.rb +52 -0
- data/lib/jets/job/base.rb +49 -0
- data/lib/jets/job/dsl/dynamodb_event.rb +67 -0
- data/lib/jets/job/dsl/event_source_mapping.rb +11 -0
- data/lib/jets/job/dsl/iot_event.rb +24 -0
- data/lib/jets/job/dsl/kinesis_event.rb +46 -0
- data/lib/jets/job/dsl/log_event.rb +15 -0
- data/lib/jets/job/dsl/rule_event.rb +75 -0
- data/lib/jets/job/dsl/s3_event.rb +36 -0
- data/lib/jets/job/dsl/sns_event.rb +54 -0
- data/lib/jets/job/dsl/sqs_event.rb +96 -0
- data/lib/jets/job/dsl.rb +40 -0
- data/lib/jets/job/helpers/kinesis_event_helper.rb +13 -0
- data/lib/jets/job/helpers/log_event_helper.rb +17 -0
- data/lib/jets/job/helpers/s3_event_helper.rb +13 -0
- data/lib/jets/klass.rb +109 -0
- data/lib/jets/lambda/dsl.rb +404 -0
- data/lib/jets/lambda/function.rb +29 -0
- data/lib/jets/lambda/function_constructor.rb +55 -0
- data/lib/jets/lambda/functions.rb +39 -0
- data/lib/jets/lambda/task.rb +111 -0
- data/lib/jets/logger.rb +21 -0
- data/lib/jets/mega/hash_converter.rb +25 -0
- data/lib/jets/mega/request/source.rb +21 -0
- data/lib/jets/mega/request.rb +163 -0
- data/lib/jets/middleware/configurator.rb +84 -0
- data/lib/jets/middleware/default_stack.rb +53 -0
- data/lib/jets/middleware/layer.rb +34 -0
- data/lib/jets/middleware/stack.rb +77 -0
- data/lib/jets/middleware.rb +33 -0
- data/lib/jets/naming.rb +63 -0
- data/lib/jets/overrides/lambda/marshaller.rb +31 -0
- data/lib/jets/overrides/lambda.rb +1 -0
- data/lib/jets/overrides/rails/action_controller.rb +13 -0
- data/lib/jets/overrides/rails/asset_tag_helper.rb +114 -0
- data/lib/jets/overrides/rails/common_methods.rb +13 -0
- data/lib/jets/overrides/rails/migration_checker.rb +34 -0
- data/lib/jets/overrides/rails/rendering_helper.rb +27 -0
- data/lib/jets/overrides/rails/url_helper.rb +88 -0
- data/lib/jets/overrides/rails.rb +6 -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/poly_fun.rb +73 -0
- data/lib/jets/preheat.rb +117 -0
- data/lib/jets/processors/deducer.rb +65 -0
- data/lib/jets/processors/main_processor.rb +61 -0
- data/lib/jets/rack_server.rb +86 -0
- data/lib/jets/rdoc.rb +30 -0
- data/lib/jets/resource/api_gateway/authorizer.rb +82 -0
- data/lib/jets/resource/api_gateway/base_path/function.rb +49 -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 +80 -0
- data/lib/jets/resource/api_gateway/domain_name.rb +65 -0
- data/lib/jets/resource/api_gateway/method/authorization.rb +41 -0
- data/lib/jets/resource/api_gateway/method.rb +102 -0
- data/lib/jets/resource/api_gateway/resource.rb +82 -0
- data/lib/jets/resource/api_gateway/rest_api/change_detection.rb +10 -0
- data/lib/jets/resource/api_gateway/rest_api/logical_id/message.rb +49 -0
- data/lib/jets/resource/api_gateway/rest_api/logical_id.rb +98 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/base.rb +136 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/media_types.rb +36 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/page.rb +93 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/to.rb +25 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/variable.rb +35 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +16 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/collision/variable_exception.rb +7 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/collision.rb +121 -0
- data/lib/jets/resource/api_gateway/rest_api/routes.rb +7 -0
- data/lib/jets/resource/api_gateway/rest_api.rb +64 -0
- data/lib/jets/resource/associated.rb +37 -0
- data/lib/jets/resource/base.rb +28 -0
- data/lib/jets/resource/child_stack/api_deployment.rb +58 -0
- data/lib/jets/resource/child_stack/api_gateway.rb +23 -0
- data/lib/jets/resource/child_stack/api_resource/page.rb +20 -0
- data/lib/jets/resource/child_stack/api_resource.rb +54 -0
- data/lib/jets/resource/child_stack/app_class.rb +149 -0
- data/lib/jets/resource/child_stack/authorizer.rb +40 -0
- data/lib/jets/resource/child_stack/base.rb +24 -0
- data/lib/jets/resource/child_stack/common_parameters.rb +14 -0
- data/lib/jets/resource/child_stack/shared.rb +85 -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/rule.rb +31 -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/iot/topic_rule.rb +34 -0
- data/lib/jets/resource/lambda/event_source_mapping.rb +31 -0
- data/lib/jets/resource/lambda/function/environment.rb +62 -0
- data/lib/jets/resource/lambda/function.rb +221 -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/logs/subscription_filter.rb +31 -0
- data/lib/jets/resource/permission.rb +45 -0
- data/lib/jets/resource/replacer.rb +85 -0
- data/lib/jets/resource/route53/record_set.rb +98 -0
- data/lib/jets/resource/s3/bucket.rb +24 -0
- data/lib/jets/resource/sns/subscription.rb +29 -0
- data/lib/jets/resource/sns/topic.rb +35 -0
- data/lib/jets/resource/sns/topic_policy.rb +40 -0
- data/lib/jets/resource/sqs/queue.rb +21 -0
- data/lib/jets/resource/standardizer.rb +42 -0
- data/lib/jets/resource.rb +71 -0
- data/lib/jets/router/dsl/mount.rb +13 -0
- data/lib/jets/router/dsl.rb +144 -0
- data/lib/jets/router/error.rb +4 -0
- data/lib/jets/router/finder.rb +47 -0
- data/lib/jets/router/helpers/core_helper.rb +27 -0
- data/lib/jets/router/helpers/named_routes_helper.rb +8 -0
- data/lib/jets/router/helpers.rb +4 -0
- data/lib/jets/router/matcher.rb +81 -0
- data/lib/jets/router/method_creator/code.rb +99 -0
- data/lib/jets/router/method_creator/edit.rb +12 -0
- data/lib/jets/router/method_creator/generic.rb +11 -0
- data/lib/jets/router/method_creator/index.rb +48 -0
- data/lib/jets/router/method_creator/new.rb +12 -0
- data/lib/jets/router/method_creator/root.rb +15 -0
- data/lib/jets/router/method_creator/show.rb +12 -0
- data/lib/jets/router/method_creator.rb +50 -0
- data/lib/jets/router/resources/base.rb +7 -0
- data/lib/jets/router/resources/filter.rb +15 -0
- data/lib/jets/router/resources/options.rb +13 -0
- data/lib/jets/router/route/authorizer.rb +57 -0
- data/lib/jets/router/route.rb +230 -0
- data/lib/jets/router/scope.rb +95 -0
- data/lib/jets/router/util.rb +38 -0
- data/lib/jets/router.rb +180 -0
- data/lib/jets/rule/base.rb +19 -0
- data/lib/jets/rule/dsl.rb +109 -0
- data/lib/jets/spec_helpers/controllers/params.rb +8 -0
- data/lib/jets/spec_helpers/controllers/request.rb +101 -0
- data/lib/jets/spec_helpers/controllers/response.rb +10 -0
- data/lib/jets/spec_helpers/controllers.rb +47 -0
- data/lib/jets/spec_helpers/fixtures.rb +11 -0
- data/lib/jets/spec_helpers.rb +21 -0
- data/lib/jets/stack/builder.rb +43 -0
- data/lib/jets/stack/definition.rb +50 -0
- data/lib/jets/stack/depends/item.rb +26 -0
- data/lib/jets/stack/depends.rb +34 -0
- data/lib/jets/stack/function.rb +69 -0
- data/lib/jets/stack/main/dsl/base.rb +63 -0
- data/lib/jets/stack/main/dsl/cloudwatch.rb +19 -0
- data/lib/jets/stack/main/dsl/iam.rb +8 -0
- data/lib/jets/stack/main/dsl/kinesis.rb +15 -0
- data/lib/jets/stack/main/dsl/lambda.rb +83 -0
- data/lib/jets/stack/main/dsl/s3.rb +12 -0
- data/lib/jets/stack/main/dsl/sns.rb +16 -0
- data/lib/jets/stack/main/dsl/sqs.rb +10 -0
- data/lib/jets/stack/main/dsl.rb +17 -0
- data/lib/jets/stack/main.rb +4 -0
- data/lib/jets/stack/output/dsl.rb +19 -0
- data/lib/jets/stack/output/lookup.rb +36 -0
- data/lib/jets/stack/output.rb +35 -0
- data/lib/jets/stack/parameter/dsl.rb +42 -0
- data/lib/jets/stack/parameter.rb +37 -0
- data/lib/jets/stack/resource/dsl.rb +19 -0
- data/lib/jets/stack/resource.rb +31 -0
- data/lib/jets/stack/s3_event.rb +87 -0
- data/lib/jets/stack.rb +88 -0
- data/lib/jets/tmp_loader.rb +53 -0
- data/lib/jets/turbine.rb +41 -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/application.rb +5 -0
- data/lib/jets/turbo/project/config/routes.rb +4 -0
- data/lib/jets/turbo/project/config.ru +5 -0
- data/lib/jets/turbo/rails.rb +127 -0
- data/lib/jets/turbo/templates/config/database.yml +30 -0
- data/lib/jets/turbo.rb +56 -0
- data/lib/jets/util.rb +40 -0
- data/lib/jets/version.rb +3 -0
- data/lib/jets.rb +31 -0
- data/readme/prerelease.md +6 -0
- data/readme/testing.md +60 -0
- metadata +1105 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Implements:
|
|
2
|
+
#
|
|
3
|
+
# definition
|
|
4
|
+
# template_filename
|
|
5
|
+
#
|
|
6
|
+
module Jets::Resource::ChildStack
|
|
7
|
+
class Shared < AppClass
|
|
8
|
+
include CommonParameters
|
|
9
|
+
|
|
10
|
+
def initialize(s3_bucket, options={})
|
|
11
|
+
super
|
|
12
|
+
@path = options[:path]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def definition
|
|
16
|
+
logical_id = shared_logical_id
|
|
17
|
+
definition = {
|
|
18
|
+
logical_id => {
|
|
19
|
+
type: "AWS::CloudFormation::Stack",
|
|
20
|
+
properties: child_properties
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
definition[logical_id][:depends_on] = depends_on if depends_on
|
|
24
|
+
definition
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def child_properties
|
|
28
|
+
props = {
|
|
29
|
+
template_url: template_url,
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
props[:parameters] = common_parameters # common child parameters
|
|
33
|
+
# add depends on parameters
|
|
34
|
+
depends_on.each do |dependency|
|
|
35
|
+
dependency_outputs(dependency).each do |output|
|
|
36
|
+
dependency_class = dependency.to_s.camelize
|
|
37
|
+
props[:parameters][output] = "!GetAtt #{dependency_class}.Outputs.#{output}"
|
|
38
|
+
end
|
|
39
|
+
end if depends_on
|
|
40
|
+
|
|
41
|
+
props
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Returns output keys associated with the stack. They are the resource logical ids.
|
|
45
|
+
def dependency_outputs(dependency)
|
|
46
|
+
dependency.to_s.camelize.constantize.output_keys
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def depends_on
|
|
50
|
+
return unless current_shared_class.depends_on
|
|
51
|
+
current_shared_class.depends_on.map { |x| x.to_s.camelize }
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# map the path to a camelized logical_id. Example:
|
|
55
|
+
# /tmp/jets/demo/templates/demo-dev-2-shared-resources.yml to
|
|
56
|
+
# PostsController
|
|
57
|
+
def shared_logical_id
|
|
58
|
+
regexp = Regexp.new(".*#{Jets.config.project_namespace}-shared-") # remove the shared
|
|
59
|
+
shared_name = @path.sub(regexp, '').sub('.yml', '')
|
|
60
|
+
shared_name.underscore.camelize
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# IE: app/resource.rb => Resource
|
|
64
|
+
# Returns Resource class object in the example
|
|
65
|
+
def current_shared_class
|
|
66
|
+
templates_prefix = "#{Jets::Naming.template_path_prefix}-shared-"
|
|
67
|
+
@path.sub(templates_prefix, '')
|
|
68
|
+
.sub(/\.yml$/,'')
|
|
69
|
+
.gsub('-','/')
|
|
70
|
+
.camelize
|
|
71
|
+
.constantize # returns actual class
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Tells us if there are any resources defined in the shared class.
|
|
75
|
+
#
|
|
76
|
+
# Returns: Boolean
|
|
77
|
+
def resources?
|
|
78
|
+
current_shared_class.build?
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def template_filename
|
|
82
|
+
"#{Jets.config.project_namespace}-shared-#{current_shared_class.to_s.underscore}.yml"
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
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,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
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module Jets::Resource::Iam
|
|
2
|
+
class ManagedPolicy
|
|
3
|
+
extend Memoist
|
|
4
|
+
|
|
5
|
+
attr_reader :definitions
|
|
6
|
+
def initialize(*definitions)
|
|
7
|
+
@definitions = definitions.flatten.compact
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def arns
|
|
11
|
+
definitions.map { |definition| standardize(definition) }
|
|
12
|
+
end
|
|
13
|
+
memoize :arns # only process arns once
|
|
14
|
+
|
|
15
|
+
# AmazonEC2ReadOnlyAccess => arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess
|
|
16
|
+
def standardize(definition)
|
|
17
|
+
return definition if definition.include?('iam::aws:policy')
|
|
18
|
+
|
|
19
|
+
"arn:aws:iam::aws:policy/#{definition}"
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Jets::Resource::Iam
|
|
2
|
+
class PolicyDocument
|
|
3
|
+
extend Memoist
|
|
4
|
+
|
|
5
|
+
attr_reader :definitions
|
|
6
|
+
def initialize(*definitions)
|
|
7
|
+
@definitions = definitions.flatten
|
|
8
|
+
# empty starting policy that will be altered
|
|
9
|
+
@policy = {
|
|
10
|
+
version: "2012-10-17",
|
|
11
|
+
statement: []
|
|
12
|
+
}
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def policy_document
|
|
16
|
+
definitions.map { |definition| standardize(definition) }
|
|
17
|
+
Jets::Camelizer.transform(@policy)
|
|
18
|
+
end
|
|
19
|
+
memoize :policy_document # only process policy_document once
|
|
20
|
+
|
|
21
|
+
def standardize(definition)
|
|
22
|
+
case definition
|
|
23
|
+
when String
|
|
24
|
+
# Expands simple string from: logs => logs:*
|
|
25
|
+
definition = "#{definition}:*" unless definition.include?(':')
|
|
26
|
+
@policy[:statement] << {
|
|
27
|
+
action: [definition],
|
|
28
|
+
effect: "Allow",
|
|
29
|
+
resource: "*",
|
|
30
|
+
}
|
|
31
|
+
when Hash
|
|
32
|
+
definition = definition.stringify_keys
|
|
33
|
+
if definition.key?("Version") # special case where we replace the policy entirely
|
|
34
|
+
@policy = definition
|
|
35
|
+
else
|
|
36
|
+
@policy[:statement] << definition
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# CloudFormation AWS::IoT::TopicRule docs: https://amzn.to/2SMBOVm
|
|
2
|
+
module Jets::Resource::Iot
|
|
3
|
+
class TopicRule < Jets::Resource::Base
|
|
4
|
+
def initialize(props={})
|
|
5
|
+
@props = props # associated_properties from dsl.rb
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def definition
|
|
9
|
+
{
|
|
10
|
+
topic_logical_id => {
|
|
11
|
+
type: "AWS::IoT::TopicRule",
|
|
12
|
+
properties: merged_properties,
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Do not name this method properties, that is a computed method of `Jets::Resource::Base`
|
|
18
|
+
def merged_properties
|
|
19
|
+
{
|
|
20
|
+
# required properties
|
|
21
|
+
topic_rule_payload: {
|
|
22
|
+
actions: [{
|
|
23
|
+
lambda: { function_arn: "!GetAtt {namespace}LambdaFunction.Arn" }
|
|
24
|
+
}],
|
|
25
|
+
rule_disabled: 'true',
|
|
26
|
+
}
|
|
27
|
+
}.deep_merge(@props)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def topic_logical_id
|
|
31
|
+
"{namespace}_iot_topic_rule"
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Note the Lambda function timeout must be less than or equal to the sqs queue default timeout.
|
|
2
|
+
module Jets::Resource::Lambda
|
|
3
|
+
class EventSourceMapping < Jets::Resource::Base
|
|
4
|
+
def initialize(props={})
|
|
5
|
+
@props = props # associated_properties from dsl.rb
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def definition
|
|
9
|
+
# CloudFormation Docs: https://amzn.to/2WM6165
|
|
10
|
+
properties = {
|
|
11
|
+
# batch_size: 10, # Defaults: Kinesis 100, DynamoDB Streams: 100, SQS: 10
|
|
12
|
+
# enabled: boolean,
|
|
13
|
+
# event_source_arn: string, # required
|
|
14
|
+
function_name: "!Ref {namespace}LambdaFunction",
|
|
15
|
+
# starting_position: string # reqiured for Required for Amazon Kinesis and Amazon DynamoDB Streams sources
|
|
16
|
+
}
|
|
17
|
+
properties.merge!(@props)
|
|
18
|
+
|
|
19
|
+
{
|
|
20
|
+
event_source_mapping_logical_id => {
|
|
21
|
+
type: "AWS::Lambda::EventSourceMapping",
|
|
22
|
+
properties: properties
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def event_source_mapping_logical_id
|
|
28
|
+
"{namespace}EventSourceMapping"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
class Jets::Resource::Lambda::Function
|
|
2
|
+
module Environment
|
|
3
|
+
def env_properties
|
|
4
|
+
env_vars = Jets::Dotenv.load!(true)
|
|
5
|
+
variables = environment.merge(env_vars)
|
|
6
|
+
check_reserved_variables!(variables)
|
|
7
|
+
{environment: { variables: variables }}
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def environment
|
|
11
|
+
env = Jets.config.environment ? Jets.config.environment.to_h : {}
|
|
12
|
+
env.deep_merge(jets_env)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# These jets env variables are special variables that get included to keeps some state
|
|
16
|
+
def jets_env
|
|
17
|
+
env = {}
|
|
18
|
+
env[:JETS_ENV] = Jets.env.to_s
|
|
19
|
+
env[:JETS_ENV_EXTRA] = Jets.config.env_extra if Jets.config.env_extra
|
|
20
|
+
env[:JETS_PROJECT_NAME] = ENV['JETS_PROJECT_NAME'] if ENV['JETS_PROJECT_NAME']
|
|
21
|
+
env[:JETS_STAGE] = Jets::Resource::ApiGateway::Deployment.stage_name
|
|
22
|
+
env[:JETS_AWS_ACCOUNT] = Jets.aws.account
|
|
23
|
+
env
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
def check_reserved_variables!(variables)
|
|
28
|
+
found_reserved_vars = variables.keys & reserved_variables
|
|
29
|
+
return if found_reserved_vars.empty?
|
|
30
|
+
|
|
31
|
+
puts "You have configured some environment variables that are reserved by AWS Lambda.".color(:red)
|
|
32
|
+
puts found_reserved_vars
|
|
33
|
+
puts "The deployment to AWS Lambda will failed when using reserved variables."
|
|
34
|
+
puts "Please remove these reserved variables. "
|
|
35
|
+
puts "More info: https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html#lambda-environment-variables"
|
|
36
|
+
exit 1
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html#lambda-environment-variables
|
|
40
|
+
def reserved_variables
|
|
41
|
+
%w[
|
|
42
|
+
_HANDLER
|
|
43
|
+
AWS_REGION
|
|
44
|
+
AWS_EXECUTION_ENV
|
|
45
|
+
AWS_LAMBDA_FUNCTION_NAME
|
|
46
|
+
AWS_LAMBDA_FUNCTION_MEMORY_SIZE
|
|
47
|
+
AWS_LAMBDA_FUNCTION_VERSION
|
|
48
|
+
AWS_LAMBDA_LOG_GROUP_NAME
|
|
49
|
+
AWS_LAMBDA_LOG_STREAM_NAME
|
|
50
|
+
AWS_ACCESS_KEY_ID
|
|
51
|
+
AWS_SECRET_ACCESS_KEY
|
|
52
|
+
AWS_SESSION_TOKEN
|
|
53
|
+
TZ
|
|
54
|
+
LAMBDA_TASK_ROOT
|
|
55
|
+
LAMBDA_RUNTIME_DIR
|
|
56
|
+
AWS_LAMBDA_RUNTIME_API
|
|
57
|
+
]
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
end
|
|
62
|
+
end
|