From 9839a3c9c625d932882dd54c1a91a0b413c7ac99 Mon Sep 17 00:00:00 2001 From: Alexandre Pires Date: Fri, 25 Apr 2025 17:48:19 +0200 Subject: [PATCH] Add Contabo IAC configuration and workflows for OpenTofu integration --- .../workflows/terraform-contabo-iac-apply.yml | 35 +++++++++++++++++ .../terraform-contabo-iac-validate-on-pr.yml | 39 +++++++++++++++++++ Readme.MD | 9 +++++ sectool.env | 4 ++ terraform/contabo-iac/backend.tf | 7 ++++ terraform/contabo-iac/contabo.tf | 8 ++++ terraform/contabo-iac/outputs.tf | 17 ++++++++ terraform/contabo-iac/provider.tf | 17 ++++++++ terraform/contabo-iac/sectool.env | 6 +++ terraform/contabo-iac/variables.tf | 23 +++++++++++ 10 files changed, 165 insertions(+) create mode 100644 .github/workflows/terraform-contabo-iac-apply.yml create mode 100644 .github/workflows/terraform-contabo-iac-validate-on-pr.yml create mode 100644 terraform/contabo-iac/backend.tf create mode 100644 terraform/contabo-iac/contabo.tf create mode 100644 terraform/contabo-iac/outputs.tf create mode 100644 terraform/contabo-iac/provider.tf create mode 100644 terraform/contabo-iac/sectool.env create mode 100644 terraform/contabo-iac/variables.tf diff --git a/.github/workflows/terraform-contabo-iac-apply.yml b/.github/workflows/terraform-contabo-iac-apply.yml new file mode 100644 index 0000000..4307b17 --- /dev/null +++ b/.github/workflows/terraform-contabo-iac-apply.yml @@ -0,0 +1,35 @@ +name: Terraform Contabo IAC Apply + +on: + schedule: + - cron: "0 1 * * 0" + push: + branches: + - main + paths: + - "terraform/contabo-iac/**" +jobs: + opentofu-apply: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup environment + uses: ./.github/actions/setup-env + + - name: Setup OpenTofu environment + uses: ./.github/actions/setup-opentofu-env + + - name: OpenTofu Init and Apply + env: + BW_PROJECT_ID: ${{ secrets.BW_PROJECT_ID }} + BW_ORGANIZATION_ID: ${{ secrets.BW_ORGANIZATION_ID }} + BW_ACCESS_TOKEN: ${{ secrets.BW_ACCESS_TOKEN }} + run: | + cd terraform/contabo-iac + sectool -f ../../sectool.json exec tofu init + sectool -f ../../sectool.json exec tofu apply --auto-approve diff --git a/.github/workflows/terraform-contabo-iac-validate-on-pr.yml b/.github/workflows/terraform-contabo-iac-validate-on-pr.yml new file mode 100644 index 0000000..a903b3f --- /dev/null +++ b/.github/workflows/terraform-contabo-iac-validate-on-pr.yml @@ -0,0 +1,39 @@ +name: Terraform Contabo IAC Validate on Pull Request + +on: + pull_request: + branches: + - main + paths: + - "terraform/contabo-iac/**" + types: + - opened + - synchronize + - reopened +jobs: + terraform-validate: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup environment + uses: ./.github/actions/setup-env + + - name: Setup OpenTofu environment + uses: ./.github/actions/setup-opentofu-env + + - name: OpenTofu Init and Validate + env: + BW_PROJECT_ID: ${{ secrets.BW_PROJECT_ID }} + BW_ORGANIZATION_ID: ${{ secrets.BW_ORGANIZATION_ID }} + BW_ACCESS_TOKEN: ${{ secrets.BW_ACCESS_TOKEN }} + run: | + cd terraform/contabo-iac + sectool -f ../../sectool.json exec tofu init + sectool -f ../../sectool.json exec tofu validate + sectool -f ../../sectool.json exec tofu fmt -check + sectool -f ../../sectool.json exec tofu plan diff --git a/Readme.MD b/Readme.MD index 317759f..12c1639 100644 --- a/Readme.MD +++ b/Readme.MD @@ -17,4 +17,13 @@ code DELETE immediately. We have been warned. ./bin/occ db:add-missing-primary-keys # Disable maintenance ./bin/occ maintenance:mode --off +``` + +# Contabo CLI + +Download latest version from [here](https://github.com/contabo/cntb/releases). + +Setup: +``` +sectool exec cntb get instances --oauth2-clientid="$CONTABO_CLIENT_ID" --oauth2-client-secret="$CONTABO_CLIENT_SECRET" --oauth2-user="$CONTABO_API_USER" --oauth2-password="$CONTABO_API_PASSWORD" ``` \ No newline at end of file diff --git a/sectool.env b/sectool.env index 865ddf9..7d28709 100644 --- a/sectool.env +++ b/sectool.env @@ -1,2 +1,6 @@ AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY AWS_SECRET_ACCESS_KEY=$AWS_SECRET_KEY +CONTABO_CLIENT_ID=$CONTABO_CLIENT_ID +CONTABO_CLIENT_SECRET=$CONTABO_CLIENT_SECRET +CONTABO_API_USER=$CONTABO_USER_NAME +CONTABO_API_PASSWORD=$CONTABO_API_PASSWORD diff --git a/terraform/contabo-iac/backend.tf b/terraform/contabo-iac/backend.tf new file mode 100644 index 0000000..6c6026a --- /dev/null +++ b/terraform/contabo-iac/backend.tf @@ -0,0 +1,7 @@ +terraform { + backend "s3" { + bucket = "a13labs.infra.eu" + key = "contabo.core.infra.tfstate" + region = "eu-west-1" + } +} diff --git a/terraform/contabo-iac/contabo.tf b/terraform/contabo-iac/contabo.tf new file mode 100644 index 0000000..21c8bcc --- /dev/null +++ b/terraform/contabo-iac/contabo.tf @@ -0,0 +1,8 @@ + +resource "contabo_instance" "vps_1" { +} + +import { + id = "201912751" + to = contabo_instance.vps_1 +} diff --git a/terraform/contabo-iac/outputs.tf b/terraform/contabo-iac/outputs.tf new file mode 100644 index 0000000..09f47fa --- /dev/null +++ b/terraform/contabo-iac/outputs.tf @@ -0,0 +1,17 @@ +output "instances" { + value = [ + { + cpu_cores = contabo_instance.vps_1.cpu_cores + disk_mb = contabo_instance.vps_1.disk_mb + id = contabo_instance.vps_1.id + image_id = contabo_instance.vps_1.image_id + ip_config = contabo_instance.vps_1.ip_config + mac_address = contabo_instance.vps_1.mac_address + name = contabo_instance.vps_1.name + os_type = contabo_instance.vps_1.os_type + ram_mb = contabo_instance.vps_1.ram_mb + v_host_id = contabo_instance.vps_1.v_host_id + }, + ] + description = "VPS instances details" +} diff --git a/terraform/contabo-iac/provider.tf b/terraform/contabo-iac/provider.tf new file mode 100644 index 0000000..9d4ee91 --- /dev/null +++ b/terraform/contabo-iac/provider.tf @@ -0,0 +1,17 @@ + +terraform { + required_version = "~>1.8" + required_providers { + contabo = { + source = "contabo/contabo" + version = ">= 0.1.31" + } + } +} + +provider "contabo" { + oauth2_client_id = var.contabo_client_id + oauth2_client_secret = var.contabo_client_secret + oauth2_user = var.contabo_api_user + oauth2_pass = var.contabo_api_password +} diff --git a/terraform/contabo-iac/sectool.env b/terraform/contabo-iac/sectool.env new file mode 100644 index 0000000..df09be3 --- /dev/null +++ b/terraform/contabo-iac/sectool.env @@ -0,0 +1,6 @@ +AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY +AWS_SECRET_ACCESS_KEY=$AWS_SECRET_KEY +TF_VAR_contabo_client_id=$CONTABO_CLIENT_ID +TF_VAR_contabo_client_secret=$CONTABO_CLIENT_SECRET +TF_VAR_contabo_api_password=$CONTABO_API_PASSWORD +TF_VAR_contabo_api_user=$CONTABO_USER_NAME diff --git a/terraform/contabo-iac/variables.tf b/terraform/contabo-iac/variables.tf new file mode 100644 index 0000000..04424b5 --- /dev/null +++ b/terraform/contabo-iac/variables.tf @@ -0,0 +1,23 @@ +variable "contabo_client_id" { + description = "Contabo Client ID" + type = string + sensitive = true +} + +variable "contabo_client_secret" { + description = "Contabo Client Secret" + type = string + sensitive = true +} + +variable "contabo_api_password" { + description = "Contabo API Password" + type = string + sensitive = true +} + +variable "contabo_api_user" { + description = "Contabo API User" + type = string + sensitive = true +}