From 8ea2a11d0963ac5f975978600e1814165807821f Mon Sep 17 00:00:00 2001 From: Charlie Cumber Date: Thu, 17 Jun 2021 18:07:28 +0100 Subject: [PATCH 1/7] Part 1: Deploying with terraform locally --- .dockerignore | 37 ++++++++++++++++++++++- .gitignore | 37 ++++++++++++++++++++++- .terraform.lock.hcl | 21 +++++++++++++ main.tf | 72 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 165 insertions(+), 2 deletions(-) create mode 100644 .terraform.lock.hcl create mode 100644 main.tf diff --git a/.dockerignore b/.dockerignore index 4b62b7f..004134c 100644 --- a/.dockerignore +++ b/.dockerignore @@ -9,4 +9,39 @@ __pycache__ app.log Dockerfile chromedriver.exe -Vagrantfile \ No newline at end of file +Vagrantfile + +# Local .terraform directories +**/.terraform/* + +# .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 + +# Include override files you do wish to add to version control using negated pattern +# +# !example_override.tf + +# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan +# example: *tfplan* + +# Ignore CLI configuration files +.terraformrc +terraform.rc \ No newline at end of file diff --git a/.gitignore b/.gitignore index 909edfa..77f2ff6 100644 --- a/.gitignore +++ b/.gitignore @@ -125,4 +125,39 @@ chromedriver.exe ### vagrant .vagrant -app.log \ No newline at end of file +app.log + +# Local .terraform directories +**/.terraform/* + +# .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 + +# Include override files you do wish to add to version control using negated pattern +# +# !example_override.tf + +# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan +# example: *tfplan* + +# Ignore CLI configuration files +.terraformrc +terraform.rc \ No newline at end of file diff --git a/.terraform.lock.hcl b/.terraform.lock.hcl new file mode 100644 index 0000000..a63b1e6 --- /dev/null +++ b/.terraform.lock.hcl @@ -0,0 +1,21 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/azurerm" { + version = "2.63.0" + constraints = ">= 2.49.0" + hashes = [ + "h1:MIBLWidFqvbwUIW94QS+/Y1tNJYfSwFr4t28I84Okvs=", + "zh:050254861e4481c905945dc1ba0aa222373ae92d549a0168b7a271260497ca5b", + "zh:053f7de4ff0c6f3878e70c31258b5e23fc63905ef9f31d49440746b4a43a1971", + "zh:1afe053ff2807e5c78e8c95d79a9a1fda809836ec85c68533b109ce49eeb55ae", + "zh:2cad35e7bbbd02a4aefa369235ef4a5a563ff3dee05b6bf78b40aece205a8902", + "zh:3749ab4bad6108b6b0718c3cab05ff72b61e3eebaf37b5b4017ae938499f2b45", + "zh:4b6370d88fff833a33104b1c70df1992f7fdf2cdb21ae0719dbd9d0a3388ee55", + "zh:9e0f1f0432b61fa89d8358f869b405b539ffe63951b384b5d36456213a881e98", + "zh:b1de4dc52af843a265a7f7f5190a529bc70e77a684b10c855b9cf39b2c1bdcf2", + "zh:d9b6ac7b6a27c367a12bf86ce09bc4d1661de796f371c2da2c31e20ac0dce4a9", + "zh:f95256d93f41d1e6252bc090b2a2ababcb9ea7be9fe45706bccb21b859c3c04f", + "zh:fae8bb6f824f38088ce06f64dd0bbf506f70cc8ffdffd6b8a6ba6a678efcc596", + ] +} diff --git a/main.tf b/main.tf new file mode 100644 index 0000000..bbd5c6b --- /dev/null +++ b/main.tf @@ -0,0 +1,72 @@ +terraform { + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = ">= 2.49" + } + } +} +provider "azurerm" { + features {} +} + +data "azurerm_resource_group" "main" { + name = "SoftwirePilot_CharlieCumber_ProjectExercise" +} + +resource "azurerm_app_service_plan" "main" { + name = "terraformed-asp" + location = data.azurerm_resource_group.main.location + resource_group_name = data.azurerm_resource_group.main.name + kind = "Linux" + reserved = true + sku { + tier = "Basic" + size = "B1" + } +} + +resource "azurerm_cosmosdb_account" "main" { + name = "charlie-devops-cosmosdb-account" + resource_group_name = data.azurerm_resource_group.main.name + kind = "MongoDB" + location = data.azurerm_resource_group.main.location + geo_location { + location = data.azurerm_resource_group.main.location + failover_priority = 0 + } + consistency_policy { + consistency_level = "Session" + } + offer_type = "Standard" + capabilities { + name = "EnableServerless" + } + capabilities { + name = "EnableMongo" + } + lifecycle { + prevent_destroy = true + } +} + +resource "azurerm_cosmosdb_mongo_database" "main" { + name = "charlie-devops-cosmos-mongo-db" + resource_group_name = data.azurerm_resource_group.main.name + account_name = azurerm_cosmosdb_account.main.name +} + +resource "azurerm_app_service" "main" { + name = "charlie-devops-to-do-terraform" + location = data.azurerm_resource_group.main.location + resource_group_name = data.azurerm_resource_group.main.name + app_service_plan_id = azurerm_app_service_plan.main.id + site_config { + app_command_line = "" + linux_fx_version = "DOCKER|charliecumber/todo-app:latest" + } + app_settings = { + "DOCKER_REGISTRY_SERVER_URL" = "https://index.docker.io" + "MONGODB_CONNECTION_STRING" = "mongodb://${azurerm_cosmosdb_account.main.name}:${azurerm_cosmosdb_account.main.primary_key}@${azurerm_cosmosdb_account.main.name}.mongo.cosmos.azure.com:10255" + } +} From cc707d26eaa9254d669ef6a5595299b2edbe24c2 Mon Sep 17 00:00:00 2001 From: Charlie Cumber Date: Fri, 2 Jul 2021 15:14:45 +0100 Subject: [PATCH 2/7] Webhook updated --- .travis.yml | 4 ++-- README.md | 2 +- main.tf | 15 +++++++++------ variables.tf | 21 +++++++++++++++++++++ 4 files changed, 33 insertions(+), 9 deletions(-) create mode 100644 variables.tf diff --git a/.travis.yml b/.travis.yml index 3bbe10a..b47aa34 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,10 +6,10 @@ deploy: provider: script script: bash deploy.sh on: - branch: main + branch: module-12 env: global: - DOCKER_USERNAME=charliecumber - secure: CPAHjkwOZo2p3E1W3+KaR13yZ4RAF5OlNwdugM8KbcmvF9p8B0tpTzkdBAYuBqOmp0OGkrMrHcUs31fY5g5/cH2KZ9n6xsFPRvHPTJui6i3h9UGQI4IA5hEa6TPo9qwx/6B7kKWfqlrvE5iWbzDMKXnT4M90Zx2JVNQA2ltsiBhDMEsOpl+qfStvhoTuI9EYexh2pgBXID6UVGZruM262r8ScmgIhZ12YHIt2rhMY4De+EWmvRBMrgbyMGQYU2FDQpYraQY837R/E7t5UFwzu6bqTkAd5ZeHiwO81zgEWB+xhoJqQxKuD9HVLK1qO0xfZYO1geiMS08kWZ8STGiAiKYFaW054qToStzu5r8QTw2A8ZN75cpDSvgg4Ki2/r1kVvvsvip5OUESfOIta22jn9+WMfTKDd+4IMYrWbbDQgcaKp+AQhOlYo2jhHNVIn308LivJQXqhAT/XR/hW36EKp0zZgUt2wlSgghHRQ3Is/frMeLDEKvaJMV4Cq8YQM/nqW0BKkGkaTYoLQClpstkzRjcY3ZUDAyxRDZtvD7E/Rfr7/MO/LCQ6XLUjiQB+st8rCFcASHRo7S44CKbGo+H/ocWXOnBnBwCO4b4L+EBYm7YdoYOtj25AqursTC6yLkKa0d1XtGqX4L0+tLMGgZrjaEbe3Zx2apVatLSQT4V1to= - - secure: hvfecANUp71801mNDCCOcANgTukXmvQayeTwD9sme5UBDOnbv8uCK/6TMhn5Mn8B9P9v44M+jV0dIxp/QcsQAOIENKp0OdFOYCwYafIByEG6T5AEKfC8oto6DmyybakMzZtuhgUcyPS5BGoKrANE/06StU3UsmvRA9gLuBikaM08VK2Y9FzytcsqShyMnMqvbsqlGpXN7tTIZcs9FQM1f35smc61m+DrZeOTY2spVNUOE9z6SDp3rYAflh7KWMSHD5s2P1ZBF4qqa76la8zxEIb4QZRgCrjGcIzy/GikYaPA43AjqC06999pXqjy4/lPCbYqr1W/91LSzDEbXgwQyxPaYi6cItPuGFmt/xzoVdkfb/JsR4UE0kUII2fXIOgPHl33wgB14naEqlYAxo4OTfji6g6B3nX1yyYFuB5a3KhPaSIQ7ZHQ+7hrq/Y+Jgxa4BafK4NsQhPplXirRXxrPKU2F0EbeKuia1FliIP/lOZyRPRPwkN/ve3gEOmB8Y9pldPyKgi8mvRlLchwQY8WiBmRI63Ku+o8ji15aqBo7nNLSI9NZ6gmWxyw8U7IwMK71uqPFcePbyxdGD0wUw2BCQpL9nZJTRGvOBbJfs/FHOkcCE4Ra8hctgeRIxWre5ACqBvgSZHLdUxIARXlEdRz9vH8tfics6iMWC6Y4k6pbgI= - secure: de6os6dNL52E1bwQV9XjsbPHKrRGaDkI7bAe4B9CJifPlcunKr0bFnmc7EJvTVKBD/alHB7uJmhgf7Xdjh6jfGXcp1t6BRlDTpB9YQIwTu+SHcEd4M5apZ0G465J/sSz9R4DEuWHhgfauJGqoc+qXfPPEVW0Yl1xZLTMuaPXrGCyr3G3MRfUC3D99P4NuMjj8NB0pQmDSFOunKvQgBhD7PVzqmkSdNECcyGecMO8Y9DRXv+1Jf4NXeWUH5N6IbEUpEL2L6vy9rJUFQDNx9PCMww9QiOLyAxGcavWoFNDXbOb4CkKTXS3ByEPza9b5f9/xKb7oDecXFne2FYDWH9+NayWdBGvApbfNliN65CMJvtTma+geQn5YyaErYJLfdZs6PShjxCAw0wJmRF1aXjbTksyzLJ6WdvWFRwQzgfxurUYLzdMEaAVnsH2X0Pa6OTW4SxVXjb17DByd1cdTg0uebs+ZTpYmC4Fpwn5xLgS//+KFY2P89DMPqbu20vTpAvM3ViTOAsP1UATSwnK0wp+2J2V0lTpi4JzEUEitqGK/FrXhA9BlsgTCp1WtzvaAy+TkX5v7fMz66emWiqEOXW94SVP6E5HmyigT9j6b6GbvRRtMVoFsMLc5qI5tUWpTThZRrRTPaVCUGe32sxMlv+/L7PnoXg6y0mKjt9E9wnN//U= + - secure: hQFReQwF0OkTLHZuEQu7uQiHOlRhozMd0eMKCAqz6zflaWl1wxH4tUlY3CFQgmJ+Fize0NsUwU+yGKaLyhcxxCbiqkPVYEivsvSrcR/JRDFIS27UKn1zWu4aEEprd0W/ZsDGdZYDOxbXbkUEpxczG1nZ5sLJURAEKpT5ul0ERq7b3e4JlGE7HaAY8fA05+rtpCYWyS9j9CWwZ8kQ/tRep7oPVCxnoitOPRfrxhl8R6FYTxfM+tKP3wHw8eXV2tinRBMP326mdFBHTvrVHvvZQuANVkHyMZmdQNgDaVysMFmJvHJsBjdTtWjzUxFt0l37NFHBuKOotlcpCKUMBRoQ41TSLPbex2JTzfBg/7yC6jvm2fYT4CzQvlArrA4n6SI1PPF+CXEemUTPQJISjq1JgPtjR6LoEHpqmpoqhHnjuVjTgx5cxhGImhZCT1mY3SBDc7rgc6D+4pLVP19/k/rp7ENdqXs66PsDQf4+kWIr0nCSTjr/bGt1S42zWsg/jAq6895EZyiAr4dBrqTzBH4045VYKW6Ao+FJOG4j0p2w+DvsMOCn9zUlpahL7BbcQeD1VYvMfAZbYq7aXenKgpiVY2lxDpgxwbOWdSIZlPF54oHSs3EL52OtYE4rPOs9IuVlSISrG/dnBTPst4Iqi0oHY03SUoqFCD5Dv8sn/7mmYHY= diff --git a/README.md b/README.md index 7a4bd98..0ea4a96 100644 --- a/README.md +++ b/README.md @@ -106,6 +106,6 @@ $ docker run --env-file .env todo-app:test e2e_tests # Deploying the application -The application is deployed with azure and is accessible at https://charlie-devops-to-do.azurewebsites.net/ +The application is deployed with azure and is accessible at https://prod-charlie-devops-to-do.azurewebsites.net/ New deployments are automatically triggered when commits are made to the main branch. diff --git a/main.tf b/main.tf index bbd5c6b..df36369 100644 --- a/main.tf +++ b/main.tf @@ -15,7 +15,7 @@ data "azurerm_resource_group" "main" { } resource "azurerm_app_service_plan" "main" { - name = "terraformed-asp" + name = "${var.prefix}terraformed-asp" location = data.azurerm_resource_group.main.location resource_group_name = data.azurerm_resource_group.main.name kind = "Linux" @@ -27,7 +27,7 @@ resource "azurerm_app_service_plan" "main" { } resource "azurerm_cosmosdb_account" "main" { - name = "charlie-devops-cosmosdb-account" + name = "${var.prefix}charlie-devops-cosmosdb-account" resource_group_name = data.azurerm_resource_group.main.name kind = "MongoDB" location = data.azurerm_resource_group.main.location @@ -51,13 +51,13 @@ resource "azurerm_cosmosdb_account" "main" { } resource "azurerm_cosmosdb_mongo_database" "main" { - name = "charlie-devops-cosmos-mongo-db" + name = "${var.prefix}charlie-devops-cosmos-mongo-db" resource_group_name = data.azurerm_resource_group.main.name account_name = azurerm_cosmosdb_account.main.name } resource "azurerm_app_service" "main" { - name = "charlie-devops-to-do-terraform" + name = "${var.prefix}charlie-devops-to-do-terraform" location = data.azurerm_resource_group.main.location resource_group_name = data.azurerm_resource_group.main.name app_service_plan_id = azurerm_app_service_plan.main.id @@ -66,7 +66,10 @@ resource "azurerm_app_service" "main" { linux_fx_version = "DOCKER|charliecumber/todo-app:latest" } app_settings = { - "DOCKER_REGISTRY_SERVER_URL" = "https://index.docker.io" - "MONGODB_CONNECTION_STRING" = "mongodb://${azurerm_cosmosdb_account.main.name}:${azurerm_cosmosdb_account.main.primary_key}@${azurerm_cosmosdb_account.main.name}.mongo.cosmos.azure.com:10255" + DOCKER_REGISTRY_SERVER_URL = "https://index.docker.io" + MONGODB_CONNECTION_STRING = "mongodb://${azurerm_cosmosdb_account.main.name}:${azurerm_cosmosdb_account.main.primary_key}@${azurerm_cosmosdb_account.main.name}.mongo.cosmos.azure.com:10255" + AUTH_CLIENT_ID = var.AUTH_CLIENT_ID + AUTH_CLIENT_SECRET = var.AUTH_CLIENT_SECRET + SECRET_KEY = var.SECRET_KEY } } diff --git a/variables.tf b/variables.tf new file mode 100644 index 0000000..5c9a999 --- /dev/null +++ b/variables.tf @@ -0,0 +1,21 @@ +variable "prefix" { + description = "The prefix used for all resources in this environment" + default = "prod-" +} + +variable "location" { + description = "The Azure location where all resources in this deployment should be created" + default = "uksouth" +} + +variable "AUTH_CLIENT_ID" { + description = "GitHub client ID for authentication." +} + +variable "AUTH_CLIENT_SECRET" { + description = "GitHub client secret for authentication." +} + +variable "SECRET_KEY" { + description = "The Azure secret key" +} From 1b129cd65dc11601c2a8d063948a132544bce10b Mon Sep 17 00:00:00 2001 From: Charlie Cumber Date: Mon, 19 Jul 2021 20:12:57 +0100 Subject: [PATCH 3/7] Minor refactor --- todo_app/app.py | 1 - 1 file changed, 1 deletion(-) diff --git a/todo_app/app.py b/todo_app/app.py index 00d0a14..253e980 100644 --- a/todo_app/app.py +++ b/todo_app/app.py @@ -38,7 +38,6 @@ def load_user(user_id): @app.route('/login/') def login(): - code = request.args.get('code') token_request_url, token_request_headers, token_request_body = auth_client.prepare_token_request(token_url, authorization_response=request.url, client_secret=client_secret) token_request_response = requests.post(token_request_url, headers=token_request_headers, data=token_request_body) auth_client.parse_request_body_response(token_request_response.content.decode()) From fdaf83738d20c26b53e7310ada402a8fcf41eb0f Mon Sep 17 00:00:00 2001 From: Charlie Cumber Date: Mon, 19 Jul 2021 20:50:58 +0100 Subject: [PATCH 4/7] Using variables file --- main.tf | 15 +++++++++------ outputs.tf | 7 +++++++ variables.tf | 5 +++++ 3 files changed, 21 insertions(+), 6 deletions(-) create mode 100644 outputs.tf diff --git a/main.tf b/main.tf index df36369..3b1732a 100644 --- a/main.tf +++ b/main.tf @@ -57,7 +57,7 @@ resource "azurerm_cosmosdb_mongo_database" "main" { } resource "azurerm_app_service" "main" { - name = "${var.prefix}charlie-devops-to-do-terraform" + name = "charlie-devops-to-do-terraform" location = data.azurerm_resource_group.main.location resource_group_name = data.azurerm_resource_group.main.name app_service_plan_id = azurerm_app_service_plan.main.id @@ -66,10 +66,13 @@ resource "azurerm_app_service" "main" { linux_fx_version = "DOCKER|charliecumber/todo-app:latest" } app_settings = { - DOCKER_REGISTRY_SERVER_URL = "https://index.docker.io" - MONGODB_CONNECTION_STRING = "mongodb://${azurerm_cosmosdb_account.main.name}:${azurerm_cosmosdb_account.main.primary_key}@${azurerm_cosmosdb_account.main.name}.mongo.cosmos.azure.com:10255" - AUTH_CLIENT_ID = var.AUTH_CLIENT_ID - AUTH_CLIENT_SECRET = var.AUTH_CLIENT_SECRET - SECRET_KEY = var.SECRET_KEY + MONGODB_CONNECTION_STRING = "mongodb://${azurerm_cosmosdb_account.main.name}:${azurerm_cosmosdb_account.main.primary_key}@${azurerm_cosmosdb_account.main.name}.mongo.cosmos.azure.com:10255" + MONGODB_DATABASE_NAME = var.MONGODB_DATABASE_NAME + DOCKER_REGISTRY_SERVER_URL = "https://index.docker.io/v1" + DOCKER_ENABLE_CI = true + AUTH_CLIENT_ID = var.AUTH_CLIENT_ID + AUTH_CLIENT_SECRET = var.AUTH_CLIENT_SECRET + SECRET_KEY = var.SECRET_KEY + OAUTHLIB_INSECURE_TRANSPORT = 1 } } diff --git a/outputs.tf b/outputs.tf new file mode 100644 index 0000000..e8d12fe --- /dev/null +++ b/outputs.tf @@ -0,0 +1,7 @@ +output "cd_webhook" { + value = "https://${azurerm_app_service.main.site_credential[0].username}:${azurerm_app_service.main.site_credential[0].password}@${azurerm_app_service.main.name}.scm.azurewebsites.net/docker/hook" +} + +output "webapp_url" { + value = "https://${azurerm_app_service.main.default_site_hostname}" +} diff --git a/variables.tf b/variables.tf index 5c9a999..4e3e0cd 100644 --- a/variables.tf +++ b/variables.tf @@ -19,3 +19,8 @@ variable "AUTH_CLIENT_SECRET" { variable "SECRET_KEY" { description = "The Azure secret key" } + +variable "MONGODB_DATABASE_NAME" { + description = "Name of default database" + default = "main" +} From bde2a348f87a6d09215abfc5479f527b2db94532 Mon Sep 17 00:00:00 2001 From: Charlie Cumber Date: Mon, 19 Jul 2021 21:36:34 +0100 Subject: [PATCH 5/7] Setting up remote state --- .terraform.lock.hcl | 18 ++++++++++++++++++ README.md | 8 ++++++++ main.tf | 7 +++++++ remote-state.tf | 20 ++++++++++++++++++++ 4 files changed, 53 insertions(+) create mode 100644 remote-state.tf diff --git a/.terraform.lock.hcl b/.terraform.lock.hcl index a63b1e6..a61d406 100644 --- a/.terraform.lock.hcl +++ b/.terraform.lock.hcl @@ -19,3 +19,21 @@ provider "registry.terraform.io/hashicorp/azurerm" { "zh:fae8bb6f824f38088ce06f64dd0bbf506f70cc8ffdffd6b8a6ba6a678efcc596", ] } + +provider "registry.terraform.io/hashicorp/random" { + version = "3.1.0" + hashes = [ + "h1:EPIax4Ftp2SNdB9pUfoSjxoueDoLc/Ck3EUoeX0Dvsg=", + "zh:2bbb3339f0643b5daa07480ef4397bd23a79963cc364cdfbb4e86354cb7725bc", + "zh:3cd456047805bf639fbf2c761b1848880ea703a054f76db51852008b11008626", + "zh:4f251b0eda5bb5e3dc26ea4400dba200018213654b69b4a5f96abee815b4f5ff", + "zh:7011332745ea061e517fe1319bd6c75054a314155cb2c1199a5b01fe1889a7e2", + "zh:738ed82858317ccc246691c8b85995bc125ac3b4143043219bd0437adc56c992", + "zh:7dbe52fac7bb21227acd7529b487511c91f4107db9cc4414f50d04ffc3cab427", + "zh:a3a9251fb15f93e4cfc1789800fc2d7414bbc18944ad4c5c98f466e6477c42bc", + "zh:a543ec1a3a8c20635cf374110bd2f87c07374cf2c50617eee2c669b3ceeeaa9f", + "zh:d9ab41d556a48bd7059f0810cf020500635bfc696c9fc3adab5ea8915c1d886b", + "zh:d9e13427a7d011dbd654e591b0337e6074eef8c3b9bb11b2e39eaaf257044fd7", + "zh:f7605bd1437752114baf601bdf6931debe6dc6bfe3006eb7e9bb9080931dca8a", + ] +} diff --git a/README.md b/README.md index 0ea4a96..1e6a731 100644 --- a/README.md +++ b/README.md @@ -109,3 +109,11 @@ $ docker run --env-file .env todo-app:test e2e_tests The application is deployed with azure and is accessible at https://prod-charlie-devops-to-do.azurewebsites.net/ New deployments are automatically triggered when commits are made to the main branch. + +# Terraform + +Running terraform locally requires that an access secret is first loaded from the keyvault. This can be done as follows: +```bash +$ az login +$ export ARM_ACCESS_KEY=$(az keyvault secret show --name terraform-backend-key --vault-name to-do-app --query value -o tsv) +``` diff --git a/main.tf b/main.tf index 3b1732a..a46c63c 100644 --- a/main.tf +++ b/main.tf @@ -5,7 +5,14 @@ terraform { version = ">= 2.49" } } + backend "azurerm" { + resource_group_name = "SoftwirePilot_CharlieCumber_ProjectExercise" + storage_account_name = "tfstater1khr" + container_name = "tfstate" + key = "terraform.tfstate" + } } + provider "azurerm" { features {} } diff --git a/remote-state.tf b/remote-state.tf new file mode 100644 index 0000000..243bd6d --- /dev/null +++ b/remote-state.tf @@ -0,0 +1,20 @@ +resource "random_string" "resource_code" { + length = 5 + special = false + upper = false +} + +resource "azurerm_storage_account" "tfstate" { + name = "tfstate${random_string.resource_code.result}" + resource_group_name = data.azurerm_resource_group.main.name + location = data.azurerm_resource_group.main.location + account_tier = "Standard" + account_replication_type = "LRS" + allow_blob_public_access = true +} + +resource "azurerm_storage_container" "tfstate" { + name = "tfstate" + storage_account_name = azurerm_storage_account.tfstate.name + container_access_type = "blob" +} From 7b054462221f8f6e95c427eca506f240437df3c0 Mon Sep 17 00:00:00 2001 From: Charlie Cumber Date: Mon, 19 Jul 2021 22:18:38 +0100 Subject: [PATCH 6/7] Deploy with terraform in pipeline --- .travis.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.travis.yml b/.travis.yml index b47aa34..68dcc0d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,13 @@ script: - docker build --target test --tag todo-app:test . - docker run todo-app:test tests - docker run -e MONGODB_CONNECTION_STRING todo-app:test e2e_tests +before_deploy: +- wget https://releases.hashicorp.com/terraform/"$TF_VERSION"/terraform_"$TF_VERSION"_linux_amd64.zip +- unzip terraform_"$TF_VERSION"_linux_amd64.zip +- sudo mv terraform /usr/local/bin/ +- rm terraform_"$TF_VERSION"_linux_amd64.zip +- terraform init +- terraform apply -var AUTH_CLIENT_ID=$AUTH_CLIENT_ID -var AUTH_CLIENT_SECRET=$AUTH_CLIENT_SECRET -var SECRET_KEY=$SECRET_KEY -auto-approve deploy: provider: script script: bash deploy.sh @@ -9,7 +16,15 @@ deploy: branch: module-12 env: global: + - TF_VERSION=0.14.7 - DOCKER_USERNAME=charliecumber - secure: CPAHjkwOZo2p3E1W3+KaR13yZ4RAF5OlNwdugM8KbcmvF9p8B0tpTzkdBAYuBqOmp0OGkrMrHcUs31fY5g5/cH2KZ9n6xsFPRvHPTJui6i3h9UGQI4IA5hEa6TPo9qwx/6B7kKWfqlrvE5iWbzDMKXnT4M90Zx2JVNQA2ltsiBhDMEsOpl+qfStvhoTuI9EYexh2pgBXID6UVGZruM262r8ScmgIhZ12YHIt2rhMY4De+EWmvRBMrgbyMGQYU2FDQpYraQY837R/E7t5UFwzu6bqTkAd5ZeHiwO81zgEWB+xhoJqQxKuD9HVLK1qO0xfZYO1geiMS08kWZ8STGiAiKYFaW054qToStzu5r8QTw2A8ZN75cpDSvgg4Ki2/r1kVvvsvip5OUESfOIta22jn9+WMfTKDd+4IMYrWbbDQgcaKp+AQhOlYo2jhHNVIn308LivJQXqhAT/XR/hW36EKp0zZgUt2wlSgghHRQ3Is/frMeLDEKvaJMV4Cq8YQM/nqW0BKkGkaTYoLQClpstkzRjcY3ZUDAyxRDZtvD7E/Rfr7/MO/LCQ6XLUjiQB+st8rCFcASHRo7S44CKbGo+H/ocWXOnBnBwCO4b4L+EBYm7YdoYOtj25AqursTC6yLkKa0d1XtGqX4L0+tLMGgZrjaEbe3Zx2apVatLSQT4V1to= - secure: de6os6dNL52E1bwQV9XjsbPHKrRGaDkI7bAe4B9CJifPlcunKr0bFnmc7EJvTVKBD/alHB7uJmhgf7Xdjh6jfGXcp1t6BRlDTpB9YQIwTu+SHcEd4M5apZ0G465J/sSz9R4DEuWHhgfauJGqoc+qXfPPEVW0Yl1xZLTMuaPXrGCyr3G3MRfUC3D99P4NuMjj8NB0pQmDSFOunKvQgBhD7PVzqmkSdNECcyGecMO8Y9DRXv+1Jf4NXeWUH5N6IbEUpEL2L6vy9rJUFQDNx9PCMww9QiOLyAxGcavWoFNDXbOb4CkKTXS3ByEPza9b5f9/xKb7oDecXFne2FYDWH9+NayWdBGvApbfNliN65CMJvtTma+geQn5YyaErYJLfdZs6PShjxCAw0wJmRF1aXjbTksyzLJ6WdvWFRwQzgfxurUYLzdMEaAVnsH2X0Pa6OTW4SxVXjb17DByd1cdTg0uebs+ZTpYmC4Fpwn5xLgS//+KFY2P89DMPqbu20vTpAvM3ViTOAsP1UATSwnK0wp+2J2V0lTpi4JzEUEitqGK/FrXhA9BlsgTCp1WtzvaAy+TkX5v7fMz66emWiqEOXW94SVP6E5HmyigT9j6b6GbvRRtMVoFsMLc5qI5tUWpTThZRrRTPaVCUGe32sxMlv+/L7PnoXg6y0mKjt9E9wnN//U= - secure: hQFReQwF0OkTLHZuEQu7uQiHOlRhozMd0eMKCAqz6zflaWl1wxH4tUlY3CFQgmJ+Fize0NsUwU+yGKaLyhcxxCbiqkPVYEivsvSrcR/JRDFIS27UKn1zWu4aEEprd0W/ZsDGdZYDOxbXbkUEpxczG1nZ5sLJURAEKpT5ul0ERq7b3e4JlGE7HaAY8fA05+rtpCYWyS9j9CWwZ8kQ/tRep7oPVCxnoitOPRfrxhl8R6FYTxfM+tKP3wHw8eXV2tinRBMP326mdFBHTvrVHvvZQuANVkHyMZmdQNgDaVysMFmJvHJsBjdTtWjzUxFt0l37NFHBuKOotlcpCKUMBRoQ41TSLPbex2JTzfBg/7yC6jvm2fYT4CzQvlArrA4n6SI1PPF+CXEemUTPQJISjq1JgPtjR6LoEHpqmpoqhHnjuVjTgx5cxhGImhZCT1mY3SBDc7rgc6D+4pLVP19/k/rp7ENdqXs66PsDQf4+kWIr0nCSTjr/bGt1S42zWsg/jAq6895EZyiAr4dBrqTzBH4045VYKW6Ao+FJOG4j0p2w+DvsMOCn9zUlpahL7BbcQeD1VYvMfAZbYq7aXenKgpiVY2lxDpgxwbOWdSIZlPF54oHSs3EL52OtYE4rPOs9IuVlSISrG/dnBTPst4Iqi0oHY03SUoqFCD5Dv8sn/7mmYHY= + - secure: XSDu8u64mvwUDeDgF19CVGRW7sS6dGO+BMFJO5Epkch06fs0/dLwEZpIdHFdLJjhMmEs76WM7MCfbTGzTS32Dnzhw/MtWEIttf5Aeei869w0lJfNhyRGxZxLSor4ghElXzHXCUHSmHb28Mv2KmiQmxKM0FGOSg6orv692nTIJLdQzuv3FyFkxE0lNeo0EzEsrjDxNBH6CVYc/0KYgyVd6cP5t7EfYVItpa08WUc6YMHQ43EKv7QgjbYE61DjkpPYP/Fi0JYOnTne3LwW72K9pTYFri95x3JnyiVos8t9zm4lmSkbsPgqCfPcb/lF3KFMzqYutgn5pmml9krHXpN68Bv3f0d96tyftunJWf1tGayBWgFYJ5FKaygJXySwcerGwLWIAisvR/oskoPSPBbV4NvN76zlGHONpzyuPLvBeMzTAZS2LdAhCvwbDpmeoOQlu+Pxkis4rIHo+IEiyxLT3oA+fLuAtJAf2reTU4+g5Txzd/8tOWX+9wHvXUs+uOohymjXqnVItogh6RGu9Kdd3MgGCjQW2MQSlf4enePsDxU9MMgXCbPJ1Alb5x/+9W01RSIy/xw7DWWaSqtLLKVVSd/EyLOM81B+BlqhgJqIHQq5Bik+MBwaQ7Kx99v6i+zcirmOH8bhDNbYj5AO0Rqdbr8yplsCPlj9TdWOyyYr6JI= + - secure: NyNY55y8Es4vroH3Lc2tDaDzjl7hJzWJKXWqel+q/zp4vLPq51GX+UF+u0Tlgna4F41xJhRjDcxFY3+bIidzawd0+wAPkPauNA6IffV+NleuQ6Ehx8Xvj8lBtWJ9aUlSMZHqAVdDSNQjWjkMp956BKe5t9S2SSbow7Jx41RBnvM37zDcswYpZmg5z26975JGV1L0iqVvPLhXmBMyol6aLt31PWcHX61i6OR6Gb2O1j1kqMxbEaF5/Y3EdbMSaDxrG1SQ6uLsnIn2qlRFTCW3Z85ilvySbTcSXy1txwhgDLy68drqC9Y22GD1xMezUQGAeDZcITa51CqGimDa3oEXuINwE2SVWa2hgU4CZr8r/XXjkyPVR+00agtuAvZeVKUwzuK9eEyjIcHRmOZ4KN4DSCQ/LN65VXfc6NBhIuNOVralDKiAGEBg1HxEMs5qfUI9xnqabSJ4nvg1U4ZnvQ+epdjrJw1cqaz7wXEeA9JXoTL1XdWTXfoA0g149E8zh9m/tizoeeUIV3rAoZWDzG3huE7DWtRAKRyRwmrWm6R6L0lnlVa0/z05s6aBC200Y+mN/GNpWtxaBQvGLroVayRmSJzA4MHrigF4IDqD0KSXO50HmI9MmLMPkTVZpf4ZHcNIQZPDlQGP48O2xd2huLn5t9G7Wq7Ygx+wEaV2rCjNkKA= + - secure: l/c5O1Wdt1jt7D+vhhTn7XI3klJVkCl9ptiDMoJog48Lw4fpM+sGHNvb2/D184g5Ts1o+ZRd2wwcgzUR1Hy6tPwcJ9ka4X+qLh/hljC/i8qLOg0KtFk+hJXcNaT5XDoYwnTt5Cwtd3jgmB/sY5BBJRy/uR7rIkytYxCYzwXn4UKpSLPFF6Gu1McGhYlGD5myvEvbp2NLtuRDq3/AdZOGQzNDADPIWYQbkP3itbgDAGTSEVWmLFrQQNdxj8kg0ceBmF+MQGKMNbdD1lRCUwo05xRYh3YgrklsYRfnk8hFbrsIRHt6/S9Dotjl6Hp6U73Gaw7JlI2VEHN/ex3L1ZYDRhDlCOyrDBq4IpDyqTGiIYKwnqbfTIDnxIKZEsLvw9CPJqsTL1dCEe74hOW9avoGN390k8FQURJK1CSSJOZPRsZDEtaO8TkPPzcoSosyxjbMziau/CsrWWbjn4+S2mJevvRfsXaFDYCA4paSdr8dNZIOrlWTWILJGs6P4DUPM5f4SD0rQlJ5V6RcAr8o2Xq5Tx+22z7y/2UOzUeaFyUW6cWhMQrJFN5vEOyCIJMZFnYeaQageUAjjMg9hYZlZyVCaPyOVrWHdDmfFgIx0xiDS5zl9ISkm4f5123yw3lFtnGGURMF6B6KrWJnA9pHwJ4kOVw/hizJlZwWDjjO4KKasx8= + - secure: F7AFMhniVM5KgXB2NbG+l9XQ4g5fVRrjTjkDKCGVHTLcr0n67P2A9I3H4nTp5f9sPZpcK1Ln9aTr2yTFoCQkgxzMcRIQHbY7M3RldlBXxMjW0gCZYozr2tdeH3KYN6lGVR3Ng/HsMw9g0Z6dO5BfAcowxHvG4ExogSe2VX6i6q5BVvYtGzJAE7DozjCN9qP4kK5vVqyvdjKsmp8E/v+waL5NKghsSyHnCO2Nrj6WeACAGzcqUvI7Yafe8eibxrW+1BUFfba9b8xOKa3rPLRxKAsClG8odGCUva8bEkR5fNjY0qz4U0kl/gUwtozpTrBnxbUcwgNm1izK0xquRFJBybLgFeU/quaWrwzXty9H4icYhAaqX97fdpnAXQp21FamUHefbwhKIvDcDq53c4sv3u2RtAe1UvkMispJrWisEM2uhzEF2ENFLvS2HIO3zfOjllkQYMdH0GE89NU5LnOdsBtBoBfI87eyvfiSMFalIPqv3H5WgyQOBghBlPLrQtEUh5Io/47IH1qFIPnljcT14HxNfVtGpXS3yXAc4zZ2jkDKFU40cAe0qwY0oqE6QP7VNbo8avTAueTdi5oV4X5yPc+f59q9fiopiE9+5pGsx/9Ro/Qn+EWWCBG7utnSceuK20B0DID0x0NZRtcTu/lheevw6/wqmd3rb7ZDxXi4XgE= + - secure: XDlwoi/3Cgb2nWPD24/Ioq/RNLr3gQwAgdchSfil7VfAR7k2O+xHGnI50A9caOmoChd4FeIsBdppErX0xNe+nFEddjJlh2JXhUrd2xkf8juv6qVYJ+IoRh2oKWkTSDFxH8y/Om81ycd1NbSJ2g+qCrIPBKFVc0qpYTTlcXf2GoTsUrwMJcHTqoqhhd0QSWRQgiB+IlMQCJ3Ixm2G3Wark0XOSd/TB3W5Jz9+XnKFfIuqiBq7a2UxlBm0fy08tzYd8b+VFtd8nS2rtqwWaTLtpiXyqMJlrwgXsfML05GI3ig1ZoMm8YgvJwIa//C/IYqD/JiwfeIPxFXIekpM+abZXHJhn40I0dEkPBBEcFAvcMxo6b7n3cW8fu2JOZSxmUEwS+FULiLUMrTuxuQHHRh3wJCetrl4QRgvMoVqSfvMUtyrYKGsG+QyczZTVvD6+W9bkH2y4JafJAg0npbxOtvbyPVeDGeK8N9F89z0GoBYxQOubMx8wh5Xj84GCk94trwXsVI0jPffN9r64PS+Tofj7HHosgze3nmcw09a6/yi7akiScWxKiq/NFUgZuVYzcW6LX2nwe6PrGSLQrHCffwCZEg+pvM4xeApQ/rs9XTcmTenA4Ny786TEb+/kkXSFtklvBQs46dBRnCCzOk5LYHimo1B0XZigJ7P/y5XGmQIv30= + - secure: amUsFIN93YQwaq24tgGMKJgox2/96hL09RDxpXP90PlwuiIlp7V2fBKtdc2g73FwEBffXffK/ZVJCrrn/OvP2qR+PyDQSiaKTs76tVjpWdRTFJbvte3TFX4NPl+XsdCA3UuiwccNRTTJ+OIK1Xzhua2KT/wAFwVkbgdTzSWjVkRymVZJUWm+Nec6H0zuh1DaqCdIV1ZFiKf2CnH4FPJe2kIPX95qTdS203h0uiZjzRnt5asbMNs7CxowISgbTH3hwAQo2YPckWQZbfEEPft8zZWprW/YrW6YQrvFRTiTyydg8qQkMN3ai0bmPTp4Hs+pyFEZWkRaNGqI5r+97en/7X4AEL6R/Yzz1+q3vPE6h7SVAQ39Fxq5NuM2M8eWPUCC35z8SwzAj2UYh5QnrMdIj19J27RhrvQVLOs8ebKUjiRVSB2ZjwwFUBOOQWzCi3DZLpgSj1pR1q/xRC2OUhjLNEMSi1Bwz+/t/QwNVKUG8aJPAVBbsh5M5NKzuNr1Bot+wUhHZX2ZrUAVt2J4SK6g17EmTMz0veNhf8bQ9ezkTIWkkM+IvugJ0XwzMKlDNMFBO32lP/aRm+uZ+3+n/4OZTzSHh3IniwKsIBD5Zegbxjp1IkWk/IGFYEU7PaHZeIQmyo82GzJS0KLg9/2O6e0AcbZBZN0lItNNgIbRHY3yZeg= + - secure: pifLS+4pJDZmnx1TwSr349RoF0xbQwQLPDTvl6PSUGwnAtFX8s7OyC61hTN247ISl3GdEUml87b7dRZ5zkGy8FaxgRaQFRgo2BJOyvC99sn6DL65Yh5xLn/MZl9xIM6roHBtFtuFBrQco5YLnmV1i8kHD9k3QLMbBke2JSZR2l/l2aFFkM1PDTsNUM0A3w3VvtPrMq8UVyY3H1WNV/h5l4Vf8a1l9sJd8LgcSBuToAGcSFu/EQxC/lIxOdZgUH/4JF/ETw8XbulEqA5aaqsyNsSe+Gtg31YEjbVbF3Pjh70qRc+LFy6nu0hPMN0wfVJBziNIs8QUJ5rQVCBECURzRnkayBUAZuwyeJmGXWsTzf7FZxCRXpJBsOLRIn202dGy26pfMKMoDGXJ5Y29GeLqRPvosvJpTJ/dTQWpztdpS028KpAFN6aKCbM6yBwPfQ2UtXoseJVdkf/NaqNa9luWD2r2blDbZl1mdAkbxkc/wCqtuiIz4E/2GrMPL6rIo7W+axN0rQiqEs2Ai8peSUBw4ZTIux1ZSijvbszX+gp0shiUHfHtxmeao48gIZ3DsZ5Te4YCszY6xYfFbs5clFsio5ZG0A/xdZm971rJK7yfPb5tDXeqBpr5MNNIvjCDujjDLAVY0/VD4+akgTfaXiMwuL6xi++oHNYCzsuutZF5XyA= From 7ce25dde0ade8d28bb50936be5c5a04891dd885b Mon Sep 17 00:00:00 2001 From: Charlie Cumber Date: Mon, 19 Jul 2021 22:21:25 +0100 Subject: [PATCH 7/7] Update deploy hook --- .travis.yml | 2 +- deploy.sh | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 68dcc0d..e21d35c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,7 +13,7 @@ deploy: provider: script script: bash deploy.sh on: - branch: module-12 + branch: main env: global: - TF_VERSION=0.14.7 diff --git a/deploy.sh b/deploy.sh index bc47ff3..2c18712 100644 --- a/deploy.sh +++ b/deploy.sh @@ -4,4 +4,6 @@ docker image tag todo-app "${DOCKER_USERNAME}/todo-app:${TRAVIS_COMMIT}" echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin docker push "${DOCKER_USERNAME}/todo-app:latest" docker push "${DOCKER_USERNAME}/todo-app:${TRAVIS_COMMIT}" -curl -dH -X POST "$DEPLOY_WEBHOOK" + +set -e +curl -dH -X POST "$(terraform output -raw cd_webhook)"