From b882c46a57515bc9932f06ed4129dfd6e4d10546 Mon Sep 17 00:00:00 2001 From: Javier Carrera Date: Wed, 7 Jun 2023 08:56:00 +0200 Subject: [PATCH] VSDSCP-212 Initial Commit --- .gitignore | 9 +++ README.md | 0 eu/prelive/.terraform-version | 1 + eu/prelive/Jenkinsfile | 101 +++++++++++++++++++++++++++++ eu/prelive/backend.tf | 10 +++ eu/prelive/module.tf | 12 ++++ eu/prelive/provider.tf | 8 +++ eu/prelive/terraform.tfvars | 15 +++++ eu/prelive/variables.tf | 32 +++++++++ modules/aws/Jenkinsfile | 91 ++++++++++++++++++++++++++ modules/aws/dynatrace/variables.tf | 14 ++++ 11 files changed, 293 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 eu/prelive/.terraform-version create mode 100644 eu/prelive/Jenkinsfile create mode 100644 eu/prelive/backend.tf create mode 100644 eu/prelive/module.tf create mode 100644 eu/prelive/provider.tf create mode 100644 eu/prelive/terraform.tfvars create mode 100644 eu/prelive/variables.tf create mode 100644 modules/aws/Jenkinsfile create mode 100644 modules/aws/dynatrace/variables.tf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..734662e --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +.terraform +.terraform.lock.hcl +*.tfstate +*.tfstate.backup +id_rsa +id_rsa.pub +.idea +.DS_Store +.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/eu/prelive/.terraform-version b/eu/prelive/.terraform-version new file mode 100644 index 0000000..e516bb9 --- /dev/null +++ b/eu/prelive/.terraform-version @@ -0,0 +1 @@ +1.4.5 diff --git a/eu/prelive/Jenkinsfile b/eu/prelive/Jenkinsfile new file mode 100644 index 0000000..43beaab --- /dev/null +++ b/eu/prelive/Jenkinsfile @@ -0,0 +1,101 @@ +String release = "${env.RELEASE_VERSION ?: "SNAPSHOT"}" +String tag = "modules-aws-$release" + +def modules_paths = [ + "eu/prelive", +] + +def terraform_check(paths) { + paths.each { path -> + sh("terraform -chdir=${path} init -backend=false") + sh("terraform -chdir=${path} fmt -recursive --check") + } +} + + +pipeline { + agent { + node { + label 'vsds-terraform' + } + } + + environment { + GIT_SSH_COMMAND = "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" + } + + options { + timestamps() + ansiColor('xterm') + disableConcurrentBuilds(abortPrevious: true) + timeout(time: 1, unit: 'HOURS') + } + + stages { + stage("Check Tag") { + when { expression { !release.equals("SNAPSHOT") } } + steps { + sshagent(credentials: ['sofa-user-automation']) { + script { + env.PLAN_STATUS = sh(script: """ + | if [[ "\$(git ls-remote origin 2>/dev/null | grep 'refs/tags/$tag\$')" ]]; then + | echo "Release $tag exists" + | exit 1 + | fi + """.stripMargin('| '), returnStatus: true) + + if (env.PLAN_STATUS == "1") { + currentBuild.result = "FAILURE" + error('Aborting the build.') + return + } + } + } + } + } + + stage('Terraform validate') { + steps { + container('terraform') { + sshagent(credentials: ['sofa-user-automation']) { + script { + terraform_check(modules_paths) + } + } + } + } + } + + stage('Terraform plan') { + steps { + container('terraform') { + sshagent(credentials: ['sofa-user-automation']) { + sh 'terraform plan' + } + } + } + } + + stage('Create tag') { + when { expression { !release.equals("SNAPSHOT") } } + steps { + sshagent(credentials: ['sofa-user-automation']) { + sh """ + | git tag $tag + | git push origin $tag + """.stripMargin('| ') + } + } + } + } + + post { + always { + cleanWs() + script { + currentBuild.result = currentBuild.result ?: 'SUCCESS' + notifyBitbucket(projectKey: 'modules') + } + } + } +} \ No newline at end of file diff --git a/eu/prelive/backend.tf b/eu/prelive/backend.tf new file mode 100644 index 0000000..8a13a2a --- /dev/null +++ b/eu/prelive/backend.tf @@ -0,0 +1,10 @@ +terraform { + backend "s3" { + bucket = "acdc-eu-west-1-prelive-tfstate" + key = "acdc/dynatrace/bootstrap.tfstate" + region = "eu-west-1" + encrypt = true + kms_key_id = "arn:aws:kms:eu-west-1:248567303878:key/8d860956-4033-4782-ab30-6cb84b31964e" #AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, kms-key +# dynamodb_table = "acdc-eu-west-1-prelive-tfstate-lock" + } +} \ No newline at end of file diff --git a/eu/prelive/module.tf b/eu/prelive/module.tf new file mode 100644 index 0000000..ffb778a --- /dev/null +++ b/eu/prelive/module.tf @@ -0,0 +1,12 @@ +module "s3-dynatrace" { + source = "git::ssh://git@collaboration.msi.audi.com:4444/vsdsinf/vsds-terraform-modules.git//modules/aws/marketplace/s3?ref=1.4.3" + + name = format("%s-%s-%s-dynatrace", var.stack, var.aws_region, var.stage) + kms_key_arn = var.kms["s3"] + tags = merge( + var.tags, + { + Namespace = "platform" + }, + ) +} diff --git a/eu/prelive/provider.tf b/eu/prelive/provider.tf new file mode 100644 index 0000000..6844c36 --- /dev/null +++ b/eu/prelive/provider.tf @@ -0,0 +1,8 @@ +terraform { + required_providers { + dynatrace = { + version = "1.31.0" + source = "dynatrace-oss/dynatrace" + } + } +} \ No newline at end of file diff --git a/eu/prelive/terraform.tfvars b/eu/prelive/terraform.tfvars new file mode 100644 index 0000000..f1a6d80 --- /dev/null +++ b/eu/prelive/terraform.tfvars @@ -0,0 +1,15 @@ +# AUTO GENERATED, DON'T MODIFY + +stack = "acdc" +stage = "prelive" +name = "dynatrace-prelive" + +aws_region = "eu-west-1" + +tags = { + "Managed_By" : "NTT_team" # +} + +kms = { + "s3" = "arn:aws:kms:eu-west-1:248567303878:key/8d860956-4033-4782-ab30-6cb84b31964e" +} \ No newline at end of file diff --git a/eu/prelive/variables.tf b/eu/prelive/variables.tf new file mode 100644 index 0000000..9654baa --- /dev/null +++ b/eu/prelive/variables.tf @@ -0,0 +1,32 @@ +# AUTO GENERATED, DON'T MODIFY + +variable "aws_region" { + description = "The aws region to deploy in" +} + +variable "name" { + description = "Name to be used on all the resources as identifier" + type = string + default = "" +} + +variable "stack" { + description = "Environment stack" + default = "vsds" +} + +variable "stage" { + description = "Environment stage" +} + +variable "tags" { + description = "A map of tags to add to all resources" + type = map(string) + default = {} +} + +variable "kms" { + description = "A map of kms keys to be used for any resources." + type = map(string) + default = {} +} \ No newline at end of file diff --git a/modules/aws/Jenkinsfile b/modules/aws/Jenkinsfile new file mode 100644 index 0000000..ac0579c --- /dev/null +++ b/modules/aws/Jenkinsfile @@ -0,0 +1,91 @@ +String release = "${env.RELEASE_VERSION ?: "SNAPSHOT"}" +String tag = "modules-aws-$release" + +def modules_paths = [ + "modules/aws/dynatrace", +] + +def terraform_check(paths) { + paths.each { path -> + sh("terraform -chdir=${path} init -backend=false") + sh("terraform -chdir=${path} fmt -recursive --check") + } +} + + +pipeline { + agent { + node { + label 'vsds-terraform' + } + } + + environment { + GIT_SSH_COMMAND = "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" + } + + options { + timestamps() + ansiColor('xterm') + disableConcurrentBuilds(abortPrevious: true) + timeout(time: 1, unit: 'HOURS') + } + + stages { + stage("Check Tag") { + when { expression { !release.equals("SNAPSHOT") } } + steps { + sshagent(credentials: ['sofa-user-automation']) { + script { + env.PLAN_STATUS = sh(script: """ + | if [[ "\$(git ls-remote origin 2>/dev/null | grep 'refs/tags/$tag\$')" ]]; then + | echo "Release $tag exists" + | exit 1 + | fi + """.stripMargin('| '), returnStatus: true) + + if (env.PLAN_STATUS == "1") { + currentBuild.result = "FAILURE" + error('Aborting the build.') + return + } + } + } + } + } + + stage('Terraform validate') { + steps { + container('terraform') { + sshagent(credentials: ['sofa-user-automation']) { + script { + terraform_check(modules_paths) + } + } + } + } + } + + stage('Create tag') { + when { expression { !release.equals("SNAPSHOT") } } + steps { + sshagent(credentials: ['sofa-user-automation']) { + sh """ + | git tag $tag + | git push origin $tag + """.stripMargin('| ') + } + } + } + } + + post { + always { + cleanWs() + script { + currentBuild.result = currentBuild.result ?: 'SUCCESS' + notifyBitbucket(projectKey: 'modules') + } + } + } +} \ No newline at end of file diff --git a/modules/aws/dynatrace/variables.tf b/modules/aws/dynatrace/variables.tf new file mode 100644 index 0000000..ce02433 --- /dev/null +++ b/modules/aws/dynatrace/variables.tf @@ -0,0 +1,14 @@ +variable "name" { + description = "Name to be used on all the resources as identifier" + type = string +} + +variable "stage" { + description = "Environment stage" + type = string +} + +variable "region" { + type = string + description = "The aws region to deploy in" +} \ No newline at end of file