Add Contabo IAC configuration and workflows for OpenTofu integration

This commit is contained in:
2025-04-25 17:48:19 +02:00
parent 427372da83
commit 9839a3c9c6
10 changed files with 165 additions and 0 deletions
@@ -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
@@ -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
+9
View File
@@ -17,4 +17,13 @@ code DELETE immediately. We have been warned.
./bin/occ db:add-missing-primary-keys ./bin/occ db:add-missing-primary-keys
# Disable maintenance # Disable maintenance
./bin/occ maintenance:mode --off ./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"
``` ```
+4
View File
@@ -1,2 +1,6 @@
AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY
AWS_SECRET_ACCESS_KEY=$AWS_SECRET_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
+7
View File
@@ -0,0 +1,7 @@
terraform {
backend "s3" {
bucket = "a13labs.infra.eu"
key = "contabo.core.infra.tfstate"
region = "eu-west-1"
}
}
+8
View File
@@ -0,0 +1,8 @@
resource "contabo_instance" "vps_1" {
}
import {
id = "201912751"
to = contabo_instance.vps_1
}
+17
View File
@@ -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"
}
+17
View File
@@ -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
}
+6
View File
@@ -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
+23
View File
@@ -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
}