diff --git a/.github/workflows/tg.yml b/.github/workflows/tg.yml new file mode 100644 index 0000000..e4b054c --- /dev/null +++ b/.github/workflows/tg.yml @@ -0,0 +1,58 @@ +name: 'Terragrunt/non-prod/eu-west-1/dev/apply' + +on: + pull_request: + workflow_dispatch: + inputs: + env: + type: choice + description: "Select env to where need to deploy" + required: true + default: "dev" + options: + - dev + state: + type: choice + description: "Choose apply or destroy infra" + required: true + default: "apply" + options: + - apply + - destroy + region: + type: choice + description: "Choose infra region" + required: true + default: "eu-west-1" + options: + - eu-west-1 + +jobs: + terragrunt: + name: 'Terragrunt' + runs-on: ubuntu-latest + environment: "aws-eks-dev" + env: + TF_VERSION: '1.5.7' + TG_VERSION: 'v0.51.6' + ACCOUNT_NAME: 'non-prod' + permissions: + id-token: write + contents: read + steps: + - name: 'Checkout' + uses: actions/checkout@v3 + + - name: Configure AWS credentials for account + uses: aws-actions/configure-aws-credentials@v2 + with: + role-to-assume: ${{ secrets.AWS_ASSUME_ROLE }} + aws-region: ${{ github.event.inputs.region }} + + - name: Terragrunt setup and apply + uses: gruntwork-io/terragrunt-action@v1 + with: + tf_version: ${{ env.TF_VERSION }} + tg_version: ${{ env.TG_VERSION }} + tg_dir: ./terragrunt/${{ env.ACCOUNT_NAME }}/${{ github.event.inputs.region }}/${{ github.event.inputs.env }} + tg_command: "${{ github.event.inputs.state }}" diff --git a/terraform/eks/dev-eu-west-1/config.s3.tfbackend b/eks/dev-eu-west-1/config.s3.tfbackend similarity index 100% rename from terraform/eks/dev-eu-west-1/config.s3.tfbackend rename to eks/dev-eu-west-1/config.s3.tfbackend diff --git a/terraform/eks/dev-eu-west-1/terraform.tfvars b/eks/dev-eu-west-1/terraform.tfvars similarity index 100% rename from terraform/eks/dev-eu-west-1/terraform.tfvars rename to eks/dev-eu-west-1/terraform.tfvars diff --git a/terraform/eks/main.tf b/eks/main.tf similarity index 100% rename from terraform/eks/main.tf rename to eks/main.tf diff --git a/terraform/eks/outputs.tf b/eks/outputs.tf similarity index 100% rename from terraform/eks/outputs.tf rename to eks/outputs.tf diff --git a/terraform/eks/provider.tf b/eks/provider.tf similarity index 100% rename from terraform/eks/provider.tf rename to eks/provider.tf diff --git a/terraform/eks/variables.tf b/eks/variables.tf similarity index 100% rename from terraform/eks/variables.tf rename to eks/variables.tf diff --git a/terraform/modules/eks-cluster/main.tf b/modules/eks-cluster/main.tf similarity index 100% rename from terraform/modules/eks-cluster/main.tf rename to modules/eks-cluster/main.tf diff --git a/terraform/modules/eks-cluster/outputs.tf b/modules/eks-cluster/outputs.tf similarity index 100% rename from terraform/modules/eks-cluster/outputs.tf rename to modules/eks-cluster/outputs.tf diff --git a/terraform/modules/eks-cluster/variable.tf b/modules/eks-cluster/variable.tf similarity index 100% rename from terraform/modules/eks-cluster/variable.tf rename to modules/eks-cluster/variable.tf diff --git a/terraform/modules/eks-cluster/version.tf b/modules/eks-cluster/version.tf similarity index 100% rename from terraform/modules/eks-cluster/version.tf rename to modules/eks-cluster/version.tf diff --git a/terraform/modules/eks-idp/main.tf b/modules/eks-idp/main.tf similarity index 100% rename from terraform/modules/eks-idp/main.tf rename to modules/eks-idp/main.tf diff --git a/terraform/modules/eks-idp/outputs.tf b/modules/eks-idp/outputs.tf similarity index 100% rename from terraform/modules/eks-idp/outputs.tf rename to modules/eks-idp/outputs.tf diff --git a/terraform/modules/eks-idp/variables.tf b/modules/eks-idp/variables.tf similarity index 100% rename from terraform/modules/eks-idp/variables.tf rename to modules/eks-idp/variables.tf diff --git a/terraform/modules/eks-idp/version.tf b/modules/eks-idp/version.tf similarity index 100% rename from terraform/modules/eks-idp/version.tf rename to modules/eks-idp/version.tf diff --git a/terraform/modules/eks-lb-controller/main.tf b/modules/eks-lb-controller/main.tf similarity index 100% rename from terraform/modules/eks-lb-controller/main.tf rename to modules/eks-lb-controller/main.tf diff --git a/terraform/modules/eks-lb-controller/outputs.tf b/modules/eks-lb-controller/outputs.tf similarity index 100% rename from terraform/modules/eks-lb-controller/outputs.tf rename to modules/eks-lb-controller/outputs.tf diff --git a/terraform/modules/eks-lb-controller/variables.tf b/modules/eks-lb-controller/variables.tf similarity index 100% rename from terraform/modules/eks-lb-controller/variables.tf rename to modules/eks-lb-controller/variables.tf diff --git a/terraform/modules/eks-lb-controller/version.tf b/modules/eks-lb-controller/version.tf similarity index 100% rename from terraform/modules/eks-lb-controller/version.tf rename to modules/eks-lb-controller/version.tf diff --git a/terraform/modules/eks-simple-node-group/main.tf b/modules/eks-simple-node-group/main.tf similarity index 100% rename from terraform/modules/eks-simple-node-group/main.tf rename to modules/eks-simple-node-group/main.tf diff --git a/terraform/modules/eks-simple-node-group/outputs.tf b/modules/eks-simple-node-group/outputs.tf similarity index 100% rename from terraform/modules/eks-simple-node-group/outputs.tf rename to modules/eks-simple-node-group/outputs.tf diff --git a/terraform/modules/eks-simple-node-group/variables.tf b/modules/eks-simple-node-group/variables.tf similarity index 100% rename from terraform/modules/eks-simple-node-group/variables.tf rename to modules/eks-simple-node-group/variables.tf diff --git a/terraform/modules/eks-simple-node-group/version.tf b/modules/eks-simple-node-group/version.tf similarity index 100% rename from terraform/modules/eks-simple-node-group/version.tf rename to modules/eks-simple-node-group/version.tf diff --git a/terraform/modules/vpc/main.tf b/modules/vpc/main.tf similarity index 100% rename from terraform/modules/vpc/main.tf rename to modules/vpc/main.tf diff --git a/terraform/modules/vpc/outputs.tf b/modules/vpc/outputs.tf similarity index 100% rename from terraform/modules/vpc/outputs.tf rename to modules/vpc/outputs.tf diff --git a/terraform/modules/vpc/variables.tf b/modules/vpc/variables.tf similarity index 100% rename from terraform/modules/vpc/variables.tf rename to modules/vpc/variables.tf diff --git a/terraform/modules/vpc/version.tf b/modules/vpc/version.tf similarity index 100% rename from terraform/modules/vpc/version.tf rename to modules/vpc/version.tf diff --git a/terraform/vpc/dev-eu-west-1/config.s3.tfbackend b/terraform/vpc/dev-eu-west-1/config.s3.tfbackend deleted file mode 100644 index c87c7da..0000000 --- a/terraform/vpc/dev-eu-west-1/config.s3.tfbackend +++ /dev/null @@ -1,3 +0,0 @@ -region = "eu-west-1" -bucket = "asmt-aws-terraform-state-bucket-270930892402" -key = "dev/eks/vpc.tfstate" diff --git a/terraform/vpc/dev-eu-west-1/terraform.tfvars b/terraform/vpc/dev-eu-west-1/terraform.tfvars deleted file mode 100644 index 6f8e867..0000000 --- a/terraform/vpc/dev-eu-west-1/terraform.tfvars +++ /dev/null @@ -1,13 +0,0 @@ -### TAGS ### -tag_product = "asmt" -tag_contact = "Mykhail Poda" -tag_cost_code = "00001" -tag_environment = "dev" -tag_provisioner = "github" - -### VPC ### -vpc_cidr = "10.0.0.0/16" -region = "eu-west-1" -azs = ["eu-west-1a", "eu-west-1b", "eu-west-1c"] -public_subnet_cidrs = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"] -private_subnet_cidrs = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"] diff --git a/terraform/vpc/outputs.tf b/terragrunt/_envcommon/eks-cluster.hcl similarity index 100% rename from terraform/vpc/outputs.tf rename to terragrunt/_envcommon/eks-cluster.hcl diff --git a/terragrunt/_envcommon/eks-idp.hcl b/terragrunt/_envcommon/eks-idp.hcl new file mode 100644 index 0000000..e69de29 diff --git a/terragrunt/_envcommon/eks-lb-controller.hcl b/terragrunt/_envcommon/eks-lb-controller.hcl new file mode 100644 index 0000000..e69de29 diff --git a/terragrunt/_envcommon/eks-simple-node-group.hcl b/terragrunt/_envcommon/eks-simple-node-group.hcl new file mode 100644 index 0000000..e69de29 diff --git a/terragrunt/_envcommon/vpc.hcl b/terragrunt/_envcommon/vpc.hcl new file mode 100644 index 0000000..51f9817 --- /dev/null +++ b/terragrunt/_envcommon/vpc.hcl @@ -0,0 +1,23 @@ +locals { + account_vars = read_terragrunt_config(find_in_parent_folders("account.hcl")) + region_vars = read_terragrunt_config(find_in_parent_folders("region.hcl")) + environment_vars = read_terragrunt_config(find_in_parent_folders("env.hcl")) + base_source_url = "../../modules/vpc" +} + +inputs = { + vpc_cidr = "10.0.0.0/16" + azs = ["eu-west-1a", "eu-west-1b", "eu-west-1c"] + public_subnet_cidrs = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"] + private_subnet_cidrs = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"] + + product = local.account_vars.locals.product + environment = local.environment_vars.locals.environment + + tags = { + Contact = local.account_vars.locals.contact + Cost_Code = local.account_vars.locals.cost_code + Environment = local.environment_vars.locals.environment + Provisioner = local.account_vars.locals.provisioner + } +} diff --git a/terragrunt/non-prod/account.hcl b/terragrunt/non-prod/account.hcl new file mode 100644 index 0000000..735567a --- /dev/null +++ b/terragrunt/non-prod/account.hcl @@ -0,0 +1,6 @@ +locals { + product = "asmt" + contact = "Mykhail Poda" + cost_code = "00001" + provisioner = "github" +} diff --git a/terragrunt/non-prod/eu-west-1/dev/eks-cluster/terragrunt.hcl b/terragrunt/non-prod/eu-west-1/dev/eks-cluster/terragrunt.hcl new file mode 100644 index 0000000..f7f11d8 --- /dev/null +++ b/terragrunt/non-prod/eu-west-1/dev/eks-cluster/terragrunt.hcl @@ -0,0 +1,12 @@ +#terraform { +# source = "${include.envcommon.locals.base_source_url}?version=3.14.2" +#} +# +#include "root" { +# path = find_in_parent_folders() +#} +# +#include "envcommon" { +# path = "${dirname(find_in_parent_folders())}/_envcommon/vpc.hcl" +# expose = true +#} diff --git a/terragrunt/non-prod/eu-west-1/dev/eks-idp/terragrunt.hcl b/terragrunt/non-prod/eu-west-1/dev/eks-idp/terragrunt.hcl new file mode 100644 index 0000000..f7f11d8 --- /dev/null +++ b/terragrunt/non-prod/eu-west-1/dev/eks-idp/terragrunt.hcl @@ -0,0 +1,12 @@ +#terraform { +# source = "${include.envcommon.locals.base_source_url}?version=3.14.2" +#} +# +#include "root" { +# path = find_in_parent_folders() +#} +# +#include "envcommon" { +# path = "${dirname(find_in_parent_folders())}/_envcommon/vpc.hcl" +# expose = true +#} diff --git a/terragrunt/non-prod/eu-west-1/dev/eks-lb-controller/terragrunt.hcl b/terragrunt/non-prod/eu-west-1/dev/eks-lb-controller/terragrunt.hcl new file mode 100644 index 0000000..f7f11d8 --- /dev/null +++ b/terragrunt/non-prod/eu-west-1/dev/eks-lb-controller/terragrunt.hcl @@ -0,0 +1,12 @@ +#terraform { +# source = "${include.envcommon.locals.base_source_url}?version=3.14.2" +#} +# +#include "root" { +# path = find_in_parent_folders() +#} +# +#include "envcommon" { +# path = "${dirname(find_in_parent_folders())}/_envcommon/vpc.hcl" +# expose = true +#} diff --git a/terragrunt/non-prod/eu-west-1/dev/eks-simple-node-group/terragrunt.hcl b/terragrunt/non-prod/eu-west-1/dev/eks-simple-node-group/terragrunt.hcl new file mode 100644 index 0000000..e69de29 diff --git a/terragrunt/non-prod/eu-west-1/dev/env.hcl b/terragrunt/non-prod/eu-west-1/dev/env.hcl new file mode 100644 index 0000000..33d8b31 --- /dev/null +++ b/terragrunt/non-prod/eu-west-1/dev/env.hcl @@ -0,0 +1,3 @@ +locals { + environment = "dev" +} diff --git a/terragrunt/non-prod/eu-west-1/dev/vpc/terragrunt.hcl b/terragrunt/non-prod/eu-west-1/dev/vpc/terragrunt.hcl new file mode 100644 index 0000000..152427c --- /dev/null +++ b/terragrunt/non-prod/eu-west-1/dev/vpc/terragrunt.hcl @@ -0,0 +1,12 @@ +terraform { + source = include.envcommon.locals.base_source_url +} + +include "root" { + path = find_in_parent_folders() +} + +include "envcommon" { + path = "${dirname(find_in_parent_folders())}/_envcommon/vpc.hcl" + expose = true +} diff --git a/terragrunt/non-prod/eu-west-1/region.hcl b/terragrunt/non-prod/eu-west-1/region.hcl new file mode 100644 index 0000000..12e4d00 --- /dev/null +++ b/terragrunt/non-prod/eu-west-1/region.hcl @@ -0,0 +1,3 @@ +locals { + aws_region = "eu-west-1" +} diff --git a/terragrunt/terragrunt.hcl b/terragrunt/terragrunt.hcl new file mode 100644 index 0000000..eb20e8c --- /dev/null +++ b/terragrunt/terragrunt.hcl @@ -0,0 +1,33 @@ +locals { + account_vars = read_terragrunt_config(find_in_parent_folders("account.hcl")) + region_vars = read_terragrunt_config(find_in_parent_folders("region.hcl")) + environment_vars = read_terragrunt_config(find_in_parent_folders("env.hcl")) + + aws_region = local.region_vars.locals.aws_region +} + +generate "provider" { + path = "provider.tf" + if_exists = "overwrite_terragrunt" + contents = "provider \"aws\" {}" +} + +remote_state { + backend = "s3" + config = { + encrypt = true + bucket = "asmt-aws-terraform-state-bucket-${get_aws_account_id()}" + key = "${path_relative_to_include()}/terraform.tfstate" + region = local.aws_region + } + generate = { + path = "backend.tf" + if_exists = "overwrite_terragrunt" + } +} + +inputs = merge( + local.account_vars.locals, + local.region_vars.locals, + local.environment_vars.locals +) diff --git a/terraform/vpc/main.tf b/vpc/main.tf similarity index 100% rename from terraform/vpc/main.tf rename to vpc/main.tf diff --git a/vpc/outputs.tf b/vpc/outputs.tf new file mode 100644 index 0000000..e69de29 diff --git a/terraform/vpc/providers.tf b/vpc/providers.tf similarity index 100% rename from terraform/vpc/providers.tf rename to vpc/providers.tf diff --git a/terraform/vpc/variables.tf b/vpc/variables.tf similarity index 100% rename from terraform/vpc/variables.tf rename to vpc/variables.tf