jets_bb_fork 0.0.4
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 +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 +16 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +42 -0
- data/.gitignore +24 -0
- data/.gitmodules +0 -0
- data/.python-version +1 -0
- data/.rspec +4 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +734 -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 +203 -0
- data/Rakefile +24 -0
- data/backers.md +16 -0
- data/bin/release +9 -0
- data/buildspec.yml +18 -0
- data/exe/jets_bb_fork +14 -0
- data/jets.gemspec +68 -0
- data/lib/jets.rb +27 -0
- data/lib/jets/application.rb +216 -0
- data/lib/jets/application/defaults.rb +172 -0
- data/lib/jets/autoloaders.rb +97 -0
- data/lib/jets/aws_info.rb +113 -0
- data/lib/jets/aws_services.rb +65 -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 +59 -0
- data/lib/jets/booter.rb +119 -0
- data/lib/jets/builders/code_builder.rb +399 -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 +186 -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/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 +82 -0
- data/lib/jets/camelizer.rb +71 -0
- data/lib/jets/cfn/builders/api_deployment_builder.rb +63 -0
- data/lib/jets/cfn/builders/api_gateway_builder.rb +157 -0
- data/lib/jets/cfn/builders/base_child_builder.rb +75 -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 +137 -0
- data/lib/jets/cfn/builders/job_builder.rb +14 -0
- data/lib/jets/cfn/builders/paged.rb +37 -0
- data/lib/jets/cfn/builders/parent_builder.rb +100 -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 +185 -0
- data/lib/jets/cfn/status.rb +212 -0
- data/lib/jets/cfn/upload.rb +139 -0
- data/lib/jets/cli.rb +194 -0
- data/lib/jets/commands/base.rb +146 -0
- data/lib/jets/commands/build.rb +234 -0
- data/lib/jets/commands/call.rb +169 -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 +60 -0
- data/lib/jets/commands/call/guesser.rb +48 -0
- data/lib/jets/commands/clean.rb +19 -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 +12 -0
- data/lib/jets/commands/db.rb +13 -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 +141 -0
- data/lib/jets/commands/dynamodb.rb +19 -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/destroy.md +16 -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 +12 -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 +26 -0
- data/lib/jets/commands/import/templates/submodules-cheatsheet.md +89 -0
- data/lib/jets/commands/main.rb +157 -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 +46 -0
- data/lib/jets/commands/runner.rb +16 -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 +38 -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 +67 -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 +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/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 +145 -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 +3 -0
- data/lib/jets/controller/base.rb +108 -0
- data/lib/jets/controller/callbacks.rb +68 -0
- data/lib/jets/controller/cookies.rb +38 -0
- data/lib/jets/controller/cookies/jar.rb +269 -0
- data/lib/jets/controller/layout.rb +17 -0
- data/lib/jets/controller/middleware/cors.rb +60 -0
- data/lib/jets/controller/middleware/local.rb +116 -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 +106 -0
- data/lib/jets/controller/middleware/main.rb +46 -0
- data/lib/jets/controller/middleware/reloader.rb +15 -0
- data/lib/jets/controller/middleware/webpacker_setup.rb +6 -0
- data/lib/jets/controller/params.rb +87 -0
- data/lib/jets/controller/rack/adapter.rb +88 -0
- data/lib/jets/controller/rack/env.rb +105 -0
- data/lib/jets/controller/redirection.rb +55 -0
- data/lib/jets/controller/rendering.rb +79 -0
- data/lib/jets/controller/rendering/rack_renderer.rb +250 -0
- data/lib/jets/controller/request.rb +29 -0
- data/lib/jets/controller/response.rb +61 -0
- data/lib/jets/controller/stage.rb +33 -0
- data/lib/jets/core.rb +149 -0
- data/lib/jets/core_ext/kernel.rb +13 -0
- data/lib/jets/db.rb +15 -0
- data/lib/jets/dotenv.rb +48 -0
- data/lib/jets/dotenv/ssm.rb +48 -0
- data/lib/jets/erb.rb +51 -0
- data/lib/jets/generator.rb +48 -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/mailers_controller.rb +97 -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 +157 -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 +43 -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 +51 -0
- data/lib/jets/job/base.rb +39 -0
- data/lib/jets/job/dsl.rb +40 -0
- data/lib/jets/job/dsl/dynamodb_event.rb +65 -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/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 +419 -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 +21 -0
- data/lib/jets/mega/hash_converter.rb +25 -0
- data/lib/jets/mega/request.rb +139 -0
- data/lib/jets/mega/request/source.rb +21 -0
- data/lib/jets/middleware.rb +33 -0
- data/lib/jets/middleware/configurator.rb +84 -0
- data/lib/jets/middleware/default_stack.rb +51 -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 +13 -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 +73 -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/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.rb +71 -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 +101 -0
- data/lib/jets/resource/api_gateway/rest_api.rb +56 -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 +7 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +8 -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 +121 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/collision/variable_exception.rb +7 -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 +56 -0
- data/lib/jets/resource/child_stack/api_gateway.rb +53 -0
- data/lib/jets/resource/child_stack/app_class.rb +107 -0
- data/lib/jets/resource/child_stack/base.rb +24 -0
- data/lib/jets/resource/child_stack/shared.rb +92 -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.rb +214 -0
- data/lib/jets/resource/lambda/function/environment.rb +62 -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 +70 -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/route.rb +166 -0
- data/lib/jets/router.rb +177 -0
- data/lib/jets/router/scope.rb +30 -0
- data/lib/jets/rule/base.rb +19 -0
- data/lib/jets/rule/dsl.rb +110 -0
- data/lib/jets/spec_helpers.rb +54 -0
- data/lib/jets/spec_helpers/params.rb +10 -0
- data/lib/jets/spec_helpers/request.rb +78 -0
- data/lib/jets/spec_helpers/response.rb +5 -0
- data/lib/jets/stack.rb +88 -0
- data/lib/jets/stack/builder.rb +43 -0
- data/lib/jets/stack/definition.rb +50 -0
- data/lib/jets/stack/depends.rb +34 -0
- data/lib/jets/stack/depends/item.rb +9 -0
- data/lib/jets/stack/function.rb +69 -0
- data/lib/jets/stack/main.rb +4 -0
- data/lib/jets/stack/main/dsl.rb +28 -0
- data/lib/jets/stack/main/dsl/base.rb +49 -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/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/output.rb +35 -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 +37 -0
- data/lib/jets/stack/parameter/dsl.rb +42 -0
- data/lib/jets/stack/resource.rb +31 -0
- data/lib/jets/stack/resource/dsl.rb +19 -0
- data/lib/jets/stack/s3_event.rb +87 -0
- data/lib/jets/tmp_loader.rb +52 -0
- data/lib/jets/turbine.rb +41 -0
- data/lib/jets/turbo.rb +55 -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/rails.rb +127 -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 +1004 -0
|
@@ -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,214 @@
|
|
|
1
|
+
module Jets::Resource::Lambda
|
|
2
|
+
class Function < Jets::Resource::Base
|
|
3
|
+
include Environment
|
|
4
|
+
|
|
5
|
+
def initialize(task)
|
|
6
|
+
@task = task
|
|
7
|
+
@app_class = task.class_name.to_s
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def definition
|
|
11
|
+
{
|
|
12
|
+
function_logical_id => {
|
|
13
|
+
type: "AWS::Lambda::Function",
|
|
14
|
+
properties: combined_properties
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def function_logical_id
|
|
20
|
+
"{namespace}_lambda_function".underscore
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def replacements
|
|
24
|
+
@task.replacements # has namespace replacement
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def combined_properties
|
|
28
|
+
props = env_properties
|
|
29
|
+
.deep_merge(global_properties)
|
|
30
|
+
.deep_merge(class_properties)
|
|
31
|
+
.deep_merge(function_properties)
|
|
32
|
+
finalize_properties!(props)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Global properties example:
|
|
36
|
+
# jets defaults are in jets/default/application.rb.
|
|
37
|
+
# Your application's default config/application.rb then get used. Example:
|
|
38
|
+
#
|
|
39
|
+
# Jets.application.configure do
|
|
40
|
+
# config.function = ActiveSupport::OrderedOptions.new
|
|
41
|
+
# config.function.timeout = 30
|
|
42
|
+
# config.function.runtime = "nodejs8.10"
|
|
43
|
+
# config.function.memory_size = 1536
|
|
44
|
+
# end
|
|
45
|
+
def global_properties
|
|
46
|
+
baseline = {
|
|
47
|
+
code: {
|
|
48
|
+
s3_bucket: "!Ref S3Bucket",
|
|
49
|
+
s3_key: code_s3_key
|
|
50
|
+
},
|
|
51
|
+
role: "!Ref IamRole",
|
|
52
|
+
environment: { variables: environment },
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
appplication_config = Jets.application.config.function.to_h
|
|
56
|
+
baseline.merge(appplication_config)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Class properties example:
|
|
60
|
+
#
|
|
61
|
+
# class PostsController < ApplicationController
|
|
62
|
+
# class_timeout 22
|
|
63
|
+
# ...
|
|
64
|
+
# end
|
|
65
|
+
#
|
|
66
|
+
# Also handles iam policy override at the class level. Example:
|
|
67
|
+
#
|
|
68
|
+
# class_iam_policy("logs:*")
|
|
69
|
+
#
|
|
70
|
+
def class_properties
|
|
71
|
+
# klass is PostsController, HardJob, GameRule, Hello or HelloFunction
|
|
72
|
+
klass = Jets::Klass.from_task(@task)
|
|
73
|
+
|
|
74
|
+
class_properties = lookup_class_properties(klass)
|
|
75
|
+
if klass.build_class_iam?
|
|
76
|
+
iam_policy = Jets::Resource::Iam::ClassRole.new(klass)
|
|
77
|
+
class_properties[:role] = "!GetAtt #{iam_policy.logical_id}.Arn"
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
class_properties
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Accounts for inherited class_properties
|
|
84
|
+
def lookup_class_properties(klass)
|
|
85
|
+
all_classes = []
|
|
86
|
+
while klass != Object
|
|
87
|
+
all_classes << klass
|
|
88
|
+
klass = klass.superclass
|
|
89
|
+
end
|
|
90
|
+
class_properties = {}
|
|
91
|
+
# Go back down class heirachry top to down
|
|
92
|
+
all_classes.reverse.each do |k|
|
|
93
|
+
class_properties.merge!(k.class_properties)
|
|
94
|
+
end
|
|
95
|
+
class_properties
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Function properties example:
|
|
99
|
+
#
|
|
100
|
+
# class PostsController < ApplicationController
|
|
101
|
+
# timeout 18
|
|
102
|
+
# def index
|
|
103
|
+
# ...
|
|
104
|
+
# end
|
|
105
|
+
#
|
|
106
|
+
# Also handles iam policy override at the function level. Example:
|
|
107
|
+
#
|
|
108
|
+
# iam_policy("ec2:*")
|
|
109
|
+
# def new
|
|
110
|
+
# render json: params.merge(action: "new")
|
|
111
|
+
# end
|
|
112
|
+
#
|
|
113
|
+
def function_properties
|
|
114
|
+
properties = @task.properties
|
|
115
|
+
if @task.build_function_iam?
|
|
116
|
+
iam_policy = Jets::Resource::Iam::FunctionRole.new(@task)
|
|
117
|
+
properties[:role] = "!GetAtt #{iam_policy.logical_id}.Arn"
|
|
118
|
+
end
|
|
119
|
+
properties
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Properties managed by Jets with merged with finality.
|
|
123
|
+
def finalize_properties!(props)
|
|
124
|
+
handler = full_handler(props)
|
|
125
|
+
runtime = get_runtime(props)
|
|
126
|
+
managed = {
|
|
127
|
+
handler: handler,
|
|
128
|
+
runtime: runtime,
|
|
129
|
+
description: description,
|
|
130
|
+
}
|
|
131
|
+
managed[:function_name] = function_name if function_name
|
|
132
|
+
layers = get_layers(runtime)
|
|
133
|
+
managed[:layers] = layers if layers
|
|
134
|
+
props.merge!(managed)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def get_layers(runtime)
|
|
138
|
+
return nil unless runtime =~ /^ruby/
|
|
139
|
+
["!Ref GemLayer"] + Jets.config.lambda.layers
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def get_runtime(props)
|
|
143
|
+
props[:runtime] || default_runtime
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def default_runtime
|
|
147
|
+
map = {
|
|
148
|
+
node: "nodejs8.10",
|
|
149
|
+
python: "python3.6",
|
|
150
|
+
ruby: "ruby2.5",
|
|
151
|
+
}
|
|
152
|
+
map[@task.lang]
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def default_handler
|
|
156
|
+
map = {
|
|
157
|
+
node: @task.full_handler(:handler), # IE: handlers/controllers/posts/show.handler
|
|
158
|
+
python: @task.full_handler(:lambda_handler), # IE: handlers/controllers/posts/show.lambda_handler
|
|
159
|
+
ruby: handler, # IE: handlers/controllers/posts_controllers.index
|
|
160
|
+
}
|
|
161
|
+
map[@task.lang]
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def handler
|
|
165
|
+
handler_value(@task.meth) # IE: handlers/controllers/posts_controllers.index
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# Used for node-shim also
|
|
169
|
+
def handler_value(meth)
|
|
170
|
+
"handlers/#{@task.type.pluralize}/#{@app_class.underscore}.#{meth}"
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
# Ensure that the handler path is normalized.
|
|
174
|
+
def full_handler(props)
|
|
175
|
+
if props[:handler]
|
|
176
|
+
handler_value(props[:handler])
|
|
177
|
+
else
|
|
178
|
+
default_handler
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
def code_s3_key
|
|
183
|
+
checksum = Jets::Builders::Md5.checksums["stage/code"]
|
|
184
|
+
"jets/code/code-#{checksum}.zip" # s3_key
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# Examples:
|
|
188
|
+
# "#{Jets.config.project_namespace}-sleep_job-perform"
|
|
189
|
+
# "demo-dev-sleep_job-perform"
|
|
190
|
+
def function_name
|
|
191
|
+
# Example values:
|
|
192
|
+
# @app_class: admin/pages_controller
|
|
193
|
+
# @task.meth: index
|
|
194
|
+
# method: admin/pages_controller
|
|
195
|
+
# method: admin-pages_controller-index
|
|
196
|
+
method = @app_class.underscore
|
|
197
|
+
method = method.gsub('/','-').gsub(/[^0-9a-z\-_]/i, '') + "-#{@task.meth}"
|
|
198
|
+
function_name = "#{Jets.config.project_namespace}-#{method}"
|
|
199
|
+
# Returns nil if function name is too long.
|
|
200
|
+
# CloudFormation will managed the the function name in this case.
|
|
201
|
+
# A pretty function name won't be generated but the deploy will be successful.
|
|
202
|
+
function_name.size > Jets::MAX_FUNCTION_NAME_SIZE ? nil : function_name
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
def description
|
|
206
|
+
# Example values:
|
|
207
|
+
# @app_class: Admin/PagesController
|
|
208
|
+
# @task.meth: index
|
|
209
|
+
# Returns:
|
|
210
|
+
# Admin/PagesController#index
|
|
211
|
+
"#{@app_class}##{@task.meth}"
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
end
|