diff --git a/.chglog/CHANGELOG.tpl.md b/.chglog/CHANGELOG.tpl.md
new file mode 100644
index 0000000..1b3087e
--- /dev/null
+++ b/.chglog/CHANGELOG.tpl.md
@@ -0,0 +1,63 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+
+{{ if .Versions -}}
+
+## [Unreleased]
+{{ if .Unreleased.CommitGroups -}}
+{{ range .Unreleased.CommitGroups -}}
+{{ .Title }}:
+{{ range .Commits -}}
+{{- if .Subject -}}
+- {{ if .Scope }}**{{ .Scope }}:** {{ end }}{{ .Subject }}
+{{ end -}}
+{{ end }}
+{{ end -}}
+{{ else }}
+{{ range .Unreleased.Commits -}}
+{{- if .Subject -}}
+- {{ if .Scope }}**{{ .Scope }}:** {{ end }}{{ .Subject }}
+{{ end -}}
+{{ end }}
+{{ end -}}
+{{ end -}}
+
+{{ range .Versions }}
+
+## {{ if .Tag.Previous }}[{{ .Tag.Name }}]{{ else }}{{ .Tag.Name }}{{ end }} - {{ datetime "2006-01-02" .Tag.Date }}
+{{ if .CommitGroups -}}
+{{ range .CommitGroups -}}
+{{ .Title }}:
+{{ range .Commits -}}
+{{- if .Subject -}}
+- {{ if .Scope }}**{{ .Scope }}:** {{ end }}{{ .Subject }}
+{{ end -}}
+{{ end }}
+{{ end -}}
+{{ else }}
+{{ range .Commits -}}
+{{- if .Subject -}}
+- {{ if .Scope }}**{{ .Scope }}:** {{ end }}{{ .Subject }}
+{{ end -}}
+{{ end }}
+{{ end -}}
+
+{{- if .NoteGroups -}}
+{{ range .NoteGroups -}}
+{{ .Title }}:
+{{ range .Notes }}
+{{ .Body }}
+{{ end }}
+{{ end -}}
+{{ end -}}
+{{ end -}}
+
+{{- if .Versions }}
+[Unreleased]: {{ .Info.RepositoryURL }}/compare/{{ $latest := index .Versions 0 }}{{ $latest.Tag.Name }}...HEAD
+{{ range .Versions -}}
+{{ if .Tag.Previous -}}
+[{{ .Tag.Name }}]: {{ $.Info.RepositoryURL }}/compare/{{ .Tag.Previous.Name }}...{{ .Tag.Name }}
+{{ end -}}
+{{ end -}}
+{{ end -}}
diff --git a/.chglog/config.yml b/.chglog/config.yml
new file mode 100644
index 0000000..7ca18c9
--- /dev/null
+++ b/.chglog/config.yml
@@ -0,0 +1,48 @@
+style: github
+template: CHANGELOG.tpl.md
+info:
+ title: CHANGELOG
+ repository_url: https://github.com/antonbabenko/modules.tf-lambda
+options:
+
+ commits:
+ sort_by: Type
+ filters:
+ Type:
+ - feat
+ - fix
+ - improvement
+ - docs
+ - refactor
+ - test
+ - ci
+ - chore
+
+ commit_groups:
+ group_by: Type
+ title_maps:
+ feat: FEATURES
+ fix: BUG FIXES
+ improvement: ENHANCEMENTS
+ docs: DOCS
+ refactor: REFACTORS
+ test: TESTS
+ ci: CI
+ chore: CHORES
+
+ header:
+ pattern: "^(.+)\\s*:\\s*(.+)$"
+ pattern_maps:
+ - Type
+ - Subject
+
+ notes:
+ keywords:
+ - BREAKING CHANGE
+ - NOTES
+
+ refs:
+ actions:
+ - Closes
+ - Fixes
+ - Resolves
diff --git a/.editorconfig b/.editorconfig
index 0d034b9..02fe218 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -23,7 +23,7 @@ max_line_length = 0
trim_trailing_whitespace = false
[*.py]
-max_line_length = 120
+max_line_length = 200
indent_style = space
indent_size = 4
ignore_frosted_errors = E103
diff --git a/.flake8 b/.flake8
index 8cb28ac..445c0de 100644
--- a/.flake8
+++ b/.flake8
@@ -1,5 +1,6 @@
[flake8]
ignore = W504, F401
-max-line-length = 150
+exclude = tests/*
+max-line-length = 200
max-complexity = 18
select = B,C,E,F,W,T4,B9
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index a9e6029..f24e8b8 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -8,7 +8,7 @@ about: Create a report to help us improve
A clear and concise description of what the bug is.
diff --git a/.gitignore b/.gitignore
index 222e4e9..6f32d9f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
# Distribution / packaging
+__pycache__
.Python
env/
build/
@@ -19,10 +20,39 @@ var/
# Serverless directories
.serverless
-
.requirements-cache
node_modules
output/*
# Graph image
graph.png
+
+/.venv
+/.idea
+
+# Terraform
+.terraform
+.terragrunt-cache
+*.tfstate*
+.terraform.lock.hcl
+crash.log
+
+# OS X
+.history
+.DS_Store
+
+# IntelliJ
+.idea_modules
+*.iml
+*.iws
+*.ipr
+.idea/
+build/
+*/build/
+out/
+
+# Lambda builds by Terraform AWS Lambda module
+builds/
+
+# Vim
+*.sw[op]
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 2c85bb8..507c410 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,17 +1,25 @@
repos:
-- repo: git://github.com/doublify/pre-commit-isort
+- repo: https://github.com/doublify/pre-commit-isort
rev: v4.3.0
hooks:
- id: isort
-- repo: git://github.com/pre-commit/pre-commit-hooks
- rev: v2.4.0
+- repo: https://github.com/pre-commit/pre-commit-hooks
+ rev: v3.4.0
hooks:
- id: check-ast
- id: check-merge-conflict
- id: requirements-txt-fixer
- id: end-of-file-fixer
+- repo: https://gitlab.com/pycqa/flake8
+ rev: 3.9.2
+ hooks:
- id: flake8
-#- repo: git://github.com/codespell-project/codespell
-# rev: v1.16.0
-# hooks:
-# - id: codespell
+- repo: https://github.com/antonbabenko/pre-commit-terraform
+ rev: v1.50.0
+ hooks:
+ - id: terraform_fmt
+ - id: terraform_docs
+- repo: https://github.com/pre-commit/pre-commit-hooks
+ rev: v3.4.0
+ hooks:
+ - id: check-merge-conflict
diff --git a/.snyk b/.snyk
new file mode 100644
index 0000000..61d3af4
--- /dev/null
+++ b/.snyk
@@ -0,0 +1,32 @@
+# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities.
+version: v1.14.1
+ignore: {}
+# patches apply the minimum changes required to fix a vulnerability
+patch:
+ SNYK-JS-LODASH-567746:
+ - serverless > lodash:
+ patched: '2020-05-01T07:28:39.062Z'
+ - serverless > @serverless/enterprise-plugin > lodash:
+ patched: '2020-05-01T07:28:39.062Z'
+ - serverless > archiver > lodash:
+ patched: '2020-05-01T07:28:39.062Z'
+ - serverless > inquirer > lodash:
+ patched: '2020-05-01T07:28:39.062Z'
+ - serverless > json-refs > graphlib > lodash:
+ patched: '2020-05-01T07:28:39.062Z'
+ - serverless > @serverless/components > prettyoutput > lodash:
+ patched: '2020-05-01T07:28:39.062Z'
+ - serverless > @serverless/enterprise-plugin > @serverless/event-mocks > lodash:
+ patched: '2020-05-01T07:28:39.062Z'
+ - serverless > archiver > archiver-utils > lodash:
+ patched: '2020-05-01T07:28:39.062Z'
+ - serverless > archiver > async > lodash:
+ patched: '2020-05-01T07:28:39.062Z'
+ - serverless > archiver > zip-stream > lodash:
+ patched: '2020-05-01T07:28:39.062Z'
+ - serverless > tabtab > inquirer > lodash:
+ patched: '2020-05-01T07:28:39.062Z'
+ - serverless > @serverless/cli > @serverless/template > graphlib > lodash:
+ patched: '2020-05-01T07:28:39.062Z'
+ - serverless > archiver > zip-stream > archiver-utils > lodash:
+ patched: '2020-05-01T07:28:39.062Z'
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 0000000..800a0ef
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,19 @@
+{
+ "configurations": [
+ {
+ "name": "Python: src/handler.py",
+ "type": "python",
+ "request": "launch",
+ "program": "src/handler.py",
+ "console": "integratedTerminal",
+ "cwd": "${workspaceFolder}"
+ },
+ {
+ "name": "Python: Current File",
+ "type": "python",
+ "request": "launch",
+ "program": "${file}",
+ "console": "integratedTerminal"
+ }
+ ]
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..c9b64c8
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,6 @@
+{
+ "python.pythonPath": "/Users/Bob/.local/share/virtualenvs/modules.tf-diagrams/bin/python",
+ "python.linting.enabled": true,
+ "python.linting.flake8Enabled": true,
+ "python.formatting.provider": "autopep8"
+}
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..8e9bebd
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,75 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+
+
+## [Unreleased]
+
+
+
+
+## [v1.7.0] - 2021-05-09
+BUG FIXES:
+- Fixed version of minimist package ([#35](https://github.com/antonbabenko/modules.tf-lambda/issues/35))
+- resolved conflict for dependent botocore library ([#34](https://github.com/antonbabenko/modules.tf-lambda/issues/34))
+- Skip edges without from/to values (eg, VPN)
+- Fixed case of dependencies to be always lowercase
+
+DOCS:
+- Fix a few more links ([#52](https://github.com/antonbabenko/modules.tf-lambda/issues/52))
+- Updated links in README
+- Updated link to modules.tf-lambda-infra repo
+
+FEATURES:
+- Added Lambda, API Gateway, CloudFront modules, and some refactoring ([#60](https://github.com/antonbabenko/modules.tf-lambda/issues/60))
+- Adding security group rules ([#27](https://github.com/antonbabenko/modules.tf-lambda/issues/27))
+
+
+
+## [v1.6.0] - 2020-03-22
+FEATURES:
+- Set folder names correctly (fixes [#22](https://github.com/antonbabenko/modules.tf-lambda/issues/22)) ([#25](https://github.com/antonbabenko/modules.tf-lambda/issues/25))
+
+
+
+## [v1.5.0] - 2020-03-22
+CHORES:
+- Added CHANGELOG ([#24](https://github.com/antonbabenko/modules.tf-lambda/issues/24))
+
+FEATURES:
+- Added DynamoDB Table ([#23](https://github.com/antonbabenko/modules.tf-lambda/issues/23))
+
+
+
+## [v1.4.0] - 2019-11-05
+
+
+
+
+## [v1.3.0] - 2019-11-04
+
+
+
+
+## [v1.2.0] - 2019-04-15
+
+
+
+
+## [v1.1.0] - 2018-11-25
+
+
+
+
+## v1.0.0 - 2018-11-19
+
+
+
+[Unreleased]: https://github.com/antonbabenko/modules.tf-lambda/compare/v1.7.0...HEAD
+[v1.7.0]: https://github.com/antonbabenko/modules.tf-lambda/compare/v1.6.0...v1.7.0
+[v1.6.0]: https://github.com/antonbabenko/modules.tf-lambda/compare/v1.5.0...v1.6.0
+[v1.5.0]: https://github.com/antonbabenko/modules.tf-lambda/compare/v1.4.0...v1.5.0
+[v1.4.0]: https://github.com/antonbabenko/modules.tf-lambda/compare/v1.3.0...v1.4.0
+[v1.3.0]: https://github.com/antonbabenko/modules.tf-lambda/compare/v1.2.0...v1.3.0
+[v1.2.0]: https://github.com/antonbabenko/modules.tf-lambda/compare/v1.1.0...v1.2.0
+[v1.1.0]: https://github.com/antonbabenko/modules.tf-lambda/compare/v1.0.0...v1.1.0
diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md
deleted file mode 100644
index 9679b40..0000000
--- a/DEVELOPMENT.md
+++ /dev/null
@@ -1,44 +0,0 @@
-# Notes for developers
-
-As a short cheatsheet, you will need to use these commands:
-
-* Invoke real endpoint in `dev` and `prod` environments using [httpie](https://github.com/jakubroztocil/httpie/):
-
-```
-# dev
-$ http --print Hhb --all --follow https://dev-lambda.modules.tf/ @input/blueprint_my.json
-
-# prod
-$ http --print Hhb --all --follow https://lambda.modules.tf/ @input/blueprint_my.json
-```
-
-* Invoke function locally providing `input.json`:
-
-```
-$ serverless invoke local --function generate-cloudcraft --path test_fixtures/input_localfile.json
-```
-
-* Deploy all functions to `prod` environment:
-
-```
-$ serverless deploy --stage prod
-```
-
-* Deploy single function to `dev` environment:
-
-```
-$ serverless deploy function --function generate-cloudcraft --stage dev
-```
-
-* Deploy single function to `prod` environment:
-
-```
-$ serverless deploy function --function generate-cloudcraft --stage prod
-```
-
-## Spellchecker
-
-```
-$ brew install codespell
-$ pre-commit try-repo git://github.com/codespell-project/codespell codespell --all-files
-```
diff --git a/KNOWN_ISSUES.md b/KNOWN_ISSUES.md
deleted file mode 100644
index b6229b1..0000000
--- a/KNOWN_ISSUES.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Known issues in modules.tf-lambda
-
-* Serverless framework version shouldn't be newer than 1.51.0 unless [this](https://github.com/serverless/serverless/issues/6752) and [this](https://github.com/UnitedIncome/serverless-python-requirements/issues/414) bugs are fixed
diff --git a/LICENSE b/LICENSE
index 503ab7d..96f46c6 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
The MIT License (MIT)
-Copyright (c) 2018 Anton Babenko
+Copyright (c) 2018-2021 Anton Babenko
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..558dac5
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,7 @@
+.PHONY: changelog release
+
+changelog:
+ git-chglog -o CHANGELOG.md --next-tag `semtag final -s minor -o`
+
+release:
+ semtag final -s minor
diff --git a/README.md b/README.md
index ef0ff5f..656703f 100644
--- a/README.md
+++ b/README.md
@@ -1,18 +1,15 @@
-# modules.tf - Infrastructure as code generator - from visual diagrams to Terraform
+# Diagrams to code (d2c) - Infrastructure as code generator - from visual diagrams to Terraform
[](https://opencollective.com/modulestf) []() [](https://twitter.com/antonbabenko)
-
-Code in this repository is used for generating infrastructure as Terraform configurations from visual diagrams created using [Cloudcraft](https://cloudcraft.co).
-
-[modules.tf](https://github.com/antonbabenko/modules.tf-lambda) is an open-source project by [Anton Babenko](https://github.com/antonbabenko).
+Code in this repository is used for generating infrastructure as Terraform configurations from visual diagrams created using [Cloudcraft](https://www.cloudcraft.co).
## How can I try this?
-1. Sign up for free account to [Cloudcraft.co](https://cloudcraft.co/app).
+1. Sign up for a free account with [Cloudcraft](https://app.cloudcraft.co/signup).
1. Draw AWS architecture in web-browser (you can import live AWS resources, too).
1. Click "Export" and "Terraform code export" at the top right side.
1. Download archive and extract it locally.
@@ -33,11 +30,9 @@ In [modules.tf-demo](https://github.com/antonbabenko/modules.tf-demo) repository
## Supporters
-
+
-This project was partially sponsored by [Cloudcraft - the best way to draw AWS diagrams](https://cloudcraft.co).
-
-Monitoring of serverless applications provided by [Dashbird.io](https://dashbird.io/). 
+This project was partially sponsored by [Cloudcraft - the best way to draw AWS diagrams](https://www.cloudcraft.co).
[Become a sponsor to @antonbabenko on GitHub](https://github.com/sponsors/antonbabenko/).
@@ -48,11 +43,26 @@ Monitoring of serverless applications provided by [Dashbird.io](https://dashbird
## Developer's guide
-This project is Python 3.7 application written using [Serverless framework](https://serverless.com) which runs on [AWS Lambda](https://aws.amazon.com/lambda/).
+This project is Python 3.8 serverless application written using [serverless.tf](https://serverless.tf) framework and open-source components ([Terraform AWS modules](https://github.com/terraform-aws-modules)).
+
+### Notes for developers
+
+Terraform is used to provision infrastructure resources as well as packaging artifacts and to do the deployments (check out [serverless.tf](https://serverless.tf) for more details).
+
+Source code is located in `src/handler.py`.
+
+Go to directory `terraform`, verify/update file `terraform.tfvars` and run:
+
+```
+$ terraform init # Download required Terraform providers and modules
+$ terraform apply # Create or update infrastructure resources or do a new deployment of Lambda function (if source code has changed)
+```
-Read [official quick start guide](https://serverless.com/framework/docs/providers/aws/guide/quick-start/) and [installation instructions](https://serverless.com/framework/docs/providers/aws/guide/installation/) to familiarise yourself with it.
+When infrastructure is created, you should be able to `POST` using [httpie](https://github.com/jakubroztocil/httpie/) or `curl` like this:
-Read [DEVELOPMENT.md](https://github.com/antonbabenko/modules.tf-lambda/blob/master/DEVELOPMENT.md) for more insights if you want to contribute to this project.
+```
+$ http --print Hhb --all --follow https://dev-d2c.modules.tf @test_fixtures/input/blueprint_my.json
+```
## Contributors
@@ -89,4 +99,4 @@ Support this project with your organization. Your logo will show up here with a
This work is licensed under MIT License. See LICENSE for full details.
-Copyright (c) 2019 Anton Babenko
+Copyright (c) 2018-2021 Anton Babenko
diff --git a/bin/test_lambda_local.sh b/bin/test_lambda_local.sh
deleted file mode 100755
index a5aefed..0000000
--- a/bin/test_lambda_local.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env bash
-
-/usr/local/bin/python-lambda-local -t 10 -f $1 $2 $3
diff --git a/misc/dashbird-logo.png b/misc/dashbird-logo.png
deleted file mode 100644
index 3f22ae2..0000000
Binary files a/misc/dashbird-logo.png and /dev/null differ
diff --git a/misc/ipexpo-demo-tfvars/autoscaling/terraform.tfvars b/misc/ipexpo-demo-tfvars/autoscaling/terraform.tfvars
deleted file mode 100644
index fb870cc..0000000
--- a/misc/ipexpo-demo-tfvars/autoscaling/terraform.tfvars
+++ /dev/null
@@ -1,49 +0,0 @@
-terragrunt = {
- terraform {
- source = "git::git@github.com:terraform-aws-modules/terraform-aws-autoscaling.git"
- }
-
- include = {
- path = "${find_in_parent_folders()}"
- }
-}
-
-# The number of Amazon EC2 instances that should be running in the group
-# type: string
-desired_capacity = "1"
-
-# Controls how health checking is done. Values are - EC2 and ELB
-# type: string
-health_check_type = "EC2"
-
-# The EC2 image ID to launch
-# type: string
-image_id = "ami-03255d32a8bf59788"
-
-# The size of instance to launch
-# type: string
-instance_type = "t2.small"
-
-# The maximum size of the auto scale group
-# type: string
-max_size = "1"
-
-# The minimum size of the auto scale group
-# type: string
-min_size = "0"
-
-# Creates a unique name beginning with the specified prefix
-# type: string
-name = "modulestf-demo"
-
-# A list of security group IDs to assign to the launch configuration
-# type: list
-security_groups = ["sg-9eb9c1e7"]
-
-# A list of subnet IDs to launch resources in
-# type: list
-vpc_zone_identifier = ["subnet-6fe3d837", "subnet-9211eef5"]
-
-# A list of elastic load balancer names to add to the autoscaling group names
-# type: list
-load_balancers = ["modulestf-demo"]
diff --git a/misc/ipexpo-demo-tfvars/elb/terraform.tfvars b/misc/ipexpo-demo-tfvars/elb/terraform.tfvars
deleted file mode 100644
index f73a1e8..0000000
--- a/misc/ipexpo-demo-tfvars/elb/terraform.tfvars
+++ /dev/null
@@ -1,46 +0,0 @@
-terragrunt = {
- terraform {
- source = "git::git@github.com:terraform-aws-modules/terraform-aws-elb.git"
- }
-
- include = {
- path = "${find_in_parent_folders()}"
- }
-}
-
-# A health check block
-# type: list
-health_check = [
- {
- target = "HTTP:80/"
- interval = 30
- healthy_threshold = 2
- unhealthy_threshold = 2
- timeout = 5
- },
-]
-
-# If true, ELB will be an internal ELB
-# type: string
-internal = "false"
-
-# A list of listener blocks
-# type: list
-listener = [{
- instance_port = "80"
- instance_protocol = "HTTP"
- lb_port = "80"
- lb_protocol = "HTTP"
-}]
-
-# The name of the ELB
-# type: string
-name = "modulestf-demo"
-
-# A list of security group IDs to assign to the ELB
-# type: list
-security_groups = ["sg-9eb9c1e7"]
-
-# A list of subnet IDs to attach to the ELB
-# type: list
-subnets = ["subnet-6fe3d837", "subnet-9211eef5"]
diff --git a/misc/modulestf-logo2.png b/misc/modulestf-logo2.png
new file mode 100644
index 0000000..94a7e2e
Binary files /dev/null and b/misc/modulestf-logo2.png differ
diff --git a/misc/tmp_readme.md b/misc/tmp_readme.md
deleted file mode 100644
index 582c143..0000000
--- a/misc/tmp_readme.md
+++ /dev/null
@@ -1,85 +0,0 @@
-
-## High level picture
-
-Sources:
-
- - A. Cloudcraft Blueprint (json)
- - B. Lucidchart API (if exists)
- - C. AWS API (Describe AWS-API or python script similar to the one by Lucidchart can generate json)
- - D. Custom json/hcl files
- - E. modules.tf UI produces json, which is sent to MTG endpoint
- - F. Cloudformation json/yaml
- - G. draw.io (can be self-hosted, and used by financial institutions)
-
-All gets into modules.tf's generator (MTG) which creates "infrastructure as code (terragrunt + docs)"
-
-# Mapping
-
-Cloudcraft and modules.tf mapping of variables is defined in `modules-metadata/{module}.json` and updated by shell script `update_modules_metadata.sh`
-
-isMultiAZ (cloudcraft) ==> multi_az (modules.tf) ==> multi_az (terraform-aws-modules)
-
-
-## To-do
-
- - [x] Convert blueprint.json (cloudcraft) into generic json config for cookiecutter (output.json)
- - [x] Cookiecutter should render one directory with all content as specified in json config
- - [x] Create zip archive, upload it to S3
- - [x] Return content of zip file back to the user to initiate download
- - [x] Make content of archive real and usable
- - [x] Print only required key/values into terraform.tfvars
- - [x] Improve config generator to follow links/edges/etc
- - [ ] Get connections between (using data-sources):
- - [ ] ELB & ASG target_group_arns (Figure out how to pass dynamic value of target_group_arns (eg, ${data.terraform_remote_state.elb.arn}) to autoscaling group terraform module. Maybe using "locals", "overrides", data-sources, tfstate, etc)
- - [ ] S3 & Cloudfront
- - [x] ELB or ALB
- - [ ] VPC
- - [ ] Security group
- - [x] Generate real meta data from modules (or hardcode some)
- - [ ] Add basic S3 and Cloudfront modules
- - [ ] Circleci - https://serverless.com/blog/automating-ci-for-python-serverless-app-with-circleci/
-
-@todo: # terragrunt hook which scans terraform.tfvars and replaces "data.terraform_remote_state.vpc.vpc_id" with the the real value fetched from datasource before calling the main module; using null_resource; http; external as a "glue"
-
-
-Before IPEXPO (19.8.2018):
-
- - [ ] Generate Terraform code instead of Terragrunt
-
-Extract data from "nodes" and convert it into single "terraform-aws-module" + available arguments (instanceType, instanceSize, elbType)
-
-## Notes
-
-"A" get concept of "area/zone", which means it can be grouped into single "infrastructure module" before passing to modules.tf web-site and populate the forms or to modules.tf converter (MTC) before sending to MTG.
-
-
-### Output structure
-
-```
-project/
- eu-west-1/
- layer1/
- terraform.tfvars
- layer2/
- terraform.tfvars
- common.tfvars
- terraform.tfvars
- .gitignore
- LICENSE
- README.md
- ...
-```
-
-### Run pre-commit after code was rendered:
-
-cd final
-
-// iterate through all files:
-pre-commit run -c $(pwd)/.pre-commit-config.yaml --files $(pwd)/eu-west-1/rds/terraform.tfvars
-pre-commit run -c $(pwd)/.pre-commit-config.yaml --files $(pwd)/....
-
-
-### Comments from Dmytro:
-8. if it python 3 - mb better to use pathlib
-https://www.scivision.co/python-idiomatic-pathlib-use/
-16. https://docs.python.org/3/library/typing.html
diff --git a/modules-metadata/autoscaling.json b/modules-metadata/autoscaling.json
deleted file mode 100644
index dc51100..0000000
--- a/modules-metadata/autoscaling.json
+++ /dev/null
@@ -1,259 +0,0 @@
-{
- "asg_name": {
- "default": "",
- "description": "Creates a unique name for autoscaling group beginning with the specified prefix",
- "type": "string"
- },
- "associate_public_ip_address": {
- "default": false,
- "description": "Associate a public ip address with an instance in a VPC",
- "type": "bool"
- },
- "create_asg": {
- "default": true,
- "description": "Whether to create autoscaling group",
- "type": "bool"
- },
- "create_asg_with_initial_lifecycle_hook": {
- "default": false,
- "description": "Create an ASG with initial lifecycle hook",
- "type": "bool"
- },
- "create_lc": {
- "default": true,
- "description": "Whether to create launch configuration",
- "type": "bool"
- },
- "default_cooldown": {
- "default": 300,
- "description": "The amount of time, in seconds, after a scaling activity completes before another scaling activity can start",
- "type": "number"
- },
- "desired_capacity": {
- "description": "The number of Amazon EC2 instances that should be running in the group",
- "type": "string"
- },
- "ebs_block_device": {
- "default": [],
- "description": "Additional EBS block devices to attach to the instance",
- "type": "list(map(string))"
- },
- "ebs_optimized": {
- "default": false,
- "description": "If true, the launched EC2 instance will be EBS-optimized",
- "type": "bool"
- },
- "enable_monitoring": {
- "default": true,
- "description": "Enables/disables detailed monitoring. This is enabled by default.",
- "type": "bool"
- },
- "enabled_metrics": {
- "default": [
- "GroupMinSize",
- "GroupMaxSize",
- "GroupDesiredCapacity",
- "GroupInServiceInstances",
- "GroupPendingInstances",
- "GroupStandbyInstances",
- "GroupTerminatingInstances",
- "GroupTotalInstances"
- ],
- "description": "A list of metrics to collect. The allowed values are GroupMinSize, GroupMaxSize, GroupDesiredCapacity, GroupInServiceInstances, GroupPendingInstances, GroupStandbyInstances, GroupTerminatingInstances, GroupTotalInstances",
- "type": "list(string)"
- },
- "ephemeral_block_device": {
- "default": [],
- "description": "Customize Ephemeral (also known as 'Instance Store') volumes on the instance",
- "type": "list(map(string))"
- },
- "force_delete": {
- "default": false,
- "description": "Allows deleting the autoscaling group without waiting for all instances in the pool to terminate. You can force an autoscaling group to delete even if it's in the process of scaling a resource. Normally, Terraform drains all the instances before deleting the group. This bypasses that behavior and potentially leaves resources dangling",
- "type": "bool"
- },
- "health_check_grace_period": {
- "default": 300,
- "description": "Time (in seconds) after instance comes into service before checking health",
- "type": "number"
- },
- "health_check_type": {
- "description": "Controls how health checking is done. Values are - EC2 and ELB",
- "type": "string"
- },
- "iam_instance_profile": {
- "default": "",
- "description": "The IAM instance profile to associate with launched instances",
- "type": "string"
- },
- "image_id": {
- "default": "",
- "description": "The EC2 image ID to launch",
- "type": "string"
- },
- "initial_lifecycle_hook_default_result": {
- "default": "ABANDON",
- "description": "Defines the action the Auto Scaling group should take when the lifecycle hook timeout elapses or if an unexpected failure occurs. The value for this parameter can be either CONTINUE or ABANDON",
- "type": "string"
- },
- "initial_lifecycle_hook_heartbeat_timeout": {
- "default": "60",
- "description": "Defines the amount of time, in seconds, that can elapse before the lifecycle hook times out. When the lifecycle hook times out, Auto Scaling performs the action defined in the DefaultResult parameter",
- "type": "string"
- },
- "initial_lifecycle_hook_lifecycle_transition": {
- "default": "",
- "description": "The instance state to which you want to attach the initial lifecycle hook",
- "type": "string"
- },
- "initial_lifecycle_hook_name": {
- "default": "",
- "description": "The name of initial lifecycle hook",
- "type": "string"
- },
- "initial_lifecycle_hook_notification_metadata": {
- "default": "",
- "description": "Contains additional information that you want to include any time Auto Scaling sends a message to the notification target",
- "type": "string"
- },
- "initial_lifecycle_hook_notification_target_arn": {
- "default": "",
- "description": "The ARN of the notification target that Auto Scaling will use to notify you when an instance is in the transition state for the lifecycle hook. This ARN target can be either an SQS queue or an SNS topic",
- "type": "string"
- },
- "initial_lifecycle_hook_role_arn": {
- "default": "",
- "description": "The ARN of the IAM role that allows the Auto Scaling group to publish to the specified notification target",
- "type": "string"
- },
- "instance_type": {
- "default": "",
- "description": "The size of instance to launch",
- "type": "string",
- "cloudcraft_name": "instanceType"
- },
- "key_name": {
- "default": "",
- "description": "The key name that should be used for the instance",
- "type": "string"
- },
- "launch_configuration": {
- "default": "",
- "description": "The name of the launch configuration to use (if it is created outside of this module)",
- "type": "string"
- },
- "lc_name": {
- "default": "",
- "description": "Creates a unique name for launch configuration beginning with the specified prefix",
- "type": "string"
- },
- "load_balancers": {
- "default": [],
- "description": "A list of elastic load balancer names to add to the autoscaling group names",
- "type": "list(string)"
- },
- "max_size": {
- "description": "The maximum size of the auto scale group",
- "type": "string"
- },
- "metrics_granularity": {
- "default": "1Minute",
- "description": "The granularity to associate with the metrics to collect. The only valid value is 1Minute",
- "type": "string"
- },
- "min_elb_capacity": {
- "default": 0,
- "description": "Setting this causes Terraform to wait for this number of instances to show up healthy in the ELB only on creation. Updates will not wait on ELB instance number changes",
- "type": "number"
- },
- "min_size": {
- "description": "The minimum size of the auto scale group",
- "type": "string"
- },
- "name": {
- "description": "Creates a unique name beginning with the specified prefix",
- "type": "string"
- },
- "placement_group": {
- "default": "",
- "description": "The name of the placement group into which you'll launch your instances, if any",
- "type": "string"
- },
- "placement_tenancy": {
- "default": "default",
- "description": "The tenancy of the instance. Valid values are 'default' or 'dedicated'",
- "type": "string"
- },
- "protect_from_scale_in": {
- "default": false,
- "description": "Allows setting instance protection. The autoscaling group will not select instances with this setting for termination during scale in events.",
- "type": "bool"
- },
- "recreate_asg_when_lc_changes": {
- "default": false,
- "description": "Whether to recreate an autoscaling group when launch configuration changes",
- "type": "bool"
- },
- "root_block_device": {
- "default": [],
- "description": "Customize details about the root block device of the instance",
- "type": "list(map(string))"
- },
- "security_groups": {
- "default": [],
- "description": "A list of security group IDs to assign to the launch configuration",
- "type": "list(string)"
- },
- "spot_price": {
- "default": "",
- "description": "The price to use for reserving spot instances",
- "type": "string"
- },
- "suspended_processes": {
- "default": [],
- "description": "A list of processes to suspend for the AutoScaling Group. The allowed values are Launch, Terminate, HealthCheck, ReplaceUnhealthy, AZRebalance, AlarmNotification, ScheduledActions, AddToLoadBalancer. Note that if you suspend either the Launch or Terminate process types, it can prevent your autoscaling group from functioning properly.",
- "type": "list(string)"
- },
- "tags": {
- "default": [],
- "description": "A list of tag blocks. Each element should have keys named key, value, and propagate_at_launch.",
- "type": "list(map(string))"
- },
- "tags_as_map": {
- "default": {},
- "description": "A map of tags and values in the same format as other resources accept. This will be converted into the non-standard format that the aws_autoscaling_group requires.",
- "type": "map(string)"
- },
- "target_group_arns": {
- "default": [],
- "description": "A list of aws_alb_target_group ARNs, for use with Application Load Balancing",
- "type": "list(string)",
- "cloudcraft_name": "target_group_arns"
- },
- "termination_policies": {
- "default": [
- "Default"
- ],
- "description": "A list of policies to decide how the instances in the auto scale group should be terminated. The allowed values are OldestInstance, NewestInstance, OldestLaunchConfiguration, ClosestToNextInstanceHour, Default",
- "type": "list(string)"
- },
- "user_data": {
- "default": " ",
- "description": "The user data to provide when launching the instance",
- "type": "string"
- },
- "vpc_zone_identifier": {
- "description": "A list of subnet IDs to launch resources in",
- "type": "list(string)"
- },
- "wait_for_capacity_timeout": {
- "default": "10m",
- "description": "A maximum duration that Terraform should wait for ASG instances to be healthy before timing out. (See also Waiting for Capacity below.) Setting this to '0' causes Terraform to skip all Capacity Waiting behavior.",
- "type": "string"
- },
- "wait_for_elb_capacity": {
- "default": "null",
- "description": "Setting this will cause Terraform to wait for exactly this number of healthy instances in all attached load balancers on both create and update operations. Takes precedence over min_elb_capacity behavior.",
- "type": "number"
- }
-}
diff --git a/modules-metadata/autoscaling_variables.json b/modules-metadata/autoscaling_variables.json
deleted file mode 100644
index d23c92b..0000000
--- a/modules-metadata/autoscaling_variables.json
+++ /dev/null
@@ -1,257 +0,0 @@
-{
- "asg_name": {
- "default": "",
- "description": "Creates a unique name for autoscaling group beginning with the specified prefix",
- "type": "string"
- },
- "associate_public_ip_address": {
- "default": false,
- "description": "Associate a public ip address with an instance in a VPC",
- "type": "bool"
- },
- "create_asg": {
- "default": true,
- "description": "Whether to create autoscaling group",
- "type": "bool"
- },
- "create_asg_with_initial_lifecycle_hook": {
- "default": false,
- "description": "Create an ASG with initial lifecycle hook",
- "type": "bool"
- },
- "create_lc": {
- "default": true,
- "description": "Whether to create launch configuration",
- "type": "bool"
- },
- "default_cooldown": {
- "default": 300,
- "description": "The amount of time, in seconds, after a scaling activity completes before another scaling activity can start",
- "type": "number"
- },
- "desired_capacity": {
- "description": "The number of Amazon EC2 instances that should be running in the group",
- "type": "string"
- },
- "ebs_block_device": {
- "default": [],
- "description": "Additional EBS block devices to attach to the instance",
- "type": "list(map(string))"
- },
- "ebs_optimized": {
- "default": false,
- "description": "If true, the launched EC2 instance will be EBS-optimized",
- "type": "bool"
- },
- "enable_monitoring": {
- "default": true,
- "description": "Enables/disables detailed monitoring. This is enabled by default.",
- "type": "bool"
- },
- "enabled_metrics": {
- "default": [
- "GroupMinSize",
- "GroupMaxSize",
- "GroupDesiredCapacity",
- "GroupInServiceInstances",
- "GroupPendingInstances",
- "GroupStandbyInstances",
- "GroupTerminatingInstances",
- "GroupTotalInstances"
- ],
- "description": "A list of metrics to collect. The allowed values are GroupMinSize, GroupMaxSize, GroupDesiredCapacity, GroupInServiceInstances, GroupPendingInstances, GroupStandbyInstances, GroupTerminatingInstances, GroupTotalInstances",
- "type": "list(string)"
- },
- "ephemeral_block_device": {
- "default": [],
- "description": "Customize Ephemeral (also known as 'Instance Store') volumes on the instance",
- "type": "list(map(string))"
- },
- "force_delete": {
- "default": false,
- "description": "Allows deleting the autoscaling group without waiting for all instances in the pool to terminate. You can force an autoscaling group to delete even if it's in the process of scaling a resource. Normally, Terraform drains all the instances before deleting the group. This bypasses that behavior and potentially leaves resources dangling",
- "type": "bool"
- },
- "health_check_grace_period": {
- "default": 300,
- "description": "Time (in seconds) after instance comes into service before checking health",
- "type": "number"
- },
- "health_check_type": {
- "description": "Controls how health checking is done. Values are - EC2 and ELB",
- "type": "string"
- },
- "iam_instance_profile": {
- "default": "",
- "description": "The IAM instance profile to associate with launched instances",
- "type": "string"
- },
- "image_id": {
- "default": "",
- "description": "The EC2 image ID to launch",
- "type": "string"
- },
- "initial_lifecycle_hook_default_result": {
- "default": "ABANDON",
- "description": "Defines the action the Auto Scaling group should take when the lifecycle hook timeout elapses or if an unexpected failure occurs. The value for this parameter can be either CONTINUE or ABANDON",
- "type": "string"
- },
- "initial_lifecycle_hook_heartbeat_timeout": {
- "default": "60",
- "description": "Defines the amount of time, in seconds, that can elapse before the lifecycle hook times out. When the lifecycle hook times out, Auto Scaling performs the action defined in the DefaultResult parameter",
- "type": "string"
- },
- "initial_lifecycle_hook_lifecycle_transition": {
- "default": "",
- "description": "The instance state to which you want to attach the initial lifecycle hook",
- "type": "string"
- },
- "initial_lifecycle_hook_name": {
- "default": "",
- "description": "The name of initial lifecycle hook",
- "type": "string"
- },
- "initial_lifecycle_hook_notification_metadata": {
- "default": "",
- "description": "Contains additional information that you want to include any time Auto Scaling sends a message to the notification target",
- "type": "string"
- },
- "initial_lifecycle_hook_notification_target_arn": {
- "default": "",
- "description": "The ARN of the notification target that Auto Scaling will use to notify you when an instance is in the transition state for the lifecycle hook. This ARN target can be either an SQS queue or an SNS topic",
- "type": "string"
- },
- "initial_lifecycle_hook_role_arn": {
- "default": "",
- "description": "The ARN of the IAM role that allows the Auto Scaling group to publish to the specified notification target",
- "type": "string"
- },
- "instance_type": {
- "default": "",
- "description": "The size of instance to launch",
- "type": "string"
- },
- "key_name": {
- "default": "",
- "description": "The key name that should be used for the instance",
- "type": "string"
- },
- "launch_configuration": {
- "default": "",
- "description": "The name of the launch configuration to use (if it is created outside of this module)",
- "type": "string"
- },
- "lc_name": {
- "default": "",
- "description": "Creates a unique name for launch configuration beginning with the specified prefix",
- "type": "string"
- },
- "load_balancers": {
- "default": [],
- "description": "A list of elastic load balancer names to add to the autoscaling group names",
- "type": "list(string)"
- },
- "max_size": {
- "description": "The maximum size of the auto scale group",
- "type": "string"
- },
- "metrics_granularity": {
- "default": "1Minute",
- "description": "The granularity to associate with the metrics to collect. The only valid value is 1Minute",
- "type": "string"
- },
- "min_elb_capacity": {
- "default": 0,
- "description": "Setting this causes Terraform to wait for this number of instances to show up healthy in the ELB only on creation. Updates will not wait on ELB instance number changes",
- "type": "number"
- },
- "min_size": {
- "description": "The minimum size of the auto scale group",
- "type": "string"
- },
- "name": {
- "description": "Creates a unique name beginning with the specified prefix",
- "type": "string"
- },
- "placement_group": {
- "default": "",
- "description": "The name of the placement group into which you'll launch your instances, if any",
- "type": "string"
- },
- "placement_tenancy": {
- "default": "default",
- "description": "The tenancy of the instance. Valid values are 'default' or 'dedicated'",
- "type": "string"
- },
- "protect_from_scale_in": {
- "default": false,
- "description": "Allows setting instance protection. The autoscaling group will not select instances with this setting for termination during scale in events.",
- "type": "bool"
- },
- "recreate_asg_when_lc_changes": {
- "default": false,
- "description": "Whether to recreate an autoscaling group when launch configuration changes",
- "type": "bool"
- },
- "root_block_device": {
- "default": [],
- "description": "Customize details about the root block device of the instance",
- "type": "list(map(string))"
- },
- "security_groups": {
- "default": [],
- "description": "A list of security group IDs to assign to the launch configuration",
- "type": "list(string)"
- },
- "spot_price": {
- "default": "",
- "description": "The price to use for reserving spot instances",
- "type": "string"
- },
- "suspended_processes": {
- "default": [],
- "description": "A list of processes to suspend for the AutoScaling Group. The allowed values are Launch, Terminate, HealthCheck, ReplaceUnhealthy, AZRebalance, AlarmNotification, ScheduledActions, AddToLoadBalancer. Note that if you suspend either the Launch or Terminate process types, it can prevent your autoscaling group from functioning properly.",
- "type": "list(string)"
- },
- "tags": {
- "default": [],
- "description": "A list of tag blocks. Each element should have keys named key, value, and propagate_at_launch.",
- "type": "list(map(string))"
- },
- "tags_as_map": {
- "default": {},
- "description": "A map of tags and values in the same format as other resources accept. This will be converted into the non-standard format that the aws_autoscaling_group requires.",
- "type": "map(string)"
- },
- "target_group_arns": {
- "default": [],
- "description": "A list of aws_alb_target_group ARNs, for use with Application Load Balancing",
- "type": "list(string)"
- },
- "termination_policies": {
- "default": [
- "Default"
- ],
- "description": "A list of policies to decide how the instances in the auto scale group should be terminated. The allowed values are OldestInstance, NewestInstance, OldestLaunchConfiguration, ClosestToNextInstanceHour, Default",
- "type": "list(string)"
- },
- "user_data": {
- "default": " ",
- "description": "The user data to provide when launching the instance",
- "type": "string"
- },
- "vpc_zone_identifier": {
- "description": "A list of subnet IDs to launch resources in",
- "type": "list(string)"
- },
- "wait_for_capacity_timeout": {
- "default": "10m",
- "description": "A maximum duration that Terraform should wait for ASG instances to be healthy before timing out. (See also Waiting for Capacity below.) Setting this to '0' causes Terraform to skip all Capacity Waiting behavior.",
- "type": "string"
- },
- "wait_for_elb_capacity": {
- "default": "null",
- "description": "Setting this will cause Terraform to wait for exactly this number of healthy instances in all attached load balancers on both create and update operations. Takes precedence over min_elb_capacity behavior.",
- "type": "number"
- }
-}
diff --git a/modules-metadata/update_modules_metadata.sh b/modules-metadata/update_modules_metadata.sh
deleted file mode 100755
index 2af95bd..0000000
--- a/modules-metadata/update_modules_metadata.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env bash
-
-# Locate the directory in which this script is located
-readonly script_path="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-
-cd $script_path
-
-declare -a MODULES=(rds
-rds-aurora
-ec2-instance
-elb
-alb
-autoscaling
-security-group
-sns
-sqs
-vpc
-redshift
-s3-bucket)
-#cloudfront
-
-MODULES_DIR=/Users/Bob/Sites/terraform-aws-modules
-
-for module in "${MODULES[@]}"; do
-
- # Can't append extension for mktemp, so renaming instead
- tmp_file=$(mktemp "${TMPDIR:-/tmp}/terraform-hcl2-XXXXXXXXXX")
- mv "$tmp_file" "$tmp_file.tf"
- tmp_file_tf="$tmp_file.tf"
-
- # GNU AWK is required
- awk -f "terraform_hcl2.awk" ${MODULES_DIR}/terraform-aws-${module}/*.tf > "$tmp_file_tf"
-
- # hcltool comes from https://github.com/virtuald/pyhcl/blob/master/scripts/hcltool
- hcltool "$tmp_file_tf" | jq -r '.variable' > ${module}_variables.json
-
- jq -s '.[0] * .[1]' ${module}_variables.json ${module}_cloudcraft.json > ${module}.json
-
- rm -f "$tmp_file_tf"
-done
diff --git a/modules-metadata/vpc.json b/modules-metadata/vpc.json
deleted file mode 100644
index 4cd1565..0000000
--- a/modules-metadata/vpc.json
+++ /dev/null
@@ -1,1534 +0,0 @@
-{
- "amazon_side_asn": {
- "default": "64512",
- "description": "The Autonomous System Number (ASN) for the Amazon side of the gateway. By default the virtual private gateway is created with the current default Amazon ASN."
- },
- "apigw_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for API GW endpoint",
- "type": "bool"
- },
- "apigw_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for API GW endpoint",
- "type": "list(string)"
- },
- "apigw_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for API GW endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "appmesh_envoy_management_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for AppMesh endpoint",
- "type": "bool"
- },
- "appmesh_envoy_management_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for AppMesh endpoint",
- "type": "list(string)"
- },
- "appmesh_envoy_management_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for AppMesh endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "appstream_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for AppStream endpoint",
- "type": "bool"
- },
- "appstream_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for AppStream endpoint",
- "type": "list(string)"
- },
- "appstream_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for AppStream endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "assign_ipv6_address_on_creation": {
- "default": false,
- "description": "Assign IPv6 address on subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
- "type": "bool"
- },
- "athena_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Athena endpoint",
- "type": "bool"
- },
- "athena_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Athena endpoint",
- "type": "list(string)"
- },
- "athena_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Athena endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "azs": {
- "default": [],
- "description": "A list of availability zones in the region",
- "type": "list(string)"
- },
- "cidr": {
- "default": "0.0.0.0/0",
- "description": "The CIDR block for the VPC. Default value is a valid CIDR, but not acceptable by AWS and should be overridden",
- "type": "string"
- },
- "cloudformation_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Cloudformation endpoint",
- "type": "bool"
- },
- "cloudformation_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Cloudformation endpoint",
- "type": "list(string)"
- },
- "cloudformation_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Cloudformation endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "cloudtrail_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for CloudTrail endpoint",
- "type": "bool"
- },
- "cloudtrail_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for CloudTrail endpoint",
- "type": "list(string)"
- },
- "cloudtrail_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for CloudTrail endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "codebuild_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Codebuild endpoint"
- },
- "codebuild_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Codebuild endpoint"
- },
- "codebuild_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Codebuilt endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used."
- },
- "codecommit_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Codecommit endpoint"
- },
- "codecommit_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Codecommit endpoint"
- },
- "codecommit_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Codecommit endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used."
- },
- "codepipeline_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for CodePipeline endpoint",
- "type": "bool"
- },
- "codepipeline_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for CodePipeline endpoint",
- "type": "list(string)"
- },
- "codepipeline_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for CodePipeline endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "config_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for config endpoint"
- },
- "config_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for config endpoint"
- },
- "config_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for config endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used."
- },
- "create_database_internet_gateway_route": {
- "default": false,
- "description": "Controls if an internet gateway route for public database access should be created",
- "type": "bool"
- },
- "create_database_nat_gateway_route": {
- "default": false,
- "description": "Controls if a nat gateway route should be created to give internet access to the database subnets",
- "type": "bool"
- },
- "create_database_subnet_group": {
- "default": true,
- "description": "Controls if database subnet group should be created",
- "type": "bool"
- },
- "create_database_subnet_route_table": {
- "default": false,
- "description": "Controls if separate route table for database should be created",
- "type": "bool"
- },
- "create_elasticache_subnet_group": {
- "default": true,
- "description": "Controls if elasticache subnet group should be created",
- "type": "bool"
- },
- "create_elasticache_subnet_route_table": {
- "default": false,
- "description": "Controls if separate route table for elasticache should be created",
- "type": "bool"
- },
- "create_redshift_subnet_group": {
- "default": true,
- "description": "Controls if redshift subnet group should be created",
- "type": "bool"
- },
- "create_redshift_subnet_route_table": {
- "default": false,
- "description": "Controls if separate route table for redshift should be created",
- "type": "bool"
- },
- "create_vpc": {
- "default": true,
- "description": "Controls if VPC should be created (it affects almost all resources)",
- "type": "bool"
- },
- "database_acl_tags": {
- "default": {},
- "description": "Additional tags for the database subnets network ACL",
- "type": "map(string)"
- },
- "database_dedicated_network_acl": {
- "default": false,
- "description": "Whether to use dedicated network ACL (not default) and custom rules for database subnets",
- "type": "bool"
- },
- "database_inbound_acl_rules": {
- "default": [
- {
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_action": "allow",
- "rule_number": 100,
- "to_port": 0
- }
- ],
- "description": "Database subnets inbound network ACL rules",
- "type": "list(map(string))"
- },
- "database_outbound_acl_rules": {
- "default": [
- {
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_action": "allow",
- "rule_number": 100,
- "to_port": 0
- }
- ],
- "description": "Database subnets outbound network ACL rules",
- "type": "list(map(string))"
- },
- "database_route_table_tags": {
- "default": {},
- "description": "Additional tags for the database route tables",
- "type": "map(string)"
- },
- "database_subnet_assign_ipv6_address_on_creation": {
- "default": "null",
- "description": "Assign IPv6 address on database subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
- "type": "bool"
- },
- "database_subnet_group_tags": {
- "default": {},
- "description": "Additional tags for the database subnet group",
- "type": "map(string)"
- },
- "database_subnet_ipv6_prefixes": {
- "default": [],
- "description": "Assigns IPv6 database subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
- "type": "list"
- },
- "database_subnet_suffix": {
- "default": "db",
- "description": "Suffix to append to database subnets name",
- "type": "string"
- },
- "database_subnet_tags": {
- "default": {},
- "description": "Additional tags for the database subnets",
- "type": "map(string)"
- },
- "database_subnets": {
- "default": [],
- "description": "A list of database subnets",
- "type": "list(string)"
- },
- "default_network_acl_egress": {
- "default": [
- {
- "action": "allow",
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_no": 100,
- "to_port": 0
- },
- {
- "action": "allow",
- "from_port": 0,
- "ipv6_cidr_block": "::/0",
- "protocol": "-1",
- "rule_no": 101,
- "to_port": 0
- }
- ],
- "description": "List of maps of egress rules to set on the Default Network ACL",
- "type": "list(map(string))"
- },
- "default_network_acl_ingress": {
- "default": [
- {
- "action": "allow",
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_no": 100,
- "to_port": 0
- },
- {
- "action": "allow",
- "from_port": 0,
- "ipv6_cidr_block": "::/0",
- "protocol": "-1",
- "rule_no": 101,
- "to_port": 0
- }
- ],
- "description": "List of maps of ingress rules to set on the Default Network ACL",
- "type": "list(map(string))"
- },
- "default_network_acl_name": {
- "default": "",
- "description": "Name to be used on the Default Network ACL",
- "type": "string"
- },
- "default_network_acl_tags": {
- "default": {},
- "description": "Additional tags for the Default Network ACL",
- "type": "map(string)"
- },
- "default_vpc_enable_classiclink": {
- "default": false,
- "description": "Should be true to enable ClassicLink in the Default VPC",
- "type": "bool"
- },
- "default_vpc_enable_dns_hostnames": {
- "default": false,
- "description": "Should be true to enable DNS hostnames in the Default VPC",
- "type": "bool"
- },
- "default_vpc_enable_dns_support": {
- "default": true,
- "description": "Should be true to enable DNS support in the Default VPC",
- "type": "bool"
- },
- "default_vpc_name": {
- "default": "",
- "description": "Name to be used on the Default VPC",
- "type": "string"
- },
- "default_vpc_tags": {
- "default": {},
- "description": "Additional tags for the Default VPC",
- "type": "map(string)"
- },
- "dhcp_options_domain_name": {
- "default": "",
- "description": "Specifies DNS name for DHCP options set (requires enable_dhcp_options set to true)",
- "type": "string"
- },
- "dhcp_options_domain_name_servers": {
- "default": [
- "AmazonProvidedDNS"
- ],
- "description": "Specify a list of DNS server addresses for DHCP options set, default to AWS provided (requires enable_dhcp_options set to true)",
- "type": "list(string)"
- },
- "dhcp_options_netbios_name_servers": {
- "default": [],
- "description": "Specify a list of netbios servers for DHCP options set (requires enable_dhcp_options set to true)",
- "type": "list(string)"
- },
- "dhcp_options_netbios_node_type": {
- "default": "",
- "description": "Specify netbios node_type for DHCP options set (requires enable_dhcp_options set to true)",
- "type": "string"
- },
- "dhcp_options_ntp_servers": {
- "default": [],
- "description": "Specify a list of NTP servers for DHCP options set (requires enable_dhcp_options set to true)",
- "type": "list(string)"
- },
- "dhcp_options_tags": {
- "default": {},
- "description": "Additional tags for the DHCP option set (requires enable_dhcp_options set to true)",
- "type": "map(string)"
- },
- "ec2_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for EC2 endpoint",
- "type": "bool"
- },
- "ec2_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for EC2 endpoint",
- "type": "list(string)"
- },
- "ec2_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for EC2 endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "ec2messages_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for EC2MESSAGES endpoint",
- "type": "bool"
- },
- "ec2messages_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for EC2MESSAGES endpoint",
- "type": "list(string)"
- },
- "ec2messages_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for EC2MESSAGES endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "ecr_api_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for ECR API endpoint",
- "type": "bool"
- },
- "ecr_api_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for ECR API endpoint",
- "type": "list(string)"
- },
- "ecr_api_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for ECR api endpoint. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "ecr_dkr_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for ECR DKR endpoint",
- "type": "bool"
- },
- "ecr_dkr_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for ECR DKR endpoint",
- "type": "list(string)"
- },
- "ecr_dkr_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for ECR dkr endpoint. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "ecs_agent_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for ECS Agent endpoint",
- "type": "bool"
- },
- "ecs_agent_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for ECS Agent endpoint",
- "type": "list(string)"
- },
- "ecs_agent_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for ECS Agent endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "ecs_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for ECS endpoint",
- "type": "bool"
- },
- "ecs_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for ECS endpoint",
- "type": "list(string)"
- },
- "ecs_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for ECS endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "ecs_telemetry_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for ECS Telemetry endpoint",
- "type": "bool"
- },
- "ecs_telemetry_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for ECS Telemetry endpoint",
- "type": "list(string)"
- },
- "ecs_telemetry_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for ECS Telemetry endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "elasticache_acl_tags": {
- "default": {},
- "description": "Additional tags for the elasticache subnets network ACL",
- "type": "map(string)"
- },
- "elasticache_dedicated_network_acl": {
- "default": false,
- "description": "Whether to use dedicated network ACL (not default) and custom rules for elasticache subnets",
- "type": "bool"
- },
- "elasticache_inbound_acl_rules": {
- "default": [
- {
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_action": "allow",
- "rule_number": 100,
- "to_port": 0
- }
- ],
- "description": "Elasticache subnets inbound network ACL rules",
- "type": "list(map(string))"
- },
- "elasticache_outbound_acl_rules": {
- "default": [
- {
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_action": "allow",
- "rule_number": 100,
- "to_port": 0
- }
- ],
- "description": "Elasticache subnets outbound network ACL rules",
- "type": "list(map(string))"
- },
- "elasticache_route_table_tags": {
- "default": {},
- "description": "Additional tags for the elasticache route tables",
- "type": "map(string)"
- },
- "elasticache_subnet_assign_ipv6_address_on_creation": {
- "default": "null",
- "description": "Assign IPv6 address on elasticache subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
- "type": "bool"
- },
- "elasticache_subnet_ipv6_prefixes": {
- "default": [],
- "description": "Assigns IPv6 elasticache subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
- "type": "list"
- },
- "elasticache_subnet_suffix": {
- "default": "elasticache",
- "description": "Suffix to append to elasticache subnets name",
- "type": "string"
- },
- "elasticache_subnet_tags": {
- "default": {},
- "description": "Additional tags for the elasticache subnets",
- "type": "map(string)"
- },
- "elasticache_subnets": {
- "default": [],
- "description": "A list of elasticache subnets",
- "type": "list(string)"
- },
- "elasticloadbalancing_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Elastic Load Balancing endpoint",
- "type": "bool"
- },
- "elasticloadbalancing_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Elastic Load Balancing endpoint",
- "type": "list(string)"
- },
- "elasticloadbalancing_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Elastic Load Balancing endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "enable_apigw_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an api gateway endpoint to the VPC",
- "type": "bool"
- },
- "enable_appmesh_envoy_management_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a AppMesh endpoint to the VPC",
- "type": "bool"
- },
- "enable_appstream_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a AppStream endpoint to the VPC",
- "type": "bool"
- },
- "enable_athena_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a Athena endpoint to the VPC",
- "type": "bool"
- },
- "enable_classiclink": {
- "default": "null",
- "description": "Should be true to enable ClassicLink for the VPC. Only valid in regions and accounts that support EC2 Classic.",
- "type": "bool"
- },
- "enable_classiclink_dns_support": {
- "default": "null",
- "description": "Should be true to enable ClassicLink DNS Support for the VPC. Only valid in regions and accounts that support EC2 Classic.",
- "type": "bool"
- },
- "enable_cloudformation_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a Cloudformation endpoint to the VPC",
- "type": "bool"
- },
- "enable_cloudtrail_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a CloudTrail endpoint to the VPC",
- "type": "bool"
- },
- "enable_codebuild_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an Codebuild endpoint to the VPC"
- },
- "enable_codecommit_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an Codecommit endpoint to the VPC"
- },
- "enable_codepipeline_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a CodePipeline endpoint to the VPC",
- "type": "bool"
- },
- "enable_config_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an config endpoint to the VPC"
- },
- "enable_dhcp_options": {
- "default": false,
- "description": "Should be true if you want to specify a DHCP options set with a custom domain name, DNS servers, NTP servers, netbios servers, and/or netbios server type",
- "type": "bool"
- },
- "enable_dns_hostnames": {
- "default": false,
- "description": "Should be true to enable DNS hostnames in the VPC",
- "type": "bool"
- },
- "enable_dns_support": {
- "default": true,
- "description": "Should be true to enable DNS support in the VPC",
- "type": "bool"
- },
- "enable_dynamodb_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a DynamoDB endpoint to the VPC",
- "type": "bool"
- },
- "enable_ec2_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an EC2 endpoint to the VPC",
- "type": "bool"
- },
- "enable_ec2messages_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an EC2MESSAGES endpoint to the VPC",
- "type": "bool"
- },
- "enable_ecr_api_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an ecr api endpoint to the VPC",
- "type": "bool"
- },
- "enable_ecr_dkr_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an ecr dkr endpoint to the VPC",
- "type": "bool"
- },
- "enable_ecs_agent_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a ECS Agent endpoint to the VPC",
- "type": "bool"
- },
- "enable_ecs_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a ECS endpoint to the VPC",
- "type": "bool"
- },
- "enable_ecs_telemetry_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a ECS Telemetry endpoint to the VPC",
- "type": "bool"
- },
- "enable_elasticloadbalancing_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a Elastic Load Balancing endpoint to the VPC",
- "type": "bool"
- },
- "enable_events_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a CloudWatch Events endpoint to the VPC",
- "type": "bool"
- },
- "enable_git_codecommit_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an Git Codecommit endpoint to the VPC"
- },
- "enable_glue_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a Glue endpoint to the VPC",
- "type": "bool"
- },
- "enable_ipv6": {
- "default": false,
- "description": "Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for the VPC. You cannot specify the range of IP addresses, or the size of the CIDR block.",
- "type": "bool"
- },
- "enable_kinesis_firehose_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a Kinesis Firehose endpoint to the VPC",
- "type": "bool"
- },
- "enable_kinesis_streams_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a Kinesis Streams endpoint to the VPC",
- "type": "bool"
- },
- "enable_kms_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a KMS endpoint to the VPC",
- "type": "bool"
- },
- "enable_logs_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a CloudWatch Logs endpoint to the VPC",
- "type": "bool"
- },
- "enable_monitoring_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a CloudWatch Monitoring endpoint to the VPC",
- "type": "bool"
- },
- "enable_nat_gateway": {
- "default": false,
- "description": "Should be true if you want to provision NAT Gateways for each of your private networks",
- "type": "bool"
- },
- "enable_public_redshift": {
- "default": false,
- "description": "Controls if redshift should have public routing table",
- "type": "bool"
- },
- "enable_rekognition_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a Rekognition endpoint to the VPC",
- "type": "bool"
- },
- "enable_s3_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an S3 endpoint to the VPC",
- "type": "bool"
- },
- "enable_sagemaker_api_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a SageMaker API endpoint to the VPC",
- "type": "bool"
- },
- "enable_sagemaker_notebook_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a Sagemaker Notebook endpoint to the VPC",
- "type": "bool"
- },
- "enable_sagemaker_runtime_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a SageMaker Runtime endpoint to the VPC",
- "type": "bool"
- },
- "enable_secretsmanager_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an Secrets Manager endpoint to the VPC",
- "type": "bool"
- },
- "enable_servicecatalog_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a Service Catalog endpoint to the VPC",
- "type": "bool"
- },
- "enable_sns_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a SNS endpoint to the VPC",
- "type": "bool"
- },
- "enable_sqs_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an SQS endpoint to the VPC"
- },
- "enable_ssm_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an SSM endpoint to the VPC",
- "type": "bool"
- },
- "enable_ssmmessages_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a SSMMESSAGES endpoint to the VPC",
- "type": "bool"
- },
- "enable_storagegateway_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a Storage Gateway endpoint to the VPC",
- "type": "bool"
- },
- "enable_sts_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a STS endpoint to the VPC",
- "type": "bool"
- },
- "enable_transfer_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a Transfer endpoint to the VPC",
- "type": "bool"
- },
- "enable_transferserver_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a Transfer Server endpoint to the VPC",
- "type": "bool"
- },
- "enable_vpn_gateway": {
- "default": false,
- "description": "Should be true if you want to create a new VPN Gateway resource and attach it to the VPC",
- "type": "bool"
- },
- "events_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for CloudWatch Events endpoint",
- "type": "bool"
- },
- "events_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for CloudWatch Events endpoint",
- "type": "list(string)"
- },
- "events_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for CloudWatch Events endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "external_nat_ip_ids": {
- "default": [],
- "description": "List of EIP IDs to be assigned to the NAT Gateways (used in combination with reuse_nat_ips)",
- "type": "list(string)"
- },
- "git_codecommit_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Git Codecommit endpoint"
- },
- "git_codecommit_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Git Codecommit endpoint"
- },
- "git_codecommit_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Git Codecommit endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used."
- },
- "glue_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Glue endpoint",
- "type": "bool"
- },
- "glue_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Glue endpoint",
- "type": "list(string)"
- },
- "glue_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Glue endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "igw_tags": {
- "default": {},
- "description": "Additional tags for the internet gateway",
- "type": "map(string)"
- },
- "instance_tenancy": {
- "default": "default",
- "description": "A tenancy option for instances launched into the VPC",
- "type": "string"
- },
- "intra_acl_tags": {
- "default": {},
- "description": "Additional tags for the intra subnets network ACL",
- "type": "map(string)"
- },
- "intra_dedicated_network_acl": {
- "default": false,
- "description": "Whether to use dedicated network ACL (not default) and custom rules for intra subnets",
- "type": "bool"
- },
- "intra_inbound_acl_rules": {
- "default": [
- {
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_action": "allow",
- "rule_number": 100,
- "to_port": 0
- }
- ],
- "description": "Intra subnets inbound network ACLs",
- "type": "list(map(string))"
- },
- "intra_outbound_acl_rules": {
- "default": [
- {
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_action": "allow",
- "rule_number": 100,
- "to_port": 0
- }
- ],
- "description": "Intra subnets outbound network ACLs",
- "type": "list(map(string))"
- },
- "intra_route_table_tags": {
- "default": {},
- "description": "Additional tags for the intra route tables",
- "type": "map(string)"
- },
- "intra_subnet_assign_ipv6_address_on_creation": {
- "default": "null",
- "description": "Assign IPv6 address on intra subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
- "type": "bool"
- },
- "intra_subnet_ipv6_prefixes": {
- "default": [],
- "description": "Assigns IPv6 intra subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
- "type": "list"
- },
- "intra_subnet_suffix": {
- "default": "intra",
- "description": "Suffix to append to intra subnets name",
- "type": "string"
- },
- "intra_subnet_tags": {
- "default": {},
- "description": "Additional tags for the intra subnets",
- "type": "map(string)"
- },
- "intra_subnets": {
- "default": [],
- "description": "A list of intra subnets",
- "type": "list(string)"
- },
- "kinesis_firehose_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Kinesis Firehose endpoint",
- "type": "bool"
- },
- "kinesis_firehose_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Kinesis Firehose endpoint",
- "type": "list(string)"
- },
- "kinesis_firehose_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Kinesis Firehose endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "kinesis_streams_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Kinesis Streams endpoint",
- "type": "bool"
- },
- "kinesis_streams_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Kinesis Streams endpoint",
- "type": "list(string)"
- },
- "kinesis_streams_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Kinesis Streams endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "kms_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for KMS endpoint",
- "type": "bool"
- },
- "kms_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for KMS endpoint",
- "type": "list(string)"
- },
- "kms_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for KMS endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "logs_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for CloudWatch Logs endpoint",
- "type": "bool"
- },
- "logs_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for CloudWatch Logs endpoint",
- "type": "list(string)"
- },
- "logs_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for CloudWatch Logs endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "manage_default_network_acl": {
- "default": false,
- "description": "Should be true to adopt and manage Default Network ACL",
- "type": "bool"
- },
- "manage_default_vpc": {
- "default": false,
- "description": "Should be true to adopt and manage Default VPC",
- "type": "bool"
- },
- "map_public_ip_on_launch": {
- "default": true,
- "description": "Should be false if you do not want to auto-assign public IP on launch",
- "type": "bool"
- },
- "monitoring_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for CloudWatch Monitoring endpoint",
- "type": "bool"
- },
- "monitoring_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for CloudWatch Monitoring endpoint",
- "type": "list(string)"
- },
- "monitoring_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for CloudWatch Monitoring endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "name": {
- "default": "",
- "description": "Name to be used on all the resources as identifier",
- "type": "string"
- },
- "nat_eip_tags": {
- "default": {},
- "description": "Additional tags for the NAT EIP",
- "type": "map(string)"
- },
- "nat_gateway_tags": {
- "default": {},
- "description": "Additional tags for the NAT gateways",
- "type": "map(string)"
- },
- "one_nat_gateway_per_az": {
- "default": false,
- "description": "Should be true if you want only one NAT Gateway per availability zone. Requires `var.azs` to be set, and the number of `public_subnets` created to be greater than or equal to the number of availability zones specified in `var.azs`.",
- "type": "bool"
- },
- "private_acl_tags": {
- "default": {},
- "description": "Additional tags for the private subnets network ACL",
- "type": "map(string)"
- },
- "private_dedicated_network_acl": {
- "default": false,
- "description": "Whether to use dedicated network ACL (not default) and custom rules for private subnets",
- "type": "bool"
- },
- "private_inbound_acl_rules": {
- "default": [
- {
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_action": "allow",
- "rule_number": 100,
- "to_port": 0
- }
- ],
- "description": "Private subnets inbound network ACLs",
- "type": "list(map(string))"
- },
- "private_outbound_acl_rules": {
- "default": [
- {
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_action": "allow",
- "rule_number": 100,
- "to_port": 0
- }
- ],
- "description": "Private subnets outbound network ACLs",
- "type": "list(map(string))"
- },
- "private_route_table_tags": {
- "default": {},
- "description": "Additional tags for the private route tables",
- "type": "map(string)"
- },
- "private_subnet_assign_ipv6_address_on_creation": {
- "default": "null",
- "description": "Assign IPv6 address on private subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
- "type": "bool"
- },
- "private_subnet_ipv6_prefixes": {
- "default": [],
- "description": "Assigns IPv6 private subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
- "type": "list"
- },
- "private_subnet_suffix": {
- "default": "private",
- "description": "Suffix to append to private subnets name",
- "type": "string"
- },
- "private_subnet_tags": {
- "default": {},
- "description": "Additional tags for the private subnets",
- "type": "map(string)"
- },
- "private_subnets": {
- "default": [],
- "description": "A list of private subnets inside the VPC",
- "type": "list(string)"
- },
- "propagate_private_route_tables_vgw": {
- "default": false,
- "description": "Should be true if you want route table propagation",
- "type": "bool"
- },
- "propagate_public_route_tables_vgw": {
- "default": false,
- "description": "Should be true if you want route table propagation",
- "type": "bool"
- },
- "public_acl_tags": {
- "default": {},
- "description": "Additional tags for the public subnets network ACL",
- "type": "map(string)"
- },
- "public_dedicated_network_acl": {
- "default": false,
- "description": "Whether to use dedicated network ACL (not default) and custom rules for public subnets",
- "type": "bool"
- },
- "public_inbound_acl_rules": {
- "default": [
- {
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_action": "allow",
- "rule_number": 100,
- "to_port": 0
- }
- ],
- "description": "Public subnets inbound network ACLs",
- "type": "list(map(string))"
- },
- "public_outbound_acl_rules": {
- "default": [
- {
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_action": "allow",
- "rule_number": 100,
- "to_port": 0
- }
- ],
- "description": "Public subnets outbound network ACLs",
- "type": "list(map(string))"
- },
- "public_route_table_tags": {
- "default": {},
- "description": "Additional tags for the public route tables",
- "type": "map(string)"
- },
- "public_subnet_assign_ipv6_address_on_creation": {
- "default": "null",
- "description": "Assign IPv6 address on public subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
- "type": "bool"
- },
- "public_subnet_ipv6_prefixes": {
- "default": [],
- "description": "Assigns IPv6 public subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
- "type": "list"
- },
- "public_subnet_suffix": {
- "default": "public",
- "description": "Suffix to append to public subnets name",
- "type": "string"
- },
- "public_subnet_tags": {
- "default": {},
- "description": "Additional tags for the public subnets",
- "type": "map(string)"
- },
- "public_subnets": {
- "default": [],
- "description": "A list of public subnets inside the VPC",
- "type": "list(string)"
- },
- "redshift_acl_tags": {
- "default": {},
- "description": "Additional tags for the redshift subnets network ACL",
- "type": "map(string)"
- },
- "redshift_dedicated_network_acl": {
- "default": false,
- "description": "Whether to use dedicated network ACL (not default) and custom rules for redshift subnets",
- "type": "bool"
- },
- "redshift_inbound_acl_rules": {
- "default": [
- {
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_action": "allow",
- "rule_number": 100,
- "to_port": 0
- }
- ],
- "description": "Redshift subnets inbound network ACL rules",
- "type": "list(map(string))"
- },
- "redshift_outbound_acl_rules": {
- "default": [
- {
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_action": "allow",
- "rule_number": 100,
- "to_port": 0
- }
- ],
- "description": "Redshift subnets outbound network ACL rules",
- "type": "list(map(string))"
- },
- "redshift_route_table_tags": {
- "default": {},
- "description": "Additional tags for the redshift route tables",
- "type": "map(string)"
- },
- "redshift_subnet_assign_ipv6_address_on_creation": {
- "default": "null",
- "description": "Assign IPv6 address on redshift subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
- "type": "bool"
- },
- "redshift_subnet_group_tags": {
- "default": {},
- "description": "Additional tags for the redshift subnet group",
- "type": "map(string)"
- },
- "redshift_subnet_ipv6_prefixes": {
- "default": [],
- "description": "Assigns IPv6 redshift subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
- "type": "list"
- },
- "redshift_subnet_suffix": {
- "default": "redshift",
- "description": "Suffix to append to redshift subnets name",
- "type": "string"
- },
- "redshift_subnet_tags": {
- "default": {},
- "description": "Additional tags for the redshift subnets",
- "type": "map(string)"
- },
- "redshift_subnets": {
- "default": [],
- "description": "A list of redshift subnets",
- "type": "list(string)"
- },
- "rekognition_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Rekognition endpoint",
- "type": "bool"
- },
- "rekognition_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Rekognition endpoint",
- "type": "list(string)"
- },
- "rekognition_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Rekognition endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "reuse_nat_ips": {
- "default": false,
- "description": "Should be true if you don't want EIPs to be created for your NAT Gateways and will instead pass them in via the 'external_nat_ip_ids' variable",
- "type": "bool"
- },
- "sagemaker_api_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for SageMaker API endpoint",
- "type": "bool"
- },
- "sagemaker_api_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for SageMaker API endpoint",
- "type": "list(string)"
- },
- "sagemaker_api_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for SageMaker API endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "sagemaker_notebook_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Sagemaker Notebook endpoint",
- "type": "bool"
- },
- "sagemaker_notebook_endpoint_region": {
- "default": "",
- "description": "Region to use for Sagemaker Notebook endpoint",
- "type": "string"
- },
- "sagemaker_notebook_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Sagemaker Notebook endpoint",
- "type": "list(string)"
- },
- "sagemaker_notebook_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Sagemaker Notebook endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "sagemaker_runtime_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for SageMaker Runtime endpoint",
- "type": "bool"
- },
- "sagemaker_runtime_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for SageMaker Runtime endpoint",
- "type": "list(string)"
- },
- "sagemaker_runtime_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for SageMaker Runtime endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "secondary_cidr_blocks": {
- "default": [],
- "description": "List of secondary CIDR blocks to associate with the VPC to extend the IP Address pool",
- "type": "list(string)"
- },
- "secretsmanager_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Secrets Manager endpoint",
- "type": "bool"
- },
- "secretsmanager_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Secrets Manager endpoint",
- "type": "list(string)"
- },
- "secretsmanager_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Secrets Manager endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "servicecatalog_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Service Catalog endpoint",
- "type": "bool"
- },
- "servicecatalog_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Service Catalog endpoint",
- "type": "list(string)"
- },
- "servicecatalog_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Service Catalog endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "single_nat_gateway": {
- "default": false,
- "description": "Should be true if you want to provision a single shared NAT Gateway across all of your private networks",
- "type": "bool"
- },
- "sns_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for SNS endpoint",
- "type": "bool"
- },
- "sns_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for SNS endpoint",
- "type": "list(string)"
- },
- "sns_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for SNS endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "sqs_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for SQS endpoint"
- },
- "sqs_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for SQS endpoint"
- },
- "sqs_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for SQS endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used."
- },
- "ssm_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for SSM endpoint",
- "type": "bool"
- },
- "ssm_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for SSM endpoint",
- "type": "list(string)"
- },
- "ssm_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for SSM endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "ssmmessages_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for SSMMESSAGES endpoint",
- "type": "bool"
- },
- "ssmmessages_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for SSMMESSAGES endpoint",
- "type": "list(string)"
- },
- "ssmmessages_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for SSMMESSAGES endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "storagegateway_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Storage Gateway endpoint",
- "type": "bool"
- },
- "storagegateway_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Storage Gateway endpoint",
- "type": "list(string)"
- },
- "storagegateway_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Storage Gateway endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "sts_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for STS endpoint",
- "type": "bool"
- },
- "sts_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for STS endpoint",
- "type": "list(string)"
- },
- "sts_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for STS endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "tags": {
- "default": {},
- "description": "A map of tags to add to all resources",
- "type": "map(string)"
- },
- "transfer_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Transfer endpoint",
- "type": "bool"
- },
- "transfer_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Transfer endpoint",
- "type": "list(string)"
- },
- "transfer_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Transfer endpoint. Only a single subnet within an AZ is supported. Ifomitted, private subnets will be used.",
- "type": "list(string)"
- },
- "transferserver_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Transfer Server endpoint",
- "type": "bool"
- },
- "transferserver_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Transfer Server endpoint",
- "type": "list(string)"
- },
- "transferserver_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Transfer Server endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "vpc_endpoint_tags": {
- "default": {},
- "description": "Additional tags for the VPC Endpoints",
- "type": "map(string)"
- },
- "vpc_tags": {
- "default": {},
- "description": "Additional tags for the VPC",
- "type": "map(string)"
- },
- "vpn_gateway_id": {
- "default": "",
- "description": "ID of VPN Gateway to attach to the VPC"
- },
- "vpn_gateway_tags": {
- "default": {},
- "description": "Additional tags for the VPN gateway",
- "type": "map(string)"
- }
-}
diff --git a/modules-metadata/vpc_variables.json b/modules-metadata/vpc_variables.json
deleted file mode 100644
index 4cd1565..0000000
--- a/modules-metadata/vpc_variables.json
+++ /dev/null
@@ -1,1534 +0,0 @@
-{
- "amazon_side_asn": {
- "default": "64512",
- "description": "The Autonomous System Number (ASN) for the Amazon side of the gateway. By default the virtual private gateway is created with the current default Amazon ASN."
- },
- "apigw_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for API GW endpoint",
- "type": "bool"
- },
- "apigw_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for API GW endpoint",
- "type": "list(string)"
- },
- "apigw_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for API GW endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "appmesh_envoy_management_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for AppMesh endpoint",
- "type": "bool"
- },
- "appmesh_envoy_management_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for AppMesh endpoint",
- "type": "list(string)"
- },
- "appmesh_envoy_management_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for AppMesh endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "appstream_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for AppStream endpoint",
- "type": "bool"
- },
- "appstream_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for AppStream endpoint",
- "type": "list(string)"
- },
- "appstream_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for AppStream endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "assign_ipv6_address_on_creation": {
- "default": false,
- "description": "Assign IPv6 address on subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
- "type": "bool"
- },
- "athena_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Athena endpoint",
- "type": "bool"
- },
- "athena_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Athena endpoint",
- "type": "list(string)"
- },
- "athena_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Athena endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "azs": {
- "default": [],
- "description": "A list of availability zones in the region",
- "type": "list(string)"
- },
- "cidr": {
- "default": "0.0.0.0/0",
- "description": "The CIDR block for the VPC. Default value is a valid CIDR, but not acceptable by AWS and should be overridden",
- "type": "string"
- },
- "cloudformation_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Cloudformation endpoint",
- "type": "bool"
- },
- "cloudformation_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Cloudformation endpoint",
- "type": "list(string)"
- },
- "cloudformation_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Cloudformation endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "cloudtrail_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for CloudTrail endpoint",
- "type": "bool"
- },
- "cloudtrail_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for CloudTrail endpoint",
- "type": "list(string)"
- },
- "cloudtrail_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for CloudTrail endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "codebuild_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Codebuild endpoint"
- },
- "codebuild_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Codebuild endpoint"
- },
- "codebuild_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Codebuilt endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used."
- },
- "codecommit_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Codecommit endpoint"
- },
- "codecommit_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Codecommit endpoint"
- },
- "codecommit_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Codecommit endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used."
- },
- "codepipeline_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for CodePipeline endpoint",
- "type": "bool"
- },
- "codepipeline_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for CodePipeline endpoint",
- "type": "list(string)"
- },
- "codepipeline_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for CodePipeline endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "config_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for config endpoint"
- },
- "config_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for config endpoint"
- },
- "config_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for config endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used."
- },
- "create_database_internet_gateway_route": {
- "default": false,
- "description": "Controls if an internet gateway route for public database access should be created",
- "type": "bool"
- },
- "create_database_nat_gateway_route": {
- "default": false,
- "description": "Controls if a nat gateway route should be created to give internet access to the database subnets",
- "type": "bool"
- },
- "create_database_subnet_group": {
- "default": true,
- "description": "Controls if database subnet group should be created",
- "type": "bool"
- },
- "create_database_subnet_route_table": {
- "default": false,
- "description": "Controls if separate route table for database should be created",
- "type": "bool"
- },
- "create_elasticache_subnet_group": {
- "default": true,
- "description": "Controls if elasticache subnet group should be created",
- "type": "bool"
- },
- "create_elasticache_subnet_route_table": {
- "default": false,
- "description": "Controls if separate route table for elasticache should be created",
- "type": "bool"
- },
- "create_redshift_subnet_group": {
- "default": true,
- "description": "Controls if redshift subnet group should be created",
- "type": "bool"
- },
- "create_redshift_subnet_route_table": {
- "default": false,
- "description": "Controls if separate route table for redshift should be created",
- "type": "bool"
- },
- "create_vpc": {
- "default": true,
- "description": "Controls if VPC should be created (it affects almost all resources)",
- "type": "bool"
- },
- "database_acl_tags": {
- "default": {},
- "description": "Additional tags for the database subnets network ACL",
- "type": "map(string)"
- },
- "database_dedicated_network_acl": {
- "default": false,
- "description": "Whether to use dedicated network ACL (not default) and custom rules for database subnets",
- "type": "bool"
- },
- "database_inbound_acl_rules": {
- "default": [
- {
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_action": "allow",
- "rule_number": 100,
- "to_port": 0
- }
- ],
- "description": "Database subnets inbound network ACL rules",
- "type": "list(map(string))"
- },
- "database_outbound_acl_rules": {
- "default": [
- {
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_action": "allow",
- "rule_number": 100,
- "to_port": 0
- }
- ],
- "description": "Database subnets outbound network ACL rules",
- "type": "list(map(string))"
- },
- "database_route_table_tags": {
- "default": {},
- "description": "Additional tags for the database route tables",
- "type": "map(string)"
- },
- "database_subnet_assign_ipv6_address_on_creation": {
- "default": "null",
- "description": "Assign IPv6 address on database subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
- "type": "bool"
- },
- "database_subnet_group_tags": {
- "default": {},
- "description": "Additional tags for the database subnet group",
- "type": "map(string)"
- },
- "database_subnet_ipv6_prefixes": {
- "default": [],
- "description": "Assigns IPv6 database subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
- "type": "list"
- },
- "database_subnet_suffix": {
- "default": "db",
- "description": "Suffix to append to database subnets name",
- "type": "string"
- },
- "database_subnet_tags": {
- "default": {},
- "description": "Additional tags for the database subnets",
- "type": "map(string)"
- },
- "database_subnets": {
- "default": [],
- "description": "A list of database subnets",
- "type": "list(string)"
- },
- "default_network_acl_egress": {
- "default": [
- {
- "action": "allow",
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_no": 100,
- "to_port": 0
- },
- {
- "action": "allow",
- "from_port": 0,
- "ipv6_cidr_block": "::/0",
- "protocol": "-1",
- "rule_no": 101,
- "to_port": 0
- }
- ],
- "description": "List of maps of egress rules to set on the Default Network ACL",
- "type": "list(map(string))"
- },
- "default_network_acl_ingress": {
- "default": [
- {
- "action": "allow",
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_no": 100,
- "to_port": 0
- },
- {
- "action": "allow",
- "from_port": 0,
- "ipv6_cidr_block": "::/0",
- "protocol": "-1",
- "rule_no": 101,
- "to_port": 0
- }
- ],
- "description": "List of maps of ingress rules to set on the Default Network ACL",
- "type": "list(map(string))"
- },
- "default_network_acl_name": {
- "default": "",
- "description": "Name to be used on the Default Network ACL",
- "type": "string"
- },
- "default_network_acl_tags": {
- "default": {},
- "description": "Additional tags for the Default Network ACL",
- "type": "map(string)"
- },
- "default_vpc_enable_classiclink": {
- "default": false,
- "description": "Should be true to enable ClassicLink in the Default VPC",
- "type": "bool"
- },
- "default_vpc_enable_dns_hostnames": {
- "default": false,
- "description": "Should be true to enable DNS hostnames in the Default VPC",
- "type": "bool"
- },
- "default_vpc_enable_dns_support": {
- "default": true,
- "description": "Should be true to enable DNS support in the Default VPC",
- "type": "bool"
- },
- "default_vpc_name": {
- "default": "",
- "description": "Name to be used on the Default VPC",
- "type": "string"
- },
- "default_vpc_tags": {
- "default": {},
- "description": "Additional tags for the Default VPC",
- "type": "map(string)"
- },
- "dhcp_options_domain_name": {
- "default": "",
- "description": "Specifies DNS name for DHCP options set (requires enable_dhcp_options set to true)",
- "type": "string"
- },
- "dhcp_options_domain_name_servers": {
- "default": [
- "AmazonProvidedDNS"
- ],
- "description": "Specify a list of DNS server addresses for DHCP options set, default to AWS provided (requires enable_dhcp_options set to true)",
- "type": "list(string)"
- },
- "dhcp_options_netbios_name_servers": {
- "default": [],
- "description": "Specify a list of netbios servers for DHCP options set (requires enable_dhcp_options set to true)",
- "type": "list(string)"
- },
- "dhcp_options_netbios_node_type": {
- "default": "",
- "description": "Specify netbios node_type for DHCP options set (requires enable_dhcp_options set to true)",
- "type": "string"
- },
- "dhcp_options_ntp_servers": {
- "default": [],
- "description": "Specify a list of NTP servers for DHCP options set (requires enable_dhcp_options set to true)",
- "type": "list(string)"
- },
- "dhcp_options_tags": {
- "default": {},
- "description": "Additional tags for the DHCP option set (requires enable_dhcp_options set to true)",
- "type": "map(string)"
- },
- "ec2_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for EC2 endpoint",
- "type": "bool"
- },
- "ec2_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for EC2 endpoint",
- "type": "list(string)"
- },
- "ec2_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for EC2 endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "ec2messages_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for EC2MESSAGES endpoint",
- "type": "bool"
- },
- "ec2messages_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for EC2MESSAGES endpoint",
- "type": "list(string)"
- },
- "ec2messages_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for EC2MESSAGES endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "ecr_api_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for ECR API endpoint",
- "type": "bool"
- },
- "ecr_api_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for ECR API endpoint",
- "type": "list(string)"
- },
- "ecr_api_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for ECR api endpoint. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "ecr_dkr_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for ECR DKR endpoint",
- "type": "bool"
- },
- "ecr_dkr_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for ECR DKR endpoint",
- "type": "list(string)"
- },
- "ecr_dkr_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for ECR dkr endpoint. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "ecs_agent_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for ECS Agent endpoint",
- "type": "bool"
- },
- "ecs_agent_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for ECS Agent endpoint",
- "type": "list(string)"
- },
- "ecs_agent_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for ECS Agent endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "ecs_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for ECS endpoint",
- "type": "bool"
- },
- "ecs_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for ECS endpoint",
- "type": "list(string)"
- },
- "ecs_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for ECS endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "ecs_telemetry_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for ECS Telemetry endpoint",
- "type": "bool"
- },
- "ecs_telemetry_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for ECS Telemetry endpoint",
- "type": "list(string)"
- },
- "ecs_telemetry_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for ECS Telemetry endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "elasticache_acl_tags": {
- "default": {},
- "description": "Additional tags for the elasticache subnets network ACL",
- "type": "map(string)"
- },
- "elasticache_dedicated_network_acl": {
- "default": false,
- "description": "Whether to use dedicated network ACL (not default) and custom rules for elasticache subnets",
- "type": "bool"
- },
- "elasticache_inbound_acl_rules": {
- "default": [
- {
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_action": "allow",
- "rule_number": 100,
- "to_port": 0
- }
- ],
- "description": "Elasticache subnets inbound network ACL rules",
- "type": "list(map(string))"
- },
- "elasticache_outbound_acl_rules": {
- "default": [
- {
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_action": "allow",
- "rule_number": 100,
- "to_port": 0
- }
- ],
- "description": "Elasticache subnets outbound network ACL rules",
- "type": "list(map(string))"
- },
- "elasticache_route_table_tags": {
- "default": {},
- "description": "Additional tags for the elasticache route tables",
- "type": "map(string)"
- },
- "elasticache_subnet_assign_ipv6_address_on_creation": {
- "default": "null",
- "description": "Assign IPv6 address on elasticache subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
- "type": "bool"
- },
- "elasticache_subnet_ipv6_prefixes": {
- "default": [],
- "description": "Assigns IPv6 elasticache subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
- "type": "list"
- },
- "elasticache_subnet_suffix": {
- "default": "elasticache",
- "description": "Suffix to append to elasticache subnets name",
- "type": "string"
- },
- "elasticache_subnet_tags": {
- "default": {},
- "description": "Additional tags for the elasticache subnets",
- "type": "map(string)"
- },
- "elasticache_subnets": {
- "default": [],
- "description": "A list of elasticache subnets",
- "type": "list(string)"
- },
- "elasticloadbalancing_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Elastic Load Balancing endpoint",
- "type": "bool"
- },
- "elasticloadbalancing_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Elastic Load Balancing endpoint",
- "type": "list(string)"
- },
- "elasticloadbalancing_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Elastic Load Balancing endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "enable_apigw_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an api gateway endpoint to the VPC",
- "type": "bool"
- },
- "enable_appmesh_envoy_management_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a AppMesh endpoint to the VPC",
- "type": "bool"
- },
- "enable_appstream_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a AppStream endpoint to the VPC",
- "type": "bool"
- },
- "enable_athena_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a Athena endpoint to the VPC",
- "type": "bool"
- },
- "enable_classiclink": {
- "default": "null",
- "description": "Should be true to enable ClassicLink for the VPC. Only valid in regions and accounts that support EC2 Classic.",
- "type": "bool"
- },
- "enable_classiclink_dns_support": {
- "default": "null",
- "description": "Should be true to enable ClassicLink DNS Support for the VPC. Only valid in regions and accounts that support EC2 Classic.",
- "type": "bool"
- },
- "enable_cloudformation_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a Cloudformation endpoint to the VPC",
- "type": "bool"
- },
- "enable_cloudtrail_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a CloudTrail endpoint to the VPC",
- "type": "bool"
- },
- "enable_codebuild_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an Codebuild endpoint to the VPC"
- },
- "enable_codecommit_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an Codecommit endpoint to the VPC"
- },
- "enable_codepipeline_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a CodePipeline endpoint to the VPC",
- "type": "bool"
- },
- "enable_config_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an config endpoint to the VPC"
- },
- "enable_dhcp_options": {
- "default": false,
- "description": "Should be true if you want to specify a DHCP options set with a custom domain name, DNS servers, NTP servers, netbios servers, and/or netbios server type",
- "type": "bool"
- },
- "enable_dns_hostnames": {
- "default": false,
- "description": "Should be true to enable DNS hostnames in the VPC",
- "type": "bool"
- },
- "enable_dns_support": {
- "default": true,
- "description": "Should be true to enable DNS support in the VPC",
- "type": "bool"
- },
- "enable_dynamodb_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a DynamoDB endpoint to the VPC",
- "type": "bool"
- },
- "enable_ec2_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an EC2 endpoint to the VPC",
- "type": "bool"
- },
- "enable_ec2messages_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an EC2MESSAGES endpoint to the VPC",
- "type": "bool"
- },
- "enable_ecr_api_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an ecr api endpoint to the VPC",
- "type": "bool"
- },
- "enable_ecr_dkr_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an ecr dkr endpoint to the VPC",
- "type": "bool"
- },
- "enable_ecs_agent_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a ECS Agent endpoint to the VPC",
- "type": "bool"
- },
- "enable_ecs_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a ECS endpoint to the VPC",
- "type": "bool"
- },
- "enable_ecs_telemetry_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a ECS Telemetry endpoint to the VPC",
- "type": "bool"
- },
- "enable_elasticloadbalancing_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a Elastic Load Balancing endpoint to the VPC",
- "type": "bool"
- },
- "enable_events_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a CloudWatch Events endpoint to the VPC",
- "type": "bool"
- },
- "enable_git_codecommit_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an Git Codecommit endpoint to the VPC"
- },
- "enable_glue_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a Glue endpoint to the VPC",
- "type": "bool"
- },
- "enable_ipv6": {
- "default": false,
- "description": "Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for the VPC. You cannot specify the range of IP addresses, or the size of the CIDR block.",
- "type": "bool"
- },
- "enable_kinesis_firehose_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a Kinesis Firehose endpoint to the VPC",
- "type": "bool"
- },
- "enable_kinesis_streams_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a Kinesis Streams endpoint to the VPC",
- "type": "bool"
- },
- "enable_kms_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a KMS endpoint to the VPC",
- "type": "bool"
- },
- "enable_logs_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a CloudWatch Logs endpoint to the VPC",
- "type": "bool"
- },
- "enable_monitoring_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a CloudWatch Monitoring endpoint to the VPC",
- "type": "bool"
- },
- "enable_nat_gateway": {
- "default": false,
- "description": "Should be true if you want to provision NAT Gateways for each of your private networks",
- "type": "bool"
- },
- "enable_public_redshift": {
- "default": false,
- "description": "Controls if redshift should have public routing table",
- "type": "bool"
- },
- "enable_rekognition_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a Rekognition endpoint to the VPC",
- "type": "bool"
- },
- "enable_s3_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an S3 endpoint to the VPC",
- "type": "bool"
- },
- "enable_sagemaker_api_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a SageMaker API endpoint to the VPC",
- "type": "bool"
- },
- "enable_sagemaker_notebook_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a Sagemaker Notebook endpoint to the VPC",
- "type": "bool"
- },
- "enable_sagemaker_runtime_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a SageMaker Runtime endpoint to the VPC",
- "type": "bool"
- },
- "enable_secretsmanager_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an Secrets Manager endpoint to the VPC",
- "type": "bool"
- },
- "enable_servicecatalog_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a Service Catalog endpoint to the VPC",
- "type": "bool"
- },
- "enable_sns_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a SNS endpoint to the VPC",
- "type": "bool"
- },
- "enable_sqs_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an SQS endpoint to the VPC"
- },
- "enable_ssm_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision an SSM endpoint to the VPC",
- "type": "bool"
- },
- "enable_ssmmessages_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a SSMMESSAGES endpoint to the VPC",
- "type": "bool"
- },
- "enable_storagegateway_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a Storage Gateway endpoint to the VPC",
- "type": "bool"
- },
- "enable_sts_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a STS endpoint to the VPC",
- "type": "bool"
- },
- "enable_transfer_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a Transfer endpoint to the VPC",
- "type": "bool"
- },
- "enable_transferserver_endpoint": {
- "default": false,
- "description": "Should be true if you want to provision a Transfer Server endpoint to the VPC",
- "type": "bool"
- },
- "enable_vpn_gateway": {
- "default": false,
- "description": "Should be true if you want to create a new VPN Gateway resource and attach it to the VPC",
- "type": "bool"
- },
- "events_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for CloudWatch Events endpoint",
- "type": "bool"
- },
- "events_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for CloudWatch Events endpoint",
- "type": "list(string)"
- },
- "events_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for CloudWatch Events endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "external_nat_ip_ids": {
- "default": [],
- "description": "List of EIP IDs to be assigned to the NAT Gateways (used in combination with reuse_nat_ips)",
- "type": "list(string)"
- },
- "git_codecommit_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Git Codecommit endpoint"
- },
- "git_codecommit_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Git Codecommit endpoint"
- },
- "git_codecommit_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Git Codecommit endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used."
- },
- "glue_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Glue endpoint",
- "type": "bool"
- },
- "glue_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Glue endpoint",
- "type": "list(string)"
- },
- "glue_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Glue endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "igw_tags": {
- "default": {},
- "description": "Additional tags for the internet gateway",
- "type": "map(string)"
- },
- "instance_tenancy": {
- "default": "default",
- "description": "A tenancy option for instances launched into the VPC",
- "type": "string"
- },
- "intra_acl_tags": {
- "default": {},
- "description": "Additional tags for the intra subnets network ACL",
- "type": "map(string)"
- },
- "intra_dedicated_network_acl": {
- "default": false,
- "description": "Whether to use dedicated network ACL (not default) and custom rules for intra subnets",
- "type": "bool"
- },
- "intra_inbound_acl_rules": {
- "default": [
- {
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_action": "allow",
- "rule_number": 100,
- "to_port": 0
- }
- ],
- "description": "Intra subnets inbound network ACLs",
- "type": "list(map(string))"
- },
- "intra_outbound_acl_rules": {
- "default": [
- {
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_action": "allow",
- "rule_number": 100,
- "to_port": 0
- }
- ],
- "description": "Intra subnets outbound network ACLs",
- "type": "list(map(string))"
- },
- "intra_route_table_tags": {
- "default": {},
- "description": "Additional tags for the intra route tables",
- "type": "map(string)"
- },
- "intra_subnet_assign_ipv6_address_on_creation": {
- "default": "null",
- "description": "Assign IPv6 address on intra subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
- "type": "bool"
- },
- "intra_subnet_ipv6_prefixes": {
- "default": [],
- "description": "Assigns IPv6 intra subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
- "type": "list"
- },
- "intra_subnet_suffix": {
- "default": "intra",
- "description": "Suffix to append to intra subnets name",
- "type": "string"
- },
- "intra_subnet_tags": {
- "default": {},
- "description": "Additional tags for the intra subnets",
- "type": "map(string)"
- },
- "intra_subnets": {
- "default": [],
- "description": "A list of intra subnets",
- "type": "list(string)"
- },
- "kinesis_firehose_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Kinesis Firehose endpoint",
- "type": "bool"
- },
- "kinesis_firehose_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Kinesis Firehose endpoint",
- "type": "list(string)"
- },
- "kinesis_firehose_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Kinesis Firehose endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "kinesis_streams_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Kinesis Streams endpoint",
- "type": "bool"
- },
- "kinesis_streams_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Kinesis Streams endpoint",
- "type": "list(string)"
- },
- "kinesis_streams_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Kinesis Streams endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "kms_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for KMS endpoint",
- "type": "bool"
- },
- "kms_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for KMS endpoint",
- "type": "list(string)"
- },
- "kms_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for KMS endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "logs_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for CloudWatch Logs endpoint",
- "type": "bool"
- },
- "logs_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for CloudWatch Logs endpoint",
- "type": "list(string)"
- },
- "logs_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for CloudWatch Logs endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "manage_default_network_acl": {
- "default": false,
- "description": "Should be true to adopt and manage Default Network ACL",
- "type": "bool"
- },
- "manage_default_vpc": {
- "default": false,
- "description": "Should be true to adopt and manage Default VPC",
- "type": "bool"
- },
- "map_public_ip_on_launch": {
- "default": true,
- "description": "Should be false if you do not want to auto-assign public IP on launch",
- "type": "bool"
- },
- "monitoring_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for CloudWatch Monitoring endpoint",
- "type": "bool"
- },
- "monitoring_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for CloudWatch Monitoring endpoint",
- "type": "list(string)"
- },
- "monitoring_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for CloudWatch Monitoring endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "name": {
- "default": "",
- "description": "Name to be used on all the resources as identifier",
- "type": "string"
- },
- "nat_eip_tags": {
- "default": {},
- "description": "Additional tags for the NAT EIP",
- "type": "map(string)"
- },
- "nat_gateway_tags": {
- "default": {},
- "description": "Additional tags for the NAT gateways",
- "type": "map(string)"
- },
- "one_nat_gateway_per_az": {
- "default": false,
- "description": "Should be true if you want only one NAT Gateway per availability zone. Requires `var.azs` to be set, and the number of `public_subnets` created to be greater than or equal to the number of availability zones specified in `var.azs`.",
- "type": "bool"
- },
- "private_acl_tags": {
- "default": {},
- "description": "Additional tags for the private subnets network ACL",
- "type": "map(string)"
- },
- "private_dedicated_network_acl": {
- "default": false,
- "description": "Whether to use dedicated network ACL (not default) and custom rules for private subnets",
- "type": "bool"
- },
- "private_inbound_acl_rules": {
- "default": [
- {
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_action": "allow",
- "rule_number": 100,
- "to_port": 0
- }
- ],
- "description": "Private subnets inbound network ACLs",
- "type": "list(map(string))"
- },
- "private_outbound_acl_rules": {
- "default": [
- {
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_action": "allow",
- "rule_number": 100,
- "to_port": 0
- }
- ],
- "description": "Private subnets outbound network ACLs",
- "type": "list(map(string))"
- },
- "private_route_table_tags": {
- "default": {},
- "description": "Additional tags for the private route tables",
- "type": "map(string)"
- },
- "private_subnet_assign_ipv6_address_on_creation": {
- "default": "null",
- "description": "Assign IPv6 address on private subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
- "type": "bool"
- },
- "private_subnet_ipv6_prefixes": {
- "default": [],
- "description": "Assigns IPv6 private subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
- "type": "list"
- },
- "private_subnet_suffix": {
- "default": "private",
- "description": "Suffix to append to private subnets name",
- "type": "string"
- },
- "private_subnet_tags": {
- "default": {},
- "description": "Additional tags for the private subnets",
- "type": "map(string)"
- },
- "private_subnets": {
- "default": [],
- "description": "A list of private subnets inside the VPC",
- "type": "list(string)"
- },
- "propagate_private_route_tables_vgw": {
- "default": false,
- "description": "Should be true if you want route table propagation",
- "type": "bool"
- },
- "propagate_public_route_tables_vgw": {
- "default": false,
- "description": "Should be true if you want route table propagation",
- "type": "bool"
- },
- "public_acl_tags": {
- "default": {},
- "description": "Additional tags for the public subnets network ACL",
- "type": "map(string)"
- },
- "public_dedicated_network_acl": {
- "default": false,
- "description": "Whether to use dedicated network ACL (not default) and custom rules for public subnets",
- "type": "bool"
- },
- "public_inbound_acl_rules": {
- "default": [
- {
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_action": "allow",
- "rule_number": 100,
- "to_port": 0
- }
- ],
- "description": "Public subnets inbound network ACLs",
- "type": "list(map(string))"
- },
- "public_outbound_acl_rules": {
- "default": [
- {
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_action": "allow",
- "rule_number": 100,
- "to_port": 0
- }
- ],
- "description": "Public subnets outbound network ACLs",
- "type": "list(map(string))"
- },
- "public_route_table_tags": {
- "default": {},
- "description": "Additional tags for the public route tables",
- "type": "map(string)"
- },
- "public_subnet_assign_ipv6_address_on_creation": {
- "default": "null",
- "description": "Assign IPv6 address on public subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
- "type": "bool"
- },
- "public_subnet_ipv6_prefixes": {
- "default": [],
- "description": "Assigns IPv6 public subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
- "type": "list"
- },
- "public_subnet_suffix": {
- "default": "public",
- "description": "Suffix to append to public subnets name",
- "type": "string"
- },
- "public_subnet_tags": {
- "default": {},
- "description": "Additional tags for the public subnets",
- "type": "map(string)"
- },
- "public_subnets": {
- "default": [],
- "description": "A list of public subnets inside the VPC",
- "type": "list(string)"
- },
- "redshift_acl_tags": {
- "default": {},
- "description": "Additional tags for the redshift subnets network ACL",
- "type": "map(string)"
- },
- "redshift_dedicated_network_acl": {
- "default": false,
- "description": "Whether to use dedicated network ACL (not default) and custom rules for redshift subnets",
- "type": "bool"
- },
- "redshift_inbound_acl_rules": {
- "default": [
- {
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_action": "allow",
- "rule_number": 100,
- "to_port": 0
- }
- ],
- "description": "Redshift subnets inbound network ACL rules",
- "type": "list(map(string))"
- },
- "redshift_outbound_acl_rules": {
- "default": [
- {
- "cidr_block": "0.0.0.0/0",
- "from_port": 0,
- "protocol": "-1",
- "rule_action": "allow",
- "rule_number": 100,
- "to_port": 0
- }
- ],
- "description": "Redshift subnets outbound network ACL rules",
- "type": "list(map(string))"
- },
- "redshift_route_table_tags": {
- "default": {},
- "description": "Additional tags for the redshift route tables",
- "type": "map(string)"
- },
- "redshift_subnet_assign_ipv6_address_on_creation": {
- "default": "null",
- "description": "Assign IPv6 address on redshift subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
- "type": "bool"
- },
- "redshift_subnet_group_tags": {
- "default": {},
- "description": "Additional tags for the redshift subnet group",
- "type": "map(string)"
- },
- "redshift_subnet_ipv6_prefixes": {
- "default": [],
- "description": "Assigns IPv6 redshift subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
- "type": "list"
- },
- "redshift_subnet_suffix": {
- "default": "redshift",
- "description": "Suffix to append to redshift subnets name",
- "type": "string"
- },
- "redshift_subnet_tags": {
- "default": {},
- "description": "Additional tags for the redshift subnets",
- "type": "map(string)"
- },
- "redshift_subnets": {
- "default": [],
- "description": "A list of redshift subnets",
- "type": "list(string)"
- },
- "rekognition_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Rekognition endpoint",
- "type": "bool"
- },
- "rekognition_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Rekognition endpoint",
- "type": "list(string)"
- },
- "rekognition_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Rekognition endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "reuse_nat_ips": {
- "default": false,
- "description": "Should be true if you don't want EIPs to be created for your NAT Gateways and will instead pass them in via the 'external_nat_ip_ids' variable",
- "type": "bool"
- },
- "sagemaker_api_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for SageMaker API endpoint",
- "type": "bool"
- },
- "sagemaker_api_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for SageMaker API endpoint",
- "type": "list(string)"
- },
- "sagemaker_api_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for SageMaker API endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "sagemaker_notebook_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Sagemaker Notebook endpoint",
- "type": "bool"
- },
- "sagemaker_notebook_endpoint_region": {
- "default": "",
- "description": "Region to use for Sagemaker Notebook endpoint",
- "type": "string"
- },
- "sagemaker_notebook_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Sagemaker Notebook endpoint",
- "type": "list(string)"
- },
- "sagemaker_notebook_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Sagemaker Notebook endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "sagemaker_runtime_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for SageMaker Runtime endpoint",
- "type": "bool"
- },
- "sagemaker_runtime_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for SageMaker Runtime endpoint",
- "type": "list(string)"
- },
- "sagemaker_runtime_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for SageMaker Runtime endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "secondary_cidr_blocks": {
- "default": [],
- "description": "List of secondary CIDR blocks to associate with the VPC to extend the IP Address pool",
- "type": "list(string)"
- },
- "secretsmanager_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Secrets Manager endpoint",
- "type": "bool"
- },
- "secretsmanager_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Secrets Manager endpoint",
- "type": "list(string)"
- },
- "secretsmanager_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Secrets Manager endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "servicecatalog_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Service Catalog endpoint",
- "type": "bool"
- },
- "servicecatalog_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Service Catalog endpoint",
- "type": "list(string)"
- },
- "servicecatalog_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Service Catalog endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "single_nat_gateway": {
- "default": false,
- "description": "Should be true if you want to provision a single shared NAT Gateway across all of your private networks",
- "type": "bool"
- },
- "sns_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for SNS endpoint",
- "type": "bool"
- },
- "sns_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for SNS endpoint",
- "type": "list(string)"
- },
- "sns_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for SNS endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "sqs_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for SQS endpoint"
- },
- "sqs_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for SQS endpoint"
- },
- "sqs_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for SQS endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used."
- },
- "ssm_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for SSM endpoint",
- "type": "bool"
- },
- "ssm_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for SSM endpoint",
- "type": "list(string)"
- },
- "ssm_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for SSM endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "ssmmessages_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for SSMMESSAGES endpoint",
- "type": "bool"
- },
- "ssmmessages_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for SSMMESSAGES endpoint",
- "type": "list(string)"
- },
- "ssmmessages_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for SSMMESSAGES endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "storagegateway_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Storage Gateway endpoint",
- "type": "bool"
- },
- "storagegateway_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Storage Gateway endpoint",
- "type": "list(string)"
- },
- "storagegateway_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Storage Gateway endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "sts_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for STS endpoint",
- "type": "bool"
- },
- "sts_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for STS endpoint",
- "type": "list(string)"
- },
- "sts_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for STS endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "tags": {
- "default": {},
- "description": "A map of tags to add to all resources",
- "type": "map(string)"
- },
- "transfer_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Transfer endpoint",
- "type": "bool"
- },
- "transfer_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Transfer endpoint",
- "type": "list(string)"
- },
- "transfer_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Transfer endpoint. Only a single subnet within an AZ is supported. Ifomitted, private subnets will be used.",
- "type": "list(string)"
- },
- "transferserver_endpoint_private_dns_enabled": {
- "default": false,
- "description": "Whether or not to associate a private hosted zone with the specified VPC for Transfer Server endpoint",
- "type": "bool"
- },
- "transferserver_endpoint_security_group_ids": {
- "default": [],
- "description": "The ID of one or more security groups to associate with the network interface for Transfer Server endpoint",
- "type": "list(string)"
- },
- "transferserver_endpoint_subnet_ids": {
- "default": [],
- "description": "The ID of one or more subnets in which to create a network interface for Transfer Server endpoint. Only a single subnet within an AZ is supported. If omitted, private subnets will be used.",
- "type": "list(string)"
- },
- "vpc_endpoint_tags": {
- "default": {},
- "description": "Additional tags for the VPC Endpoints",
- "type": "map(string)"
- },
- "vpc_tags": {
- "default": {},
- "description": "Additional tags for the VPC",
- "type": "map(string)"
- },
- "vpn_gateway_id": {
- "default": "",
- "description": "ID of VPN Gateway to attach to the VPC"
- },
- "vpn_gateway_tags": {
- "default": {},
- "description": "Additional tags for the VPN gateway",
- "type": "map(string)"
- }
-}
diff --git a/modulestf/modules.py b/modulestf/modules.py
deleted file mode 100644
index 71bf0ae..0000000
--- a/modulestf/modules.py
+++ /dev/null
@@ -1,141 +0,0 @@
-import json
-import os
-from pprint import pprint
-
-BASE_PATH = os.path.dirname(os.path.abspath(__file__))
-
-
-def load_local_json(relative_path):
- path = os.path.join(BASE_PATH, relative_path)
- with open(path) as file:
- return json.load(file)
-
-
-# @todo: Verify support for tuple, object and any.
-# Ref: https://www.terraform.io/docs/configuration/variables.html#type-constraints
-def update_template_variables(var):
- for key, value in var.items():
-
- # Guess type from default value
- if value.get("default", None) is not None:
- if str(value.get("default")).lower() in ["true", "false"]:
- value_type = value.get("type", "bool")
- elif type(value.get("default")) is map:
- value_type = value.get("type", "map")
- elif type(value.get("default")) is str:
- value_type = value.get("type", "string")
- elif type(value.get("default")) is int:
- value_type = value.get("type", "integer")
- else:
- value_type = value.get("type", "list")
- else:
- value_type = value.get("type", "string")
-
- variable_value_format_function = ""
-
- if value_type == "string":
- variable_default = ''
- variable_value_format = '"%s"'
- elif value_type == "number":
- variable_default = ''
- variable_value_format = '%s'
- elif value_type == "bool":
- variable_default = ''
- variable_value_format = '%s'
- variable_value_format_function = "lower"
- elif value_type.startswith("list") or value_type.startswith("set"):
- variable_default = []
- variable_value_format = '%s'
- elif value_type.startswith("map"):
- variable_default = {}
- variable_value_format = '"%s"'
- else:
- variable_default = '""'
- variable_value_format = "%s"
-
- value.update({
- "value_type": value_type,
- "variable_default": variable_default,
- "variable_value_format": variable_value_format,
- "variable_value_format_function": variable_value_format_function,
- })
-
- return var
-
-
-MODULES = {
- "alb": {
- "source": "git::git@github.com:terraform-aws-modules/terraform-aws-alb.git?ref=v4.1.0",
- "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/alb/aws/4.1.0",
- "variables": update_template_variables(load_local_json("../modules-metadata/alb.json")),
- },
- "elb": {
- "source": "git::git@github.com:terraform-aws-modules/terraform-aws-elb.git?ref=v2.3.0",
- "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/elb/aws/2.3.0",
- "variables": update_template_variables(load_local_json("../modules-metadata/elb.json")),
- },
- "rds": {
- "source": "git::git@github.com:terraform-aws-modules/terraform-aws-rds.git?ref=v2.5.0",
- "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/rds/aws/2.5.0",
- "variables": update_template_variables(load_local_json("../modules-metadata/rds.json")),
- },
- "rds-aurora": {
- "source": "git::git@github.com:terraform-aws-modules/terraform-aws-rds-aurora.git?ref=v2.6.0",
- "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/rds-aurora/aws/2.6.0",
- "variables": update_template_variables(load_local_json("../modules-metadata/rds-aurora.json")),
- },
- "autoscaling": {
- "source": "git::git@github.com:terraform-aws-modules/terraform-aws-autoscaling.git?ref=v3.1.0",
- "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/autoscaling/aws/3.1.0",
- "variables": update_template_variables(load_local_json("../modules-metadata/autoscaling.json")),
- },
- "ec2-instance": {
- "source": "git::git@github.com:terraform-aws-modules/terraform-aws-ec2-instance.git?ref=v2.8.0",
- "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/ec2-instance/aws/2.8.0",
- "variables": update_template_variables(load_local_json("../modules-metadata/ec2-instance.json")),
- },
- "sns": {
- "source": "git::git@github.com:terraform-aws-modules/terraform-aws-sns.git?ref=v2.0.0",
- "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/sns/aws/2.0.0",
- "variables": update_template_variables(load_local_json("../modules-metadata/sns.json")),
- },
- "sqs": {
- "source": "git::git@github.com:terraform-aws-modules/terraform-aws-sqs.git?ref=v2.0.0",
- "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/sqs/aws/2.0.0",
- "variables": update_template_variables(load_local_json("../modules-metadata/sqs.json")),
- },
- "security-group": {
- "source": "git::git@github.com:terraform-aws-modules/terraform-aws-security-group.git?ref=v3.1.0",
- "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/security-group/aws/3.1.0",
- "variables": update_template_variables(load_local_json("../modules-metadata/security-group.json")),
- },
- "vpc": {
- "source": "git::git@github.com:terraform-aws-modules/terraform-aws-vpc.git?ref=v2.18.0",
- "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/vpc/aws/2.18.0",
- "variables": update_template_variables(load_local_json("../modules-metadata/vpc.json")),
- },
- "s3-bucket": {
- "source": "git::git@github.com:terraform-aws-modules/terraform-aws-s3-bucket.git?ref=v1.0.0",
- "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/s3-bucket/aws/1.0.0",
- "variables": update_template_variables(load_local_json("../modules-metadata/s3-bucket.json")),
- },
- "redshift": {
- "source": "git::git@github.com:terraform-aws-modules/terraform-aws-redshift.git?ref=v2.2.0",
- "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/redshift/aws/2.2.0",
- "variables": update_template_variables(load_local_json("../modules-metadata/redshift.json")),
- },
- "cloudfront": {
- "source": "terraform-aws-modules/cloudfront/aws",
- "registry_url": "",
- "variables": {},
- },
-
- # Data sources for aws_region and aws_availability_zones
- "aws-data": {
- "source": "${get_parent_terragrunt_dir()}/../../modules/aws-data",
- "registry_url": "",
- "variables": {},
- },
-}
-
-# pprint(MODULES["rds-aurora"])
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index 1094140..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,4132 +0,0 @@
-{
- "name": "modules.tf-lambda",
- "version": "2.0.0",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "@iarna/toml": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.3.tgz",
- "integrity": "sha512-FmuxfCuolpLl0AnQ2NHSzoUKWEJDFl63qXjzdoWBVyFCXzMGm1spBzk7LeHNoVCiWCF7mRVms9e6jEV9+MoPbg=="
- },
- "@serverless/cli": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@serverless/cli/-/cli-1.4.0.tgz",
- "integrity": "sha512-YqlCiYmRFeGksw6XJaXbigIDlktc7OfRuVpyPB7IZgkCJ9mUlBmvyWdwqJEQdkUz0xPTGsd4Jd/XSrwyiw1Brg==",
- "requires": {
- "@serverless/core": "^1.0.0",
- "@serverless/template": "^1.1.0",
- "ansi-escapes": "^4.2.0",
- "chalk": "^2.4.2",
- "chokidar": "^3.0.2",
- "dotenv": "^8.0.0",
- "figures": "^3.0.0",
- "minimist": "^1.2.0",
- "prettyoutput": "^1.2.0",
- "strip-ansi": "^5.2.0"
- }
- },
- "@serverless/component-metrics": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@serverless/component-metrics/-/component-metrics-1.0.8.tgz",
- "integrity": "sha512-lOUyRopNTKJYVEU9T6stp2irwlTDsYMmUKBOUjnMcwGveuUfIJqrCOtFLtIPPj3XJlbZy5F68l4KP9rZ8Ipang==",
- "requires": {
- "node-fetch": "^2.6.0",
- "shortid": "^2.2.14"
- },
- "dependencies": {
- "node-fetch": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
- "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA=="
- }
- }
- },
- "@serverless/core": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@serverless/core/-/core-1.1.2.tgz",
- "integrity": "sha512-PY7gH+7aQ+MltcUD7SRDuQODJ9Sav9HhFJsgOiyf8IVo7XVD6FxZIsSnpMI6paSkptOB7n+0Jz03gNlEkKetQQ==",
- "requires": {
- "fs-extra": "^7.0.1",
- "js-yaml": "^3.13.1",
- "package-json": "^6.3.0",
- "ramda": "^0.26.1",
- "semver": "^6.1.1"
- },
- "dependencies": {
- "fs-extra": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
- "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
- }
- }
- },
- "@serverless/enterprise-plugin": {
- "version": "1.3.11",
- "resolved": "https://registry.npmjs.org/@serverless/enterprise-plugin/-/enterprise-plugin-1.3.11.tgz",
- "integrity": "sha512-/SnlzaqDmGnNwDWCWd2GkhTEUTdZh73JdQVHU33rirJEi/uZSS8e/qyCrczuB6kTIJFSX4ZfXe1IYhVzZQXqTQ==",
- "requires": {
- "@serverless/event-mocks": "^1.1.1",
- "@serverless/platform-sdk": "^2.0.3",
- "chalk": "^2.4.2",
- "flat": "^4.1.0",
- "fs-extra": "^7.0.1",
- "iso8601-duration": "^1.1.7",
- "isomorphic-fetch": "^2.2.1",
- "js-yaml": "^3.13.1",
- "jsonata": "^1.6.4",
- "jszip": "^3.2.1",
- "lodash": "^4.17.11",
- "moment": "^2.24.0",
- "node-dir": "^0.1.17",
- "node-fetch": "^2.3.0",
- "regenerator-runtime": "^0.13.1",
- "semver": "^5.6.0",
- "simple-git": "^1.118.0",
- "source-map-support": "^0.5.12",
- "uuid": "^3.3.2",
- "yamljs": "^0.3.0"
- },
- "dependencies": {
- "fs-extra": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
- "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "node-fetch": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
- "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA=="
- },
- "uuid": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
- "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="
- }
- }
- },
- "@serverless/event-mocks": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@serverless/event-mocks/-/event-mocks-1.1.1.tgz",
- "integrity": "sha512-YAV5V/y+XIOfd+HEVeXfPWZb8C6QLruFk9tBivoX2roQLWVq145s4uxf8D0QioCueuRzkukHUS4JIj+KVoS34A==",
- "requires": {
- "@types/lodash": "^4.14.123",
- "lodash": "^4.17.11"
- }
- },
- "@serverless/platform-sdk": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@serverless/platform-sdk/-/platform-sdk-2.2.0.tgz",
- "integrity": "sha512-w5A/szD0ZMUIuqUt5HyHllQ9LKO9/mpgv3rtJjLRI5ZJq1GvY4pv2pyQQPxGLT1gv0ER+b5vF+4tfrkx6MEuEw==",
- "requires": {
- "chalk": "^2.4.1",
- "https-proxy-agent": "^3.0.0",
- "is-docker": "^1.1.0",
- "isomorphic-fetch": "^2.2.1",
- "jwt-decode": "^2.2.0",
- "opn": "^5.5.0",
- "querystring": "^0.2.0",
- "ramda": "^0.25.0",
- "rc": "^1.2.8",
- "regenerator-runtime": "^0.13.1",
- "source-map-support": "^0.5.12",
- "uuid": "^3.3.2",
- "write-file-atomic": "^2.4.2",
- "ws": "<7.0.0"
- },
- "dependencies": {
- "https-proxy-agent": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz",
- "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==",
- "requires": {
- "agent-base": "^4.3.0",
- "debug": "^3.1.0"
- }
- },
- "ramda": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.25.0.tgz",
- "integrity": "sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ=="
- },
- "uuid": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
- "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="
- }
- }
- },
- "@serverless/template": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@serverless/template/-/template-1.1.3.tgz",
- "integrity": "sha512-hcMiX523rkp6kHeKnM1x6/dXEY+d1UFSr901yVKeeCgpFy4u33UI9vlKaPweAZCF6Ahzqywf01IsFTuBVadCrQ==",
- "requires": {
- "@serverless/component-metrics": "^1.0.8",
- "@serverless/core": "^1.0.0",
- "graphlib": "^2.1.7",
- "traverse": "^0.6.6"
- }
- },
- "@sindresorhus/is": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
- "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ=="
- },
- "@szmarczak/http-timer": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
- "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
- "requires": {
- "defer-to-connect": "^1.0.1"
- }
- },
- "@types/lodash": {
- "version": "4.14.144",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.144.tgz",
- "integrity": "sha512-ogI4g9W5qIQQUhXAclq6zhqgqNUr7UlFaqDHbch7WLSLeeM/7d3CRaw7GLajxvyFvhJqw4Rpcz5bhoaYtIx6Tg=="
- },
- "agent-base": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
- "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
- "requires": {
- "es6-promisify": "^5.0.0"
- }
- },
- "ansi": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz",
- "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE="
- },
- "ansi-align": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
- "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
- "requires": {
- "string-width": "^2.0.0"
- }
- },
- "ansi-escapes": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz",
- "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==",
- "requires": {
- "type-fest": "^0.5.2"
- }
- },
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "anymatch": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
- "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "appdirectory": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/appdirectory/-/appdirectory-0.1.0.tgz",
- "integrity": "sha1-62yBYyDnsqsW9e2ZfyjYIF31Y3U="
- },
- "archiver": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz",
- "integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=",
- "requires": {
- "archiver-utils": "^1.3.0",
- "async": "^2.0.0",
- "buffer-crc32": "^0.2.1",
- "glob": "^7.0.0",
- "lodash": "^4.8.0",
- "readable-stream": "^2.0.0",
- "tar-stream": "^1.5.0",
- "walkdir": "^0.0.11",
- "zip-stream": "^1.1.0"
- },
- "dependencies": {
- "async": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
- "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
- "requires": {
- "lodash": "^4.17.14"
- }
- }
- }
- },
- "archiver-utils": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz",
- "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=",
- "requires": {
- "glob": "^7.0.0",
- "graceful-fs": "^4.1.0",
- "lazystream": "^1.0.0",
- "lodash": "^4.8.0",
- "normalize-path": "^2.0.0",
- "readable-stream": "^2.0.0"
- },
- "dependencies": {
- "normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
- "requires": {
- "remove-trailing-separator": "^1.0.1"
- }
- }
- }
- },
- "are-we-there-yet": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
- "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
- },
- "arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
- },
- "array-union": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
- "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
- "requires": {
- "array-uniq": "^1.0.1"
- }
- },
- "array-uniq": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
- "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
- },
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
- },
- "assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
- },
- "async": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
- "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
- },
- "async-limiter": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
- "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
- },
- "atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
- },
- "aws-sdk": {
- "version": "2.562.0",
- "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.562.0.tgz",
- "integrity": "sha512-Uvt7qUXufjSxWMMfTs62xulGY7wnRut3y3daDtHSUdY62BnGjZGpp0dq/RW/bNi3aAjogEZNjWNZkLdtkHFeiQ==",
- "requires": {
- "buffer": "4.9.1",
- "events": "1.1.1",
- "ieee754": "1.1.13",
- "jmespath": "0.15.0",
- "querystring": "0.2.0",
- "sax": "1.2.1",
- "url": "0.10.3",
- "uuid": "3.3.2",
- "xml2js": "0.4.19"
- },
- "dependencies": {
- "buffer": {
- "version": "4.9.1",
- "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
- "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
- "requires": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4",
- "isarray": "^1.0.0"
- }
- },
- "uuid": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
- "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
- }
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
- },
- "base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "requires": {
- "cache-base": "^1.0.1",
- "class-utils": "^0.3.5",
- "component-emitter": "^1.2.1",
- "define-property": "^1.0.0",
- "isobject": "^3.0.1",
- "mixin-deep": "^1.2.0",
- "pascalcase": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- }
- }
- },
- "base64-js": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
- "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
- },
- "binary-extensions": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz",
- "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow=="
- },
- "bl": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
- "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
- "requires": {
- "readable-stream": "^2.3.5",
- "safe-buffer": "^5.1.1"
- }
- },
- "bluebird": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz",
- "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg=="
- },
- "boxen": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
- "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
- "requires": {
- "ansi-align": "^2.0.0",
- "camelcase": "^4.0.0",
- "chalk": "^2.0.1",
- "cli-boxes": "^1.0.0",
- "string-width": "^2.0.0",
- "term-size": "^1.2.0",
- "widest-line": "^2.0.0"
- }
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "buffer": {
- "version": "5.4.3",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz",
- "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==",
- "requires": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4"
- }
- },
- "buffer-alloc": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
- "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
- "requires": {
- "buffer-alloc-unsafe": "^1.1.0",
- "buffer-fill": "^1.0.0"
- }
- },
- "buffer-alloc-unsafe": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
- "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg=="
- },
- "buffer-crc32": {
- "version": "0.2.13",
- "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
- "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI="
- },
- "buffer-fill": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
- "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw="
- },
- "buffer-from": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
- },
- "builtin-modules": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz",
- "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw=="
- },
- "cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "requires": {
- "collection-visit": "^1.0.0",
- "component-emitter": "^1.2.1",
- "get-value": "^2.0.6",
- "has-value": "^1.0.0",
- "isobject": "^3.0.1",
- "set-value": "^2.0.0",
- "to-object-path": "^0.3.0",
- "union-value": "^1.0.0",
- "unset-value": "^1.0.0"
- }
- },
- "cacheable-request": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
- "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
- "requires": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^3.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^4.1.0",
- "responselike": "^1.0.2"
- },
- "dependencies": {
- "get-stream": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
- "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "lowercase-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="
- }
- }
- },
- "cachedir": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.2.0.tgz",
- "integrity": "sha512-VvxA0xhNqIIfg0V9AmJkDg91DaJwryutH5rVEZAhcNi4iJFj9f+QxmAjgK1LT9I8OgToX27fypX6/MeCXVbBjQ=="
- },
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
- },
- "capture-stack-trace": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz",
- "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw=="
- },
- "caw": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz",
- "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==",
- "requires": {
- "get-proxy": "^2.0.0",
- "isurl": "^1.0.0-alpha5",
- "tunnel-agent": "^0.6.0",
- "url-to-options": "^1.0.1"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "chardet": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
- "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
- },
- "chokidar": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz",
- "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==",
- "requires": {
- "anymatch": "~3.1.1",
- "braces": "~3.0.2",
- "fsevents": "~2.1.1",
- "glob-parent": "~5.1.0",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.2.0"
- }
- },
- "ci-info": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
- "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A=="
- },
- "class-utils": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "requires": {
- "arr-union": "^3.1.0",
- "define-property": "^0.2.5",
- "isobject": "^3.0.0",
- "static-extend": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
- }
- }
- },
- "cli-boxes": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
- "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM="
- },
- "cli-cursor": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
- "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
- "requires": {
- "restore-cursor": "^2.0.0"
- }
- },
- "cli-width": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
- "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk="
- },
- "clone-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
- "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
- },
- "collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
- "requires": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "colors": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz",
- "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg=="
- },
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "commander": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
- "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg=="
- },
- "component-emitter": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
- },
- "compress-commons": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz",
- "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=",
- "requires": {
- "buffer-crc32": "^0.2.1",
- "crc32-stream": "^2.0.0",
- "normalize-path": "^2.0.0",
- "readable-stream": "^2.0.0"
- },
- "dependencies": {
- "normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
- "requires": {
- "remove-trailing-separator": "^1.0.1"
- }
- }
- }
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
- },
- "concat-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
- "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
- "requires": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- }
- },
- "config-chain": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz",
- "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==",
- "requires": {
- "ini": "^1.3.4",
- "proto-list": "~1.2.1"
- }
- },
- "configstore": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz",
- "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==",
- "requires": {
- "dot-prop": "^4.1.0",
- "graceful-fs": "^4.1.2",
- "make-dir": "^1.0.0",
- "unique-string": "^1.0.0",
- "write-file-atomic": "^2.0.0",
- "xdg-basedir": "^3.0.0"
- }
- },
- "cookie": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
- "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
- },
- "cookiejar": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz",
- "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA=="
- },
- "copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- },
- "crc": {
- "version": "3.8.0",
- "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz",
- "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==",
- "requires": {
- "buffer": "^5.1.0"
- }
- },
- "crc32-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz",
- "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=",
- "requires": {
- "crc": "^3.4.4",
- "readable-stream": "^2.0.0"
- }
- },
- "create-error-class": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
- "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
- "requires": {
- "capture-stack-trace": "^1.0.0"
- }
- },
- "cross-spawn": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
- "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
- "requires": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "crypto-random-string": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
- "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4="
- },
- "d": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
- "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
- "requires": {
- "es5-ext": "^0.10.50",
- "type": "^1.0.1"
- }
- },
- "debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
- },
- "decompress": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz",
- "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=",
- "requires": {
- "decompress-tar": "^4.0.0",
- "decompress-tarbz2": "^4.0.0",
- "decompress-targz": "^4.0.0",
- "decompress-unzip": "^4.0.1",
- "graceful-fs": "^4.1.10",
- "make-dir": "^1.0.0",
- "pify": "^2.3.0",
- "strip-dirs": "^2.0.0"
- }
- },
- "decompress-response": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
- "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
- "decompress-tar": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz",
- "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==",
- "requires": {
- "file-type": "^5.2.0",
- "is-stream": "^1.1.0",
- "tar-stream": "^1.5.2"
- }
- },
- "decompress-tarbz2": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz",
- "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==",
- "requires": {
- "decompress-tar": "^4.1.0",
- "file-type": "^6.1.0",
- "is-stream": "^1.1.0",
- "seek-bzip": "^1.0.5",
- "unbzip2-stream": "^1.0.9"
- },
- "dependencies": {
- "file-type": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz",
- "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg=="
- }
- }
- },
- "decompress-targz": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz",
- "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==",
- "requires": {
- "decompress-tar": "^4.1.1",
- "file-type": "^5.2.0",
- "is-stream": "^1.1.0"
- }
- },
- "decompress-unzip": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz",
- "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=",
- "requires": {
- "file-type": "^3.8.0",
- "get-stream": "^2.2.0",
- "pify": "^2.3.0",
- "yauzl": "^2.4.2"
- },
- "dependencies": {
- "file-type": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
- "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek="
- },
- "get-stream": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",
- "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=",
- "requires": {
- "object-assign": "^4.0.1",
- "pinkie-promise": "^2.0.0"
- }
- }
- }
- },
- "deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
- },
- "defer-to-connect": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.0.2.tgz",
- "integrity": "sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw=="
- },
- "deferred": {
- "version": "0.7.11",
- "resolved": "https://registry.npmjs.org/deferred/-/deferred-0.7.11.tgz",
- "integrity": "sha512-8eluCl/Blx4YOGwMapBvXRKxHXhA8ejDXYzEaK8+/gtcm8hRMhSLmXSqDmNUKNc/C8HNSmuyyp/hflhqDAvK2A==",
- "requires": {
- "d": "^1.0.1",
- "es5-ext": "^0.10.50",
- "event-emitter": "^0.3.5",
- "next-tick": "^1.0.0",
- "timers-ext": "^0.1.7"
- }
- },
- "define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "requires": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
- }
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
- },
- "delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
- },
- "dot-prop": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
- "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
- "requires": {
- "is-obj": "^1.0.0"
- }
- },
- "dotenv": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
- "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw=="
- },
- "download": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/download/-/download-5.0.3.tgz",
- "integrity": "sha1-Y1N/l3+ZJmow64oqL70fILgAD3o=",
- "requires": {
- "caw": "^2.0.0",
- "decompress": "^4.0.0",
- "filenamify": "^2.0.0",
- "get-stream": "^3.0.0",
- "got": "^6.3.0",
- "mkdirp": "^0.5.1",
- "pify": "^2.3.0"
- },
- "dependencies": {
- "get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
- },
- "got": {
- "version": "6.7.1",
- "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
- "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
- "requires": {
- "create-error-class": "^3.0.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^3.0.0",
- "is-redirect": "^1.0.0",
- "is-retry-allowed": "^1.0.0",
- "is-stream": "^1.0.0",
- "lowercase-keys": "^1.0.0",
- "safe-buffer": "^5.0.1",
- "timed-out": "^4.0.0",
- "unzip-response": "^2.0.1",
- "url-parse-lax": "^1.0.0"
- }
- },
- "prepend-http": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
- "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw="
- },
- "url-parse-lax": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
- "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
- "requires": {
- "prepend-http": "^1.0.1"
- }
- }
- }
- },
- "duplexer3": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
- "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
- },
- "encoding": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
- "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
- "requires": {
- "iconv-lite": "~0.4.13"
- }
- },
- "end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "requires": {
- "once": "^1.4.0"
- }
- },
- "es5-ext": {
- "version": "0.10.52",
- "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.52.tgz",
- "integrity": "sha512-bWCbE9fbpYQY4CU6hJbJ1vSz70EClMlDgJ7BmwI+zEJhxrwjesZRPglGJlsZhu0334U3hI+gaspwksH9IGD6ag==",
- "requires": {
- "es6-iterator": "~2.0.3",
- "es6-symbol": "~3.1.2",
- "next-tick": "~1.0.0"
- }
- },
- "es6-iterator": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
- "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
- "requires": {
- "d": "1",
- "es5-ext": "^0.10.35",
- "es6-symbol": "^3.1.1"
- }
- },
- "es6-promise": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
- "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="
- },
- "es6-promisify": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
- "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
- "requires": {
- "es6-promise": "^4.0.3"
- }
- },
- "es6-set": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz",
- "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
- "requires": {
- "d": "1",
- "es5-ext": "~0.10.14",
- "es6-iterator": "~2.0.1",
- "es6-symbol": "3.1.1",
- "event-emitter": "~0.3.5"
- },
- "dependencies": {
- "es6-symbol": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
- "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
- "requires": {
- "d": "1",
- "es5-ext": "~0.10.14"
- }
- }
- }
- },
- "es6-symbol": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
- "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
- "requires": {
- "d": "^1.0.1",
- "ext": "^1.1.2"
- }
- },
- "es6-weak-map": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
- "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
- "requires": {
- "d": "1",
- "es5-ext": "^0.10.46",
- "es6-iterator": "^2.0.3",
- "es6-symbol": "^3.1.1"
- }
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
- },
- "esniff": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/esniff/-/esniff-1.1.0.tgz",
- "integrity": "sha1-xmhJIp+RRk3t4uDUAgHtar9l8qw=",
- "requires": {
- "d": "1",
- "es5-ext": "^0.10.12"
- }
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
- },
- "event-emitter": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
- "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
- "requires": {
- "d": "1",
- "es5-ext": "~0.10.14"
- }
- },
- "events": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
- "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
- },
- "execa": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
- "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
- "requires": {
- "cross-spawn": "^5.0.1",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- },
- "dependencies": {
- "get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
- }
- }
- },
- "exit-hook": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz",
- "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g="
- },
- "ext": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/ext/-/ext-1.1.2.tgz",
- "integrity": "sha512-/KLjJdTNyDepCihrk4HQt57nAE1IRCEo5jUt+WgWGCr1oARhibDvmI2DMcSNWood1T9AUWwq+jaV1wvRqaXfnA==",
- "requires": {
- "type": "^2.0.0"
- },
- "dependencies": {
- "type": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz",
- "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow=="
- }
- }
- },
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
- },
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- }
- },
- "external-editor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
- "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
- "requires": {
- "chardet": "^0.7.0",
- "iconv-lite": "^0.4.24",
- "tmp": "^0.0.33"
- }
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
- },
- "fd-slicer": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
- "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
- "requires": {
- "pend": "~1.2.0"
- }
- },
- "figures": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz",
- "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==",
- "requires": {
- "escape-string-regexp": "^1.0.5"
- }
- },
- "file-type": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
- "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY="
- },
- "filename-reserved-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
- "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik="
- },
- "filenamify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz",
- "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==",
- "requires": {
- "filename-reserved-regex": "^2.0.0",
- "strip-outer": "^1.0.0",
- "trim-repeated": "^1.0.0"
- }
- },
- "filesize": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
- "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg=="
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "find-requires": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/find-requires/-/find-requires-1.0.0.tgz",
- "integrity": "sha512-UME7hNwBfzeISSFQcBEDemEEskpOjI/shPrpJM5PI4DSdn6hX0dmz+2dL70blZER2z8tSnTRL+2rfzlYgtbBoQ==",
- "requires": {
- "es5-ext": "^0.10.49",
- "esniff": "^1.1.0"
- }
- },
- "flat": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz",
- "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==",
- "requires": {
- "is-buffer": "~2.0.3"
- }
- },
- "for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
- },
- "form-data": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
- "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "formidable": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz",
- "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg=="
- },
- "fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
- "requires": {
- "map-cache": "^0.2.2"
- }
- },
- "fs-constants": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
- },
- "fs-extra": {
- "version": "0.30.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
- "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^2.1.0",
- "klaw": "^1.0.0",
- "path-is-absolute": "^1.0.0",
- "rimraf": "^2.2.8"
- },
- "dependencies": {
- "jsonfile": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
- "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- }
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
- },
- "fs2": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/fs2/-/fs2-0.3.6.tgz",
- "integrity": "sha512-Zs7c3SBPiiNEEg+w3PTIgxTbWA6ZWVJP+1DlwUCxNDtwQD2qM5pfdho7IaiR0ceu4UVvXRj9l6Ml+X6rs21ERw==",
- "requires": {
- "d": "^1.0.1",
- "deferred": "^0.7.11",
- "es5-ext": "^0.10.51",
- "event-emitter": "^0.3.5",
- "ignore": "^5.1.4",
- "memoizee": "^0.4.14",
- "type": "^1.2.0"
- }
- },
- "fsevents": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.1.tgz",
- "integrity": "sha512-4FRPXWETxtigtJW/gxzEDsX1LVbPAM93VleB83kZB+ellqbHMkyt2aJfuzNLRvFPnGi6bcE5SvfxgbXPeKteJw==",
- "optional": true
- },
- "gauge": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz",
- "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=",
- "requires": {
- "ansi": "^0.3.0",
- "has-unicode": "^2.0.0",
- "lodash.pad": "^4.1.0",
- "lodash.padend": "^4.1.0",
- "lodash.padstart": "^4.1.0"
- }
- },
- "get-proxy": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz",
- "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==",
- "requires": {
- "npm-conf": "^1.1.0"
- }
- },
- "get-stdin": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz",
- "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g="
- },
- "get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
- },
- "glob": {
- "version": "7.1.5",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz",
- "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==",
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "glob-all": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.1.0.tgz",
- "integrity": "sha1-iRPd+17hrHgSZWJBsD1SF8ZLAqs=",
- "requires": {
- "glob": "^7.0.5",
- "yargs": "~1.2.6"
- }
- },
- "glob-parent": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
- "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "global-dirs": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
- "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
- "requires": {
- "ini": "^1.3.4"
- }
- },
- "globby": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
- "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
- "requires": {
- "array-union": "^1.0.1",
- "glob": "^7.0.3",
- "object-assign": "^4.0.1",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "got": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
- "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
- "requires": {
- "@sindresorhus/is": "^0.14.0",
- "@szmarczak/http-timer": "^1.1.2",
- "cacheable-request": "^6.0.0",
- "decompress-response": "^3.3.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^4.1.0",
- "lowercase-keys": "^1.0.1",
- "mimic-response": "^1.0.1",
- "p-cancelable": "^1.0.0",
- "to-readable-stream": "^1.0.0",
- "url-parse-lax": "^3.0.0"
- }
- },
- "graceful-fs": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.1.tgz",
- "integrity": "sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw=="
- },
- "graceful-readlink": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
- "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
- },
- "graphlib": {
- "version": "2.1.7",
- "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.7.tgz",
- "integrity": "sha512-TyI9jIy2J4j0qgPmOOrHTCtpPqJGN/aurBwc6ZT+bRii+di1I+Wv3obRhVrmBEXet+qkMaEX67dXrwsd3QQM6w==",
- "requires": {
- "lodash": "^4.17.5"
- }
- },
- "has-ansi": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
- "requires": {
- "ansi-regex": "^2.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
- }
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
- },
- "has-symbol-support-x": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz",
- "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw=="
- },
- "has-to-string-tag-x": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz",
- "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==",
- "requires": {
- "has-symbol-support-x": "^1.4.1"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
- },
- "has-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
- "requires": {
- "get-value": "^2.0.6",
- "has-values": "^1.0.0",
- "isobject": "^3.0.0"
- }
- },
- "has-values": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
- "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
- "requires": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
- },
- "dependencies": {
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "http-cache-semantics": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz",
- "integrity": "sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew=="
- },
- "https-proxy-agent": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz",
- "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==",
- "requires": {
- "agent-base": "^4.3.0",
- "debug": "^3.1.0"
- }
- },
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "ieee754": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
- "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
- },
- "ignore": {
- "version": "5.1.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz",
- "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A=="
- },
- "immediate": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
- "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
- },
- "import-lazy": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
- "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM="
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "ini": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
- "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
- },
- "inquirer": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz",
- "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==",
- "requires": {
- "ansi-escapes": "^3.2.0",
- "chalk": "^2.4.2",
- "cli-cursor": "^2.1.0",
- "cli-width": "^2.0.0",
- "external-editor": "^3.0.3",
- "figures": "^2.0.0",
- "lodash": "^4.17.12",
- "mute-stream": "0.0.7",
- "run-async": "^2.2.0",
- "rxjs": "^6.4.0",
- "string-width": "^2.1.0",
- "strip-ansi": "^5.1.0",
- "through": "^2.3.6"
- },
- "dependencies": {
- "ansi-escapes": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
- "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ=="
- },
- "figures": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
- "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
- "requires": {
- "escape-string-regexp": "^1.0.5"
- }
- }
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "is-buffer": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz",
- "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A=="
- },
- "is-ci": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
- "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==",
- "requires": {
- "ci-info": "^1.5.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- },
- "is-docker": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-1.1.0.tgz",
- "integrity": "sha1-8EN01O7lMQ6ajhE78UlUEeRhdqE="
- },
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
- },
- "is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-installed-globally": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
- "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
- "requires": {
- "global-dirs": "^0.1.0",
- "is-path-inside": "^1.0.0"
- }
- },
- "is-natural-number": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz",
- "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg="
- },
- "is-npm": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
- "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ="
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
- },
- "is-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
- "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
- },
- "is-object": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz",
- "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA="
- },
- "is-path-inside": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
- "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
- "requires": {
- "path-is-inside": "^1.0.1"
- }
- },
- "is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "is-promise": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
- "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
- },
- "is-redirect": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
- "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ="
- },
- "is-retry-allowed": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz",
- "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg=="
- },
- "is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
- },
- "is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
- },
- "is-wsl": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.1.1.tgz",
- "integrity": "sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog=="
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
- },
- "iso8601-duration": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/iso8601-duration/-/iso8601-duration-1.2.0.tgz",
- "integrity": "sha512-ErTBd++b17E8nmWII1K1uZtBgD1E8RjyvwmxlCjPHNqHMD7gmcMHOw0E8Ro/6+QT4PhHRSnnMo7bxa1vFPkwhg=="
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
- },
- "isomorphic-fetch": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
- "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
- "requires": {
- "node-fetch": "^1.0.1",
- "whatwg-fetch": ">=0.10.0"
- }
- },
- "isurl": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz",
- "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==",
- "requires": {
- "has-to-string-tag-x": "^1.2.0",
- "is-object": "^1.0.1"
- }
- },
- "jmespath": {
- "version": "0.15.0",
- "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz",
- "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc="
- },
- "js-yaml": {
- "version": "3.13.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
- "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "json-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
- "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg="
- },
- "json-cycle": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/json-cycle/-/json-cycle-1.3.0.tgz",
- "integrity": "sha512-FD/SedD78LCdSvJaOUQAXseT8oQBb5z6IVYaQaCrVUlu9zOAr1BDdKyVYQaSD/GDsAMrXpKcOyBD4LIl8nfjHw=="
- },
- "json-refs": {
- "version": "2.1.7",
- "resolved": "https://registry.npmjs.org/json-refs/-/json-refs-2.1.7.tgz",
- "integrity": "sha1-uesB/in16j6Sh48VrqEK04taz4k=",
- "requires": {
- "commander": "^2.9.0",
- "graphlib": "^2.1.1",
- "js-yaml": "^3.8.3",
- "native-promise-only": "^0.8.1",
- "path-loader": "^1.0.2",
- "slash": "^1.0.0",
- "uri-js": "^3.0.2"
- }
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
- },
- "jsonata": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/jsonata/-/jsonata-1.7.0.tgz",
- "integrity": "sha512-W1qxnGXtbaboFFA8DMLL2GZgiWoeFuMo0Yf3J23o03omzIuW9a9hgowgfUChQq8bfMfh/zmQJpwn/gQirn46ew=="
- },
- "jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "jszip": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.2.tgz",
- "integrity": "sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA==",
- "requires": {
- "lie": "~3.3.0",
- "pako": "~1.0.2",
- "readable-stream": "~2.3.6",
- "set-immediate-shim": "~1.0.1"
- }
- },
- "jwt-decode": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz",
- "integrity": "sha1-fYa9VmefWM5qhHBKZX3TkruoGnk="
- },
- "keyv": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
- "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
- "requires": {
- "json-buffer": "3.0.0"
- }
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
- },
- "klaw": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
- "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
- "requires": {
- "graceful-fs": "^4.1.9"
- }
- },
- "latest-version": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
- "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=",
- "requires": {
- "package-json": "^4.0.0"
- },
- "dependencies": {
- "get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
- },
- "got": {
- "version": "6.7.1",
- "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
- "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
- "requires": {
- "create-error-class": "^3.0.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^3.0.0",
- "is-redirect": "^1.0.0",
- "is-retry-allowed": "^1.0.0",
- "is-stream": "^1.0.0",
- "lowercase-keys": "^1.0.0",
- "safe-buffer": "^5.0.1",
- "timed-out": "^4.0.0",
- "unzip-response": "^2.0.1",
- "url-parse-lax": "^1.0.0"
- }
- },
- "package-json": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
- "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
- "requires": {
- "got": "^6.7.1",
- "registry-auth-token": "^3.0.1",
- "registry-url": "^3.0.3",
- "semver": "^5.1.0"
- }
- },
- "prepend-http": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
- "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw="
- },
- "registry-auth-token": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz",
- "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==",
- "requires": {
- "rc": "^1.1.6",
- "safe-buffer": "^5.0.1"
- }
- },
- "registry-url": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
- "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
- "requires": {
- "rc": "^1.0.1"
- }
- },
- "url-parse-lax": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
- "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
- "requires": {
- "prepend-http": "^1.0.1"
- }
- }
- }
- },
- "lazystream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
- "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
- "requires": {
- "readable-stream": "^2.0.5"
- }
- },
- "lie": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
- "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
- "requires": {
- "immediate": "~3.0.5"
- }
- },
- "lodash": {
- "version": "4.17.15",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
- },
- "lodash.difference": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz",
- "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw="
- },
- "lodash.get": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
- },
- "lodash.pad": {
- "version": "4.5.1",
- "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz",
- "integrity": "sha1-QzCUmoM6fI2iLMIPaibE1Z3runA="
- },
- "lodash.padend": {
- "version": "4.6.1",
- "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
- "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4="
- },
- "lodash.padstart": {
- "version": "4.6.1",
- "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz",
- "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs="
- },
- "lodash.set": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz",
- "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM="
- },
- "lodash.uniq": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
- "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M="
- },
- "lodash.uniqby": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz",
- "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI="
- },
- "lodash.values": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-4.3.0.tgz",
- "integrity": "sha1-o6bCsOvsxcLLocF+bmIP6BtT00c="
- },
- "lowercase-keys": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
- "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="
- },
- "lru-cache": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "lru-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
- "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=",
- "requires": {
- "es5-ext": "~0.10.2"
- }
- },
- "lsmod": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lsmod/-/lsmod-1.0.0.tgz",
- "integrity": "sha1-mgD3bco26yP6BTUK/htYXUKZ5ks="
- },
- "make-dir": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
- "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
- "requires": {
- "pify": "^3.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
- }
- }
- },
- "map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
- },
- "map-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
- "requires": {
- "object-visit": "^1.0.0"
- }
- },
- "memoizee": {
- "version": "0.4.14",
- "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.14.tgz",
- "integrity": "sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg==",
- "requires": {
- "d": "1",
- "es5-ext": "^0.10.45",
- "es6-weak-map": "^2.0.2",
- "event-emitter": "^0.3.5",
- "is-promise": "^2.1",
- "lru-queue": "0.1",
- "next-tick": "1",
- "timers-ext": "^0.1.5"
- }
- },
- "methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
- },
- "mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
- },
- "mime-db": {
- "version": "1.40.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
- "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
- },
- "mime-types": {
- "version": "2.1.24",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
- "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
- "requires": {
- "mime-db": "1.40.0"
- }
- },
- "mimic-fn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
- "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="
- },
- "mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
- },
- "mixin-deep": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
- "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
- "requires": {
- "for-in": "^1.0.2",
- "is-extendable": "^1.0.1"
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
- "requires": {
- "minimist": "0.0.8"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
- }
- }
- },
- "moment": {
- "version": "2.24.0",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
- "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "mute-stream": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
- "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
- },
- "nanoid": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.6.tgz",
- "integrity": "sha512-2NDzpiuEy3+H0AVtdt8LoFi7PnqkOnIzYmJQp7xsEU6VexLluHQwKREuiz57XaQC5006seIadPrIZJhyS2n7aw=="
- },
- "nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- }
- },
- "native-promise-only": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz",
- "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE="
- },
- "ncjsm": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/ncjsm/-/ncjsm-2.3.0.tgz",
- "integrity": "sha512-VdfQ2cdfzPtdCeccVS1DipEvO2XiIHy61SHhFIHaHbA7KNelzlviDy5MGYANPjBHlJwHfu96DWQTS6P+rrowAA==",
- "requires": {
- "builtin-modules": "^3.1.0",
- "deferred": "^0.7.10",
- "es5-ext": "^0.10.49",
- "es6-set": "^0.1.5",
- "find-requires": "^1.0.0",
- "fs2": "^0.3.4",
- "type": "^1.0.1"
- }
- },
- "next-tick": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
- "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
- },
- "node-dir": {
- "version": "0.1.17",
- "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz",
- "integrity": "sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=",
- "requires": {
- "minimatch": "^3.0.2"
- }
- },
- "node-fetch": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
- "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
- "requires": {
- "encoding": "^0.1.11",
- "is-stream": "^1.0.1"
- }
- },
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
- },
- "normalize-url": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
- "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ=="
- },
- "npm-conf": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz",
- "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==",
- "requires": {
- "config-chain": "^1.1.11",
- "pify": "^3.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
- }
- }
- },
- "npm-run-path": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
- "requires": {
- "path-key": "^2.0.0"
- }
- },
- "npmlog": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz",
- "integrity": "sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=",
- "requires": {
- "ansi": "~0.3.1",
- "are-we-there-yet": "~1.1.2",
- "gauge": "~1.2.5"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
- },
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
- },
- "object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
- "requires": {
- "copy-descriptor": "^0.1.0",
- "define-property": "^0.2.5",
- "kind-of": "^3.0.3"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
- }
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "object-hash": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz",
- "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA=="
- },
- "object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
- "requires": {
- "isobject": "^3.0.0"
- }
- },
- "object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "requires": {
- "wrappy": "1"
- }
- },
- "onetime": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
- "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
- "requires": {
- "mimic-fn": "^1.0.0"
- }
- },
- "opencollective-postinstall": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz",
- "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw=="
- },
- "opn": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
- "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
- "requires": {
- "is-wsl": "^1.1.0"
- },
- "dependencies": {
- "is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
- }
- }
- },
- "os-shim": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz",
- "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc="
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
- },
- "p-cancelable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
- "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw=="
- },
- "p-finally": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
- },
- "package-json": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz",
- "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==",
- "requires": {
- "got": "^9.6.0",
- "registry-auth-token": "^4.0.0",
- "registry-url": "^5.0.0",
- "semver": "^6.2.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
- }
- }
- },
- "pako": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz",
- "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw=="
- },
- "pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
- },
- "path-is-inside": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
- "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM="
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
- },
- "path-loader": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/path-loader/-/path-loader-1.0.10.tgz",
- "integrity": "sha512-CMP0v6S6z8PHeJ6NFVyVJm6WyJjIwFvyz2b0n2/4bKdS/0uZa/9sKUlYZzubrn3zuDRU0zIuEDX9DZYQ2ZI8TA==",
- "requires": {
- "native-promise-only": "^0.8.1",
- "superagent": "^3.8.3"
- }
- },
- "pend": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
- "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
- },
- "picomatch": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.0.tgz",
- "integrity": "sha512-uhnEDzAbrcJ8R3g2fANnSuXZMBtkpSjxTTgn2LeSiQlfmq72enQJWdQllXW24MBLYnA1SBD2vfvx2o0Zw3Ielw=="
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
- },
- "pinkie": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
- },
- "pinkie-promise": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
- "requires": {
- "pinkie": "^2.0.0"
- }
- },
- "prepend-http": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
- "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc="
- },
- "prettyoutput": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/prettyoutput/-/prettyoutput-1.2.0.tgz",
- "integrity": "sha512-G2gJwLzLcYS+2m6bTAe+CcDpwak9YpcvpScI0tE4WYb2O3lEZD/YywkMNpGqsSx5wttGvh2UXaKROTKKCyM2dw==",
- "requires": {
- "colors": "1.3.x",
- "commander": "2.19.x",
- "lodash": "4.17.x"
- }
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
- },
- "promise-queue": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/promise-queue/-/promise-queue-2.2.5.tgz",
- "integrity": "sha1-L29ffA9tCBCelnZZx5uIqe1ek7Q="
- },
- "proto-list": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
- "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk="
- },
- "pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "punycode": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
- "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
- },
- "qs": {
- "version": "6.9.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.0.tgz",
- "integrity": "sha512-27RP4UotQORTpmNQDX8BHPukOnBP3p1uUJY5UnDhaJB+rMt9iMsok724XL+UHU23bEFOHRMQ2ZhI99qOWUMGFA=="
- },
- "querystring": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
- "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
- },
- "ramda": {
- "version": "0.26.1",
- "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz",
- "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ=="
- },
- "raven": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/raven/-/raven-1.2.1.tgz",
- "integrity": "sha1-lJwTTbAooZC3u/j3kKrlQbfAIL0=",
- "requires": {
- "cookie": "0.3.1",
- "json-stringify-safe": "5.0.1",
- "lsmod": "1.0.0",
- "stack-trace": "0.0.9",
- "uuid": "3.0.0"
- },
- "dependencies": {
- "uuid": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.0.tgz",
- "integrity": "sha1-Zyj8BFnEUNeWqZwxg3VpvfZy1yg="
- }
- }
- },
- "rc": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
- "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
- "requires": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- }
- },
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- }
- }
- },
- "readdirp": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz",
- "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==",
- "requires": {
- "picomatch": "^2.0.4"
- }
- },
- "regenerator-runtime": {
- "version": "0.13.3",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
- "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw=="
- },
- "regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "requires": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
- }
- },
- "registry-auth-token": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.0.0.tgz",
- "integrity": "sha512-lpQkHxd9UL6tb3k/aHAVfnVtn+Bcs9ob5InuFLLEDqSqeq+AljB8GZW9xY0x7F+xYwEcjKe07nyoxzEYz6yvkw==",
- "requires": {
- "rc": "^1.2.8",
- "safe-buffer": "^5.0.1"
- }
- },
- "registry-url": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz",
- "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==",
- "requires": {
- "rc": "^1.2.8"
- }
- },
- "remove-trailing-separator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
- },
- "replaceall": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/replaceall/-/replaceall-0.1.6.tgz",
- "integrity": "sha1-gdgax663LX9cSUKt8ml6MiBojY4="
- },
- "resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
- },
- "responselike": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
- "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
- "requires": {
- "lowercase-keys": "^1.0.0"
- }
- },
- "restore-cursor": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
- "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
- "requires": {
- "onetime": "^2.0.0",
- "signal-exit": "^3.0.2"
- }
- },
- "ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
- },
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "run-async": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
- "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
- "requires": {
- "is-promise": "^2.1.0"
- }
- },
- "rx": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
- "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I="
- },
- "rxjs": {
- "version": "6.5.3",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz",
- "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==",
- "requires": {
- "tslib": "^1.9.0"
- }
- },
- "safe-buffer": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
- "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
- },
- "safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
- "requires": {
- "ret": "~0.1.10"
- }
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
- },
- "sax": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz",
- "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o="
- },
- "seek-bzip": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz",
- "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=",
- "requires": {
- "commander": "~2.8.1"
- },
- "dependencies": {
- "commander": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
- "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
- "requires": {
- "graceful-readlink": ">= 1.0.0"
- }
- }
- }
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- },
- "semver-diff": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
- "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
- "requires": {
- "semver": "^5.0.3"
- }
- },
- "semver-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz",
- "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk="
- },
- "serverless": {
- "version": "1.51.0",
- "resolved": "https://registry.npmjs.org/serverless/-/serverless-1.51.0.tgz",
- "integrity": "sha512-OwBCC8joJ93GEjoG6ygx0cZHnHkQxdNtuxJ2bgyg94uxup3FUOBUPujUbAVrJsoZs1p5bz2/YIA1QzOnLz/crQ==",
- "requires": {
- "@serverless/cli": "^1.0.3",
- "@serverless/enterprise-plugin": "^1.3.9",
- "archiver": "^1.3.0",
- "async": "^1.5.2",
- "aws-sdk": "^2.518.0",
- "bluebird": "^3.5.5",
- "cachedir": "^2.2.0",
- "chalk": "^2.4.2",
- "ci-info": "^1.6.0",
- "download": "^5.0.3",
- "fast-levenshtein": "^2.0.6",
- "filesize": "^3.6.1",
- "fs-extra": "^0.30.0",
- "get-stdin": "^5.0.1",
- "globby": "^6.1.0",
- "graceful-fs": "^4.2.2",
- "https-proxy-agent": "^2.2.2",
- "inquirer": "^6.5.2",
- "is-docker": "^1.1.0",
- "is-wsl": "^2.1.0",
- "js-yaml": "^3.13.1",
- "json-cycle": "^1.3.0",
- "json-refs": "^2.1.7",
- "jszip": "^3.2.2",
- "jwt-decode": "^2.2.0",
- "lodash": "^4.17.15",
- "minimist": "^1.2.0",
- "mkdirp": "^0.5.1",
- "moment": "^2.24.0",
- "nanomatch": "^1.2.13",
- "ncjsm": "^2.3.0",
- "node-fetch": "^1.7.3",
- "object-hash": "^1.3.1",
- "promise-queue": "^2.2.5",
- "raven": "^1.2.1",
- "rc": "^1.2.8",
- "replaceall": "^0.1.6",
- "semver": "^5.7.1",
- "semver-regex": "^1.0.0",
- "tabtab": "^2.2.2",
- "untildify": "^3.0.3",
- "update-notifier": "^2.5.0",
- "uuid": "^2.0.3",
- "write-file-atomic": "^2.4.3",
- "yaml-ast-parser": "0.0.43"
- },
- "dependencies": {
- "graceful-fs": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
- "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
- }
- }
- },
- "serverless-domain-manager": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/serverless-domain-manager/-/serverless-domain-manager-3.3.0.tgz",
- "integrity": "sha512-oGZDNzI/Y15QusC/E+Zm6VaXoAwnbQnm6e6wyXPFDi1Sqoeo8xarKNj0fZODhEf4DKggAqxVfkiXjhuC8yZu0Q==",
- "dev": true,
- "requires": {
- "aws-sdk": "^2.490.0",
- "chalk": "^2.4.1"
- }
- },
- "serverless-plugin-tracing": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/serverless-plugin-tracing/-/serverless-plugin-tracing-2.0.0.tgz",
- "integrity": "sha1-32uLMWasm7cKN8f8h1AUsjaRWPY=",
- "dev": true
- },
- "serverless-python-requirements": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/serverless-python-requirements/-/serverless-python-requirements-5.0.1.tgz",
- "integrity": "sha512-FKFS93oxmLEico0GnVnnO287xrUZmCuk6vX//Tq4F/PXXn9eu1xVnjnyaGDvzQbc6OQPsBdJjCC/bBlp/U+Kdg==",
- "requires": {
- "@iarna/toml": "^2.2.3",
- "appdirectory": "^0.1.0",
- "bluebird": "^3.0.6",
- "fs-extra": "^7.0.0",
- "glob-all": "^3.1.0",
- "is-wsl": "^2.0.0",
- "jszip": "^3.1.0",
- "lodash.get": "^4.4.2",
- "lodash.set": "^4.3.2",
- "lodash.uniqby": "^4.0.0",
- "lodash.values": "^4.3.0",
- "rimraf": "^2.6.2",
- "sha256-file": "1.0.0",
- "shell-quote": "^1.6.1"
- },
- "dependencies": {
- "fs-extra": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
- "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- }
- }
- },
- "set-immediate-shim": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
- "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E="
- },
- "set-value": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
- "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.3",
- "split-string": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
- }
- }
- },
- "sha256-file": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/sha256-file/-/sha256-file-1.0.0.tgz",
- "integrity": "sha512-nqf+g0veqgQAkDx0U2y2Tn2KWyADuuludZTw9A7J3D+61rKlIIl9V5TS4mfnwKuXZOH9B7fQyjYJ9pKRHIsAyg=="
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
- },
- "shell-quote": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
- "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg=="
- },
- "shortid": {
- "version": "2.2.15",
- "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.15.tgz",
- "integrity": "sha512-5EaCy2mx2Jgc/Fdn9uuDuNIIfWBpzY4XIlhoqtXF6qsf+/+SGZ+FxDdX/ZsMZiWupIWNqAEmiNY4RC+LSmCeOw==",
- "requires": {
- "nanoid": "^2.1.0"
- }
- },
- "signal-exit": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
- },
- "simple-git": {
- "version": "1.126.0",
- "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.126.0.tgz",
- "integrity": "sha512-47mqHxgZnN8XRa9HbpWprzUv3Ooqz9RY/LSZgvA7jCkW8jcwLahMz7LKugY91KZehfG0sCVPtgXiU72hd6b1Bw==",
- "requires": {
- "debug": "^4.0.1"
- },
- "dependencies": {
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "requires": {
- "ms": "^2.1.1"
- }
- }
- }
- },
- "slash": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
- "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
- },
- "snapdragon": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
- "requires": {
- "base": "^0.11.1",
- "debug": "^2.2.0",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "map-cache": "^0.2.2",
- "source-map": "^0.5.6",
- "source-map-resolve": "^0.5.0",
- "use": "^3.1.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
- }
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
- },
- "source-map-resolve": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
- "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
- "requires": {
- "atob": "^2.1.1",
- "decode-uri-component": "^0.2.0",
- "resolve-url": "^0.2.1",
- "source-map-url": "^0.4.0",
- "urix": "^0.1.0"
- }
- },
- "source-map-support": {
- "version": "0.5.16",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz",
- "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==",
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "source-map-url": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
- "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
- },
- "spawn-sync": {
- "version": "1.0.15",
- "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz",
- "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=",
- "requires": {
- "concat-stream": "^1.4.7",
- "os-shim": "^0.1.2"
- }
- },
- "split-string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
- "requires": {
- "extend-shallow": "^3.0.0"
- }
- },
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
- },
- "stack-trace": {
- "version": "0.0.9",
- "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz",
- "integrity": "sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU="
- },
- "static-extend": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
- "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
- "requires": {
- "define-property": "^0.2.5",
- "object-copy": "^0.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
- }
- }
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- }
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- },
- "strip-dirs": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz",
- "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==",
- "requires": {
- "is-natural-number": "^4.0.1"
- }
- },
- "strip-eof": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
- },
- "strip-outer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz",
- "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==",
- "requires": {
- "escape-string-regexp": "^1.0.2"
- }
- },
- "superagent": {
- "version": "3.8.3",
- "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz",
- "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==",
- "requires": {
- "component-emitter": "^1.2.0",
- "cookiejar": "^2.1.0",
- "debug": "^3.1.0",
- "extend": "^3.0.0",
- "form-data": "^2.3.1",
- "formidable": "^1.2.0",
- "methods": "^1.1.1",
- "mime": "^1.4.1",
- "qs": "^6.5.1",
- "readable-stream": "^2.3.5"
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "tabtab": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/tabtab/-/tabtab-2.2.2.tgz",
- "integrity": "sha1-egR/FDsBC0y9MfhX6ClhUSy/ThQ=",
- "requires": {
- "debug": "^2.2.0",
- "inquirer": "^1.0.2",
- "lodash.difference": "^4.5.0",
- "lodash.uniq": "^4.5.0",
- "minimist": "^1.2.0",
- "mkdirp": "^0.5.1",
- "npmlog": "^2.0.3",
- "object-assign": "^4.1.0"
- },
- "dependencies": {
- "ansi-escapes": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
- "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4="
- },
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
- },
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
- },
- "cli-cursor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
- "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
- "requires": {
- "restore-cursor": "^1.0.1"
- }
- },
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "external-editor": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-1.1.1.tgz",
- "integrity": "sha1-Etew24UPf/fnCBuvQAVwAGDEYAs=",
- "requires": {
- "extend": "^3.0.0",
- "spawn-sync": "^1.0.15",
- "tmp": "^0.0.29"
- }
- },
- "figures": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
- "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
- "requires": {
- "escape-string-regexp": "^1.0.5",
- "object-assign": "^4.1.0"
- }
- },
- "inquirer": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-1.2.3.tgz",
- "integrity": "sha1-TexvMvN+97sLLtPx0aXD9UUHSRg=",
- "requires": {
- "ansi-escapes": "^1.1.0",
- "chalk": "^1.0.0",
- "cli-cursor": "^1.0.1",
- "cli-width": "^2.0.0",
- "external-editor": "^1.1.0",
- "figures": "^1.3.5",
- "lodash": "^4.3.0",
- "mute-stream": "0.0.6",
- "pinkie-promise": "^2.0.0",
- "run-async": "^2.2.0",
- "rx": "^4.1.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.0",
- "through": "^2.3.6"
- }
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "mute-stream": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz",
- "integrity": "sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s="
- },
- "onetime": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
- "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k="
- },
- "restore-cursor": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
- "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
- "requires": {
- "exit-hook": "^1.0.0",
- "onetime": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
- },
- "tmp": {
- "version": "0.0.29",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz",
- "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=",
- "requires": {
- "os-tmpdir": "~1.0.1"
- }
- }
- }
- },
- "tar-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz",
- "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==",
- "requires": {
- "bl": "^1.0.0",
- "buffer-alloc": "^1.2.0",
- "end-of-stream": "^1.0.0",
- "fs-constants": "^1.0.0",
- "readable-stream": "^2.3.0",
- "to-buffer": "^1.1.1",
- "xtend": "^4.0.0"
- }
- },
- "term-size": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
- "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
- "requires": {
- "execa": "^0.7.0"
- }
- },
- "through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
- },
- "timed-out": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
- "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8="
- },
- "timers-ext": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz",
- "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==",
- "requires": {
- "es5-ext": "~0.10.46",
- "next-tick": "1"
- }
- },
- "tmp": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "requires": {
- "os-tmpdir": "~1.0.2"
- }
- },
- "to-buffer": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
- "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg=="
- },
- "to-object-path": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
- "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "to-readable-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
- "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q=="
- },
- "to-regex": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
- "requires": {
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "regex-not": "^1.0.2",
- "safe-regex": "^1.1.0"
- }
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "traverse": {
- "version": "0.6.6",
- "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
- "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc="
- },
- "trim-repeated": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
- "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=",
- "requires": {
- "escape-string-regexp": "^1.0.2"
- }
- },
- "tslib": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
- "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ=="
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "type": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
- "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
- },
- "type-fest": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz",
- "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw=="
- },
- "typedarray": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
- },
- "unbzip2-stream": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz",
- "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==",
- "requires": {
- "buffer": "^5.2.1",
- "through": "^2.3.8"
- }
- },
- "union-value": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
- "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
- "requires": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^2.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
- }
- }
- },
- "unique-string": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
- "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
- "requires": {
- "crypto-random-string": "^1.0.0"
- }
- },
- "universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
- },
- "unset-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
- "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
- "requires": {
- "has-value": "^0.3.1",
- "isobject": "^3.0.0"
- },
- "dependencies": {
- "has-value": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
- "requires": {
- "get-value": "^2.0.3",
- "has-values": "^0.1.4",
- "isobject": "^2.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "requires": {
- "isarray": "1.0.0"
- }
- }
- }
- },
- "has-values": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
- }
- }
- },
- "untildify": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.3.tgz",
- "integrity": "sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA=="
- },
- "unzip-response": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
- "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c="
- },
- "update-notifier": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz",
- "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==",
- "requires": {
- "boxen": "^1.2.1",
- "chalk": "^2.0.1",
- "configstore": "^3.0.0",
- "import-lazy": "^2.1.0",
- "is-ci": "^1.0.10",
- "is-installed-globally": "^0.1.0",
- "is-npm": "^1.0.0",
- "latest-version": "^3.0.0",
- "semver-diff": "^2.0.0",
- "xdg-basedir": "^3.0.0"
- }
- },
- "uri-js": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-3.0.2.tgz",
- "integrity": "sha1-+QuFhQf4HepNz7s8TD2/orVX+qo=",
- "requires": {
- "punycode": "^2.1.0"
- },
- "dependencies": {
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
- }
- }
- },
- "urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
- },
- "url": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz",
- "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=",
- "requires": {
- "punycode": "1.3.2",
- "querystring": "0.2.0"
- }
- },
- "url-parse-lax": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
- "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
- "requires": {
- "prepend-http": "^2.0.0"
- }
- },
- "url-to-options": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz",
- "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k="
- },
- "use": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
- },
- "uuid": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
- "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho="
- },
- "walkdir": {
- "version": "0.0.11",
- "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz",
- "integrity": "sha1-oW0CXrkxvQO1LzCMrtD0D86+lTI="
- },
- "whatwg-fetch": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz",
- "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q=="
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "widest-line": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz",
- "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==",
- "requires": {
- "string-width": "^2.1.1"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
- },
- "write-file-atomic": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
- "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
- "requires": {
- "graceful-fs": "^4.1.11",
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.2"
- }
- },
- "ws": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
- "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
- "requires": {
- "async-limiter": "~1.0.0"
- }
- },
- "xdg-basedir": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
- "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ="
- },
- "xml2js": {
- "version": "0.4.19",
- "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
- "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
- "requires": {
- "sax": ">=0.6.0",
- "xmlbuilder": "~9.0.1"
- }
- },
- "xmlbuilder": {
- "version": "9.0.7",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
- "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
- },
- "xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
- },
- "yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
- },
- "yaml-ast-parser": {
- "version": "0.0.43",
- "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz",
- "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A=="
- },
- "yamljs": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz",
- "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==",
- "requires": {
- "argparse": "^1.0.7",
- "glob": "^7.0.5"
- }
- },
- "yargs": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-1.2.6.tgz",
- "integrity": "sha1-nHtKgv1dWVsr8Xq23MQxNUMv40s=",
- "requires": {
- "minimist": "^0.1.0"
- },
- "dependencies": {
- "minimist": {
- "version": "0.1.0",
- "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz",
- "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4="
- }
- }
- },
- "yauzl": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
- "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
- "requires": {
- "buffer-crc32": "~0.2.3",
- "fd-slicer": "~1.1.0"
- }
- },
- "zip-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz",
- "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=",
- "requires": {
- "archiver-utils": "^1.3.0",
- "compress-commons": "^1.2.0",
- "lodash": "^4.8.0",
- "readable-stream": "^2.0.0"
- }
- }
- }
-}
diff --git a/package.json b/package.json
deleted file mode 100644
index ae44c97..0000000
--- a/package.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "modules.tf-lambda",
- "version": "2.0.0",
- "description": "From visual diagrams created with Cloudcraft.co to infrastructure as code using Terraform and Terragrunt",
- "main": "index.js",
- "private": true,
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1",
- "postinstall": "opencollective-postinstall || true"
- },
- "keywords": [
- "Infrastructure as code",
- "Terraform",
- "Terragrunt",
- "terraform-aws-modules",
- "AWS"
- ],
- "author": "Anton Babenko ",
- "license": "MIT",
- "devDependencies": {
- "serverless-domain-manager": "^3.3.0",
- "serverless-plugin-tracing": "^2.0.0"
- },
- "dependencies": {
- "opencollective-postinstall": "^2.0.2",
- "serverless": "1.51.0",
- "serverless-python-requirements": "^5.0.1"
- },
- "collective": {
- "type": "opencollective",
- "url": "https://opencollective.com/modulestf"
- }
-}
diff --git a/requirements-lambda.txt b/requirements-lambda.txt
deleted file mode 100644
index 88b4976..0000000
--- a/requirements-lambda.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-cookiecutter==1.6.0
-networkx==2.4
-petname==2.6
-requests>=2.22.0
diff --git a/requirements.txt b/requirements.txt
deleted file mode 100644
index 6f0f417..0000000
--- a/requirements.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-aws-xray-sdk>=2.0
-boto3==1.7.3
-botocore<1.11.0,>=1.10.3
-cookiecutter==1.6.0
-networkx==2.4
-petname==2.6
-python-lambda-local==0.1.9
-requests>=2.22.0
diff --git a/serverless.yml b/serverless.yml
deleted file mode 100644
index 79ff628..0000000
--- a/serverless.yml
+++ /dev/null
@@ -1,76 +0,0 @@
-service: modules-tf
-
-#frameworkVersion: ">=1.26.0 <2.0.0"
-frameworkVersion: "1.51.0" # see KNOWN_ISSUES.md
-
-provider:
- name: aws
- runtime: python3.7
- stage: dev
- region: eu-west-1
- tracing: true
- timeout: 30
- environment:
- S3_BUCKET: "dl.modules.tf"
- S3_DIR: ${self:custom.stage}
- iamRoleStatements:
- - Effect: "Allow"
- Action:
- - "s3:*" # "s3:PutObject" plus something more plus stage name
- Resource:
- - "arn:aws:s3:::${self:provider.environment.S3_BUCKET}/${self:provider.environment.S3_DIR}/*"
- - "arn:aws:s3:::${self:provider.environment.S3_BUCKET}/${self:provider.environment.S3_DIR}/"
- - Effect: "Allow" # xray permissions (required)
- Action:
- - "xray:PutTraceSegments"
- - "xray:PutTelemetryRecords"
- Resource:
- - "*"
-
-functions:
- generate-cloudcraft:
- name: ${self:service}-${self:custom.stage}-generate-cloudcraft
- handler: handler.handler
- description: Generate all from Cloudcraft URL (stage=${self:custom.stage})
- memorySize: 1536
- events:
- - http:
- method: get
- path: /
- cors: true
- - http:
- method: post
- path: /
- cors: true
-
-plugins:
- - serverless-domain-manager
- - serverless-python-requirements
- - serverless-plugin-tracing
-
-custom:
- stage: ${opt:stage, self:provider.stage}
- domains:
- prod: lambda.modules.tf
- dev: dev-lambda.modules.tf
-
- customDomain:
- domainName: "${self:custom.domains.${self:custom.stage}}"
- basePath: ""
- stage: "${self:custom.stage}"
- certificateName: "*.modules.tf"
- createRoute53Record: true
-
- pythonRequirements:
- fileName: requirements-lambda.txt # requirements-lambda.txt does not have heavy libraries like matplotlib, python-lambda-local which are required for debug locally
- dockerizePip: true
- useDownloadCache: true
- useStaticCache: true
-
-package:
- exclude:
- - "input/**"
- - "output/**"
- - "test_fixtures/**"
- - "node_modules/**"
- - ".requirements-cache/**"
diff --git a/handler.py b/src/handler.py
similarity index 53%
rename from handler.py
rename to src/handler.py
index f05ad38..464c4eb 100755
--- a/handler.py
+++ b/src/handler.py
@@ -2,10 +2,17 @@
import json
import os
+import pathlib
import shutil
from pprint import pformat, pprint
+from typing import Any, Dict
import requests
+from aws_lambda_powertools import Metrics, Tracer
+from aws_lambda_powertools.logging.logger import Logger
+from aws_lambda_powertools.metrics import MetricUnit
+from aws_lambda_powertools.utilities.data_classes import APIGatewayProxyEventV2
+from aws_lambda_powertools.utilities.typing import LambdaContext
from modulestf.cloudcraft.graph import populate_graph
from modulestf.const import FINAL_DIR
from modulestf.convert import convert_graph_to_modulestf_config
@@ -13,14 +20,20 @@
from modulestf.render import prepare_render_dirs, render_from_modulestf_config
from modulestf.upload import upload_file_to_s3
-logger = setup_logging()
+# logger = setup_logging()
+
+os.environ["POWERTOOLS_TRACE_DISABLED"] = "1"
+
+logger = Logger(service="modulestf-d2c")
+tracer = Tracer(service="modulestf-d2c")
+metrics = Metrics(namespace="modulestf-d2c", service="modulestf-d2c")
def load_data(event):
- body = event.get("body")
- logger.info("body = %s" % body)
+ body = event.body
+ logger.info(f"body = {body}")
- qs = event.get("queryStringParameters")
+ qs = event.query_string_parameters
logger.info("queryStringParameters = %s" % qs)
if body is None and qs is None:
@@ -43,7 +56,7 @@ def load_data(event):
if 403 == r.status_code:
raise ValueError("Sharing has been disabled for this blueprint." +
" You have to enable it by clicking 'Export' -> 'Get shareable link'" +
- " on https://cloudcraft.co/app/", 403)
+ " on https://app.cloudcraft.co", 403)
elif r.status_code >= 500:
raise ValueError("Something went wrong on cloudcraft side. Can't fetch specified blueprint." +
@@ -55,12 +68,18 @@ def load_data(event):
else:
raise ValueError("'cloudcraft' or 'localfile' query string parameter should be defined", 400)
- print("event = %s" % json.dumps(event))
-
return data
-def handler(event, context):
+@metrics.log_metrics
+@logger.inject_lambda_context
+@tracer.capture_lambda_handler
+def handler(event: Dict[str, Any], context: LambdaContext) -> Dict[str, Any]: # noqa: WPS110
+
+ event: APIGatewayProxyEventV2 = APIGatewayProxyEventV2(event)
+
+ logger.info("Processing event: {}".format(json.dumps(event.body)))
+
link = ""
try:
@@ -69,12 +88,13 @@ def handler(event, context):
logger.error(error)
return {
- "body": error.args[0],
+ "body": str(error),
+ "isBase64Encoded": False,
"headers": {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Credentials": True
},
- "statusCode": error.args[1],
+ "statusCode": 400,
}
# logger.info(pformat(data, indent=2))
@@ -88,11 +108,13 @@ def handler(event, context):
render_from_modulestf_config(config, source=graph.source, regions=graph.regions)
# Do not upload to S3 when working locally
- if not os.environ.get("IS_LOCAL"):
+ if os.environ.get("UPLOAD_TO_S3", False):
shutil.make_archive("archive", "zip", FINAL_DIR)
link = upload_file_to_s3(filename="archive.zip")
+ metrics.add_metric(name="Request", unit=MetricUnit.Count, value=1)
+
return {
"body": "",
"headers": {
@@ -102,3 +124,27 @@ def handler(event, context):
},
"statusCode": 302,
}
+
+
+if __name__ == "__main__":
+ api_gateway = pathlib.Path(__file__).parent.absolute() / "../test_fixtures/api_gateway_request.json"
+ event = json.loads(api_gateway.read_text())
+
+ # fixture = pathlib.Path(__file__).parent.absolute() / "../test_fixtures/input_cloudcraft.json"
+ fixture = pathlib.Path(__file__).parent.absolute() / "../test_fixtures/input_localfile.json"
+ # fixture = pathlib.Path(__file__).parent.absolute() / "../test_fixtures/input_data.json"
+
+ fixture_json = json.loads(fixture.read_text())
+
+ event.update(fixture_json)
+
+ context = LambdaContext()
+ context._function_name = "_function_name"
+ context._function_version = "_function_version"
+ context._invoked_function_arn = "_invoked_function_arn"
+ context._memory_limit_in_mb = "_memory_limit_in_mb"
+ context._aws_request_id = "_aws_request_id"
+ context._log_group_name = "_log_group_name"
+ context._log_stream_name = "_log_stream_name"
+
+ handler(event, context)
diff --git a/modulestf/__init__.py b/src/modulestf/__init__.py
similarity index 100%
rename from modulestf/__init__.py
rename to src/modulestf/__init__.py
diff --git a/modulestf/cloudcraft/__init__.py b/src/modulestf/cloudcraft/__init__.py
similarity index 100%
rename from modulestf/cloudcraft/__init__.py
rename to src/modulestf/cloudcraft/__init__.py
diff --git a/modulestf/cloudcraft/graph.py b/src/modulestf/cloudcraft/graph.py
similarity index 86%
rename from modulestf/cloudcraft/graph.py
rename to src/modulestf/cloudcraft/graph.py
index 75faca7..396cdc2 100644
--- a/modulestf/cloudcraft/graph.py
+++ b/src/modulestf/cloudcraft/graph.py
@@ -38,7 +38,8 @@ def populate_graph(data): # noqa: C901
# EDGES
########
for edge in data_edges:
- G.add_edge(edge["from"], edge["to"])
+ if "from" in edge and "to" in edge:
+ G.add_edge(edge["from"], edge["to"])
#####################
# AUTOSCALING GROUPS, SECURITY GROUPS AND VPCS
@@ -61,11 +62,21 @@ def populate_graph(data): # noqa: C901
"group_name": group_name,
})
+ if group_type == "sg":
+ G.nodes[group_id]["data"]["inbound_rules"] = group.get("inboundRules")
+ G.nodes[group_id]["data"]["outbound_rules"] = group.get("outboundRules")
+ elif group_type == "vpc":
+ G.nodes[group_id]["data"]["peering_connections"] = group.get("peeringConnections")
+
for group_node in group_nodes:
# some items (like "text") may belong to groups, but are not in "nodes"
if group_node not in G.nodes:
continue
+ # nodes type "icon" does not have "data", so we skip them
+ if "data" not in G.nodes[group_node]:
+ continue
+
if group_type == "asg":
G.nodes[group_node]["data"]["asg_id"] = group_id
elif group_type == "sg":
@@ -109,7 +120,7 @@ def populate_graph(data): # noqa: C901
relTo = mapPos.get("relTo")
if relTo in G.nodes:
- G.nodes[relTo]["text"] = text["text"]
+ G.nodes[relTo]["text"] = text["text"].strip()
###########
# REGION
diff --git a/modulestf/const.py b/src/modulestf/const.py
similarity index 88%
rename from modulestf/const.py
rename to src/modulestf/const.py
index a08d3a9..ec737a2 100644
--- a/modulestf/const.py
+++ b/src/modulestf/const.py
@@ -14,7 +14,7 @@
S3_BUCKET = "dl.modules.tf"
S3_BUCKET_REGION = "eu-west-1"
-if os.environ.get("IS_LOCAL"):
- tmp_dir = os.getcwd()
-else:
+if os.environ.get("AWS_EXECUTION_ENV") is not None:
tmp_dir = tempfile.gettempdir() # was /tmp
+else:
+ tmp_dir = os.getcwd()
diff --git a/modulestf/convert.py b/src/modulestf/convert.py
similarity index 66%
rename from modulestf/convert.py
rename to src/modulestf/convert.py
index d7c1020..efaace1 100644
--- a/modulestf/convert.py
+++ b/src/modulestf/convert.py
@@ -50,6 +50,17 @@ def random_password(length=12):
return ''.join(random.choice(chars) for _ in range(length))
+# Security group helper - port range
+def convert_port_range(port_range):
+ group = port_range.split("-")
+ return group[0], group[1 if len(group) > 1 else 0]
+
+
+# Security group helper - protocol
+def convert_protocol(protocol):
+ return {"tcp": 6, "udp": 16, "icmp": 1, "icmpv6": 58}.get(protocol, "-1")
+
+
def get_node(G, node_id):
try:
return G.nodes.get(node_id)
@@ -82,7 +93,7 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901
parsed_asg_id = set()
warnings = set()
- supported_node_types = ["rds", "ec2", "elb", "sns", "sqs", "sg", "vpc", "s3", "redshift"]
+ supported_node_types = ["rds", "ec2", "elb", "sns", "sqs", "sg", "vpc", "s3", "redshift", "dynamodb", "cloudfront", "lambda", "vpngateway", "apigateway"]
# supported_node_types = ["sg", "vpc"]
for key, node_complete in G.nodes.items():
@@ -117,7 +128,7 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901
tmp_edges = []
if node.get("type") == "rds" and node.get("engine") in ["aurora-mysql", "aurora-postgresql"]:
- r = Resource(key, "rds-aurora", node.get("text"))
+ r = Resource(key, "rds-aurora", node_text)
r.update_params({
"isMultiAZ": node.get("multiAZ"),
@@ -141,18 +152,18 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901
if sg_id:
r.append_dependency(sg_id)
r.update_dynamic_params("vpc_security_group_ids",
- "[dependency." + sg_id + ".outputs.this_security_group_id]")
+ "[dependency." + sg_id + ".outputs.security_group_id]")
r.update_params({"create_security_group": False})
if node.get("engine") == "aurora-mysql":
r.update_params({
- "engine": "aurora-postgres",
+ "engine": "aurora-mysql",
"port": "3306",
"engine_version": "5.7.12",
})
elif node.get("engine") == "postgres":
r.update_params({
- "engine": "aurora-postgres",
+ "engine": "aurora-postgresql",
"port": "5432",
"engine_version": "9.6.9",
})
@@ -171,7 +182,7 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901
resources.append(r.content())
if node.get("type") == "rds" and node.get("engine") not in ["aurora-mysql", "aurora-postgresql"]:
- r = Resource(key, "rds", node.get("text"))
+ r = Resource(key, "rds", node_text)
r.update_params({
"isMultiAZ": node.get("multiAZ"),
@@ -184,6 +195,8 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901
"family": "",
"backup_retention_period": "0", # Disable backups to create DB faster
"vpc_security_group_ids": [],
+ "create_db_subnet_group": False,
+ "skip_final_snapshot": True,
})
if vpc_id:
@@ -194,15 +207,15 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901
if sg_id:
r.append_dependency(sg_id)
r.update_dynamic_params("vpc_security_group_ids",
- "[dependency." + sg_id + ".outputs.this_security_group_id]")
+ "[dependency." + sg_id + ".outputs.security_group_id]")
if node.get("engine") == "mysql":
r.update_params({
"engine": "mysql",
"port": "3306",
- "engine_version": "5.7.19",
- "major_engine_version": "5.7",
- "family": "mysql5.7",
+ "engine_version": "8.0.20",
+ "major_engine_version": "8.0",
+ "family": "mysql8.0",
})
elif node.get("engine") == "mariadb":
r.update_params({
@@ -214,11 +227,11 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901
})
elif node.get("engine") == "postgres":
r.update_params({
- "engine": "mariadb",
+ "engine": "postgres",
"port": "5432",
- "engine_version": "9.6.9",
- "major_engine_version": "9.6",
- "family": "postgres9.6",
+ "engine_version": "11.10",
+ "major_engine_version": "11",
+ "family": "postgres11",
})
else:
r.update_params({
@@ -253,7 +266,7 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901
asg_name = G.nodes.get(asg_id, {}).get("text")
- r = Resource(asg_id, "autoscaling", node.get("text"))
+ r = Resource(asg_id, "autoscaling", asg_name)
r.update_params({
"name": asg_name if asg_name else random_pet(),
@@ -261,6 +274,8 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901
"max_size": 1,
"desired_capacity": 1,
"health_check_type": "EC2",
+ "use_lt": True,
+ "create_lt": True,
"image_id": "HCL:dependency.aws-data.outputs.amazon_linux2_aws_ami_id",
"vpc_zone_identifier": [],
"security_groups": [],
@@ -274,7 +289,7 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901
if sg_id:
r.append_dependency(sg_id)
- r.update_dynamic_params("security_groups", "[dependency." + sg_id + ".outputs.this_security_group_id]")
+ r.update_dynamic_params("security_groups", "[dependency." + sg_id + ".outputs.security_group_id]")
if elb_id and elb_type == "application":
r.update_params({
@@ -293,7 +308,7 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901
parsed_asg_id.add(asg_id)
else:
- r = Resource(key, "ec2-instance", node.get("text"))
+ r = Resource(key, "ec2-instance", node_text)
r.update_params({
"name": node_text if node_text else random_pet(),
@@ -316,11 +331,10 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901
# break
if node.get("elbType") == "application":
- r = Resource(key, "alb", node.get("text"))
+ r = Resource(key, "alb", node_text)
r.update_params({
- "load_balancer_name": random_pet(),
- "logging_enabled": "false",
+ "name": random_pet(),
})
if vpc_id:
@@ -330,10 +344,22 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901
if sg_id:
r.append_dependency(sg_id)
- r.update_dynamic_params("security_groups", "[dependency." + sg_id + ".outputs.this_security_group_id]")
+ r.update_dynamic_params("security_groups", "[dependency." + sg_id + ".outputs.security_group_id]")
+
+ elif node.get("elbType") == "network":
+ r = Resource(key, "nlb", node_text)
+
+ r.update_params({
+ "name": random_pet(),
+ })
+
+ if vpc_id:
+ r.append_dependency(vpc_id)
+ r.update_dynamic_params("subnets", "dependency." + vpc_id + ".outputs.public_subnets")
+ r.update_dynamic_params("vpc_id", "dependency." + vpc_id + ".outputs.vpc_id")
else:
- r = Resource(key, "elb", node.get("text"))
+ r = Resource(key, "elb", node_text)
r.update_params({
"name": random_pet(),
@@ -358,12 +384,12 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901
if sg_id:
r.append_dependency(sg_id)
- r.update_dynamic_params("security_groups", "[dependency." + sg_id + ".outputs.this_security_group_id]")
+ r.update_dynamic_params("security_groups", "[dependency." + sg_id + ".outputs.security_group_id]")
resources.append(r.content())
if node.get("type") == "redshift":
- r = Resource(key, "redshift", node.get("text"))
+ r = Resource(key, "redshift", node_text)
r.update_params({
"cluster_identifier": random_pet(),
@@ -385,32 +411,103 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901
if sg_id:
r.append_dependency(sg_id)
- r.update_dynamic_params("vpc_security_group_ids", "[dependency." + sg_id + ".outputs.this_security_group_id]")
+ r.update_dynamic_params("vpc_security_group_ids", "[dependency." + sg_id + ".outputs.security_group_id]")
+
+ resources.append(r.content())
+
+ if node.get("type") == "dynamodb":
+ r = Resource(key, "dynamodb-table", node_text)
+
+ r.update_params({
+ "name": random_pet(),
+ "read_capacity": node.get("readUnits"),
+ "write_capacity": node.get("writeUnits"),
+ "billing_mode": "PROVISIONED" if node.get("capacityMode") == "provisioned" else "PAY_PER_REQUEST",
+ "hash_key": "id",
+ "attributes": [{
+ "name": "id",
+ "type": "N"
+ }]
+ })
resources.append(r.content())
if node.get("type") == "s3":
- r = Resource(key, "s3-bucket", node.get("text"))
+ r = Resource(key, "s3-bucket", node_text)
r.update_params({
- "bucket": node_text if node_text else random_pet(),
+ "bucket": node_text.lower() if node_text else random_pet(),
"region": node.get("region", ""),
})
resources.append(r.content())
if node.get("type") == "cloudfront":
- r = Resource(key, "cloudfront", node.get("text"))
+ r = Resource(key, "cloudfront", node_text)
+
+ r.update_params({
+ "wait_for_deployment": False,
+ "origin": "{ \
+ \"default\": { \
+ \"domain_name\": \"website.example.com\", \
+ \"custom_origin_config\": { \
+ \"http_port\": 80, \
+ \"https_port\": 443, \
+ \"origin_protocol_policy\": \"match-viewer\", \
+ \"origin_ssl_protocols\": [\"TLSv1\"], \
+ } \
+ } \
+ }",
+ "default_cache_behavior": "{ \
+ \"target_origin_id\": \"default\", \
+ \"viewer_protocol_policy\": \"allow-all\", \
+ }"
+ })
+
+ resources.append(r.content())
+
+ if node.get("type") == "lambda":
+ r = Resource(key, "lambda", node_text)
+
+ r.update_params({
+ "memory_size": node.get("memory"),
+ "function_name": node_text if node_text else random_pet(),
+ "handler": "handler.lambda_handler",
+ "runtime": "python3.8",
+ "source_path": "jsonencode(\"handler.py\")"
+ })
+
+ resources.append(r.content())
+
+ if node.get("type") == "apigateway":
+ r = Resource(key, "apigateway-v2", node_text)
+
+ r.update_params({
+ "name": node_text if node_text else random_pet(),
+ "protocol_type": "WEBSOCKET" if node.get("apiType") == "websocket" else "HTTP",
+ "create_api_domain_name": False
+ })
+
+ resources.append(r.content())
+
+ if node.get("type") == "vpngateway":
+ r = Resource(key, "vpn-gateway", node_text)
+
+ if vpc_id:
+ r.append_dependency(vpc_id)
+ r.update_dynamic_params("vpc_id", "dependency." + vpc_id + ".outputs.vpc_id")
+ r.update_dynamic_params("vpn_gateway_id", "dependency." + vpc_id + ".outputs.vgw_id")
+ r.update_dynamic_params("customer_gateway_id", "dependency." + vpc_id + ".outputs.cgw_ids[0]")
resources.append(r.content())
if node.get("type") == "sns":
- r = Resource(key, "sns", node.get("text"))
+ r = Resource(key, "sns", node_text)
resources.append(r.content())
if node.get("type") == "sqs":
- r = Resource(key, "sqs", node.get("text"))
+ r = Resource(key, "sqs", node_text)
r.update_params({
"fifoQueue": node.get("queueType") == "fifo",
@@ -419,7 +516,53 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901
resources.append(r.content())
if node.get("type") == "sg":
- r = Resource(key, "security-group", node.get("text"))
+ r = Resource(key, "security-group", node.get("group_name"))
+
+ # Security group rules are disabled here because there is no functionality in renderer
+ # which allows to convert from Python dict or JSON into valid HCL2 syntax
+ # Issue: https://github.com/antonbabenko/modules.tf-lambda/issues/26
+ enable_sg_rules = False
+
+ # START disabled sg rules
+ if enable_sg_rules:
+
+ all_rules = {
+ "ingress": node.get("inbound_rules"),
+ "egress": node.get("outbound_rules")
+ }
+
+ for rule_type, rules in all_rules.items():
+ rules_with_cidr_blocks = []
+ rules_with_source_security_group_id = []
+
+ for rule in rules:
+ port_range = convert_port_range(rule.get("portRange"))
+
+ tmp_rule = {
+ "from_port": port_range[0],
+ "to_port": port_range[1],
+ "protocol": convert_protocol(rule.get("protocol")),
+ "description": rule.get("description"),
+ }
+
+ if rule.get("targetType") == "ip":
+ tmp_rule.update({"cidr_blocks": rule.get("target")})
+ rules_with_cidr_blocks.append(tmp_rule)
+ else:
+ dependency_sg_id = rule.get("target")
+ tmp_rule.update({"source_security_group_id": "HCL:dependency." + dependency_sg_id + ".outputs.security_group_id"})
+ rules_with_source_security_group_id.append(tmp_rule)
+
+ r.append_dependency(dependency_sg_id)
+
+ r.update_params({rule_type + "_with_cidr_blocks": rules_with_cidr_blocks})
+ r.update_dynamic_params(rule_type + "_with_source_security_group_id", rules_with_source_security_group_id)
+
+ r.update_params({
+ "ingress_with_source_security_group_id": [],
+ "egress_with_source_security_group_id": [],
+ })
+ # END disabled sg rules
r.update_params({
"name": node.get("group_name", random_pet()),
@@ -434,7 +577,7 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901
resources.append(r.content())
if node.get("type") == "vpc":
- r = Resource(key, "vpc", node.get("text"))
+ r = Resource(key, "vpc", node.get("group_name"))
selected_vpc_cidr = "10.0.0.0/16"
@@ -452,7 +595,6 @@ def convert_graph_to_modulestf_config(graph): # noqa: C901
"database_subnets":
"HCL:[for k,v in dependency.aws-data.outputs.available_aws_availability_zones_names: cidrsubnet(\"" +
selected_vpc_cidr + "\", 8, k+20)]",
- # "redshift_subnets": [],
})
r.append_dependency("aws-data")
diff --git a/modulestf/logger.py b/src/modulestf/logger.py
similarity index 100%
rename from modulestf/logger.py
rename to src/modulestf/logger.py
diff --git a/src/modulestf/modules.py b/src/modulestf/modules.py
new file mode 100644
index 0000000..10abac6
--- /dev/null
+++ b/src/modulestf/modules.py
@@ -0,0 +1,175 @@
+import json
+import os
+from pprint import pprint
+
+BASE_PATH = os.path.dirname(os.path.abspath(__file__))
+
+
+def get_version(relative_path, remove_v=False):
+ path = os.path.join(BASE_PATH, relative_path)
+ with open(path) as file:
+ if remove_v:
+ return file.read().replace("v", "")
+ else:
+ return file.read()
+
+
+def load_local_json(relative_path):
+ path = os.path.join(BASE_PATH, relative_path)
+ with open(path) as file:
+ return json.load(file)
+
+
+# @todo: Verify support for tuple, object and any.
+# Ref: https://www.terraform.io/docs/configuration/variables.html#type-constraints
+def update_template_variables(var):
+ for key, value in var.items():
+
+ # Guess type from default value
+ if value.get("default", None) is not None:
+ if str(value.get("default")).lower() in ["true", "false"]:
+ value_type = value.get("type", "bool")
+ elif type(value.get("default")) is map:
+ value_type = value.get("type", "map")
+ elif type(value.get("default")) is str:
+ value_type = value.get("type", "string")
+ elif type(value.get("default")) is int:
+ value_type = value.get("type", "integer")
+ else:
+ value_type = value.get("type", "list")
+ else:
+ value_type = value.get("type", "string")
+
+ variable_value_format_function = ""
+
+ if value_type == "string":
+ variable_default = ''
+ variable_value_format = '"%s"'
+ elif value_type == "number":
+ variable_default = ''
+ variable_value_format = '%s'
+ elif value_type == "bool":
+ variable_default = ''
+ variable_value_format = '%s'
+ variable_value_format_function = "lower"
+ elif value_type.startswith("list") or value_type.startswith("set"):
+ variable_default = []
+ variable_value_format = '%s'
+ elif value_type.startswith("map"):
+ variable_default = {}
+ variable_value_format = '"%s"'
+ else:
+ variable_default = '""'
+ variable_value_format = "%s"
+
+ value.update({
+ "value_type": value_type,
+ "variable_default": variable_default,
+ "variable_value_format": variable_value_format,
+ "variable_value_format_function": variable_value_format_function,
+ })
+
+ return var
+
+
+MODULES = {
+ "alb": {
+ "source": "git::git@github.com:terraform-aws-modules/terraform-aws-alb.git?ref=" + get_version("../terraform-aws-modules-metadata/alb_version.txt"),
+ "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/alb/aws/" + get_version("../terraform-aws-modules-metadata/alb_version.txt", True),
+ "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/alb.json")),
+ },
+ "nlb": {
+ "source": "git::git@github.com:terraform-aws-modules/terraform-aws-alb.git?ref=" + get_version("../terraform-aws-modules-metadata/alb_version.txt"),
+ "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/alb/aws/" + get_version("../terraform-aws-modules-metadata/alb_version.txt", True),
+ "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/alb.json")),
+ },
+ "elb": {
+ "source": "git::git@github.com:terraform-aws-modules/terraform-aws-elb.git?ref=" + get_version("../terraform-aws-modules-metadata/elb_version.txt"),
+ "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/elb/aws/" + get_version("../terraform-aws-modules-metadata/elb_version.txt", True),
+ "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/elb.json")),
+ },
+ "rds": {
+ "source": "git::git@github.com:terraform-aws-modules/terraform-aws-rds.git?ref=" + get_version("../terraform-aws-modules-metadata/rds_version.txt"),
+ "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/rds/aws/" + get_version("../terraform-aws-modules-metadata/rds_version.txt", True),
+ "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/rds.json")),
+ },
+ "rds-aurora": {
+ "source": "git::git@github.com:terraform-aws-modules/terraform-aws-rds-aurora.git?ref=" + get_version("../terraform-aws-modules-metadata/rds-aurora_version.txt"),
+ "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/rds-aurora/aws/" + get_version("../terraform-aws-modules-metadata/rds-aurora_version.txt", True),
+ "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/rds-aurora.json")),
+ },
+ "autoscaling": {
+ "source": "git::git@github.com:terraform-aws-modules/terraform-aws-autoscaling.git?ref=" + get_version("../terraform-aws-modules-metadata/autoscaling_version.txt"),
+ "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/autoscaling/aws/" + get_version("../terraform-aws-modules-metadata/autoscaling_version.txt", True),
+ "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/autoscaling.json")),
+ },
+ "ec2-instance": {
+ "source": "git::git@github.com:terraform-aws-modules/terraform-aws-ec2-instance.git?ref=" + get_version("../terraform-aws-modules-metadata/ec2-instance_version.txt"),
+ "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/ec2-instance/aws/" + get_version("../terraform-aws-modules-metadata/ec2-instance_version.txt", True),
+ "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/ec2-instance.json")),
+ },
+ "sns": {
+ "source": "git::git@github.com:terraform-aws-modules/terraform-aws-sns.git?ref=" + get_version("../terraform-aws-modules-metadata/sns_version.txt"),
+ "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/sns/aws/" + get_version("../terraform-aws-modules-metadata/sns_version.txt", True),
+ "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/sns.json")),
+ },
+ "sqs": {
+ "source": "git::git@github.com:terraform-aws-modules/terraform-aws-sqs.git?ref=" + get_version("../terraform-aws-modules-metadata/sqs_version.txt"),
+ "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/sqs/aws/" + get_version("../terraform-aws-modules-metadata/sqs_version.txt", True),
+ "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/sqs.json")),
+ },
+ "security-group": {
+ "source": "git::git@github.com:terraform-aws-modules/terraform-aws-security-group.git?ref=" + get_version("../terraform-aws-modules-metadata/security-group_version.txt"),
+ "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/security-group/aws/" + get_version("../terraform-aws-modules-metadata/security-group_version.txt", True),
+ "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/security-group.json")),
+ },
+ "vpc": {
+ "source": "git::git@github.com:terraform-aws-modules/terraform-aws-vpc.git?ref=" + get_version("../terraform-aws-modules-metadata/vpc_version.txt"),
+ "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/vpc/aws/" + get_version("../terraform-aws-modules-metadata/vpc_version.txt", True),
+ "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/vpc.json")),
+ },
+ "s3-bucket": {
+ "source": "git::git@github.com:terraform-aws-modules/terraform-aws-s3-bucket.git?ref=" + get_version("../terraform-aws-modules-metadata/s3-bucket_version.txt"),
+ "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/s3-bucket/aws/" + get_version("../terraform-aws-modules-metadata/s3-bucket_version.txt", True),
+ "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/s3-bucket.json")),
+ },
+ "redshift": {
+ "source": "git::git@github.com:terraform-aws-modules/terraform-aws-redshift.git?ref=" + get_version("../terraform-aws-modules-metadata/redshift_version.txt"),
+ "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/redshift/aws/" + get_version("../terraform-aws-modules-metadata/redshift_version.txt", True),
+ "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/redshift.json")),
+ },
+ "dynamodb-table": {
+ "source": "git::git@github.com:terraform-aws-modules/terraform-aws-dynamodb-table.git?ref=" + get_version("../terraform-aws-modules-metadata/dynamodb-table_version.txt"),
+ "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/dynamodb-table/aws/" + get_version("../terraform-aws-modules-metadata/dynamodb-table_version.txt", True),
+ "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/dynamodb-table.json")),
+ },
+ "cloudfront": {
+ "source": "git::git@github.com:terraform-aws-modules/terraform-aws-cloudfront.git?ref=" + get_version("../terraform-aws-modules-metadata/cloudfront_version.txt"),
+ "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/cloudfront/aws/" + get_version("../terraform-aws-modules-metadata/cloudfront_version.txt", True),
+ "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/cloudfront.json")),
+ },
+ "lambda": {
+ "source": "git::git@github.com:terraform-aws-modules/terraform-aws-lambda.git?ref=" + get_version("../terraform-aws-modules-metadata/lambda_version.txt"),
+ "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/lambda/aws/" + get_version("../terraform-aws-modules-metadata/lambda_version.txt", True),
+ "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/lambda.json")),
+ },
+ "apigateway-v2": {
+ "source": "git::git@github.com:terraform-aws-modules/terraform-aws-apigateway-v2.git?ref=" + get_version("../terraform-aws-modules-metadata/apigateway-v2_version.txt"),
+ "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/apigateway-v2/aws/" + get_version("../terraform-aws-modules-metadata/apigateway-v2_version.txt", True),
+ "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/apigateway-v2.json")),
+ },
+ "vpn-gateway": {
+ "source": "git::git@github.com:terraform-aws-modules/terraform-aws-vpn-gateway.git?ref=" + get_version("../terraform-aws-modules-metadata/vpn-gateway_version.txt"),
+ "registry_url": "https://registry.terraform.io/modules/terraform-aws-modules/vpn-gateway/aws/" + get_version("../terraform-aws-modules-metadata/vpn-gateway_version.txt", True),
+ "variables": update_template_variables(load_local_json("../terraform-aws-modules-metadata/vpn-gateway.json")),
+ },
+
+ # Data sources for aws_region and aws_availability_zones
+ "aws-data": {
+ "source": "${get_parent_terragrunt_dir()}/../../modules/aws-data",
+ "registry_url": "",
+ "variables": {},
+ },
+}
+
+# pprint(MODULES["rds-aurora"])
diff --git a/modulestf/render.py b/src/modulestf/render.py
similarity index 80%
rename from modulestf/render.py
rename to src/modulestf/render.py
index af4c06e..99e2654 100644
--- a/modulestf/render.py
+++ b/src/modulestf/render.py
@@ -42,14 +42,12 @@ def prepare_render_dirs():
def find_templates_files(dir):
- files = glob.glob(dir + "/*") + \
- glob.glob(dir + "/.*")
+ files = glob.glob(dir + "/*") + glob.glob(dir + "/.*")
return files
def prepare_single_layer(resource, source_dir_name, region, templates_dir, templates_files):
-
dir_name = resource.get("dir_name")
full_dir_name = ("%s/%s/%s" % (source_dir_name, region, dir_name)).lower()
@@ -89,7 +87,6 @@ def prepare_single_layer(resource, source_dir_name, region, templates_dir, templ
# Copy all files and subdirectories into working directory
def copy_to_working_dir(templates_dir, work_dir=""):
-
dst_dir = path.join(WORK_DIR_FOR_COOKIECUTTER, work_dir)
try:
@@ -111,7 +108,6 @@ def copy_to_working_dir(templates_dir, work_dir=""):
def render_all(extra_context):
-
output_dir = path.join(tmp_dir, OUTPUT_DIR, WORK_DIR)
cookiecutter(output_dir,
@@ -138,7 +134,6 @@ def get_types_text(resources):
def make_dir_name(type, text, appendix=""):
-
path_parts = []
if text is not None and len(text):
@@ -154,12 +149,39 @@ def make_dir_name(type, text, appendix=""):
dir_name = re.sub(' ', '_', dir_name.strip())
dir_name = re.sub('[^a-zA-Z0-9-_]', '', dir_name)
dir_name = re.sub('_+', '_', dir_name)
+ dir_name = dir_name.lower()
return dir_name
-def render_from_modulestf_config(config, source, regions):
+# Update dynamic parameters with correct dir name
+# Value to scan and replace can be inside of any structure (dict, list, string)
+# Should start with "dependency."
+#
+# Examples:
+# dependency.a3bfbba6-ff09-4efc-a56b-39b647f203f6.outputs.security_group_id => dependency.sg_2.outputs.security_group_id
+# Source: https://stackoverflow.com/a/38970181/550451
+def recursive_replace_dependency(input, dirs):
+ if isinstance(input, dict):
+ items = input.items()
+ elif isinstance(input, (list, tuple)):
+ items = enumerate(input)
+ else:
+
+ # just a value, replace and return
+ found = re.findall(r"dependency\.([^.]+)", str(input))
+ for f in found:
+ input = re.sub(f, dirs.get(f, f), input)
+ return input
+
+ # now call itself for every value and replace in the input
+ for key, value in items:
+ input[key] = recursive_replace_dependency(value, dirs)
+ return input
+
+
+def render_from_modulestf_config(config, source, regions):
resources = json.loads(config)
# pprint(resources)
@@ -230,16 +252,8 @@ def render_from_modulestf_config(config, source, regions):
# Update dynamic parameters with correct dir name
dynamic_params = resource.get("dynamic_params")
- if dynamic_params:
- for k in dynamic_params:
-
- try:
- v = dynamic_params[k].split(".")
-
- # replace second element with real directory name
- dynamic_params.update({k: v[0] + "." + dirs[v[1]] + "." + ".".join(v[2:])})
- except KeyError:
- pass
+ for k, v in dynamic_params.items():
+ dynamic_params[k] = recursive_replace_dependency(v, dirs)
# Set correct dir name
resource.update({"dir_name": dirs.get(resource.get("ref_id"))})
@@ -248,6 +262,13 @@ def render_from_modulestf_config(config, source, regions):
logger.info("Rendering single layer resource id: %s" % resource.get("ref_id"))
used_module_type = prepare_single_layer(resource, source_dir_name, region, templates_dir, templates_files)
+ # Put extra files into the layer (eg, handler.py for Lambda module)
+ extra_files_templates_dir = path.realpath(path.join(COOKIECUTTER_TEMPLATES_DIR, "extra-files-single-layer", resource["type"]))
+ if path.exists(extra_files_templates_dir):
+ full_dir_name = ("%s/%s/%s" % (source_dir_name, region, resource.get("dir_name"))).lower()
+ dst_dir = path.join(getcwd(), WORK_DIR_FOR_COOKIECUTTER, full_dir_name)
+ shutil.copytree(extra_files_templates_dir, dst_dir, dirs_exist_ok=True)
+
used_modules.add(used_module_type)
extra_context = dict({"module_sources": {}, "module_registry_urls": {}, "module_variables": {}})
@@ -264,9 +285,9 @@ def render_from_modulestf_config(config, source, regions):
module_type: MODULES[module_type]["variables"],
})
- logger.info("Prepare common files")
- templates_dir = path.realpath(path.join(COOKIECUTTER_TEMPLATES_DIR, "terragrunt-common-layer/common"))
- copy_to_working_dir(templates_dir, "common")
+ # logger.info("Prepare common files")
+ # templates_dir = path.realpath(path.join(COOKIECUTTER_TEMPLATES_DIR, "terragrunt-common-layer/common"))
+ # copy_to_working_dir(templates_dir, "common")
logger.info("Prepare common regional files")
templates_dir = path.realpath(path.join(COOKIECUTTER_TEMPLATES_DIR, "terragrunt-common-layer/region"))
diff --git a/modulestf/upload.py b/src/modulestf/upload.py
similarity index 73%
rename from modulestf/upload.py
rename to src/modulestf/upload.py
index 4841382..a1f490c 100644
--- a/modulestf/upload.py
+++ b/src/modulestf/upload.py
@@ -11,7 +11,6 @@
def upload_file_to_s3(filename):
-
s3_bucket = os.environ.get("S3_BUCKET", S3_BUCKET)
s3_dir = os.environ.get("S3_DIR", "local")
@@ -26,7 +25,11 @@ def upload_file_to_s3(filename):
StorageClass="ONEZONE_IA"
))
- link = "https://" + s3_bucket + "/" + s3_key
+ # Perfect: With Cloudfront https is available
+ # link = "https://" + s3_bucket + "/" + s3_key
+
+ # Long URL because there is no Cloudfront distribution (yet)
+ link = "https://s3-" + S3_BUCKET_REGION + ".amazonaws.com/" + s3_bucket + "/" + s3_key
logger.info("LINK=" + link)
diff --git a/src/requirements.txt b/src/requirements.txt
new file mode 100644
index 0000000..743828d
--- /dev/null
+++ b/src/requirements.txt
@@ -0,0 +1,6 @@
+aws-lambda-powertools>=1.15.0
+aws-xray-sdk>=2.8
+cookiecutter==1.7.0
+networkx==2.4
+petname==2.6
+requests>=2.24.0
diff --git a/templates/config_aws_lambda.yaml b/src/templates/config_aws_lambda.yaml
similarity index 100%
rename from templates/config_aws_lambda.yaml
rename to src/templates/config_aws_lambda.yaml
diff --git a/src/templates/extra-files-single-layer/lambda/handler.py b/src/templates/extra-files-single-layer/lambda/handler.py
new file mode 100644
index 0000000..00add00
--- /dev/null
+++ b/src/templates/extra-files-single-layer/lambda/handler.py
@@ -0,0 +1,4 @@
+def lambda_handler(event, context):
+ print("Hello from Lambda!")
+
+ return event
diff --git a/templates/root/cookiecutter.json b/src/templates/root/cookiecutter.json
similarity index 100%
rename from templates/root/cookiecutter.json
rename to src/templates/root/cookiecutter.json
diff --git a/templates/root/template/.editorconfig b/src/templates/root/template/.editorconfig
similarity index 100%
rename from templates/root/template/.editorconfig
rename to src/templates/root/template/.editorconfig
diff --git a/src/templates/root/template/.gitignore b/src/templates/root/template/.gitignore
new file mode 100644
index 0000000..3b21f37
--- /dev/null
+++ b/src/templates/root/template/.gitignore
@@ -0,0 +1,44 @@
+# Local .terraform directories
+**/.terraform/*
+.terraform
+.terragrunt-cache
+
+# Terraform lockfile
+.terraform.lock.hcl
+
+# .tfstate files
+*.tfstate
+*.tfstate.*
+
+# Crash log files
+crash.log
+
+# Exclude all .tfvars files, which are likely to contain sentitive data, such as
+# password, private keys, and other secrets. These should not be part of version
+# control as they are data points which are potentially sensitive and subject
+# to change depending on the environment.
+*.tfvars
+
+# Ignore override files as they are usually used to override resources locally and so
+# are not checked in
+override.tf
+override.tf.json
+*_override.tf
+*_override.tf.json
+
+# Ignore CLI configuration files
+.terraformrc
+terraform.rc
+
+# OS X
+.history
+.DS_Store
+
+# IntelliJ
+.idea_modules
+*.iml
+*.iws
+*.ipr
+.idea/
+build/
+*/build/
diff --git a/templates/root/template/.pre-commit-config.yaml b/src/templates/root/template/.pre-commit-config.yaml
similarity index 50%
rename from templates/root/template/.pre-commit-config.yaml
rename to src/templates/root/template/.pre-commit-config.yaml
index 6b5fbe3..e9bd3a8 100644
--- a/templates/root/template/.pre-commit-config.yaml
+++ b/src/templates/root/template/.pre-commit-config.yaml
@@ -1,10 +1,6 @@
repos:
- repo: git://github.com/antonbabenko/pre-commit-terraform
- rev: v1.20.0
+ rev: v1.50.0
hooks:
- id: terraform_fmt
- id: terraform_docs
- - repo: git://github.com/pre-commit/pre-commit-hooks
- rev: v2.4.0
- hooks:
- - id: check-merge-conflict
diff --git a/templates/root/template/LICENSE b/src/templates/root/template/LICENSE
similarity index 96%
rename from templates/root/template/LICENSE
rename to src/templates/root/template/LICENSE
index 7f519e8..507b296 100644
--- a/templates/root/template/LICENSE
+++ b/src/templates/root/template/LICENSE
@@ -1,5 +1,5 @@
The MIT License (MIT)
-Copyright (c) 2018-2019 Anton Babenko
+Copyright (c) 2018-2021 Anton Babenko
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
diff --git a/templates/root/template/README.md b/src/templates/root/template/README.md
similarity index 69%
rename from templates/root/template/README.md
rename to src/templates/root/template/README.md
index 46f6ce3..c4e4b6a 100644
--- a/templates/root/template/README.md
+++ b/src/templates/root/template/README.md
@@ -1,8 +1,8 @@
# Infrastructure code for "{{ cookiecutter.source_name }}"
-This repository contains infrastructure as Terraform configurations which were automatically generated from blueprint created using [cloudcraft.co](https://cloudcraft.co/app).
+This repository contains Terraform configuration files which were automatically generated from blueprint created using [Cloudcraft](https://www.cloudcraft.co).
-[Terragrunt](https://github.com/gruntwork-io/terragrunt) is used to work with Terraform configurations which allows to orchestrate dependent layers, update arguments dynamically and keep configurations [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself).
+[Terragrunt](https://terragrunt.gruntwork.io/) is used to work with Terraform configurations which allows to orchestrate dependent layers, update arguments dynamically and keep configurations [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself).
## Table of Contents
@@ -10,13 +10,13 @@ This repository contains infrastructure as Terraform configurations which were a
1. [Configure access to AWS account](#configure-access-to-aws-account)
1. [Create and manage your infrastructure](#create-and-manage-your-infrastructure)
1. [References](#references)
-1. [About modules.tf](#about-modulestf)
+1. [About d2c.modules.tf](#about-d2cmodulestf)
## Quick start
-1. [Install Terraform 0.12 or newer](https://www.terraform.io/intro/getting-started/install.html)
-1. [Install Terragrunt 0.19 or newer](https://github.com/gruntwork-io/terragrunt#install-terragrunt)
+1. [Install Terraform 0.15 or newer](https://learn.hashicorp.com/tutorials/terraform/install-cli)
+1. [Install Terragrunt 0.29 or newer](https://terragrunt.gruntwork.io/docs/getting-started/install/)
1. Optionally, [install pre-commit hooks](https://pre-commit.com/#install) to keep Terraform formatting and documentation up-to-date.
If you are using macOS you can install all dependencies using [Homebrew](https://brew.sh/):
@@ -33,7 +33,7 @@ $ export AWS_ACCESS_KEY_ID=...
$ export AWS_SECRET_ACCESS_KEY=...
```
-Alternatively, you can edit `common/main_providers.tf` and use another authentication mechanism as described in [AWS provider documentation](https://www.terraform.io/docs/providers/aws/index.html#authentication).
+Alternatively, you can edit `terragrunt.hcl` and use another authentication mechanism as described in [AWS provider documentation](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#authentication).
## Create and manage your infrastructure
@@ -52,7 +52,7 @@ There are two ways to manage infrastructure (slower&complete, or faster&granular
```
$ cd {{ cookiecutter.region }}
-$ terragrunt apply-all
+$ terragrunt run-all apply
```
- **As a single layer (faster&granular).** Run this command to create infrastructure in a single layer (eg, `{{ cookiecutter.dirs.values()|first|default("vpc") }}`):
@@ -67,14 +67,15 @@ After the confirmation your infrastructure should be created.
## References
-* [Terraform documentation](https://terraform.io/) and [Terragrunt documentation](https://github.com/gruntwork-io/terragrunt/blob/master/README.md) for all available commands and features.
-* [Terraform AWS modules](https://github.com/terraform-aws-modules/).
-* [Terraform modules registry](https://registry.terraform.io/).
+* [Terraform documentation](https://www.terraform.io/docs/) and [Terragrunt documentation](https://terragrunt.gruntwork.io/docs/) for all available commands and features
+* [Terraform AWS modules](https://github.com/terraform-aws-modules/)
+* [Terraform modules registry](https://registry.terraform.io/)
+* [Terraform best practices](https://www.terraform-best-practices.com/)
-## About modules.tf
+## About d2c.modules.tf
-[modules.tf](https://github.com/antonbabenko/modules.tf-lambda) is an open-source project by [Anton Babenko](https://github.com/antonbabenko), and, yes, you can contribute, too:
+[modules.tf](https://github.com/antonbabenko/modules.tf-lambda) is an open-source project created by [Anton Babenko](https://github.com/antonbabenko):
1. Questions, bugs and feature-requests - [open an issue](https://github.com/antonbabenko/modules.tf-lambda).
1. [Become a sponsor to @antonbabenko](https://github.com/sponsors/antonbabenko/).
1. You are always welcome to share, star, like, tweet, follow!
@@ -83,4 +84,4 @@ After the confirmation your infrastructure should be created.
[](https://github.com/antonbabenko)
[](https://github.com/antonbabenko/modules.tf-lambda)
-All content, including [Terraform AWS modules](https://github.com/terraform-aws-modules/) used in these configurations, is released under the MIT License.
+All content, including [Terraform AWS modules](https://github.com/terraform-aws-modules/) used in these configurations, is released under the MIT or Apache License.
diff --git a/src/templates/root/template/modules/aws-data/README.md b/src/templates/root/template/modules/aws-data/README.md
new file mode 100644
index 0000000..5f563eb
--- /dev/null
+++ b/src/templates/root/template/modules/aws-data/README.md
@@ -0,0 +1,42 @@
+# aws-data
+
+This module contains data-sources which are used as arguments in other AWS modules (eg, list of AZ when creating VPC).
+
+
+## Requirements
+
+No requirements.
+
+## Providers
+
+| Name | Version |
+|------|---------|
+| [aws](#provider\_aws) | n/a |
+
+## Modules
+
+No modules.
+
+## Resources
+
+| Name | Type |
+|------|------|
+| [aws_ami.amazon_linux2](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ami) | data source |
+| [aws_ami.ubuntu_1804](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ami) | data source |
+| [aws_availability_zones.available](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/availability_zones) | data source |
+| [aws_region.selected](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/region) | data source |
+
+## Inputs
+
+No inputs.
+
+## Outputs
+
+| Name | Description |
+|------|-------------|
+| [amazon\_linux2\_aws\_ami\_id](#output\_amazon\_linux2\_aws\_ami\_id) | AMI ID of Amazon Linux 2 |
+| [available\_aws\_availability\_zones\_names](#output\_available\_aws\_availability\_zones\_names) | A list of the Availability Zone names available to the account |
+| [available\_aws\_availability\_zones\_zone\_ids](#output\_available\_aws\_availability\_zones\_zone\_ids) | A list of the Availability Zone IDs available to the account |
+| [aws\_region](#output\_aws\_region) | Details about selected AWS region |
+| [ubuntu\_1804\_aws\_ami\_id](#output\_ubuntu\_1804\_aws\_ami\_id) | AMI ID of Ubuntu 18.04 |
+
diff --git a/templates/root/template/modules/aws-data/main.tf b/src/templates/root/template/modules/aws-data/main.tf
similarity index 95%
rename from templates/root/template/modules/aws-data/main.tf
rename to src/templates/root/template/modules/aws-data/main.tf
index a8532d6..3cabcde 100644
--- a/templates/root/template/modules/aws-data/main.tf
+++ b/src/templates/root/template/modules/aws-data/main.tf
@@ -29,7 +29,7 @@ data "aws_ami" "ubuntu_1804" {
data "aws_ami" "amazon_linux2" {
most_recent = true
- owners = ["137112412989"] # Amazon
+ owners = ["137112412989"] # Amazon
filter {
name = "name"
diff --git a/templates/root/template/modules/aws-data/outputs.tf b/src/templates/root/template/modules/aws-data/outputs.tf
similarity index 100%
rename from templates/root/template/modules/aws-data/outputs.tf
rename to src/templates/root/template/modules/aws-data/outputs.tf
diff --git a/src/templates/terragrunt-common-layer/region/terragrunt.hcl b/src/templates/terragrunt-common-layer/region/terragrunt.hcl
new file mode 100644
index 0000000..c0585b8
--- /dev/null
+++ b/src/templates/terragrunt-common-layer/region/terragrunt.hcl
@@ -0,0 +1,43 @@
+terraform {
+ extra_arguments "disable_input" {
+ commands = get_terraform_commands_that_need_input()
+ arguments = ["-input=false"]
+ }
+}
+
+remote_state {
+ backend = "s3"
+ disable_init = tobool(get_env("TERRAGRUNT_DISABLE_INIT", "false"))
+
+ generate = {
+ path = "_backend.tf"
+ if_exists = "overwrite"
+ }
+
+ config = {
+ encrypt = true
+ region = "{{ cookiecutter.region }}"
+ key = format("%s/terraform.tfstate", path_relative_to_include())
+ bucket = format("terraform-states-%s", get_aws_account_id())
+ dynamodb_table = format("terraform-locks-%s", get_aws_account_id())
+
+ skip_metadata_api_check = true
+ skip_credentials_validation = true
+ }
+}
+
+generate "main_providers" {
+ path = "main_providers.tf"
+ if_exists = "overwrite"
+ contents = <"$tmp_file_tf"
+
+ # hcltool comes from https://github.com/virtuald/pyhcl/blob/master/scripts/hcltool
+ hcltool "$tmp_file_tf" | jq -r '.variable' >${module}_variables.json
+
+ test -f ${module}_cloudcraft.json || echo "{}" >${module}_cloudcraft.json
+ jq -s '.[0] * .[1]' ${module}_variables.json ${module}_cloudcraft.json >${module}.json
+
+ rm -f "$tmp_file_tf"
+
+ # Write module version
+ pushd ${MODULES_DIR}/terraform-aws-${module} >/dev/null
+ latest_tag=$(git describe --tags --abbrev=0)
+ echo "$module => $latest_tag"
+ popd >/dev/null
+
+ echo -n $latest_tag >${module}_version.txt
+
+ echo "*********"
+done
diff --git a/src/terraform-aws-modules-metadata/vpc.json b/src/terraform-aws-modules-metadata/vpc.json
new file mode 100644
index 0000000..7806242
--- /dev/null
+++ b/src/terraform-aws-modules-metadata/vpc.json
@@ -0,0 +1,959 @@
+{
+ "amazon_side_asn": {
+ "default": "64512",
+ "description": "The Autonomous System Number (ASN) for the Amazon side of the gateway. By default the virtual private gateway is created with the current default Amazon ASN.",
+ "type": "string"
+ },
+ "assign_ipv6_address_on_creation": {
+ "default": false,
+ "description": "Assign IPv6 address on subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
+ "type": "bool"
+ },
+ "azs": {
+ "default": [],
+ "description": "A list of availability zones names or ids in the region",
+ "type": "list(string)"
+ },
+ "cidr": {
+ "default": "0.0.0.0/0",
+ "description": "The CIDR block for the VPC. Default value is a valid CIDR, but not acceptable by AWS and should be overridden",
+ "type": "string"
+ },
+ "create_database_internet_gateway_route": {
+ "default": false,
+ "description": "Controls if an internet gateway route for public database access should be created",
+ "type": "bool"
+ },
+ "create_database_nat_gateway_route": {
+ "default": false,
+ "description": "Controls if a nat gateway route should be created to give internet access to the database subnets",
+ "type": "bool"
+ },
+ "create_database_subnet_group": {
+ "default": true,
+ "description": "Controls if database subnet group should be created (n.b. database_subnets must also be set)",
+ "type": "bool"
+ },
+ "create_database_subnet_route_table": {
+ "default": false,
+ "description": "Controls if separate route table for database should be created",
+ "type": "bool"
+ },
+ "create_egress_only_igw": {
+ "default": true,
+ "description": "Controls if an Egress Only Internet Gateway is created and its related routes.",
+ "type": "bool"
+ },
+ "create_elasticache_subnet_group": {
+ "default": true,
+ "description": "Controls if elasticache subnet group should be created",
+ "type": "bool"
+ },
+ "create_elasticache_subnet_route_table": {
+ "default": false,
+ "description": "Controls if separate route table for elasticache should be created",
+ "type": "bool"
+ },
+ "create_flow_log_cloudwatch_iam_role": {
+ "default": false,
+ "description": "Whether to create IAM role for VPC Flow Logs",
+ "type": "bool"
+ },
+ "create_flow_log_cloudwatch_log_group": {
+ "default": false,
+ "description": "Whether to create CloudWatch log group for VPC Flow Logs",
+ "type": "bool"
+ },
+ "create_igw": {
+ "default": true,
+ "description": "Controls if an Internet Gateway is created for public subnets and the related routes that connect them.",
+ "type": "bool"
+ },
+ "create_redshift_subnet_group": {
+ "default": true,
+ "description": "Controls if redshift subnet group should be created",
+ "type": "bool"
+ },
+ "create_redshift_subnet_route_table": {
+ "default": false,
+ "description": "Controls if separate route table for redshift should be created",
+ "type": "bool"
+ },
+ "create_vpc": {
+ "default": true,
+ "description": "Controls if VPC should be created (it affects almost all resources)",
+ "type": "bool"
+ },
+ "customer_gateway_tags": {
+ "default": {},
+ "description": "Additional tags for the Customer Gateway",
+ "type": "map(string)"
+ },
+ "customer_gateways": {
+ "default": {},
+ "description": "Maps of Customer Gateway's attributes (BGP ASN and Gateway's Internet-routable external IP address)",
+ "type": "map(map(any))"
+ },
+ "database_acl_tags": {
+ "default": {},
+ "description": "Additional tags for the database subnets network ACL",
+ "type": "map(string)"
+ },
+ "database_dedicated_network_acl": {
+ "default": false,
+ "description": "Whether to use dedicated network ACL (not default) and custom rules for database subnets",
+ "type": "bool"
+ },
+ "database_inbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Database subnets inbound network ACL rules",
+ "type": "list(map(string))"
+ },
+ "database_outbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Database subnets outbound network ACL rules",
+ "type": "list(map(string))"
+ },
+ "database_route_table_tags": {
+ "default": {},
+ "description": "Additional tags for the database route tables",
+ "type": "map(string)"
+ },
+ "database_subnet_assign_ipv6_address_on_creation": {
+ "default": "null",
+ "description": "Assign IPv6 address on database subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
+ "type": "bool"
+ },
+ "database_subnet_group_tags": {
+ "default": {},
+ "description": "Additional tags for the database subnet group",
+ "type": "map(string)"
+ },
+ "database_subnet_ipv6_prefixes": {
+ "default": [],
+ "description": "Assigns IPv6 database subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
+ "type": "list(string)"
+ },
+ "database_subnet_suffix": {
+ "default": "db",
+ "description": "Suffix to append to database subnets name",
+ "type": "string"
+ },
+ "database_subnet_tags": {
+ "default": {},
+ "description": "Additional tags for the database subnets",
+ "type": "map(string)"
+ },
+ "database_subnets": {
+ "default": [],
+ "description": "A list of database subnets",
+ "type": "list(string)"
+ },
+ "default_network_acl_egress": {
+ "default": [
+ {
+ "action": "allow",
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_no": 100,
+ "to_port": 0
+ },
+ {
+ "action": "allow",
+ "from_port": 0,
+ "ipv6_cidr_block": "::/0",
+ "protocol": "-1",
+ "rule_no": 101,
+ "to_port": 0
+ }
+ ],
+ "description": "List of maps of egress rules to set on the Default Network ACL",
+ "type": "list(map(string))"
+ },
+ "default_network_acl_ingress": {
+ "default": [
+ {
+ "action": "allow",
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_no": 100,
+ "to_port": 0
+ },
+ {
+ "action": "allow",
+ "from_port": 0,
+ "ipv6_cidr_block": "::/0",
+ "protocol": "-1",
+ "rule_no": 101,
+ "to_port": 0
+ }
+ ],
+ "description": "List of maps of ingress rules to set on the Default Network ACL",
+ "type": "list(map(string))"
+ },
+ "default_network_acl_name": {
+ "default": "",
+ "description": "Name to be used on the Default Network ACL",
+ "type": "string"
+ },
+ "default_network_acl_tags": {
+ "default": {},
+ "description": "Additional tags for the Default Network ACL",
+ "type": "map(string)"
+ },
+ "default_route_table_propagating_vgws": {
+ "default": [],
+ "description": "List of virtual gateways for propagation",
+ "type": "list(string)"
+ },
+ "default_route_table_routes": {
+ "default": [],
+ "description": "Configuration block of routes. See https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/default_route_table#route",
+ "type": "list(map(string))"
+ },
+ "default_route_table_tags": {
+ "default": {},
+ "description": "Additional tags for the default route table",
+ "type": "map(string)"
+ },
+ "default_security_group_egress": {
+ "default": "null",
+ "description": "List of maps of egress rules to set on the default security group",
+ "type": "list(map(string))"
+ },
+ "default_security_group_ingress": {
+ "default": "null",
+ "description": "List of maps of ingress rules to set on the default security group",
+ "type": "list(map(string))"
+ },
+ "default_security_group_name": {
+ "default": "default",
+ "description": "Name to be used on the default security group",
+ "type": "string"
+ },
+ "default_security_group_tags": {
+ "default": {},
+ "description": "Additional tags for the default security group",
+ "type": "map(string)"
+ },
+ "default_vpc_enable_classiclink": {
+ "default": false,
+ "description": "Should be true to enable ClassicLink in the Default VPC",
+ "type": "bool"
+ },
+ "default_vpc_enable_dns_hostnames": {
+ "default": false,
+ "description": "Should be true to enable DNS hostnames in the Default VPC",
+ "type": "bool"
+ },
+ "default_vpc_enable_dns_support": {
+ "default": true,
+ "description": "Should be true to enable DNS support in the Default VPC",
+ "type": "bool"
+ },
+ "default_vpc_name": {
+ "default": "",
+ "description": "Name to be used on the Default VPC",
+ "type": "string"
+ },
+ "default_vpc_tags": {
+ "default": {},
+ "description": "Additional tags for the Default VPC",
+ "type": "map(string)"
+ },
+ "dhcp_options_domain_name": {
+ "default": "",
+ "description": "Specifies DNS name for DHCP options set (requires enable_dhcp_options set to true)",
+ "type": "string"
+ },
+ "dhcp_options_domain_name_servers": {
+ "default": [
+ "AmazonProvidedDNS"
+ ],
+ "description": "Specify a list of DNS server addresses for DHCP options set, default to AWS provided (requires enable_dhcp_options set to true)",
+ "type": "list(string)"
+ },
+ "dhcp_options_netbios_name_servers": {
+ "default": [],
+ "description": "Specify a list of netbios servers for DHCP options set (requires enable_dhcp_options set to true)",
+ "type": "list(string)"
+ },
+ "dhcp_options_netbios_node_type": {
+ "default": "",
+ "description": "Specify netbios node_type for DHCP options set (requires enable_dhcp_options set to true)",
+ "type": "string"
+ },
+ "dhcp_options_ntp_servers": {
+ "default": [],
+ "description": "Specify a list of NTP servers for DHCP options set (requires enable_dhcp_options set to true)",
+ "type": "list(string)"
+ },
+ "dhcp_options_tags": {
+ "default": {},
+ "description": "Additional tags for the DHCP option set (requires enable_dhcp_options set to true)",
+ "type": "map(string)"
+ },
+ "elasticache_acl_tags": {
+ "default": {},
+ "description": "Additional tags for the elasticache subnets network ACL",
+ "type": "map(string)"
+ },
+ "elasticache_dedicated_network_acl": {
+ "default": false,
+ "description": "Whether to use dedicated network ACL (not default) and custom rules for elasticache subnets",
+ "type": "bool"
+ },
+ "elasticache_inbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Elasticache subnets inbound network ACL rules",
+ "type": "list(map(string))"
+ },
+ "elasticache_outbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Elasticache subnets outbound network ACL rules",
+ "type": "list(map(string))"
+ },
+ "elasticache_route_table_tags": {
+ "default": {},
+ "description": "Additional tags for the elasticache route tables",
+ "type": "map(string)"
+ },
+ "elasticache_subnet_assign_ipv6_address_on_creation": {
+ "default": "null",
+ "description": "Assign IPv6 address on elasticache subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
+ "type": "bool"
+ },
+ "elasticache_subnet_ipv6_prefixes": {
+ "default": [],
+ "description": "Assigns IPv6 elasticache subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
+ "type": "list(string)"
+ },
+ "elasticache_subnet_suffix": {
+ "default": "elasticache",
+ "description": "Suffix to append to elasticache subnets name",
+ "type": "string"
+ },
+ "elasticache_subnet_tags": {
+ "default": {},
+ "description": "Additional tags for the elasticache subnets",
+ "type": "map(string)"
+ },
+ "elasticache_subnets": {
+ "default": [],
+ "description": "A list of elasticache subnets",
+ "type": "list(string)"
+ },
+ "enable_classiclink": {
+ "default": "null",
+ "description": "Should be true to enable ClassicLink for the VPC. Only valid in regions and accounts that support EC2 Classic.",
+ "type": "bool"
+ },
+ "enable_classiclink_dns_support": {
+ "default": "null",
+ "description": "Should be true to enable ClassicLink DNS Support for the VPC. Only valid in regions and accounts that support EC2 Classic.",
+ "type": "bool"
+ },
+ "enable_dhcp_options": {
+ "default": false,
+ "description": "Should be true if you want to specify a DHCP options set with a custom domain name, DNS servers, NTP servers, netbios servers, and/or netbios server type",
+ "type": "bool"
+ },
+ "enable_dns_hostnames": {
+ "default": false,
+ "description": "Should be true to enable DNS hostnames in the VPC",
+ "type": "bool"
+ },
+ "enable_dns_support": {
+ "default": true,
+ "description": "Should be true to enable DNS support in the VPC",
+ "type": "bool"
+ },
+ "enable_flow_log": {
+ "default": false,
+ "description": "Whether or not to enable VPC Flow Logs",
+ "type": "bool"
+ },
+ "enable_ipv6": {
+ "default": false,
+ "description": "Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for the VPC. You cannot specify the range of IP addresses, or the size of the CIDR block.",
+ "type": "bool"
+ },
+ "enable_nat_gateway": {
+ "default": false,
+ "description": "Should be true if you want to provision NAT Gateways for each of your private networks",
+ "type": "bool"
+ },
+ "enable_public_redshift": {
+ "default": false,
+ "description": "Controls if redshift should have public routing table",
+ "type": "bool"
+ },
+ "enable_vpn_gateway": {
+ "default": false,
+ "description": "Should be true if you want to create a new VPN Gateway resource and attach it to the VPC",
+ "type": "bool"
+ },
+ "external_nat_ip_ids": {
+ "default": [],
+ "description": "List of EIP IDs to be assigned to the NAT Gateways (used in combination with reuse_nat_ips)",
+ "type": "list(string)"
+ },
+ "external_nat_ips": {
+ "default": [],
+ "description": "List of EIPs to be used for `nat_public_ips` output (used in combination with reuse_nat_ips and external_nat_ip_ids)",
+ "type": "list(string)"
+ },
+ "flow_log_cloudwatch_iam_role_arn": {
+ "default": "",
+ "description": "The ARN for the IAM role that's used to post flow logs to a CloudWatch Logs log group. When flow_log_destination_arn is set to ARN of Cloudwatch Logs, this argument needs to be provided.",
+ "type": "string"
+ },
+ "flow_log_cloudwatch_log_group_kms_key_id": {
+ "default": "null",
+ "description": "The ARN of the KMS Key to use when encrypting log data for VPC flow logs.",
+ "type": "string"
+ },
+ "flow_log_cloudwatch_log_group_name_prefix": {
+ "default": "/aws/vpc-flow-log/",
+ "description": "Specifies the name prefix of CloudWatch Log Group for VPC flow logs.",
+ "type": "string"
+ },
+ "flow_log_cloudwatch_log_group_retention_in_days": {
+ "default": "null",
+ "description": "Specifies the number of days you want to retain log events in the specified log group for VPC flow logs.",
+ "type": "number"
+ },
+ "flow_log_destination_arn": {
+ "default": "",
+ "description": "The ARN of the CloudWatch log group or S3 bucket where VPC Flow Logs will be pushed. If this ARN is a S3 bucket the appropriate permissions need to be set on that bucket's policy. When create_flow_log_cloudwatch_log_group is set to false this argument must be provided.",
+ "type": "string"
+ },
+ "flow_log_destination_type": {
+ "default": "cloud-watch-logs",
+ "description": "Type of flow log destination. Can be s3 or cloud-watch-logs.",
+ "type": "string"
+ },
+ "flow_log_log_format": {
+ "default": "null",
+ "description": "The fields to include in the flow log record, in the order in which they should appear.",
+ "type": "string"
+ },
+ "flow_log_max_aggregation_interval": {
+ "default": 600,
+ "description": "The maximum interval of time during which a flow of packets is captured and aggregated into a flow log record. Valid Values: `60` seconds or `600` seconds.",
+ "type": "number"
+ },
+ "flow_log_traffic_type": {
+ "default": "ALL",
+ "description": "The type of traffic to capture. Valid values: ACCEPT, REJECT, ALL.",
+ "type": "string"
+ },
+ "igw_tags": {
+ "default": {},
+ "description": "Additional tags for the internet gateway",
+ "type": "map(string)"
+ },
+ "instance_tenancy": {
+ "default": "default",
+ "description": "A tenancy option for instances launched into the VPC",
+ "type": "string"
+ },
+ "intra_acl_tags": {
+ "default": {},
+ "description": "Additional tags for the intra subnets network ACL",
+ "type": "map(string)"
+ },
+ "intra_dedicated_network_acl": {
+ "default": false,
+ "description": "Whether to use dedicated network ACL (not default) and custom rules for intra subnets",
+ "type": "bool"
+ },
+ "intra_inbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Intra subnets inbound network ACLs",
+ "type": "list(map(string))"
+ },
+ "intra_outbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Intra subnets outbound network ACLs",
+ "type": "list(map(string))"
+ },
+ "intra_route_table_tags": {
+ "default": {},
+ "description": "Additional tags for the intra route tables",
+ "type": "map(string)"
+ },
+ "intra_subnet_assign_ipv6_address_on_creation": {
+ "default": "null",
+ "description": "Assign IPv6 address on intra subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
+ "type": "bool"
+ },
+ "intra_subnet_ipv6_prefixes": {
+ "default": [],
+ "description": "Assigns IPv6 intra subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
+ "type": "list(string)"
+ },
+ "intra_subnet_suffix": {
+ "default": "intra",
+ "description": "Suffix to append to intra subnets name",
+ "type": "string"
+ },
+ "intra_subnet_tags": {
+ "default": {},
+ "description": "Additional tags for the intra subnets",
+ "type": "map(string)"
+ },
+ "intra_subnets": {
+ "default": [],
+ "description": "A list of intra subnets",
+ "type": "list(string)"
+ },
+ "manage_default_network_acl": {
+ "default": false,
+ "description": "Should be true to adopt and manage Default Network ACL",
+ "type": "bool"
+ },
+ "manage_default_route_table": {
+ "default": false,
+ "description": "Should be true to manage default route table",
+ "type": "bool"
+ },
+ "manage_default_security_group": {
+ "default": false,
+ "description": "Should be true to adopt and manage default security group",
+ "type": "bool"
+ },
+ "manage_default_vpc": {
+ "default": false,
+ "description": "Should be true to adopt and manage Default VPC",
+ "type": "bool"
+ },
+ "map_public_ip_on_launch": {
+ "default": true,
+ "description": "Should be false if you do not want to auto-assign public IP on launch",
+ "type": "bool"
+ },
+ "name": {
+ "default": "",
+ "description": "Name to be used on all the resources as identifier",
+ "type": "string"
+ },
+ "nat_eip_tags": {
+ "default": {},
+ "description": "Additional tags for the NAT EIP",
+ "type": "map(string)"
+ },
+ "nat_gateway_tags": {
+ "default": {},
+ "description": "Additional tags for the NAT gateways",
+ "type": "map(string)"
+ },
+ "one_nat_gateway_per_az": {
+ "default": false,
+ "description": "Should be true if you want only one NAT Gateway per availability zone. Requires `var.azs` to be set, and the number of `public_subnets` created to be greater than or equal to the number of availability zones specified in `var.azs`.",
+ "type": "bool"
+ },
+ "outpost_acl_tags": {
+ "default": {},
+ "description": "Additional tags for the outpost subnets network ACL",
+ "type": "map(string)"
+ },
+ "outpost_arn": {
+ "default": "null",
+ "description": "ARN of Outpost you want to create a subnet in.",
+ "type": "string"
+ },
+ "outpost_az": {
+ "default": "null",
+ "description": "AZ where Outpost is anchored.",
+ "type": "string"
+ },
+ "outpost_dedicated_network_acl": {
+ "default": false,
+ "description": "Whether to use dedicated network ACL (not default) and custom rules for outpost subnets",
+ "type": "bool"
+ },
+ "outpost_inbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Outpost subnets inbound network ACLs",
+ "type": "list(map(string))"
+ },
+ "outpost_outbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Outpost subnets outbound network ACLs",
+ "type": "list(map(string))"
+ },
+ "outpost_subnet_assign_ipv6_address_on_creation": {
+ "default": "null",
+ "description": "Assign IPv6 address on outpost subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
+ "type": "bool"
+ },
+ "outpost_subnet_ipv6_prefixes": {
+ "default": [],
+ "description": "Assigns IPv6 outpost subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
+ "type": "list(string)"
+ },
+ "outpost_subnet_suffix": {
+ "default": "outpost",
+ "description": "Suffix to append to outpost subnets name",
+ "type": "string"
+ },
+ "outpost_subnet_tags": {
+ "default": {},
+ "description": "Additional tags for the outpost subnets",
+ "type": "map(string)"
+ },
+ "outpost_subnets": {
+ "default": [],
+ "description": "A list of outpost subnets inside the VPC",
+ "type": "list(string)"
+ },
+ "private_acl_tags": {
+ "default": {},
+ "description": "Additional tags for the private subnets network ACL",
+ "type": "map(string)"
+ },
+ "private_dedicated_network_acl": {
+ "default": false,
+ "description": "Whether to use dedicated network ACL (not default) and custom rules for private subnets",
+ "type": "bool"
+ },
+ "private_inbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Private subnets inbound network ACLs",
+ "type": "list(map(string))"
+ },
+ "private_outbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Private subnets outbound network ACLs",
+ "type": "list(map(string))"
+ },
+ "private_route_table_tags": {
+ "default": {},
+ "description": "Additional tags for the private route tables",
+ "type": "map(string)"
+ },
+ "private_subnet_assign_ipv6_address_on_creation": {
+ "default": "null",
+ "description": "Assign IPv6 address on private subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
+ "type": "bool"
+ },
+ "private_subnet_ipv6_prefixes": {
+ "default": [],
+ "description": "Assigns IPv6 private subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
+ "type": "list(string)"
+ },
+ "private_subnet_suffix": {
+ "default": "private",
+ "description": "Suffix to append to private subnets name",
+ "type": "string"
+ },
+ "private_subnet_tags": {
+ "default": {},
+ "description": "Additional tags for the private subnets",
+ "type": "map(string)"
+ },
+ "private_subnets": {
+ "default": [],
+ "description": "A list of private subnets inside the VPC",
+ "type": "list(string)"
+ },
+ "propagate_intra_route_tables_vgw": {
+ "default": false,
+ "description": "Should be true if you want route table propagation",
+ "type": "bool"
+ },
+ "propagate_private_route_tables_vgw": {
+ "default": false,
+ "description": "Should be true if you want route table propagation",
+ "type": "bool"
+ },
+ "propagate_public_route_tables_vgw": {
+ "default": false,
+ "description": "Should be true if you want route table propagation",
+ "type": "bool"
+ },
+ "public_acl_tags": {
+ "default": {},
+ "description": "Additional tags for the public subnets network ACL",
+ "type": "map(string)"
+ },
+ "public_dedicated_network_acl": {
+ "default": false,
+ "description": "Whether to use dedicated network ACL (not default) and custom rules for public subnets",
+ "type": "bool"
+ },
+ "public_inbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Public subnets inbound network ACLs",
+ "type": "list(map(string))"
+ },
+ "public_outbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Public subnets outbound network ACLs",
+ "type": "list(map(string))"
+ },
+ "public_route_table_tags": {
+ "default": {},
+ "description": "Additional tags for the public route tables",
+ "type": "map(string)"
+ },
+ "public_subnet_assign_ipv6_address_on_creation": {
+ "default": "null",
+ "description": "Assign IPv6 address on public subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
+ "type": "bool"
+ },
+ "public_subnet_ipv6_prefixes": {
+ "default": [],
+ "description": "Assigns IPv6 public subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
+ "type": "list(string)"
+ },
+ "public_subnet_suffix": {
+ "default": "public",
+ "description": "Suffix to append to public subnets name",
+ "type": "string"
+ },
+ "public_subnet_tags": {
+ "default": {},
+ "description": "Additional tags for the public subnets",
+ "type": "map(string)"
+ },
+ "public_subnets": {
+ "default": [],
+ "description": "A list of public subnets inside the VPC",
+ "type": "list(string)"
+ },
+ "redshift_acl_tags": {
+ "default": {},
+ "description": "Additional tags for the redshift subnets network ACL",
+ "type": "map(string)"
+ },
+ "redshift_dedicated_network_acl": {
+ "default": false,
+ "description": "Whether to use dedicated network ACL (not default) and custom rules for redshift subnets",
+ "type": "bool"
+ },
+ "redshift_inbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Redshift subnets inbound network ACL rules",
+ "type": "list(map(string))"
+ },
+ "redshift_outbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Redshift subnets outbound network ACL rules",
+ "type": "list(map(string))"
+ },
+ "redshift_route_table_tags": {
+ "default": {},
+ "description": "Additional tags for the redshift route tables",
+ "type": "map(string)"
+ },
+ "redshift_subnet_assign_ipv6_address_on_creation": {
+ "default": "null",
+ "description": "Assign IPv6 address on redshift subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
+ "type": "bool"
+ },
+ "redshift_subnet_group_tags": {
+ "default": {},
+ "description": "Additional tags for the redshift subnet group",
+ "type": "map(string)"
+ },
+ "redshift_subnet_ipv6_prefixes": {
+ "default": [],
+ "description": "Assigns IPv6 redshift subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
+ "type": "list(string)"
+ },
+ "redshift_subnet_suffix": {
+ "default": "redshift",
+ "description": "Suffix to append to redshift subnets name",
+ "type": "string"
+ },
+ "redshift_subnet_tags": {
+ "default": {},
+ "description": "Additional tags for the redshift subnets",
+ "type": "map(string)"
+ },
+ "redshift_subnets": {
+ "default": [],
+ "description": "A list of redshift subnets",
+ "type": "list(string)"
+ },
+ "reuse_nat_ips": {
+ "default": false,
+ "description": "Should be true if you don't want EIPs to be created for your NAT Gateways and will instead pass them in via the 'external_nat_ip_ids' variable",
+ "type": "bool"
+ },
+ "secondary_cidr_blocks": {
+ "default": [],
+ "description": "List of secondary CIDR blocks to associate with the VPC to extend the IP Address pool",
+ "type": "list(string)"
+ },
+ "single_nat_gateway": {
+ "default": false,
+ "description": "Should be true if you want to provision a single shared NAT Gateway across all of your private networks",
+ "type": "bool"
+ },
+ "tags": {
+ "default": {},
+ "description": "A map of tags to add to all resources",
+ "type": "map(string)"
+ },
+ "vpc_flow_log_permissions_boundary": {
+ "default": "null",
+ "description": "The ARN of the Permissions Boundary for the VPC Flow Log IAM Role",
+ "type": "string"
+ },
+ "vpc_flow_log_tags": {
+ "default": {},
+ "description": "Additional tags for the VPC Flow Logs",
+ "type": "map(string)"
+ },
+ "vpc_tags": {
+ "default": {},
+ "description": "Additional tags for the VPC",
+ "type": "map(string)"
+ },
+ "vpn_gateway_az": {
+ "default": "null",
+ "description": "The Availability Zone for the VPN Gateway",
+ "type": "string"
+ },
+ "vpn_gateway_id": {
+ "default": "",
+ "description": "ID of VPN Gateway to attach to the VPC",
+ "type": "string"
+ },
+ "vpn_gateway_tags": {
+ "default": {},
+ "description": "Additional tags for the VPN gateway",
+ "type": "map(string)"
+ }
+}
diff --git a/src/terraform-aws-modules-metadata/vpc_cloudcraft.json b/src/terraform-aws-modules-metadata/vpc_cloudcraft.json
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/src/terraform-aws-modules-metadata/vpc_cloudcraft.json
@@ -0,0 +1 @@
+{}
diff --git a/src/terraform-aws-modules-metadata/vpc_variables.json b/src/terraform-aws-modules-metadata/vpc_variables.json
new file mode 100644
index 0000000..7806242
--- /dev/null
+++ b/src/terraform-aws-modules-metadata/vpc_variables.json
@@ -0,0 +1,959 @@
+{
+ "amazon_side_asn": {
+ "default": "64512",
+ "description": "The Autonomous System Number (ASN) for the Amazon side of the gateway. By default the virtual private gateway is created with the current default Amazon ASN.",
+ "type": "string"
+ },
+ "assign_ipv6_address_on_creation": {
+ "default": false,
+ "description": "Assign IPv6 address on subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
+ "type": "bool"
+ },
+ "azs": {
+ "default": [],
+ "description": "A list of availability zones names or ids in the region",
+ "type": "list(string)"
+ },
+ "cidr": {
+ "default": "0.0.0.0/0",
+ "description": "The CIDR block for the VPC. Default value is a valid CIDR, but not acceptable by AWS and should be overridden",
+ "type": "string"
+ },
+ "create_database_internet_gateway_route": {
+ "default": false,
+ "description": "Controls if an internet gateway route for public database access should be created",
+ "type": "bool"
+ },
+ "create_database_nat_gateway_route": {
+ "default": false,
+ "description": "Controls if a nat gateway route should be created to give internet access to the database subnets",
+ "type": "bool"
+ },
+ "create_database_subnet_group": {
+ "default": true,
+ "description": "Controls if database subnet group should be created (n.b. database_subnets must also be set)",
+ "type": "bool"
+ },
+ "create_database_subnet_route_table": {
+ "default": false,
+ "description": "Controls if separate route table for database should be created",
+ "type": "bool"
+ },
+ "create_egress_only_igw": {
+ "default": true,
+ "description": "Controls if an Egress Only Internet Gateway is created and its related routes.",
+ "type": "bool"
+ },
+ "create_elasticache_subnet_group": {
+ "default": true,
+ "description": "Controls if elasticache subnet group should be created",
+ "type": "bool"
+ },
+ "create_elasticache_subnet_route_table": {
+ "default": false,
+ "description": "Controls if separate route table for elasticache should be created",
+ "type": "bool"
+ },
+ "create_flow_log_cloudwatch_iam_role": {
+ "default": false,
+ "description": "Whether to create IAM role for VPC Flow Logs",
+ "type": "bool"
+ },
+ "create_flow_log_cloudwatch_log_group": {
+ "default": false,
+ "description": "Whether to create CloudWatch log group for VPC Flow Logs",
+ "type": "bool"
+ },
+ "create_igw": {
+ "default": true,
+ "description": "Controls if an Internet Gateway is created for public subnets and the related routes that connect them.",
+ "type": "bool"
+ },
+ "create_redshift_subnet_group": {
+ "default": true,
+ "description": "Controls if redshift subnet group should be created",
+ "type": "bool"
+ },
+ "create_redshift_subnet_route_table": {
+ "default": false,
+ "description": "Controls if separate route table for redshift should be created",
+ "type": "bool"
+ },
+ "create_vpc": {
+ "default": true,
+ "description": "Controls if VPC should be created (it affects almost all resources)",
+ "type": "bool"
+ },
+ "customer_gateway_tags": {
+ "default": {},
+ "description": "Additional tags for the Customer Gateway",
+ "type": "map(string)"
+ },
+ "customer_gateways": {
+ "default": {},
+ "description": "Maps of Customer Gateway's attributes (BGP ASN and Gateway's Internet-routable external IP address)",
+ "type": "map(map(any))"
+ },
+ "database_acl_tags": {
+ "default": {},
+ "description": "Additional tags for the database subnets network ACL",
+ "type": "map(string)"
+ },
+ "database_dedicated_network_acl": {
+ "default": false,
+ "description": "Whether to use dedicated network ACL (not default) and custom rules for database subnets",
+ "type": "bool"
+ },
+ "database_inbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Database subnets inbound network ACL rules",
+ "type": "list(map(string))"
+ },
+ "database_outbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Database subnets outbound network ACL rules",
+ "type": "list(map(string))"
+ },
+ "database_route_table_tags": {
+ "default": {},
+ "description": "Additional tags for the database route tables",
+ "type": "map(string)"
+ },
+ "database_subnet_assign_ipv6_address_on_creation": {
+ "default": "null",
+ "description": "Assign IPv6 address on database subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
+ "type": "bool"
+ },
+ "database_subnet_group_tags": {
+ "default": {},
+ "description": "Additional tags for the database subnet group",
+ "type": "map(string)"
+ },
+ "database_subnet_ipv6_prefixes": {
+ "default": [],
+ "description": "Assigns IPv6 database subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
+ "type": "list(string)"
+ },
+ "database_subnet_suffix": {
+ "default": "db",
+ "description": "Suffix to append to database subnets name",
+ "type": "string"
+ },
+ "database_subnet_tags": {
+ "default": {},
+ "description": "Additional tags for the database subnets",
+ "type": "map(string)"
+ },
+ "database_subnets": {
+ "default": [],
+ "description": "A list of database subnets",
+ "type": "list(string)"
+ },
+ "default_network_acl_egress": {
+ "default": [
+ {
+ "action": "allow",
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_no": 100,
+ "to_port": 0
+ },
+ {
+ "action": "allow",
+ "from_port": 0,
+ "ipv6_cidr_block": "::/0",
+ "protocol": "-1",
+ "rule_no": 101,
+ "to_port": 0
+ }
+ ],
+ "description": "List of maps of egress rules to set on the Default Network ACL",
+ "type": "list(map(string))"
+ },
+ "default_network_acl_ingress": {
+ "default": [
+ {
+ "action": "allow",
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_no": 100,
+ "to_port": 0
+ },
+ {
+ "action": "allow",
+ "from_port": 0,
+ "ipv6_cidr_block": "::/0",
+ "protocol": "-1",
+ "rule_no": 101,
+ "to_port": 0
+ }
+ ],
+ "description": "List of maps of ingress rules to set on the Default Network ACL",
+ "type": "list(map(string))"
+ },
+ "default_network_acl_name": {
+ "default": "",
+ "description": "Name to be used on the Default Network ACL",
+ "type": "string"
+ },
+ "default_network_acl_tags": {
+ "default": {},
+ "description": "Additional tags for the Default Network ACL",
+ "type": "map(string)"
+ },
+ "default_route_table_propagating_vgws": {
+ "default": [],
+ "description": "List of virtual gateways for propagation",
+ "type": "list(string)"
+ },
+ "default_route_table_routes": {
+ "default": [],
+ "description": "Configuration block of routes. See https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/default_route_table#route",
+ "type": "list(map(string))"
+ },
+ "default_route_table_tags": {
+ "default": {},
+ "description": "Additional tags for the default route table",
+ "type": "map(string)"
+ },
+ "default_security_group_egress": {
+ "default": "null",
+ "description": "List of maps of egress rules to set on the default security group",
+ "type": "list(map(string))"
+ },
+ "default_security_group_ingress": {
+ "default": "null",
+ "description": "List of maps of ingress rules to set on the default security group",
+ "type": "list(map(string))"
+ },
+ "default_security_group_name": {
+ "default": "default",
+ "description": "Name to be used on the default security group",
+ "type": "string"
+ },
+ "default_security_group_tags": {
+ "default": {},
+ "description": "Additional tags for the default security group",
+ "type": "map(string)"
+ },
+ "default_vpc_enable_classiclink": {
+ "default": false,
+ "description": "Should be true to enable ClassicLink in the Default VPC",
+ "type": "bool"
+ },
+ "default_vpc_enable_dns_hostnames": {
+ "default": false,
+ "description": "Should be true to enable DNS hostnames in the Default VPC",
+ "type": "bool"
+ },
+ "default_vpc_enable_dns_support": {
+ "default": true,
+ "description": "Should be true to enable DNS support in the Default VPC",
+ "type": "bool"
+ },
+ "default_vpc_name": {
+ "default": "",
+ "description": "Name to be used on the Default VPC",
+ "type": "string"
+ },
+ "default_vpc_tags": {
+ "default": {},
+ "description": "Additional tags for the Default VPC",
+ "type": "map(string)"
+ },
+ "dhcp_options_domain_name": {
+ "default": "",
+ "description": "Specifies DNS name for DHCP options set (requires enable_dhcp_options set to true)",
+ "type": "string"
+ },
+ "dhcp_options_domain_name_servers": {
+ "default": [
+ "AmazonProvidedDNS"
+ ],
+ "description": "Specify a list of DNS server addresses for DHCP options set, default to AWS provided (requires enable_dhcp_options set to true)",
+ "type": "list(string)"
+ },
+ "dhcp_options_netbios_name_servers": {
+ "default": [],
+ "description": "Specify a list of netbios servers for DHCP options set (requires enable_dhcp_options set to true)",
+ "type": "list(string)"
+ },
+ "dhcp_options_netbios_node_type": {
+ "default": "",
+ "description": "Specify netbios node_type for DHCP options set (requires enable_dhcp_options set to true)",
+ "type": "string"
+ },
+ "dhcp_options_ntp_servers": {
+ "default": [],
+ "description": "Specify a list of NTP servers for DHCP options set (requires enable_dhcp_options set to true)",
+ "type": "list(string)"
+ },
+ "dhcp_options_tags": {
+ "default": {},
+ "description": "Additional tags for the DHCP option set (requires enable_dhcp_options set to true)",
+ "type": "map(string)"
+ },
+ "elasticache_acl_tags": {
+ "default": {},
+ "description": "Additional tags for the elasticache subnets network ACL",
+ "type": "map(string)"
+ },
+ "elasticache_dedicated_network_acl": {
+ "default": false,
+ "description": "Whether to use dedicated network ACL (not default) and custom rules for elasticache subnets",
+ "type": "bool"
+ },
+ "elasticache_inbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Elasticache subnets inbound network ACL rules",
+ "type": "list(map(string))"
+ },
+ "elasticache_outbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Elasticache subnets outbound network ACL rules",
+ "type": "list(map(string))"
+ },
+ "elasticache_route_table_tags": {
+ "default": {},
+ "description": "Additional tags for the elasticache route tables",
+ "type": "map(string)"
+ },
+ "elasticache_subnet_assign_ipv6_address_on_creation": {
+ "default": "null",
+ "description": "Assign IPv6 address on elasticache subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
+ "type": "bool"
+ },
+ "elasticache_subnet_ipv6_prefixes": {
+ "default": [],
+ "description": "Assigns IPv6 elasticache subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
+ "type": "list(string)"
+ },
+ "elasticache_subnet_suffix": {
+ "default": "elasticache",
+ "description": "Suffix to append to elasticache subnets name",
+ "type": "string"
+ },
+ "elasticache_subnet_tags": {
+ "default": {},
+ "description": "Additional tags for the elasticache subnets",
+ "type": "map(string)"
+ },
+ "elasticache_subnets": {
+ "default": [],
+ "description": "A list of elasticache subnets",
+ "type": "list(string)"
+ },
+ "enable_classiclink": {
+ "default": "null",
+ "description": "Should be true to enable ClassicLink for the VPC. Only valid in regions and accounts that support EC2 Classic.",
+ "type": "bool"
+ },
+ "enable_classiclink_dns_support": {
+ "default": "null",
+ "description": "Should be true to enable ClassicLink DNS Support for the VPC. Only valid in regions and accounts that support EC2 Classic.",
+ "type": "bool"
+ },
+ "enable_dhcp_options": {
+ "default": false,
+ "description": "Should be true if you want to specify a DHCP options set with a custom domain name, DNS servers, NTP servers, netbios servers, and/or netbios server type",
+ "type": "bool"
+ },
+ "enable_dns_hostnames": {
+ "default": false,
+ "description": "Should be true to enable DNS hostnames in the VPC",
+ "type": "bool"
+ },
+ "enable_dns_support": {
+ "default": true,
+ "description": "Should be true to enable DNS support in the VPC",
+ "type": "bool"
+ },
+ "enable_flow_log": {
+ "default": false,
+ "description": "Whether or not to enable VPC Flow Logs",
+ "type": "bool"
+ },
+ "enable_ipv6": {
+ "default": false,
+ "description": "Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for the VPC. You cannot specify the range of IP addresses, or the size of the CIDR block.",
+ "type": "bool"
+ },
+ "enable_nat_gateway": {
+ "default": false,
+ "description": "Should be true if you want to provision NAT Gateways for each of your private networks",
+ "type": "bool"
+ },
+ "enable_public_redshift": {
+ "default": false,
+ "description": "Controls if redshift should have public routing table",
+ "type": "bool"
+ },
+ "enable_vpn_gateway": {
+ "default": false,
+ "description": "Should be true if you want to create a new VPN Gateway resource and attach it to the VPC",
+ "type": "bool"
+ },
+ "external_nat_ip_ids": {
+ "default": [],
+ "description": "List of EIP IDs to be assigned to the NAT Gateways (used in combination with reuse_nat_ips)",
+ "type": "list(string)"
+ },
+ "external_nat_ips": {
+ "default": [],
+ "description": "List of EIPs to be used for `nat_public_ips` output (used in combination with reuse_nat_ips and external_nat_ip_ids)",
+ "type": "list(string)"
+ },
+ "flow_log_cloudwatch_iam_role_arn": {
+ "default": "",
+ "description": "The ARN for the IAM role that's used to post flow logs to a CloudWatch Logs log group. When flow_log_destination_arn is set to ARN of Cloudwatch Logs, this argument needs to be provided.",
+ "type": "string"
+ },
+ "flow_log_cloudwatch_log_group_kms_key_id": {
+ "default": "null",
+ "description": "The ARN of the KMS Key to use when encrypting log data for VPC flow logs.",
+ "type": "string"
+ },
+ "flow_log_cloudwatch_log_group_name_prefix": {
+ "default": "/aws/vpc-flow-log/",
+ "description": "Specifies the name prefix of CloudWatch Log Group for VPC flow logs.",
+ "type": "string"
+ },
+ "flow_log_cloudwatch_log_group_retention_in_days": {
+ "default": "null",
+ "description": "Specifies the number of days you want to retain log events in the specified log group for VPC flow logs.",
+ "type": "number"
+ },
+ "flow_log_destination_arn": {
+ "default": "",
+ "description": "The ARN of the CloudWatch log group or S3 bucket where VPC Flow Logs will be pushed. If this ARN is a S3 bucket the appropriate permissions need to be set on that bucket's policy. When create_flow_log_cloudwatch_log_group is set to false this argument must be provided.",
+ "type": "string"
+ },
+ "flow_log_destination_type": {
+ "default": "cloud-watch-logs",
+ "description": "Type of flow log destination. Can be s3 or cloud-watch-logs.",
+ "type": "string"
+ },
+ "flow_log_log_format": {
+ "default": "null",
+ "description": "The fields to include in the flow log record, in the order in which they should appear.",
+ "type": "string"
+ },
+ "flow_log_max_aggregation_interval": {
+ "default": 600,
+ "description": "The maximum interval of time during which a flow of packets is captured and aggregated into a flow log record. Valid Values: `60` seconds or `600` seconds.",
+ "type": "number"
+ },
+ "flow_log_traffic_type": {
+ "default": "ALL",
+ "description": "The type of traffic to capture. Valid values: ACCEPT, REJECT, ALL.",
+ "type": "string"
+ },
+ "igw_tags": {
+ "default": {},
+ "description": "Additional tags for the internet gateway",
+ "type": "map(string)"
+ },
+ "instance_tenancy": {
+ "default": "default",
+ "description": "A tenancy option for instances launched into the VPC",
+ "type": "string"
+ },
+ "intra_acl_tags": {
+ "default": {},
+ "description": "Additional tags for the intra subnets network ACL",
+ "type": "map(string)"
+ },
+ "intra_dedicated_network_acl": {
+ "default": false,
+ "description": "Whether to use dedicated network ACL (not default) and custom rules for intra subnets",
+ "type": "bool"
+ },
+ "intra_inbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Intra subnets inbound network ACLs",
+ "type": "list(map(string))"
+ },
+ "intra_outbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Intra subnets outbound network ACLs",
+ "type": "list(map(string))"
+ },
+ "intra_route_table_tags": {
+ "default": {},
+ "description": "Additional tags for the intra route tables",
+ "type": "map(string)"
+ },
+ "intra_subnet_assign_ipv6_address_on_creation": {
+ "default": "null",
+ "description": "Assign IPv6 address on intra subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
+ "type": "bool"
+ },
+ "intra_subnet_ipv6_prefixes": {
+ "default": [],
+ "description": "Assigns IPv6 intra subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
+ "type": "list(string)"
+ },
+ "intra_subnet_suffix": {
+ "default": "intra",
+ "description": "Suffix to append to intra subnets name",
+ "type": "string"
+ },
+ "intra_subnet_tags": {
+ "default": {},
+ "description": "Additional tags for the intra subnets",
+ "type": "map(string)"
+ },
+ "intra_subnets": {
+ "default": [],
+ "description": "A list of intra subnets",
+ "type": "list(string)"
+ },
+ "manage_default_network_acl": {
+ "default": false,
+ "description": "Should be true to adopt and manage Default Network ACL",
+ "type": "bool"
+ },
+ "manage_default_route_table": {
+ "default": false,
+ "description": "Should be true to manage default route table",
+ "type": "bool"
+ },
+ "manage_default_security_group": {
+ "default": false,
+ "description": "Should be true to adopt and manage default security group",
+ "type": "bool"
+ },
+ "manage_default_vpc": {
+ "default": false,
+ "description": "Should be true to adopt and manage Default VPC",
+ "type": "bool"
+ },
+ "map_public_ip_on_launch": {
+ "default": true,
+ "description": "Should be false if you do not want to auto-assign public IP on launch",
+ "type": "bool"
+ },
+ "name": {
+ "default": "",
+ "description": "Name to be used on all the resources as identifier",
+ "type": "string"
+ },
+ "nat_eip_tags": {
+ "default": {},
+ "description": "Additional tags for the NAT EIP",
+ "type": "map(string)"
+ },
+ "nat_gateway_tags": {
+ "default": {},
+ "description": "Additional tags for the NAT gateways",
+ "type": "map(string)"
+ },
+ "one_nat_gateway_per_az": {
+ "default": false,
+ "description": "Should be true if you want only one NAT Gateway per availability zone. Requires `var.azs` to be set, and the number of `public_subnets` created to be greater than or equal to the number of availability zones specified in `var.azs`.",
+ "type": "bool"
+ },
+ "outpost_acl_tags": {
+ "default": {},
+ "description": "Additional tags for the outpost subnets network ACL",
+ "type": "map(string)"
+ },
+ "outpost_arn": {
+ "default": "null",
+ "description": "ARN of Outpost you want to create a subnet in.",
+ "type": "string"
+ },
+ "outpost_az": {
+ "default": "null",
+ "description": "AZ where Outpost is anchored.",
+ "type": "string"
+ },
+ "outpost_dedicated_network_acl": {
+ "default": false,
+ "description": "Whether to use dedicated network ACL (not default) and custom rules for outpost subnets",
+ "type": "bool"
+ },
+ "outpost_inbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Outpost subnets inbound network ACLs",
+ "type": "list(map(string))"
+ },
+ "outpost_outbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Outpost subnets outbound network ACLs",
+ "type": "list(map(string))"
+ },
+ "outpost_subnet_assign_ipv6_address_on_creation": {
+ "default": "null",
+ "description": "Assign IPv6 address on outpost subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
+ "type": "bool"
+ },
+ "outpost_subnet_ipv6_prefixes": {
+ "default": [],
+ "description": "Assigns IPv6 outpost subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
+ "type": "list(string)"
+ },
+ "outpost_subnet_suffix": {
+ "default": "outpost",
+ "description": "Suffix to append to outpost subnets name",
+ "type": "string"
+ },
+ "outpost_subnet_tags": {
+ "default": {},
+ "description": "Additional tags for the outpost subnets",
+ "type": "map(string)"
+ },
+ "outpost_subnets": {
+ "default": [],
+ "description": "A list of outpost subnets inside the VPC",
+ "type": "list(string)"
+ },
+ "private_acl_tags": {
+ "default": {},
+ "description": "Additional tags for the private subnets network ACL",
+ "type": "map(string)"
+ },
+ "private_dedicated_network_acl": {
+ "default": false,
+ "description": "Whether to use dedicated network ACL (not default) and custom rules for private subnets",
+ "type": "bool"
+ },
+ "private_inbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Private subnets inbound network ACLs",
+ "type": "list(map(string))"
+ },
+ "private_outbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Private subnets outbound network ACLs",
+ "type": "list(map(string))"
+ },
+ "private_route_table_tags": {
+ "default": {},
+ "description": "Additional tags for the private route tables",
+ "type": "map(string)"
+ },
+ "private_subnet_assign_ipv6_address_on_creation": {
+ "default": "null",
+ "description": "Assign IPv6 address on private subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
+ "type": "bool"
+ },
+ "private_subnet_ipv6_prefixes": {
+ "default": [],
+ "description": "Assigns IPv6 private subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
+ "type": "list(string)"
+ },
+ "private_subnet_suffix": {
+ "default": "private",
+ "description": "Suffix to append to private subnets name",
+ "type": "string"
+ },
+ "private_subnet_tags": {
+ "default": {},
+ "description": "Additional tags for the private subnets",
+ "type": "map(string)"
+ },
+ "private_subnets": {
+ "default": [],
+ "description": "A list of private subnets inside the VPC",
+ "type": "list(string)"
+ },
+ "propagate_intra_route_tables_vgw": {
+ "default": false,
+ "description": "Should be true if you want route table propagation",
+ "type": "bool"
+ },
+ "propagate_private_route_tables_vgw": {
+ "default": false,
+ "description": "Should be true if you want route table propagation",
+ "type": "bool"
+ },
+ "propagate_public_route_tables_vgw": {
+ "default": false,
+ "description": "Should be true if you want route table propagation",
+ "type": "bool"
+ },
+ "public_acl_tags": {
+ "default": {},
+ "description": "Additional tags for the public subnets network ACL",
+ "type": "map(string)"
+ },
+ "public_dedicated_network_acl": {
+ "default": false,
+ "description": "Whether to use dedicated network ACL (not default) and custom rules for public subnets",
+ "type": "bool"
+ },
+ "public_inbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Public subnets inbound network ACLs",
+ "type": "list(map(string))"
+ },
+ "public_outbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Public subnets outbound network ACLs",
+ "type": "list(map(string))"
+ },
+ "public_route_table_tags": {
+ "default": {},
+ "description": "Additional tags for the public route tables",
+ "type": "map(string)"
+ },
+ "public_subnet_assign_ipv6_address_on_creation": {
+ "default": "null",
+ "description": "Assign IPv6 address on public subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
+ "type": "bool"
+ },
+ "public_subnet_ipv6_prefixes": {
+ "default": [],
+ "description": "Assigns IPv6 public subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
+ "type": "list(string)"
+ },
+ "public_subnet_suffix": {
+ "default": "public",
+ "description": "Suffix to append to public subnets name",
+ "type": "string"
+ },
+ "public_subnet_tags": {
+ "default": {},
+ "description": "Additional tags for the public subnets",
+ "type": "map(string)"
+ },
+ "public_subnets": {
+ "default": [],
+ "description": "A list of public subnets inside the VPC",
+ "type": "list(string)"
+ },
+ "redshift_acl_tags": {
+ "default": {},
+ "description": "Additional tags for the redshift subnets network ACL",
+ "type": "map(string)"
+ },
+ "redshift_dedicated_network_acl": {
+ "default": false,
+ "description": "Whether to use dedicated network ACL (not default) and custom rules for redshift subnets",
+ "type": "bool"
+ },
+ "redshift_inbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Redshift subnets inbound network ACL rules",
+ "type": "list(map(string))"
+ },
+ "redshift_outbound_acl_rules": {
+ "default": [
+ {
+ "cidr_block": "0.0.0.0/0",
+ "from_port": 0,
+ "protocol": "-1",
+ "rule_action": "allow",
+ "rule_number": 100,
+ "to_port": 0
+ }
+ ],
+ "description": "Redshift subnets outbound network ACL rules",
+ "type": "list(map(string))"
+ },
+ "redshift_route_table_tags": {
+ "default": {},
+ "description": "Additional tags for the redshift route tables",
+ "type": "map(string)"
+ },
+ "redshift_subnet_assign_ipv6_address_on_creation": {
+ "default": "null",
+ "description": "Assign IPv6 address on redshift subnet, must be disabled to change IPv6 CIDRs. This is the IPv6 equivalent of map_public_ip_on_launch",
+ "type": "bool"
+ },
+ "redshift_subnet_group_tags": {
+ "default": {},
+ "description": "Additional tags for the redshift subnet group",
+ "type": "map(string)"
+ },
+ "redshift_subnet_ipv6_prefixes": {
+ "default": [],
+ "description": "Assigns IPv6 redshift subnet id based on the Amazon provided /56 prefix base 10 integer (0-256). Must be of equal length to the corresponding IPv4 subnet list",
+ "type": "list(string)"
+ },
+ "redshift_subnet_suffix": {
+ "default": "redshift",
+ "description": "Suffix to append to redshift subnets name",
+ "type": "string"
+ },
+ "redshift_subnet_tags": {
+ "default": {},
+ "description": "Additional tags for the redshift subnets",
+ "type": "map(string)"
+ },
+ "redshift_subnets": {
+ "default": [],
+ "description": "A list of redshift subnets",
+ "type": "list(string)"
+ },
+ "reuse_nat_ips": {
+ "default": false,
+ "description": "Should be true if you don't want EIPs to be created for your NAT Gateways and will instead pass them in via the 'external_nat_ip_ids' variable",
+ "type": "bool"
+ },
+ "secondary_cidr_blocks": {
+ "default": [],
+ "description": "List of secondary CIDR blocks to associate with the VPC to extend the IP Address pool",
+ "type": "list(string)"
+ },
+ "single_nat_gateway": {
+ "default": false,
+ "description": "Should be true if you want to provision a single shared NAT Gateway across all of your private networks",
+ "type": "bool"
+ },
+ "tags": {
+ "default": {},
+ "description": "A map of tags to add to all resources",
+ "type": "map(string)"
+ },
+ "vpc_flow_log_permissions_boundary": {
+ "default": "null",
+ "description": "The ARN of the Permissions Boundary for the VPC Flow Log IAM Role",
+ "type": "string"
+ },
+ "vpc_flow_log_tags": {
+ "default": {},
+ "description": "Additional tags for the VPC Flow Logs",
+ "type": "map(string)"
+ },
+ "vpc_tags": {
+ "default": {},
+ "description": "Additional tags for the VPC",
+ "type": "map(string)"
+ },
+ "vpn_gateway_az": {
+ "default": "null",
+ "description": "The Availability Zone for the VPN Gateway",
+ "type": "string"
+ },
+ "vpn_gateway_id": {
+ "default": "",
+ "description": "ID of VPN Gateway to attach to the VPC",
+ "type": "string"
+ },
+ "vpn_gateway_tags": {
+ "default": {},
+ "description": "Additional tags for the VPN gateway",
+ "type": "map(string)"
+ }
+}
diff --git a/src/terraform-aws-modules-metadata/vpc_version.txt b/src/terraform-aws-modules-metadata/vpc_version.txt
new file mode 100644
index 0000000..ad55eb8
--- /dev/null
+++ b/src/terraform-aws-modules-metadata/vpc_version.txt
@@ -0,0 +1 @@
+v3.0.0
diff --git a/src/terraform-aws-modules-metadata/vpn-gateway.json b/src/terraform-aws-modules-metadata/vpn-gateway.json
new file mode 100644
index 0000000..f77f436
--- /dev/null
+++ b/src/terraform-aws-modules-metadata/vpn-gateway.json
@@ -0,0 +1,231 @@
+{
+ "connect_to_transit_gateway": {
+ "default": false,
+ "description": "Set to false to disable attachment of the VPN connection route to the VPN connection (TGW uses another resource for that)",
+ "type": "bool"
+ },
+ "create_vpn_connection": {
+ "default": true,
+ "description": "Set to false to prevent the creation of a VPN Connection.",
+ "type": "bool"
+ },
+ "create_vpn_gateway_attachment": {
+ "default": true,
+ "description": "Set to false to prevent attachment of the VGW to the VPC",
+ "type": "bool"
+ },
+ "customer_gateway_id": {
+ "description": "The id of the Customer Gateway.",
+ "type": "string"
+ },
+ "tags": {
+ "default": {},
+ "description": "Set of tags to be added to the VPN Connection resource (only if `create_vpn_connection = true`).",
+ "type": "map(string)"
+ },
+ "transit_gateway_id": {
+ "default": "null",
+ "description": "The ID of the Transit Gateway.",
+ "type": "string"
+ },
+ "tunnel1_dpd_timeout_action": {
+ "default": "null",
+ "description": "(Optional, Default clear) The action to take after DPD timeout occurs for the first VPN tunnel. Specify restart to restart the IKE initiation. Specify clear to end the IKE session. Valid values are clear | none | restart",
+ "type": "string"
+ },
+ "tunnel1_dpd_timeout_seconds": {
+ "default": "null",
+ "description": "(Optional, Default 30) The number of seconds after which a DPD timeout occurs for the first VPN tunnel. Valid value is equal or higher than 30",
+ "type": "number"
+ },
+ "tunnel1_ike_versions": {
+ "default": "null",
+ "description": "(Optional) The IKE versions that are permitted for the first VPN tunnel. Valid values are ikev1 | ikev2",
+ "type": "list(string)"
+ },
+ "tunnel1_inside_cidr": {
+ "default": "",
+ "description": "The CIDR block of the inside IP addresses for the first VPN tunnel.",
+ "type": "string"
+ },
+ "tunnel1_phase1_dh_group_numbers": {
+ "default": "null",
+ "description": "(Optional) List of one or more Diffie-Hellman group numbers that are permitted for the first VPN tunnel for phase 1 IKE negotiations. Valid values are 2 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24",
+ "type": "list(number)"
+ },
+ "tunnel1_phase1_encryption_algorithms": {
+ "default": "null",
+ "description": "(Optional) List of one or more encryption algorithms that are permitted for the first VPN tunnel for phase 1 IKE negotiations. Valid values are AES128 | AES256 | AES128-GCM-16 | AES256-GCM-16",
+ "type": "list(string)"
+ },
+ "tunnel1_phase1_integrity_algorithms": {
+ "default": "null",
+ "description": "(Optional) One or more integrity algorithms that are permitted for the first VPN tunnel for phase 1 IKE negotiations. Valid values are SHA1 | SHA2-256 | SHA2-384 | SHA2-512",
+ "type": "list(string)"
+ },
+ "tunnel1_phase1_lifetime_seconds": {
+ "default": "null",
+ "description": "(Optional, Default 28800) The lifetime for phase 1 of the IKE negotiation for the first VPN tunnel, in seconds. Valid value is between 900 and 28800",
+ "type": "number"
+ },
+ "tunnel1_phase2_dh_group_numbers": {
+ "default": "null",
+ "description": "(Optional) List of one or more Diffie-Hellman group numbers that are permitted for the first VPN tunnel for phase 2 IKE negotiations. Valid values are 2 | 5 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24",
+ "type": "list(number)"
+ },
+ "tunnel1_phase2_encryption_algorithms": {
+ "default": "null",
+ "description": "(Optional) List of one or more encryption algorithms that are permitted for the first VPN tunnel for phase 2 IKE negotiations. Valid values are AES128 | AES256 | AES128-GCM-16 | AES256-GCM-16",
+ "type": "list(string)"
+ },
+ "tunnel1_phase2_integrity_algorithms": {
+ "default": "null",
+ "description": "(Optional) List of one or more integrity algorithms that are permitted for the first VPN tunnel for phase 2 IKE negotiations. Valid values are SHA1 | SHA2-256 | SHA2-384 | SHA2-512",
+ "type": "list(string)"
+ },
+ "tunnel1_phase2_lifetime_seconds": {
+ "default": "null",
+ "description": "(Optional, Default 3600) The lifetime for phase 2 of the IKE negotiation for the first VPN tunnel, in seconds. Valid value is between 900 and 3600",
+ "type": "number"
+ },
+ "tunnel1_preshared_key": {
+ "default": "",
+ "description": "The preshared key of the first VPN tunnel.",
+ "type": "string"
+ },
+ "tunnel1_rekey_fuzz_percentage": {
+ "default": "null",
+ "description": "(Optional, Default 100) The percentage of the rekey window for the first VPN tunnel (determined by tunnel1_rekey_margin_time_seconds) during which the rekey time is randomly selected. Valid value is between 0 and 100",
+ "type": "number"
+ },
+ "tunnel1_rekey_margin_time_seconds": {
+ "default": "null",
+ "description": "(Optional, Default 540) The margin time, in seconds, before the phase 2 lifetime expires, during which the AWS side of the first VPN connection performs an IKE rekey. The exact time of the rekey is randomly selected based on the value for tunnel1_rekey_fuzz_percentage. Valid value is between 60 and half of tunnel1_phase2_lifetime_seconds",
+ "type": "number"
+ },
+ "tunnel1_replay_window_size": {
+ "default": "null",
+ "description": "(Optional, Default 1024) The number of packets in an IKE replay window for the first VPN tunnel. Valid value is between 64 and 2048.",
+ "type": "number"
+ },
+ "tunnel1_startup_action": {
+ "default": "null",
+ "description": "(Optional, Default add) The action to take when the establishing the tunnel for the first VPN connection. By default, your customer gateway device must initiate the IKE negotiation and bring up the tunnel. Specify start for AWS to initiate the IKE negotiation. Valid values are add | start",
+ "type": "string"
+ },
+ "tunnel2_dpd_timeout_action": {
+ "default": "null",
+ "description": "(Optional, Default clear) The action to take after DPD timeout occurs for the second VPN tunnel. Specify restart to restart the IKE initiation. Specify clear to end the IKE session. Valid values are clear | none | restart",
+ "type": "string"
+ },
+ "tunnel2_dpd_timeout_seconds": {
+ "default": "null",
+ "description": "(Optional, Default 30) The number of seconds after which a DPD timeout occurs for the second VPN tunnel. Valid value is equal or higher than 30",
+ "type": "number"
+ },
+ "tunnel2_ike_versions": {
+ "default": "null",
+ "description": "(Optional) The IKE versions that are permitted for the first VPN tunnel. Valid values are ikev1 | ikev2",
+ "type": "list(string)"
+ },
+ "tunnel2_inside_cidr": {
+ "default": "",
+ "description": "The CIDR block of the inside IP addresses for the second VPN tunnel.",
+ "type": "string"
+ },
+ "tunnel2_phase1_dh_group_numbers": {
+ "default": "null",
+ "description": "(Optional) List of one or more Diffie-Hellman group numbers that are permitted for the second VPN tunnel for phase 1 IKE negotiations. Valid values are 2 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24",
+ "type": "list(number)"
+ },
+ "tunnel2_phase1_encryption_algorithms": {
+ "default": "null",
+ "description": "(Optional) List of one or more encryption algorithms that are permitted for the second VPN tunnel for phase 1 IKE negotiations. Valid values are AES128 | AES256 | AES128-GCM-16 | AES256-GCM-16",
+ "type": "list(string)"
+ },
+ "tunnel2_phase1_integrity_algorithms": {
+ "default": "null",
+ "description": "(Optional) One or more integrity algorithms that are permitted for the second VPN tunnel for phase 1 IKE negotiations. Valid values are SHA1 | SHA2-256 | SHA2-384 | SHA2-512",
+ "type": "list(string)"
+ },
+ "tunnel2_phase1_lifetime_seconds": {
+ "default": "null",
+ "description": "(Optional, Default 28800) The lifetime for phase 1 of the IKE negotiation for the second VPN tunnel, in seconds. Valid value is between 900 and 28800",
+ "type": "number"
+ },
+ "tunnel2_phase2_dh_group_numbers": {
+ "default": "null",
+ "description": "(Optional) List of one or more Diffie-Hellman group numbers that are permitted for the second VPN tunnel for phase 2 IKE negotiations. Valid values are 2 | 5 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24",
+ "type": "list(number)"
+ },
+ "tunnel2_phase2_encryption_algorithms": {
+ "default": "null",
+ "description": "(Optional) List of one or more encryption algorithms that are permitted for the second VPN tunnel for phase 2 IKE negotiations. Valid values are AES128 | AES256 | AES128-GCM-16 | AES256-GCM-16",
+ "type": "list(string)"
+ },
+ "tunnel2_phase2_integrity_algorithms": {
+ "default": "null",
+ "description": "(Optional) List of one or more integrity algorithms that are permitted for the second VPN tunnel for phase 2 IKE negotiations. Valid values are SHA1 | SHA2-256 | SHA2-384 | SHA2-512",
+ "type": "list(string)"
+ },
+ "tunnel2_phase2_lifetime_seconds": {
+ "default": "null",
+ "description": "(Optional, Default 3600) The lifetime for phase 2 of the IKE negotiation for the second VPN tunnel, in seconds. Valid value is between 900 and 3600",
+ "type": "number"
+ },
+ "tunnel2_preshared_key": {
+ "default": "",
+ "description": "The preshared key of the second VPN tunnel.",
+ "type": "string"
+ },
+ "tunnel2_rekey_fuzz_percentage": {
+ "default": "null",
+ "description": "(Optional, Default 100) The percentage of the rekey window for the second VPN tunnel (determined by tunnel1_rekey_margin_time_seconds) during which the rekey time is randomly selected. Valid value is between 0 and 100",
+ "type": "number"
+ },
+ "tunnel2_rekey_margin_time_seconds": {
+ "default": "null",
+ "description": "(Optional, Default 540) The margin time, in seconds, before the phase 2 lifetime expires, during which the AWS side of the second VPN connection performs an IKE rekey. The exact time of the rekey is randomly selected based on the value for tunnel2_rekey_fuzz_percentage. Valid value is between 60 and half of tunnel2_phase2_lifetime_seconds",
+ "type": "number"
+ },
+ "tunnel2_replay_window_size": {
+ "default": "null",
+ "description": "(Optional, Default 1024) The number of packets in an IKE replay window for the second VPN tunnel. Valid value is between 64 and 2048.",
+ "type": "number"
+ },
+ "tunnel2_startup_action": {
+ "default": "null",
+ "description": "(Optional, Default add) The action to take when the establishing the tunnel for the second VPN connection. By default, your customer gateway device must initiate the IKE negotiation and bring up the tunnel. Specify start for AWS to initiate the IKE negotiation. Valid values are add | start",
+ "type": "string"
+ },
+ "vpc_id": {
+ "default": "null",
+ "description": "The id of the VPC where the VPN Gateway lives.",
+ "type": "string"
+ },
+ "vpc_subnet_route_table_count": {
+ "default": 0,
+ "description": "The number of subnet route table ids being passed in via `vpc_subnet_route_table_ids`.",
+ "type": "number"
+ },
+ "vpc_subnet_route_table_ids": {
+ "default": [],
+ "description": "The ids of the VPC subnets for which routes from the VPN Gateway will be propagated.",
+ "type": "list(string)"
+ },
+ "vpn_connection_static_routes_destinations": {
+ "default": [],
+ "description": "List of CIDRs to be used as destination for static routes (used with `vpn_connection_static_routes_only = true`). Routes to destinations set here will be propagated to the routing tables of the subnets defined in `vpc_subnet_route_table_ids`.",
+ "type": "list(string)"
+ },
+ "vpn_connection_static_routes_only": {
+ "default": false,
+ "description": "Set to true for the created VPN connection to use static routes exclusively (only if `create_vpn_connection = true`). Static routes must be used for devices that don't support BGP.",
+ "type": "bool"
+ },
+ "vpn_gateway_id": {
+ "default": "null",
+ "description": "The id of the VPN Gateway.",
+ "type": "string"
+ }
+}
diff --git a/src/terraform-aws-modules-metadata/vpn-gateway_cloudcraft.json b/src/terraform-aws-modules-metadata/vpn-gateway_cloudcraft.json
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/src/terraform-aws-modules-metadata/vpn-gateway_cloudcraft.json
@@ -0,0 +1 @@
+{}
diff --git a/src/terraform-aws-modules-metadata/vpn-gateway_variables.json b/src/terraform-aws-modules-metadata/vpn-gateway_variables.json
new file mode 100644
index 0000000..f77f436
--- /dev/null
+++ b/src/terraform-aws-modules-metadata/vpn-gateway_variables.json
@@ -0,0 +1,231 @@
+{
+ "connect_to_transit_gateway": {
+ "default": false,
+ "description": "Set to false to disable attachment of the VPN connection route to the VPN connection (TGW uses another resource for that)",
+ "type": "bool"
+ },
+ "create_vpn_connection": {
+ "default": true,
+ "description": "Set to false to prevent the creation of a VPN Connection.",
+ "type": "bool"
+ },
+ "create_vpn_gateway_attachment": {
+ "default": true,
+ "description": "Set to false to prevent attachment of the VGW to the VPC",
+ "type": "bool"
+ },
+ "customer_gateway_id": {
+ "description": "The id of the Customer Gateway.",
+ "type": "string"
+ },
+ "tags": {
+ "default": {},
+ "description": "Set of tags to be added to the VPN Connection resource (only if `create_vpn_connection = true`).",
+ "type": "map(string)"
+ },
+ "transit_gateway_id": {
+ "default": "null",
+ "description": "The ID of the Transit Gateway.",
+ "type": "string"
+ },
+ "tunnel1_dpd_timeout_action": {
+ "default": "null",
+ "description": "(Optional, Default clear) The action to take after DPD timeout occurs for the first VPN tunnel. Specify restart to restart the IKE initiation. Specify clear to end the IKE session. Valid values are clear | none | restart",
+ "type": "string"
+ },
+ "tunnel1_dpd_timeout_seconds": {
+ "default": "null",
+ "description": "(Optional, Default 30) The number of seconds after which a DPD timeout occurs for the first VPN tunnel. Valid value is equal or higher than 30",
+ "type": "number"
+ },
+ "tunnel1_ike_versions": {
+ "default": "null",
+ "description": "(Optional) The IKE versions that are permitted for the first VPN tunnel. Valid values are ikev1 | ikev2",
+ "type": "list(string)"
+ },
+ "tunnel1_inside_cidr": {
+ "default": "",
+ "description": "The CIDR block of the inside IP addresses for the first VPN tunnel.",
+ "type": "string"
+ },
+ "tunnel1_phase1_dh_group_numbers": {
+ "default": "null",
+ "description": "(Optional) List of one or more Diffie-Hellman group numbers that are permitted for the first VPN tunnel for phase 1 IKE negotiations. Valid values are 2 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24",
+ "type": "list(number)"
+ },
+ "tunnel1_phase1_encryption_algorithms": {
+ "default": "null",
+ "description": "(Optional) List of one or more encryption algorithms that are permitted for the first VPN tunnel for phase 1 IKE negotiations. Valid values are AES128 | AES256 | AES128-GCM-16 | AES256-GCM-16",
+ "type": "list(string)"
+ },
+ "tunnel1_phase1_integrity_algorithms": {
+ "default": "null",
+ "description": "(Optional) One or more integrity algorithms that are permitted for the first VPN tunnel for phase 1 IKE negotiations. Valid values are SHA1 | SHA2-256 | SHA2-384 | SHA2-512",
+ "type": "list(string)"
+ },
+ "tunnel1_phase1_lifetime_seconds": {
+ "default": "null",
+ "description": "(Optional, Default 28800) The lifetime for phase 1 of the IKE negotiation for the first VPN tunnel, in seconds. Valid value is between 900 and 28800",
+ "type": "number"
+ },
+ "tunnel1_phase2_dh_group_numbers": {
+ "default": "null",
+ "description": "(Optional) List of one or more Diffie-Hellman group numbers that are permitted for the first VPN tunnel for phase 2 IKE negotiations. Valid values are 2 | 5 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24",
+ "type": "list(number)"
+ },
+ "tunnel1_phase2_encryption_algorithms": {
+ "default": "null",
+ "description": "(Optional) List of one or more encryption algorithms that are permitted for the first VPN tunnel for phase 2 IKE negotiations. Valid values are AES128 | AES256 | AES128-GCM-16 | AES256-GCM-16",
+ "type": "list(string)"
+ },
+ "tunnel1_phase2_integrity_algorithms": {
+ "default": "null",
+ "description": "(Optional) List of one or more integrity algorithms that are permitted for the first VPN tunnel for phase 2 IKE negotiations. Valid values are SHA1 | SHA2-256 | SHA2-384 | SHA2-512",
+ "type": "list(string)"
+ },
+ "tunnel1_phase2_lifetime_seconds": {
+ "default": "null",
+ "description": "(Optional, Default 3600) The lifetime for phase 2 of the IKE negotiation for the first VPN tunnel, in seconds. Valid value is between 900 and 3600",
+ "type": "number"
+ },
+ "tunnel1_preshared_key": {
+ "default": "",
+ "description": "The preshared key of the first VPN tunnel.",
+ "type": "string"
+ },
+ "tunnel1_rekey_fuzz_percentage": {
+ "default": "null",
+ "description": "(Optional, Default 100) The percentage of the rekey window for the first VPN tunnel (determined by tunnel1_rekey_margin_time_seconds) during which the rekey time is randomly selected. Valid value is between 0 and 100",
+ "type": "number"
+ },
+ "tunnel1_rekey_margin_time_seconds": {
+ "default": "null",
+ "description": "(Optional, Default 540) The margin time, in seconds, before the phase 2 lifetime expires, during which the AWS side of the first VPN connection performs an IKE rekey. The exact time of the rekey is randomly selected based on the value for tunnel1_rekey_fuzz_percentage. Valid value is between 60 and half of tunnel1_phase2_lifetime_seconds",
+ "type": "number"
+ },
+ "tunnel1_replay_window_size": {
+ "default": "null",
+ "description": "(Optional, Default 1024) The number of packets in an IKE replay window for the first VPN tunnel. Valid value is between 64 and 2048.",
+ "type": "number"
+ },
+ "tunnel1_startup_action": {
+ "default": "null",
+ "description": "(Optional, Default add) The action to take when the establishing the tunnel for the first VPN connection. By default, your customer gateway device must initiate the IKE negotiation and bring up the tunnel. Specify start for AWS to initiate the IKE negotiation. Valid values are add | start",
+ "type": "string"
+ },
+ "tunnel2_dpd_timeout_action": {
+ "default": "null",
+ "description": "(Optional, Default clear) The action to take after DPD timeout occurs for the second VPN tunnel. Specify restart to restart the IKE initiation. Specify clear to end the IKE session. Valid values are clear | none | restart",
+ "type": "string"
+ },
+ "tunnel2_dpd_timeout_seconds": {
+ "default": "null",
+ "description": "(Optional, Default 30) The number of seconds after which a DPD timeout occurs for the second VPN tunnel. Valid value is equal or higher than 30",
+ "type": "number"
+ },
+ "tunnel2_ike_versions": {
+ "default": "null",
+ "description": "(Optional) The IKE versions that are permitted for the first VPN tunnel. Valid values are ikev1 | ikev2",
+ "type": "list(string)"
+ },
+ "tunnel2_inside_cidr": {
+ "default": "",
+ "description": "The CIDR block of the inside IP addresses for the second VPN tunnel.",
+ "type": "string"
+ },
+ "tunnel2_phase1_dh_group_numbers": {
+ "default": "null",
+ "description": "(Optional) List of one or more Diffie-Hellman group numbers that are permitted for the second VPN tunnel for phase 1 IKE negotiations. Valid values are 2 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24",
+ "type": "list(number)"
+ },
+ "tunnel2_phase1_encryption_algorithms": {
+ "default": "null",
+ "description": "(Optional) List of one or more encryption algorithms that are permitted for the second VPN tunnel for phase 1 IKE negotiations. Valid values are AES128 | AES256 | AES128-GCM-16 | AES256-GCM-16",
+ "type": "list(string)"
+ },
+ "tunnel2_phase1_integrity_algorithms": {
+ "default": "null",
+ "description": "(Optional) One or more integrity algorithms that are permitted for the second VPN tunnel for phase 1 IKE negotiations. Valid values are SHA1 | SHA2-256 | SHA2-384 | SHA2-512",
+ "type": "list(string)"
+ },
+ "tunnel2_phase1_lifetime_seconds": {
+ "default": "null",
+ "description": "(Optional, Default 28800) The lifetime for phase 1 of the IKE negotiation for the second VPN tunnel, in seconds. Valid value is between 900 and 28800",
+ "type": "number"
+ },
+ "tunnel2_phase2_dh_group_numbers": {
+ "default": "null",
+ "description": "(Optional) List of one or more Diffie-Hellman group numbers that are permitted for the second VPN tunnel for phase 2 IKE negotiations. Valid values are 2 | 5 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24",
+ "type": "list(number)"
+ },
+ "tunnel2_phase2_encryption_algorithms": {
+ "default": "null",
+ "description": "(Optional) List of one or more encryption algorithms that are permitted for the second VPN tunnel for phase 2 IKE negotiations. Valid values are AES128 | AES256 | AES128-GCM-16 | AES256-GCM-16",
+ "type": "list(string)"
+ },
+ "tunnel2_phase2_integrity_algorithms": {
+ "default": "null",
+ "description": "(Optional) List of one or more integrity algorithms that are permitted for the second VPN tunnel for phase 2 IKE negotiations. Valid values are SHA1 | SHA2-256 | SHA2-384 | SHA2-512",
+ "type": "list(string)"
+ },
+ "tunnel2_phase2_lifetime_seconds": {
+ "default": "null",
+ "description": "(Optional, Default 3600) The lifetime for phase 2 of the IKE negotiation for the second VPN tunnel, in seconds. Valid value is between 900 and 3600",
+ "type": "number"
+ },
+ "tunnel2_preshared_key": {
+ "default": "",
+ "description": "The preshared key of the second VPN tunnel.",
+ "type": "string"
+ },
+ "tunnel2_rekey_fuzz_percentage": {
+ "default": "null",
+ "description": "(Optional, Default 100) The percentage of the rekey window for the second VPN tunnel (determined by tunnel1_rekey_margin_time_seconds) during which the rekey time is randomly selected. Valid value is between 0 and 100",
+ "type": "number"
+ },
+ "tunnel2_rekey_margin_time_seconds": {
+ "default": "null",
+ "description": "(Optional, Default 540) The margin time, in seconds, before the phase 2 lifetime expires, during which the AWS side of the second VPN connection performs an IKE rekey. The exact time of the rekey is randomly selected based on the value for tunnel2_rekey_fuzz_percentage. Valid value is between 60 and half of tunnel2_phase2_lifetime_seconds",
+ "type": "number"
+ },
+ "tunnel2_replay_window_size": {
+ "default": "null",
+ "description": "(Optional, Default 1024) The number of packets in an IKE replay window for the second VPN tunnel. Valid value is between 64 and 2048.",
+ "type": "number"
+ },
+ "tunnel2_startup_action": {
+ "default": "null",
+ "description": "(Optional, Default add) The action to take when the establishing the tunnel for the second VPN connection. By default, your customer gateway device must initiate the IKE negotiation and bring up the tunnel. Specify start for AWS to initiate the IKE negotiation. Valid values are add | start",
+ "type": "string"
+ },
+ "vpc_id": {
+ "default": "null",
+ "description": "The id of the VPC where the VPN Gateway lives.",
+ "type": "string"
+ },
+ "vpc_subnet_route_table_count": {
+ "default": 0,
+ "description": "The number of subnet route table ids being passed in via `vpc_subnet_route_table_ids`.",
+ "type": "number"
+ },
+ "vpc_subnet_route_table_ids": {
+ "default": [],
+ "description": "The ids of the VPC subnets for which routes from the VPN Gateway will be propagated.",
+ "type": "list(string)"
+ },
+ "vpn_connection_static_routes_destinations": {
+ "default": [],
+ "description": "List of CIDRs to be used as destination for static routes (used with `vpn_connection_static_routes_only = true`). Routes to destinations set here will be propagated to the routing tables of the subnets defined in `vpc_subnet_route_table_ids`.",
+ "type": "list(string)"
+ },
+ "vpn_connection_static_routes_only": {
+ "default": false,
+ "description": "Set to true for the created VPN connection to use static routes exclusively (only if `create_vpn_connection = true`). Static routes must be used for devices that don't support BGP.",
+ "type": "bool"
+ },
+ "vpn_gateway_id": {
+ "default": "null",
+ "description": "The id of the VPN Gateway.",
+ "type": "string"
+ }
+}
diff --git a/src/terraform-aws-modules-metadata/vpn-gateway_version.txt b/src/terraform-aws-modules-metadata/vpn-gateway_version.txt
new file mode 100644
index 0000000..f367ae3
--- /dev/null
+++ b/src/terraform-aws-modules-metadata/vpn-gateway_version.txt
@@ -0,0 +1 @@
+v2.9.0
diff --git a/templates/root/template/.gitignore b/templates/root/template/.gitignore
deleted file mode 100644
index 5080bb0..0000000
--- a/templates/root/template/.gitignore
+++ /dev/null
@@ -1,31 +0,0 @@
-# Terraform
-.terraform
-.terragrunt-cache
-*.tfstate*
-crash.log
-
-# Copies of main_providers.tf
-main_providers.tf
-
-# Except original (see related issue - https://github.com/gruntwork-io/terragrunt/issues/785)
-!common/main_providers.tf
-
-# Secrets are not allowed in general
-*.key
-*.pem
-
-# Secrets are encrypted using git-crypt
-!secrets/*
-
-# OS X
-.history
-.DS_Store
-
-# IntelliJ
-.idea_modules
-*.iml
-*.iws
-*.ipr
-.idea/
-build/
-*/build/
diff --git a/templates/root/template/modules/aws-data/README.md b/templates/root/template/modules/aws-data/README.md
deleted file mode 100644
index 00f5bed..0000000
--- a/templates/root/template/modules/aws-data/README.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# aws-data
-
-This module contains data-sources which are used as arguments in other AWS modules (eg, list of AZ when creating VPC).
-
-
-## Outputs
-
-| Name | Description |
-|------|-------------|
-| amazon\_linux2\_aws\_ami\_id | AMI ID of Amazon Linux 2 |
-| available\_aws\_availability\_zones\_names | A list of the Availability Zone names available to the account |
-| available\_aws\_availability\_zones\_zone\_ids | A list of the Availability Zone IDs available to the account |
-| aws\_region | Details about selected AWS region |
-| ubuntu\_1804\_aws\_ami\_id | AMI ID of Ubuntu 18.04 |
-
-
diff --git a/templates/terragrunt-common-layer/common/main_providers.tf b/templates/terragrunt-common-layer/common/main_providers.tf
deleted file mode 100644
index 23b25d7..0000000
--- a/templates/terragrunt-common-layer/common/main_providers.tf
+++ /dev/null
@@ -1,13 +0,0 @@
-provider "aws" {
- region = "{{ cookiecutter.region }}"
-
- # Make it faster by skipping something
- skip_get_ec2_platforms = true
- skip_metadata_api_check = true
- skip_region_validation = true
- skip_credentials_validation = true
-}
-
-terraform {
- backend "s3" {}
-}
diff --git a/templates/terragrunt-common-layer/region/terragrunt.hcl b/templates/terragrunt-common-layer/region/terragrunt.hcl
deleted file mode 100644
index 11b1de4..0000000
--- a/templates/terragrunt-common-layer/region/terragrunt.hcl
+++ /dev/null
@@ -1,33 +0,0 @@
-terraform {
- extra_arguments "disable_input" {
- commands = get_terraform_commands_that_need_input()
- arguments = ["-input=false"]
- }
-
- after_hook "copy_common_main_providers" {
- commands = ["init-from-module"]
- execute = ["cp", "${get_parent_terragrunt_dir()}/../../common/main_providers.tf", "."]
- }
-
- // Do not delete the copied file because of the odd behavior described in this related issue - https://github.com/gruntwork-io/terragrunt/issues/785
- // after_hook "remove_useless_copy_of_main_providers" {
- // commands = ["init"]
- // execute = ["rm", "-f", "${get_parent_terragrunt_dir()}/${path_relative_to_include()}/main_providers.tf"]
- // }
-}
-
-remote_state {
- backend = "s3"
- disable_init = tobool(get_env("TERRAGRUNT_DISABLE_INIT", "false"))
-
- config = {
- encrypt = true
- region = "{{ cookiecutter.region }}"
- key = "${path_relative_to_include()}/terraform.tfstate"
- bucket = "terraform-states-${get_aws_account_id()}"
- dynamodb_table = "terraform-locks-${get_aws_account_id()}"
-
- skip_metadata_api_check = true
- skip_credentials_validation = true
- }
-}
diff --git a/terraform/.gitignore b/terraform/.gitignore
new file mode 100644
index 0000000..c45cf41
--- /dev/null
+++ b/terraform/.gitignore
@@ -0,0 +1 @@
+*.tfvars
diff --git a/terraform/.terraform-version b/terraform/.terraform-version
new file mode 100644
index 0000000..1985d91
--- /dev/null
+++ b/terraform/.terraform-version
@@ -0,0 +1 @@
+0.15.3
diff --git a/terraform/Makefile b/terraform/Makefile
new file mode 100644
index 0000000..98b23af
--- /dev/null
+++ b/terraform/Makefile
@@ -0,0 +1,7 @@
+.PHONY: cloudcraft betajob
+
+cloudcraft:
+ terraform init -backend-config=cloudcraft/backend.hcl -reconfigure && terraform apply -var-file=cloudcraft/cloudcraft.tfvars
+
+betajob:
+ terraform init -backend-config=betajob/backend.hcl -reconfigure && terraform apply -var-file=betajob/betajob.tfvars
diff --git a/terraform/README.md b/terraform/README.md
new file mode 100644
index 0000000..6304cb9
--- /dev/null
+++ b/terraform/README.md
@@ -0,0 +1,79 @@
+# Terraform configurations required to provision AWS infrastructure for d2c.modules.tf
+
+- HTTP API Gateway
+- ACM
+- Lambda Function
+- S3 bucket for downloads
+- Route53 records
+
+## Deployments
+
+### cloudcraft - prod
+
+```
+$ awsp modules-deploy # Assume IAM role in correct account
+$ make cloudcraft
+```
+
+### betajob - dev
+
+```
+$ awsp private-anton # Assume IAM role in correct account
+$ make betajob
+```
+
+
+## Requirements
+
+| Name | Version |
+|------|---------|
+| [terraform](#requirement\_terraform) | >= 0.15, <1.0.0 |
+| [aws](#requirement\_aws) | ~> 3.0 |
+
+## Providers
+
+| Name | Version |
+|------|---------|
+| [aws](#provider\_aws) | ~> 3.0 |
+
+## Modules
+
+| Name | Source | Version |
+|------|--------|---------|
+| [acm](#module\_acm) | terraform-aws-modules/acm/aws | ~> 3.0 |
+| [alarm\_lambda\_is\_popular](#module\_alarm\_lambda\_is\_popular) | terraform-aws-modules/cloudwatch/aws//modules/metric-alarm | |
+| [alarm\_lambda\_is\_slow](#module\_alarm\_lambda\_is\_slow) | terraform-aws-modules/cloudwatch/aws//modules/metric-alarm | |
+| [alarm\_lambda\_with\_errors](#module\_alarm\_lambda\_with\_errors) | terraform-aws-modules/cloudwatch/aws//modules/metric-alarm | ~> 2.0 |
+| [api\_gateway](#module\_api\_gateway) | terraform-aws-modules/apigateway-v2/aws | ~> 1.0 |
+| [dl\_bucket](#module\_dl\_bucket) | terraform-aws-modules/s3-bucket/aws | ~> 2.0 |
+| [lambda](#module\_lambda) | terraform-aws-modules/lambda/aws | ~> 2.0 |
+| [records](#module\_records) | terraform-aws-modules/route53/aws//modules/records | ~> 2.0 |
+| [sns\_topic](#module\_sns\_topic) | terraform-aws-modules/sns/aws | ~> 3.0 |
+
+## Resources
+
+| Name | Type |
+|------|------|
+| [aws_sns_topic_subscription.sns_to_email](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sns_topic_subscription) | resource |
+| [aws_route53_zone.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/route53_zone) | data source |
+
+## Inputs
+
+| Name | Description | Type | Default | Required |
+|------|-------------|------|---------|:--------:|
+| [allowed\_account\_ids](#input\_allowed\_account\_ids) | List of allowed AWS acount ids where infrastructure will be created | `list(string)` | n/a | yes |
+| [aws\_region](#input\_aws\_region) | AWS region where infrastructure will be created | `string` | `"eu-west-1"` | no |
+| [create\_dl\_bucket](#input\_create\_dl\_bucket) | Whether to create S3 bucket for downloads | `bool` | `false` | no |
+| [dl\_bucket\_name](#input\_dl\_bucket\_name) | Name of S3 bucket for downloads (should not include route53\_zone\_name) | `string` | `null` | no |
+| [dl\_dir](#input\_dl\_dir) | Name of directory in S3 bucket | `string` | `""` | no |
+| [email](#input\_email) | Email address to receive CloudWatch alerts | `string` | n/a | yes |
+| [name](#input\_name) | Name or prefix for many related resources | `string` | `"modulestf-d2c"` | no |
+| [subdomain](#input\_subdomain) | Route53 subdomain | `string` | `""` | no |
+| [zone\_name](#input\_zone\_name) | Zone name for ALB and ACM | `string` | n/a | yes |
+
+## Outputs
+
+| Name | Description |
+|------|-------------|
+| [fqdn](#output\_fqdn) | FQDN of API Endpoint |
+
diff --git a/terraform/betajob/backend.hcl b/terraform/betajob/backend.hcl
new file mode 100644
index 0000000..87626aa
--- /dev/null
+++ b/terraform/betajob/backend.hcl
@@ -0,0 +1,3 @@
+hostname = "app.terraform.io"
+organization = "betajob"
+workspaces { name = "modulestf-infra-betajob" }
diff --git a/terraform/cloudcraft/backend.hcl b/terraform/cloudcraft/backend.hcl
new file mode 100644
index 0000000..7ad2b44
--- /dev/null
+++ b/terraform/cloudcraft/backend.hcl
@@ -0,0 +1,3 @@
+hostname = "app.terraform.io"
+organization = "betajob"
+workspaces { name = "modulestf-infra-cloudcraft" }
diff --git a/terraform/main.tf b/terraform/main.tf
new file mode 100644
index 0000000..69dcab9
--- /dev/null
+++ b/terraform/main.tf
@@ -0,0 +1,262 @@
+terraform {
+ required_version = ">= 0.15, <1.0.0"
+
+ required_providers {
+ aws = "~> 3.0"
+ }
+
+ backend "remote" {}
+}
+
+provider "aws" {
+ region = var.aws_region
+ allowed_account_ids = var.allowed_account_ids
+}
+
+locals {
+ zone_name = trimsuffix(data.aws_route53_zone.this.name, ".")
+ domain_name = join(".", compact([var.subdomain, local.zone_name]))
+
+ dl_bucket_name = var.create_dl_bucket ? module.dl_bucket.s3_bucket_id : var.dl_bucket_name
+ dl_dir = trimsuffix(var.dl_dir, "/")
+
+ tags = {
+ Name = var.name
+ }
+}
+
+data "aws_route53_zone" "this" {
+ name = var.zone_name
+ private_zone = false
+}
+
+module "api_gateway" {
+ source = "terraform-aws-modules/apigateway-v2/aws"
+ version = "~> 1.0"
+
+ name = var.name
+ description = "HTTP API Gateway"
+ protocol_type = "HTTP"
+
+ cors_configuration = {
+ allow_headers = ["content-type", "x-amz-date", "authorization", "x-api-key", "x-amz-security-token", "x-amz-user-agent"]
+ allow_methods = ["*"]
+ allow_origins = ["*"]
+ }
+
+ domain_name = local.domain_name
+ domain_name_certificate_arn = module.acm.acm_certificate_arn
+ disable_execute_api_endpoint = true
+
+ integrations = {
+ "GET /" = {
+ lambda_arn = module.lambda.lambda_function_arn
+ payload_format_version = "2.0"
+ }
+
+ "POST /" = {
+ lambda_arn = module.lambda.lambda_function_arn
+ payload_format_version = "2.0"
+ }
+ }
+
+ tags = local.tags
+}
+
+module "lambda" {
+ source = "terraform-aws-modules/lambda/aws"
+ version = "~> 2.0"
+
+ function_name = "${var.name}-lambda"
+ description = "Lambda function which converts blueprint into Terraform code"
+ handler = "handler.handler"
+ runtime = "python3.8"
+ memory_size = 3072
+ timeout = 30
+ publish = true
+
+ source_path = "../src"
+
+ environment_variables = {
+ S3_BUCKET = local.dl_bucket_name
+ S3_DIR = local.dl_dir
+ UPLOAD_TO_S3 = true
+ }
+
+ cloudwatch_logs_retention_in_days = 30
+
+ attach_tracing_policy = true
+ tracing_mode = "Active"
+
+ attach_policy_statements = true
+ policy_statements = {
+ s3 = {
+ effect = "Allow",
+ actions = ["s3:PutObject*"],
+ resources = [
+ "arn:aws:s3:::${local.dl_bucket_name}/${local.dl_dir}",
+ "arn:aws:s3:::${local.dl_bucket_name}/${local.dl_dir}/*",
+ ]
+ }
+ }
+
+ allowed_triggers = {
+ AllowExecutionFromAPIGateway = {
+ service = "apigateway"
+ source_arn = "${module.api_gateway.apigatewayv2_api_execution_arn}/*/*/"
+ }
+ }
+
+ tags = local.tags
+}
+
+module "acm" {
+ source = "terraform-aws-modules/acm/aws"
+ version = "~> 3.0"
+
+ domain_name = local.zone_name
+ subject_alternative_names = setsubtract([local.domain_name], [local.zone_name])
+ zone_id = data.aws_route53_zone.this.id
+
+ tags = local.tags
+}
+
+module "dl_bucket" {
+ source = "terraform-aws-modules/s3-bucket/aws"
+ version = "~> 2.0"
+
+ create_bucket = var.create_dl_bucket
+
+ bucket = var.dl_bucket_name
+ acl = "private"
+ force_destroy = true
+ block_public_policy = true
+
+ cors_rule = [{
+ allowed_methods = ["GET"]
+ allowed_origins = ["*"]
+ allowed_headers = ["*"]
+ max_age_seconds = 3000
+ }]
+
+ lifecycle_rule = [
+ {
+ id = "delete-pretty-quick"
+ enabled = true
+
+ expiration = {
+ days = 1
+ }
+ }
+ ]
+
+ tags = local.tags
+}
+
+module "records" {
+ source = "terraform-aws-modules/route53/aws//modules/records"
+ version = "~> 2.0"
+
+ zone_id = data.aws_route53_zone.this.zone_id
+
+ records = [
+ {
+ name = var.subdomain
+ type = "A"
+ alias = {
+ name = module.api_gateway.apigatewayv2_domain_name_configuration[0].target_domain_name
+ zone_id = module.api_gateway.apigatewayv2_domain_name_configuration[0].hosted_zone_id
+ }
+ },
+ ]
+}
+
+module "sns_topic" {
+ source = "terraform-aws-modules/sns/aws"
+ version = "~> 3.0"
+
+ name_prefix = var.name
+}
+
+resource "aws_sns_topic_subscription" "sns_to_email" {
+ topic_arn = module.sns_topic.sns_topic_arn
+ protocol = "email"
+ endpoint = var.email
+}
+
+# Alarm when there is at least one error in a minute in AWS Lambda functions
+module "alarm_lambda_with_errors" {
+ source = "terraform-aws-modules/cloudwatch/aws//modules/metric-alarm"
+ version = "~> 2.0"
+
+ alarm_name = "lambda-errors-${module.lambda.lambda_function_name}"
+ alarm_description = "Lambda with errors"
+ comparison_operator = "GreaterThanOrEqualToThreshold"
+ evaluation_periods = 1
+ threshold = 5
+ period = 60
+ unit = "Count"
+ treat_missing_data = "notBreaching"
+
+ namespace = "AWS/Lambda"
+ metric_name = "Errors"
+ statistic = "Maximum"
+
+ dimensions = {
+ FunctionName = module.lambda.lambda_function_name
+ }
+
+ alarm_actions = [module.sns_topic.sns_topic_arn]
+
+ depends_on = [module.sns_topic]
+}
+
+module "alarm_lambda_is_slow" {
+ source = "terraform-aws-modules/cloudwatch/aws//modules/metric-alarm"
+
+ alarm_name = "lambda-slow-${module.lambda.lambda_function_name}"
+ alarm_description = "Lambda is too high"
+ comparison_operator = "GreaterThanOrEqualToThreshold"
+ evaluation_periods = 2
+ threshold = 29000
+ period = 60
+ unit = "Milliseconds"
+ treat_missing_data = "notBreaching"
+
+ namespace = "AWS/Lambda"
+ metric_name = "Duration"
+ statistic = "Maximum"
+
+ dimensions = {
+ FunctionName = module.lambda.lambda_function_name
+ }
+
+ alarm_actions = [module.sns_topic.sns_topic_arn]
+
+ depends_on = [module.sns_topic]
+}
+
+module "alarm_lambda_is_popular" {
+ source = "terraform-aws-modules/cloudwatch/aws//modules/metric-alarm"
+
+ alarm_name = "lambda-popular-${module.lambda.lambda_function_name}"
+ alarm_description = "Lambda is too popular"
+ comparison_operator = "GreaterThanOrEqualToThreshold"
+ evaluation_periods = 1
+ threshold = 50
+ period = 60
+ unit = "Count"
+ treat_missing_data = "notBreaching"
+
+ namespace = "AWS/Lambda"
+ metric_name = "Invocations"
+ statistic = "Maximum"
+
+ dimensions = {
+ FunctionName = module.lambda.lambda_function_name
+ }
+
+ alarm_actions = [module.sns_topic.sns_topic_arn]
+
+ depends_on = [module.sns_topic]
+}
diff --git a/terraform/outputs.tf b/terraform/outputs.tf
new file mode 100644
index 0000000..53421d8
--- /dev/null
+++ b/terraform/outputs.tf
@@ -0,0 +1,4 @@
+output "fqdn" {
+ description = "FQDN of API Endpoint"
+ value = "https://${module.records.route53_record_fqdn["${var.subdomain} A"]}"
+}
diff --git a/terraform/terraform.tfvars.sample b/terraform/terraform.tfvars.sample
new file mode 100644
index 0000000..b3442de
--- /dev/null
+++ b/terraform/terraform.tfvars.sample
@@ -0,0 +1,10 @@
+allowed_account_ids = ["111111111111"]
+
+zone_name = "modules.tf"
+subdomain = "dev-d2c"
+
+create_dl_bucket = false
+dl_bucket_name = "dl.modules.tf"
+dl_dir = "dev"
+
+email = "alerts@domain.com"
diff --git a/terraform/variables.tf b/terraform/variables.tf
new file mode 100644
index 0000000..77115e9
--- /dev/null
+++ b/terraform/variables.tf
@@ -0,0 +1,50 @@
+variable "allowed_account_ids" {
+ description = "List of allowed AWS acount ids where infrastructure will be created"
+ type = list(string)
+}
+
+variable "aws_region" {
+ description = "AWS region where infrastructure will be created"
+ type = string
+ default = "eu-west-1"
+}
+
+variable "name" {
+ description = "Name or prefix for many related resources"
+ type = string
+ default = "modulestf-d2c"
+}
+
+variable "zone_name" {
+ description = "Zone name for ALB and ACM"
+ type = string
+}
+
+variable "subdomain" {
+ description = "Route53 subdomain"
+ type = string
+ default = ""
+}
+
+variable "create_dl_bucket" {
+ description = "Whether to create S3 bucket for downloads"
+ type = bool
+ default = false
+}
+
+variable "dl_bucket_name" {
+ description = "Name of S3 bucket for downloads (should not include route53_zone_name)"
+ type = string
+ default = null
+}
+
+variable "dl_dir" {
+ description = "Name of directory in S3 bucket"
+ type = string
+ default = ""
+}
+
+variable "email" {
+ description = "Email address to receive CloudWatch alerts"
+ type = string
+}
diff --git a/test_fixtures/api_gateway_request.json b/test_fixtures/api_gateway_request.json
new file mode 100644
index 0000000..f75f3ef
--- /dev/null
+++ b/test_fixtures/api_gateway_request.json
@@ -0,0 +1,69 @@
+{
+ "version": "2.0",
+ "routeKey": "$default",
+ "rawPath": "/my/path",
+ "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value",
+ "cookies": [
+ "cookie1",
+ "cookie2"
+ ],
+ "headers": {
+ "header1": "value1",
+ "header2": "value1,value2"
+ },
+ "queryStringParameters": {
+ "parameter1": "value1,value2",
+ "parameter2": "value"
+ },
+ "requestContext": {
+ "accountId": "123456789012",
+ "apiId": "api-id",
+ "authentication": {
+ "clientCert": {
+ "clientCertPem": "CERT_CONTENT",
+ "subjectDN": "www.example.com",
+ "issuerDN": "Example issuer",
+ "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1",
+ "validity": {
+ "notBefore": "May 28 12:30:02 2019 GMT",
+ "notAfter": "Aug 5 09:36:04 2021 GMT"
+ }
+ }
+ },
+ "authorizer": {
+ "jwt": {
+ "claims": {
+ "claim1": "value1",
+ "claim2": "value2"
+ },
+ "scopes": [
+ "scope1",
+ "scope2"
+ ]
+ }
+ },
+ "domainName": "id.execute-api.us-east-1.amazonaws.com",
+ "domainPrefix": "id",
+ "http": {
+ "method": "POST",
+ "path": "/my/path",
+ "protocol": "HTTP/1.1",
+ "sourceIp": "IP",
+ "userAgent": "agent"
+ },
+ "requestId": "id",
+ "routeKey": "$default",
+ "stage": "$default",
+ "time": "12/Mar/2020:19:03:58 +0000",
+ "timeEpoch": 1583348638390
+ },
+ "body": "Hello from Lambda",
+ "pathParameters": {
+ "parameter1": "value1"
+ },
+ "isBase64Encoded": false,
+ "stageVariables": {
+ "stageVariable1": "value1",
+ "stageVariable2": "value2"
+ }
+}
diff --git a/test_fixtures/input/blueprint_cloudfront_lambda_apigw.json b/test_fixtures/input/blueprint_cloudfront_lambda_apigw.json
new file mode 100644
index 0000000..d426b3a
--- /dev/null
+++ b/test_fixtures/input/blueprint_cloudfront_lambda_apigw.json
@@ -0,0 +1,190 @@
+{
+ "id": "5b27afb9-1cce-4bbc-a0aa-6bc5febc7ba0",
+ "data": {
+ "grid": "standard",
+ "name": "sdfhdsfh",
+ "text": [{
+ "id": "616cb32d-8c11-4697-a6fb-486407ef8a9b",
+ "text": "S3-files",
+ "type": "isotext",
+ "color": "#4286c5",
+ "mapPos": {
+ "relTo": "ae00b6e2-ed7c-47c8-8b1c-c9d9a03ed2f9",
+ "offset": [0.245, 0.6999999999999993]
+ },
+ "outline": true,
+ "standing": false,
+ "textSize": 25,
+ "direction": "down",
+ "isometric": true
+ }, {
+ "id": "aac87f03-d7aa-4aea-9227-cb04db679ad2",
+ "text": "Infra-service-1",
+ "type": "isotext",
+ "color": "#4286c5",
+ "mapPos": {
+ "relTo": "dc672366-eced-42b9-bb73-6177e0a7d7a0",
+ "offset": [-0.25, 0.75]
+ },
+ "outline": true,
+ "standing": false,
+ "textSize": 25,
+ "direction": "down",
+ "isometric": true
+ }],
+ "edges": [{
+ "to": "d9dda8de-0d35-4231-962e-79a95b33759d",
+ "from": "1dc43817-99b6-4ebb-aa91-76737a9792d0",
+ "type": "edge",
+ "color": {
+ "2d": "#000000",
+ "isometric": "#000000"
+ },
+ "width": 2,
+ "dashed": false,
+ "endCap": "arrow"
+ }, {
+ "to": "ae00b6e2-ed7c-47c8-8b1c-c9d9a03ed2f9",
+ "from": "d9dda8de-0d35-4231-962e-79a95b33759d",
+ "type": "edge",
+ "color": {
+ "2d": "#000000",
+ "isometric": "#000000"
+ },
+ "width": 2,
+ "dashed": false,
+ "endCap": "arrow"
+ }],
+ "icons": [{
+ "id": "dc672366-eced-42b9-bb73-6177e0a7d7a0",
+ "name": "AR & VR/AR-VR",
+ "type": "icon",
+ "color": {},
+ "mapPos": [3, 12.25],
+ "iconSet": "aws2",
+ "iconSize": 3,
+ "standing": false,
+ "direction": "down",
+ "isometric": true,
+ "background": {
+ "2d": "rgba(0, 0, 0, 0)",
+ "isometric": "rgba(0, 0, 0, 0)"
+ }
+ }],
+ "nodes": [{
+ "id": "b0fe9c7e-df37-4f75-aca4-d59e7b1bd6b6",
+ "type": "vpngateway",
+ "color": {
+ "2d": "#693cc5",
+ "isometric": "#ececed"
+ },
+ "mapPos": [9.25, 6],
+ "region": "eu-west-1",
+ "direction": "down",
+ "accentColor": {
+ "2d": "#693cc5",
+ "isometric": "#4286c5"
+ }
+ }, {
+ "id": "ae00b6e2-ed7c-47c8-8b1c-c9d9a03ed2f9",
+ "type": "s3",
+ "color": {
+ "2d": "#3f8624",
+ "isometric": "#4286c5"
+ },
+ "dataGb": 10,
+ "mapPos": [6.75, 10.5],
+ "region": "eu-west-1",
+ "volumeType": "Standard",
+ "accentColor": {
+ "2d": "#ffffff",
+ "isometric": "#4286c5"
+ },
+ "getAndOtherRequests": 0,
+ "putCopyPostRequests": 0,
+ "lifecycleTransitions": 0
+ }, {
+ "id": "1dc43817-99b6-4ebb-aa91-76737a9792d0",
+ "type": "lambda",
+ "color": {
+ "2d": "#d86613",
+ "isometric": "#3c3c3c"
+ },
+ "mapPos": [11, 10.5],
+ "memory": 384,
+ "region": "eu-west-1",
+ "mRequests": 10,
+ "accentColor": {
+ "2d": "#ffffff",
+ "isometric": "#f4b934"
+ },
+ "computeDuration": 0.5
+ }, {
+ "id": "a4867d70-fbe4-49f4-ab68-9f4b3caf7d4f",
+ "type": "apigateway",
+ "cache": 1.6,
+ "color": {
+ "2d": "#693cc5",
+ "isometric": "#3c3c3c"
+ },
+ "mapPos": [8.75, 10.75],
+ "region": "eu-west-1",
+ "apiType": "http",
+ "apiCalls": 5,
+ "direction": "down",
+ "accentColor": {
+ "2d": "#ffffff",
+ "isometric": "#f4b934"
+ },
+ "connectionMinutes": 0
+ }, {
+ "id": "d9dda8de-0d35-4231-962e-79a95b33759d",
+ "type": "cloudfront",
+ "color": {
+ "2d": "#693cc5",
+ "isometric": "#ececed"
+ },
+ "mapPos": [8.75, 13.5],
+ "accentColor": {
+ "2d": "#ffffff",
+ "isometric": "#4286c5"
+ }
+ }],
+ "groups": [{
+ "id": "532fbc90-fe0d-457d-9e45-2f36c0d5a85d",
+ "name": "my-awesome-vpc",
+ "type": "vpc",
+ "color": {
+ "2d": "#2196f3",
+ "isometric": "#2196f3"
+ },
+ "nodes": ["b0fe9c7e-df37-4f75-aca4-d59e7b1bd6b6"],
+ "shape": "rectangular",
+ "region": "eu-west-1",
+ "padding": 1.5,
+ "peeringConnections": []
+ }],
+ "images": [],
+ "linkKey": "lUUXCSmDFPggJ8ws7y3iD_LQ",
+ "version": 1,
+ "surfaces": [],
+ "shareDocs": false,
+ "connectors": [],
+ "projection": "isometric",
+ "liveOptions": {
+ "autoLabel": true,
+ "autoConnect": true,
+ "updatesEnabled": true,
+ "updateAllOnScan": true,
+ "updateGroupsOnScan": true,
+ "updateNodeOnSelect": true
+ },
+ "disabledLayers": []
+ },
+ "readAccess": null,
+ "writeAccess": null,
+ "createdAt": "2021-04-15T17:22:56.027Z",
+ "updatedAt": "2021-05-09T12:22:37.875Z",
+ "CreatorId": "354474ae-8248-45a8-a1ef-34de7c2a4d47",
+ "LastUserId": "354474ae-8248-45a8-a1ef-34de7c2a4d47"
+}
diff --git a/test_fixtures/input/blueprint_sg_rules.json b/test_fixtures/input/blueprint_sg_rules.json
new file mode 100644
index 0000000..48b001c
--- /dev/null
+++ b/test_fixtures/input/blueprint_sg_rules.json
@@ -0,0 +1,186 @@
+{
+ "id": "3ccc65b3-54ec-43d9-903e-f7b3450f4921",
+ "data": {
+ "grid": "standard",
+ "name": "empty",
+ "text": [
+ {
+ "id": "baa3ffb0-484a-4032-b04b-e4c7678416ad",
+ "text": " \n\n\n\n\n",
+ "type": "isotext",
+ "color": {
+ "2d": "#f5b720",
+ "isometric": "#f5b720"
+ },
+ "mapPos": {
+ "relTo": "88afbf86-0731-4c50-a463-f38b1b28926e",
+ "offset": [
+ 0.25,
+ 1
+ ]
+ },
+ "outline": true,
+ "standing": false,
+ "textSize": 25,
+ "direction": "down",
+ "isometric": true
+ }
+ ],
+ "edges": [],
+ "icons": [],
+ "nodes": [
+ {
+ "id": "88afbf86-0731-4c50-a463-f38b1b28926e",
+ "type": "ec2",
+ "color": {
+ "2d": "#d86613",
+ "isometric": "#ececed"
+ },
+ "mapPos": [
+ 3.75,
+ 3.5
+ ],
+ "region": "eu-west-1",
+ "platform": "linux",
+ "accentColor": {
+ "2d": "#d86613",
+ "isometric": "#4286c5"
+ },
+ "transparent": false,
+ "instanceSize": "small",
+ "instanceType": "t2"
+ },
+ {
+ "id": "31941807-3112-4cdc-b49f-9048d867551e",
+ "type": "ec2",
+ "color": {
+ "2d": "#d86613",
+ "isometric": "#ececed"
+ },
+ "mapPos": [
+ 3.75,
+ 11.25
+ ],
+ "region": "eu-west-1",
+ "platform": "linux",
+ "accentColor": {
+ "2d": "#d86613",
+ "isometric": "#4286c5"
+ },
+ "transparent": false,
+ "instanceSize": "small",
+ "instanceType": "t2"
+ }
+ ],
+ "groups": [
+ {
+ "id": "a3bfbba6-ff09-4efc-a56b-39b647f203f6",
+ "name": "SG...привет...2",
+ "type": "sg",
+ "color": {
+ "2d": "#673ab7",
+ "isometric": "#673ab7"
+ },
+ "nodes": [
+ "31941807-3112-4cdc-b49f-9048d867551e"
+ ],
+ "shape": "dynamic",
+ "region": "eu-west-1",
+ "padding": 1.5,
+ "inboundRules": [],
+ "outboundRules": []
+ },
+ {
+ "id": "13bcc0a0-9b0d-4b81-906b-79169cfdfb89",
+ "name": "sg1",
+ "type": "sg",
+ "color": {
+ "2d": "#00bcd4",
+ "isometric": "#00bcd4"
+ },
+ "nodes": [
+ "88afbf86-0731-4c50-a463-f38b1b28926e"
+ ],
+ "shape": "dynamic",
+ "region": "eu-west-1",
+ "padding": 1.5,
+ "inboundRules": [
+ {
+ "hidden": false,
+ "target": "0.0.0.0/0",
+ "protocol": "tcp",
+ "portRange": "3389",
+ "targetType": "ip",
+ "description": "RDP for all"
+ },
+ {
+ "hidden": false,
+ "target": "a3bfbba6-ff09-4efc-a56b-39b647f203f6",
+ "protocol": "tcp",
+ "portRange": "0-65535",
+ "targetType": "sg",
+ "description": "All TCP from sg2"
+ },
+ {
+ "hidden": false,
+ "target": "10.10.0.0/20,20.20.0.0/20",
+ "protocol": "tcp",
+ "portRange": "389",
+ "targetType": "ip",
+ "description": "LDAP for some"
+ },
+ {
+ "hidden": false,
+ "target": "0.0.0.0/0",
+ "protocol": "icmpv6",
+ "portRange": "0",
+ "targetType": "ip",
+ "description": "ICMPv6 for all"
+ }
+ ],
+ "outboundRules": [
+ {
+ "hidden": false,
+ "target": "0.0.0.0/0",
+ "protocol": "-1",
+ "portRange": "1-100",
+ "targetType": "ip",
+ "description": "Custom outbound rule"
+ }
+ ]
+ },
+ {
+ "id": "db9212bd-708e-4f8b-b152-df3be824b08f",
+ "name": "MY-vpc",
+ "type": "vpc",
+ "color": {
+ "2d": "#00bcd4",
+ "isometric": "#00bcd4"
+ },
+ "nodes": [
+ "13bcc0a0-9b0d-4b81-906b-79169cfdfb89",
+ "88afbf86-0731-4c50-a463-f38b1b28926e",
+ "a3bfbba6-ff09-4efc-a56b-39b647f203f6",
+ "31941807-3112-4cdc-b49f-9048d867551e"
+ ],
+ "shape": "dynamic",
+ "region": "eu-west-1",
+ "padding": 1.5,
+ "peeringConnections": []
+ }
+ ],
+ "images": [],
+ "version": 1,
+ "surfaces": [],
+ "shareDocs": false,
+ "connectors": [],
+ "projection": "isometric",
+ "disabledLayers": []
+ },
+ "readAccess": null,
+ "writeAccess": null,
+ "createdAt": "2018-11-26T16:54:25.323Z",
+ "updatedAt": "2020-03-22T20:31:41.147Z",
+ "CreatorId": "e188a76e-d460-43b2-b57f-a3ed871ffaa0",
+ "LastUserId": "e188a76e-d460-43b2-b57f-a3ed871ffaa0"
+}
diff --git a/test_fixtures/input/blueprint_small.json b/test_fixtures/input/blueprint_small.json
index d1d31b5..eda2c38 100644
--- a/test_fixtures/input/blueprint_small.json
+++ b/test_fixtures/input/blueprint_small.json
@@ -1,16 +1,34 @@
{
- "id": "a84ffac3-4d03-48a4-b261-bb3ac38285d5",
+ "id": "b2eda0eb-21b2-45d8-93d5-c0b4906eb69e",
"data": {
"grid": "infinite",
- "name": "hashitalk",
+ "name": "test-small",
"text": [
{
- "id": "baed8f37-64d8-461f-8a07-9d29ec970775",
- "text": "RDS-name",
+ "id": "6c2e4c17-42b0-4f0a-9f93-9bc5dcd6c4ad",
+ "text": "SQS-number1",
"type": "isotext",
"color": "#4286c5",
"mapPos": {
- "relTo": "37bccc85-a83f-4f1f-aafc-3eb78293aefb",
+ "relTo": "6f6bbbea-4ec0-40dc-ad2e-c81b4a56a42e",
+ "offset": [
+ 0.3500000000000001,
+ 1.3900000000000006
+ ]
+ },
+ "outline": true,
+ "standing": false,
+ "textSize": 25,
+ "direction": "down",
+ "isometric": true
+ },
+ {
+ "id": "d6325c13-9822-43b7-8a0f-bed52a217b67",
+ "text": "RDS-cluster",
+ "type": "isotext",
+ "color": "#4286c5",
+ "mapPos": {
+ "relTo": "29e8479c-67e7-4286-a060-d46529413fce",
"offset": [
0.125,
1
@@ -23,15 +41,15 @@
"isometric": true
},
{
- "id": "52a08696-d9a8-49c7-bbf0-5d62e45da5e3",
- "text": "asg-name",
+ "id": "319db0da-7337-4b01-a213-46bdaf84ff60",
+ "text": "Assets",
"type": "isotext",
"color": "#4286c5",
"mapPos": {
- "relTo": "e8a7caf4-3075-49d4-b085-ff407dbfd7e9",
+ "relTo": "f034bcfb-6a1b-4925-9b64-5c76c90f2c17",
"offset": [
- -0.5049999999999999,
- 1.1400000000000006
+ 0.245,
+ 0.6999999999999993
]
},
"outline": true,
@@ -41,12 +59,66 @@
"isometric": true
},
{
- "id": "8e76ebea-0ab2-49d5-b8a0-191d18634df7",
- "text": "one-ec2",
+ "id": "4b302c11-e0a6-4079-973d-4f436b56d4f5",
+ "text": "CloudFront",
"type": "isotext",
"color": "#4286c5",
"mapPos": {
- "relTo": "75614915-5ccc-44b8-9b7f-9b049a413635",
+ "relTo": "fbfca042-a593-49ca-90db-a3a035c140f1",
+ "offset": [
+ -0.7549999999999999,
+ 0.8299999999999983
+ ]
+ },
+ "outline": true,
+ "standing": false,
+ "textSize": 25,
+ "direction": "down",
+ "isometric": true
+ },
+ {
+ "id": "7db3f5f0-6601-4dcc-8140-982cf74d7b19",
+ "text": "User",
+ "type": "isotext",
+ "color": "#4286c5",
+ "mapPos": {
+ "relTo": "d8100514-1122-458c-94f6-718ebcec16af",
+ "offset": [
+ -0.015000000000000013,
+ 0.629999999999999
+ ]
+ },
+ "outline": true,
+ "standing": false,
+ "textSize": 25,
+ "direction": "down",
+ "isometric": true
+ },
+ {
+ "id": "e9f6e53e-03af-4362-aa39-5b9cc09684b4",
+ "text": "My-table",
+ "type": "isotext",
+ "color": "#4286c5",
+ "mapPos": {
+ "relTo": "d0814941-436f-49e0-81f2-8f682550ec2c",
+ "offset": [
+ -0.5,
+ 1
+ ]
+ },
+ "outline": true,
+ "standing": false,
+ "textSize": 25,
+ "direction": "down",
+ "isometric": true
+ },
+ {
+ "id": "7b3c6e0f-1f84-454e-8869-2c47d7a8da96",
+ "text": "Public ELB",
+ "type": "isotext",
+ "color": "#4286c5",
+ "mapPos": {
+ "relTo": "e3ed6863-4d78-4e0b-8a5f-1f485fda98d1",
"offset": [
0.125,
1
@@ -57,15 +129,71 @@
"textSize": 25,
"direction": "down",
"isometric": true
+ },
+ {
+ "id": "4529d7b3-121e-49d9-a3f8-c32c3bebd3ce",
+ "text": "Web autoscaling group",
+ "type": "isotext",
+ "color": "#4286c5",
+ "mapPos": {
+ "relTo": "e37ba346-a434-4383-99ab-501b61f908c8",
+ "offset": [
+ 0.43500000000000005,
+ 1.1400000000000006
+ ]
+ },
+ "outline": true,
+ "standing": false,
+ "textSize": 25,
+ "direction": "down",
+ "isometric": true
}
],
"edges": [
{
- "id": "e8a7caf4-3075-49d4-b085-ff407dbfd7e9-37bccc85-a83f-4f1f-aafc-3eb78293aefb",
- "to": "37bccc85-a83f-4f1f-aafc-3eb78293aefb",
- "from": "e8a7caf4-3075-49d4-b085-ff407dbfd7e9",
- "type": "autoedge",
- "color": "#000000",
+ "to": "3c7ab31f-4fc7-47fd-b226-87d5e5f7a2b5",
+ "from": "e3ed6863-4d78-4e0b-8a5f-1f485fda98d1",
+ "type": "edge",
+ "color": {
+ "2d": "#000000",
+ "isometric": "#000000"
+ },
+ "width": 2,
+ "dashed": false,
+ "endCap": "arrow"
+ },
+ {
+ "to": "fbfca042-a593-49ca-90db-a3a035c140f1",
+ "from": "d8100514-1122-458c-94f6-718ebcec16af",
+ "type": "edge",
+ "color": {
+ "2d": "#000000",
+ "isometric": "#000000"
+ },
+ "width": 2,
+ "dashed": false,
+ "endCap": "arrow"
+ },
+ {
+ "to": "f034bcfb-6a1b-4925-9b64-5c76c90f2c17",
+ "from": "fbfca042-a593-49ca-90db-a3a035c140f1",
+ "type": "edge",
+ "color": {
+ "2d": "#000000",
+ "isometric": "#000000"
+ },
+ "width": 2,
+ "dashed": false,
+ "endCap": "arrow"
+ },
+ {
+ "to": "e3ed6863-4d78-4e0b-8a5f-1f485fda98d1",
+ "from": "fbfca042-a593-49ca-90db-a3a035c140f1",
+ "type": "edge",
+ "color": {
+ "2d": "#000000",
+ "isometric": "#000000"
+ },
"width": 2,
"dashed": false,
"endCap": "arrow"
@@ -74,174 +202,204 @@
"icons": [],
"nodes": [
{
- "id": "37bccc85-a83f-4f1f-aafc-3eb78293aefb",
- "role": "primary",
- "type": "rds",
- "color": "#ececed",
- "engine": "mysql",
+ "id": "3c7ab31f-4fc7-47fd-b226-87d5e5f7a2b5",
+ "type": "ec2",
+ "color": {
+ "2d": "#d86613",
+ "isometric": "#ececed"
+ },
"mapPos": [
- 4.5,
- 3.75
+ 2.19,
+ 9.75
],
"region": "eu-west-1",
- "multiAZ": true,
- "accentColor": "#4286c5",
- "instanceSize": "large",
- "instanceType": "m4",
- "maximumCapacityUnit": 2,
- "minimumCapacityUnit": 2
+ "platform": "linux",
+ "accentColor": {
+ "2d": "#d86613",
+ "isometric": "#4286c5"
+ },
+ "transparent": false,
+ "instanceSize": "micro",
+ "instanceType": "t3",
+ "billingOptions": {
+ "type": "ri",
+ "utilization": 1,
+ "offeringClass": "standard",
+ "purchaseOption": "No Upfront",
+ "leaseContractLength": 12
+ }
},
{
- "id": "eb3470fe-23ba-4c07-9dcb-0b1cadcf9c85",
- "type": "s3",
+ "id": "29e8479c-67e7-4286-a060-d46529413fce",
+ "role": "primary",
+ "type": "rds",
"color": {
- "2d": "#3f8624",
- "isometric": "#4286c5"
+ "2d": "#3b48cc",
+ "isometric": "#ececed"
},
- "dataGb": 10,
+ "engine": "aurora-postgresql",
"mapPos": [
- -0.25,
- 4.25
+ 9,
+ 9.75
],
"region": "eu-west-1",
- "volumeType": "Standard",
+ "multiAZ": false,
"accentColor": {
"2d": "#ffffff",
"isometric": "#4286c5"
},
- "getAndOtherRequests": 0,
- "putCopyPostRequests": 0,
- "lifecycleTransitions": 0
+ "instanceSize": "medium",
+ "instanceType": "t3",
+ "maximumCapacityUnit": 2,
+ "minimumCapacityUnit": 2
},
{
- "id": "974a93a8-e564-48a6-9434-6e5946a75558",
- "type": "redshift",
- "color": "#80b1dc",
+ "id": "6f6bbbea-4ec0-40dc-ad2e-c81b4a56a42e",
+ "type": "sqs",
+ "color": {
+ "2d": "#cc2264",
+ "isometric": "#ececed"
+ },
"mapPos": [
- -2,
- 7
+ 8,
+ 15.25
],
"region": "eu-west-1",
- "nodeCount": 1,
+ "requests": 1,
+ "direction": "down",
+ "queueType": "standard",
"accentColor": {
"2d": "#ffffff",
- "isometric": "#ffffff"
- },
- "instanceSize": "large",
- "instanceType": "dc2"
+ "isometric": "#f4b934"
+ }
},
{
- "id": "75614915-5ccc-44b8-9b7f-9b049a413635",
- "type": "ec2",
+ "id": "e3ed6863-4d78-4e0b-8a5f-1f485fda98d1",
+ "lcu": 1,
+ "type": "elb",
"color": {
- "2d": "#d86613",
+ "2d": "#693cc5",
"isometric": "#ececed"
},
+ "dataGb": 10,
"mapPos": [
- 11,
- 8.75
+ 2.25,
+ 15.75
],
"region": "eu-west-1",
- "platform": "linux",
+ "elbType": "classic",
"accentColor": {
- "2d": "#d86613",
+ "2d": "#ffffff",
"isometric": "#4286c5"
- },
- "transparent": false,
- "instanceSize": "large",
- "instanceType": "t3",
- "billingOptions": {
- "type": "ri",
- "utilization": 1,
- "offeringClass": "standard",
- "purchaseOption": "No Upfront",
- "leaseContractLength": 12
}
},
{
- "id": "3695999f-958f-43bc-9f2d-1f6ed132a9b9",
- "type": "ec2",
+ "id": "d0814941-436f-49e0-81f2-8f682550ec2c",
+ "type": "dynamodb",
"color": {
- "2d": "#d86613",
+ "2d": "#3b48cc",
"isometric": "#ececed"
},
"mapPos": [
- 4,
- 9
+ 11.25,
+ 16.75
],
"region": "eu-west-1",
- "platform": "linux",
+ "datasetGb": 10,
+ "readUnits": 51,
+ "writeUnits": 5,
"accentColor": {
- "2d": "#d86613",
+ "2d": "#ffffff",
"isometric": "#4286c5"
},
- "transparent": false,
- "instanceSize": "large",
- "instanceType": "t2",
- "billingOptions": {
- "type": "si",
- "utilization": 1,
- "offeringClass": "standard",
- "purchaseOption": "No Upfront",
- "leaseContractLength": 12
- }
+ "capacityMode": "on-demand",
+ "readConsistency": "strong"
},
{
- "id": "e370b986-c558-452f-a988-3f92b6c72670",
- "type": "ec2",
+ "id": "f034bcfb-6a1b-4925-9b64-5c76c90f2c17",
+ "type": "s3",
"color": {
- "2d": "#d86613",
- "isometric": "#ececed"
+ "2d": "#3f8624",
+ "isometric": "#4286c5"
},
+ "dataGb": 10,
"mapPos": [
- 5,
- 9
+ 8,
+ 19.25
],
"region": "eu-west-1",
- "platform": "linux",
+ "volumeType": "Standard",
"accentColor": {
- "2d": "#d86613",
+ "2d": "#ffffff",
"isometric": "#4286c5"
},
- "transparent": false,
- "instanceSize": "large",
- "instanceType": "t2",
- "billingOptions": {
- "type": "si",
- "utilization": 1,
- "offeringClass": "standard",
- "purchaseOption": "No Upfront",
- "leaseContractLength": 12
+ "getAndOtherRequests": 0,
+ "putCopyPostRequests": 0,
+ "lifecycleTransitions": 0
+ },
+ {
+ "id": "fbfca042-a593-49ca-90db-a3a035c140f1",
+ "type": "cloudfront",
+ "color": {
+ "2d": "#693cc5",
+ "isometric": "#ececed"
+ },
+ "mapPos": [
+ 2.25,
+ 21.5
+ ],
+ "accentColor": {
+ "2d": "#ffffff",
+ "isometric": "#4286c5"
}
+ },
+ {
+ "id": "d8100514-1122-458c-94f6-718ebcec16af",
+ "type": "user",
+ "color": {
+ "2d": "#232f3e",
+ "isometric": "#000000"
+ },
+ "mapPos": [
+ 2.25,
+ 25
+ ],
+ "direction": "down"
}
],
"groups": [
{
- "id": "e8a7caf4-3075-49d4-b085-ff407dbfd7e9",
+ "id": "e37ba346-a434-4383-99ab-501b61f908c8",
"type": "asg",
- "color": "#f5b720",
+ "color": {
+ "2d": "#f5b720",
+ "isometric": "#f5b720"
+ },
"nodes": [
- "3695999f-958f-43bc-9f2d-1f6ed132a9b9",
- "e370b986-c558-452f-a988-3f92b6c72670"
+ "3c7ab31f-4fc7-47fd-b226-87d5e5f7a2b5"
],
"layout": "even",
"mapPos": [
- 4,
- 9
+ 0.75,
+ 9.75
],
"region": "eu-west-1",
"mapSize": [
- 2,
+ 3.88,
1
]
},
{
- "id": "3fa236bd-66f0-4034-b761-49f7e24e56c9",
- "name": "hashitalk-rds-sg",
+ "id": "a26a39ac-bfa9-4ba1-9d2b-f748bb0a7e11",
+ "name": "sgtest",
"type": "sg",
- "color": "#673ab7",
+ "color": {
+ "2d": "#3f51b5",
+ "isometric": "#3f51b5"
+ },
"nodes": [
- "37bccc85-a83f-4f1f-aafc-3eb78293aefb"
+ "e37ba346-a434-4383-99ab-501b61f908c8",
+ "3c7ab31f-4fc7-47fd-b226-87d5e5f7a2b5"
],
"shape": "dynamic",
"region": "eu-west-1",
@@ -250,14 +408,15 @@
"outboundRules": []
},
{
- "id": "e76c023e-611f-4479-8aae-eaf138786467",
- "name": "hashitalk-asg-sg",
+ "id": "0358dcc4-fa4a-4ea5-b00d-b67748e99c27",
+ "name": "sgelb",
"type": "sg",
- "color": "#2196f3",
+ "color": {
+ "2d": "#3f51b5",
+ "isometric": "#3f51b5"
+ },
"nodes": [
- "e8a7caf4-3075-49d4-b085-ff407dbfd7e9",
- "3695999f-958f-43bc-9f2d-1f6ed132a9b9",
- "e370b986-c558-452f-a988-3f92b6c72670"
+ "e3ed6863-4d78-4e0b-8a5f-1f485fda98d1"
],
"shape": "dynamic",
"region": "eu-west-1",
@@ -266,18 +425,38 @@
"outboundRules": []
},
{
- "id": "f3e4dffa-dd6e-4ce7-ae37-544663f6a439",
- "name": "hashitalk-vpc",
+ "id": "8bb8ba7e-fb88-4137-b614-ad1adef32101",
+ "name": "sgrds",
+ "type": "sg",
+ "color": {
+ "2d": "#9c27b0",
+ "isometric": "#9c27b0"
+ },
+ "nodes": [
+ "29e8479c-67e7-4286-a060-d46529413fce"
+ ],
+ "shape": "dynamic",
+ "region": "eu-west-1",
+ "padding": 1.5,
+ "inboundRules": [],
+ "outboundRules": []
+ },
+ {
+ "id": "b6b59004-dc97-4fd6-8d8c-424b54c3174b",
+ "name": "vpc-test",
"type": "vpc",
- "color": "#00bcd4",
+ "color": {
+ "2d": "#673ab7",
+ "isometric": "#673ab7"
+ },
"nodes": [
- "e8a7caf4-3075-49d4-b085-ff407dbfd7e9",
- "3695999f-958f-43bc-9f2d-1f6ed132a9b9",
- "e370b986-c558-452f-a988-3f92b6c72670",
- "37bccc85-a83f-4f1f-aafc-3eb78293aefb",
- "3fa236bd-66f0-4034-b761-49f7e24e56c9",
- "e76c023e-611f-4479-8aae-eaf138786467",
- "75614915-5ccc-44b8-9b7f-9b049a413635"
+ "e37ba346-a434-4383-99ab-501b61f908c8",
+ "3c7ab31f-4fc7-47fd-b226-87d5e5f7a2b5",
+ "a26a39ac-bfa9-4ba1-9d2b-f748bb0a7e11",
+ "e3ed6863-4d78-4e0b-8a5f-1f485fda98d1",
+ "0358dcc4-fa4a-4ea5-b00d-b67748e99c27",
+ "29e8479c-67e7-4286-a060-d46529413fce",
+ "8bb8ba7e-fb88-4137-b614-ad1adef32101"
],
"shape": "dynamic",
"region": "eu-west-1",
@@ -286,6 +465,7 @@
}
],
"images": [],
+ "linkKey": "XlAaasYL4pOa5f-Wzkt5CQ",
"version": 1,
"surfaces": [],
"shareDocs": false,
@@ -295,8 +475,8 @@
},
"readAccess": null,
"writeAccess": null,
- "createdAt": "2019-02-19T10:16:30.193Z",
- "updatedAt": "2019-11-04T14:09:15.791Z",
+ "createdAt": "2020-01-29T19:26:41.856Z",
+ "updatedAt": "2020-03-22T15:15:19.712Z",
"CreatorId": "354474ae-8248-45a8-a1ef-34de7c2a4d47",
"LastUserId": "354474ae-8248-45a8-a1ef-34de7c2a4d47"
}
diff --git a/test_fixtures/input_cloudcraft.json b/test_fixtures/input_cloudcraft.json
index 0735843..c567501 100644
--- a/test_fixtures/input_cloudcraft.json
+++ b/test_fixtures/input_cloudcraft.json
@@ -1,6 +1,6 @@
{
- "queryStringParameters":
- {
- "cloudcraft": "https://cloudcraft.co/api/blueprint/cd5294fb-0aab-4475-bbcc-196f12738eac?key=KVQAR8lIWQP6ycISkqGjIA"
+ "body": "",
+ "queryStringParameters": {
+ "cloudcraft": "https://app.cloudcraft.co/api/blueprint/5b27afb9-1cce-4bbc-a0aa-6bc5febc7ba0?key=ip02sXL2cYlsqSqjvm9zaQ"
}
}
diff --git a/test_fixtures/input_localfile.json b/test_fixtures/input_localfile.json
index 6460cae..71e9fc2 100644
--- a/test_fixtures/input_localfile.json
+++ b/test_fixtures/input_localfile.json
@@ -1,6 +1,6 @@
{
- "queryStringParameters":
- {
- "localfile": "test_fixtures/input/blueprint_small.json"
+ "body": "",
+ "queryStringParameters": {
+ "localfile": "test_fixtures/input/blueprint_cloudfront_lambda_apigw.json"
}
}
diff --git a/tests/cloudcraft_graph_test.py b/tests/cloudcraft_graph_test.py
new file mode 100644
index 0000000..9cc0f62
--- /dev/null
+++ b/tests/cloudcraft_graph_test.py
@@ -0,0 +1,68 @@
+# #!/usr/bin/env pytest
+#
+# from json import loads
+# from os import environ
+#
+# import pytest
+# from modulestf.cloudcraft.graph import populate_graph
+#
+# events = (
+# (
+# {
+# "AlarmType": "Unsupported alarm type",
+# "AWSAccountId": "000000000000",
+# "NewStateValue": "ALARM",
+# }
+# ),
+# (
+# {
+# "Records": [
+# {
+# "EventSource": "aws:sns",
+# "EventVersion": "1.0",
+# "EventSubscriptionArn": "arn:aws:sns:OMITTED:OMITTED:slack-notification:15405ea9-77dc-40d4-ba55-3f87997e5abb",
+# "Sns": {
+# "Type": "Notification",
+# "MessageId": "7c9f6458-2b6c-55f4-aee9-3222e6745e5a",
+# "TopicArn": "arn:aws:sns:OMITTED:OMITTED:slack-notification",
+# "Subject": "RDS Notification Message",
+# "Message": "{\"Event Source\":\"db-snapshot\",\"Event Time\":\"2019-12-23 14:10:24.176\",\"IdentifierLink\":\"https://console.aws.amazon.com/rds/home?region=OMITTED#snapshot:id=MY-TEST\"}",
+# "Timestamp": "2019-12-23T14:10:32.199Z",
+# "SignatureVersion": "1",
+# "Signature": "kPGKHJ9rWTgK0Lw/UJow59z4B6cjoPfbnYlwDCbO/Wk/IlPmqjQMib94+GqozIPw4F9QEwwzb7RyaQ4IC3/iBoPYM5shVXkxdl2I8a7fyYqer4QgJWCUijZ60HhYZ7m2WeO7NJei5/8ahtLtyIPoD+8rHNiGJ9JV2RXokdsgWzbXIhbsQ6xGmcbwNe5FkpiqTcw7/52uJUWyUUcRz1E/BZEC5kFAw///u8JlioRmIC95e0isq724+5hf3BEryab3HC+5+BlWMPGug4FQ8kS8rquiXLKTl/e4ubFqz1GEUjiNoNXHqOqm9Bq+WNcBrmKMGNGhzr6In8Kh4srr56oGfQ==",
+# "SigningCertUrl": "https://sns.OMITTED.amazonaws.com/SimpleNotificationService-6aad65c2f9911b05cd53efda11f913f9.pem",
+# "UnsubscribeUrl": "https://sns.OMITTED.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:OMITTED:OMITTED:slack-notification:15405ea9-77dc-40d4-ba55-3f87997e5abb",
+# "MessageAttributes": {}
+# }
+# }
+# ]
+# }
+# )
+# )
+#
+#
+# @pytest.fixture(scope='module', autouse=True)
+# def check_environment_variables():
+# required_environment_variables = ("AA")
+# missing_environment_variables = []
+# for k in required_environment_variables:
+# if k not in environ:
+# missing_environment_variables.append(k)
+#
+# if len(missing_environment_variables) > 0:
+# pytest.exit('Missing environment variables: {}'.format(", ".join(missing_environment_variables)))
+#
+#
+# @pytest.mark.parametrize("event", events)
+# def test_cloudcraft_graph(event):
+# # if 'Records' in event:
+# # response = notify_slack.lambda_handler(event, 'self-context')
+# #
+# # else:
+# file = open(event, 'r')
+# data = json.load(file)
+#
+# graph = populate_graph(data)
+#
+# # response = loads(response)
+# assert graph is not False
diff --git a/tests/pytest.ini b/tests/pytest.ini
new file mode 100644
index 0000000..89c5c0d
--- /dev/null
+++ b/tests/pytest.ini
@@ -0,0 +1,5 @@
+[pytest]
+addopts = --disable-pytest-warnings
+env =
+ AA=something
+ IS_LOCAL=1
diff --git a/tests/pytest.ini.sample b/tests/pytest.ini.sample
new file mode 100644
index 0000000..527a004
--- /dev/null
+++ b/tests/pytest.ini.sample
@@ -0,0 +1,4 @@
+[pytest]
+addopts = --disable-pytest-warnings
+env =
+ AA=something
diff --git a/tests/requirements.txt b/tests/requirements.txt
new file mode 100644
index 0000000..cf01492
--- /dev/null
+++ b/tests/requirements.txt
@@ -0,0 +1,4 @@
+boto3
+
+pytest
+pytest-env
diff --git a/tests/test_dynamic_params.py b/tests/test_dynamic_params.py
new file mode 100644
index 0000000..9652d8c
--- /dev/null
+++ b/tests/test_dynamic_params.py
@@ -0,0 +1,85 @@
+import re
+from pprint import pprint
+
+dynamic_params = {
+ 'key': 'dependency.a3bfbbf.outputs.security_group_id',
+ 'egress_with_source_security_group_id': [],
+ 'ingress_with_source_security_group_id': [
+ {
+ 'description': 'All TCP from sg2',
+ 'from_port': '0',
+ 'protocol': 6,
+ 'source_security_group_id': 'dependency.a3bfbb.outputs.security_group_id',
+ 'to_port': '65535'
+ },
+ {
+ 'description': 'All TCP from sg3',
+ 'from_port': '0',
+ 'protocol': 6,
+ 'source_security_group_id': '[dependency.a3bfbb.outputs.security_group_id] + dependency.abcdef.outputs.security_group_id',
+ 'to_port': '65535'
+ }
+ ]
+}
+
+dirs = {
+ "a3bfbb": "sg-111",
+ "abcdef": "sg-999"
+}
+
+
+def recursive_replace_dependency(input):
+ # check whether it's a dict, list, tuple, or scalar
+ if isinstance(input, dict):
+ items = input.items()
+ elif isinstance(input, (list, tuple)):
+ items = enumerate(input)
+ else:
+
+ # just a value, replace and return
+ found = re.findall(r"dependency\.([^.]+)", str(input))
+ for f in found:
+ input = re.sub(f, dirs.get(f, f), input)
+
+ return input
+
+ # now call itself for every value and replace in the input
+ for key, value in items:
+ input[key] = recursive_replace_dependency(value)
+ return input
+
+
+pprint(dynamic_params)
+
+if dynamic_params:
+ for k, v in dynamic_params.items():
+
+ dynamic_params[k] = recursive_replace_dependency(v)
+ pprint(dynamic_params[k])
+
+pprint("FINAL = ")
+pprint(dynamic_params)
+
+pprint("")
+pprint("")
+pprint("")
+
+####
+#
+# import hcl
+# import json
+#
+# # hcl_json = hcl.loads(json.dumps(dynamic_params))
+#
+# # hcl_json_input = "{\"key\": \"var.value\"}"
+# hcl_json_input = "{\"key\": { \"key1\" : \"value\" } }"
+# hcl_json = hcl.loads(hcl_json_input)
+#
+# # val2 = hcl.dumps(value)
+#
+# # with open('file.hcl', 'r') as fp:
+# # obj = hcl.load(fp)
+#
+# result = json.dumps(hcl_json)
+# print(hcl_json)
+# print(result)