From b9f3259f6a37ef285cbbc05fb244cd09505c99b3 Mon Sep 17 00:00:00 2001 From: Lander Van den Bulcke Date: Mon, 13 Jan 2025 15:29:50 +0100 Subject: [PATCH] feat: add servers module Signed-off-by: Lander Van den Bulcke --- .terraform.lock.hcl | 65 +++++++++++++++++++++++++++++++++++++ modules/server/main.tf | 37 +++++++++++++++++++++ modules/server/outputs.tf | 7 ++++ modules/server/providers.tf | 12 +++++++ modules/server/variables.tf | 22 +++++++++++++ providers.tf | 6 ++++ servers.tf | 2 ++ 7 files changed, 151 insertions(+) create mode 100644 modules/server/main.tf create mode 100644 modules/server/outputs.tf create mode 100644 modules/server/providers.tf create mode 100644 modules/server/variables.tf create mode 100644 servers.tf diff --git a/.terraform.lock.hcl b/.terraform.lock.hcl index 37d13f7..61f5761 100644 --- a/.terraform.lock.hcl +++ b/.terraform.lock.hcl @@ -22,3 +22,68 @@ provider "registry.opentofu.org/cloudflare/cloudflare" { "zh:f809ab383cca0a5f83072981c64208cbd7fa67e986a86ee02dd2c82333221e32", ] } + +provider "registry.opentofu.org/hashicorp/cloudflare" { + version = "4.50.0" + hashes = [ + "h1:0qvD5ZKn2tMZ8cOjQrUSITIC9tKCZbrSaSswV9lOyiU=", + "zh:0ef99ed39472a94e6a0d6fa733cf0a46bce3bf66eba2873efae8846efdddc237", + "zh:2929cbbffcead171d45c88e4a7a59e9c013ea775dafa68b10da8db7cd04b6140", + "zh:462601c87118088e1a718842e367af7d8e7620598d426980a6d6b33de759865e", + "zh:56766eb62a74a9d88d9efb8486dd3a0c5c9db873d0a980ae9ef1e8af27d74231", + "zh:6b4e8810d99498a5a20a5872982a0f1354e79cfc4a7dfe7cc656f1c7eaae47d8", + "zh:6d65bdb4ec94b6eecc8abe26d94e2ca09262dc1e7a9934db829f418be0119920", + "zh:71adeaf31e41a358ec6095004062e43f56ee7d4b2504e5613ab351d511695641", + "zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f", + "zh:89761c15908ccc2cf9c50bb5cb3be45d3ad0c45fc7c608c6b95f48c0288b7160", + "zh:8cc5d7c5939da89cfd01f3e51c84f3576564783acea9db86bd9e32049805ed96", + "zh:987cff8225b1dd436cdcb4fc6228689ae7e4281de6896412a2a9a3325c49f05e", + "zh:991e83ebb89867d71e01a1c215ed159efb425683b0a44707be8579eb0a337f06", + "zh:ab8177ae2d8f5cfa90043a6f867435012cae115f6061b832a7e2462e0ae87a67", + "zh:d1ca34df1398f201274a6a18102975148c10ca15aa43cfc56cc9897620929509", + "zh:d34946f70201baf6dda03e3b294c6bbe40d95d0278e97b9f636ded94822b24ac", + ] +} + +provider "registry.opentofu.org/hashicorp/hcloud" { + version = "1.49.1" + hashes = [ + "h1:FKGRNHVbcfQJd8EWrb8Ze5QHkaGr8zI+ZKxBMjvOwPk=", + "zh:3d5f9773da4f8203cf625d04a5a0e4ff7e202684c010a801a945756140c61cde", + "zh:446305d492017cda91e5c15122ec16ff15bfe3ef4d3fd6bcea0cdf7742ab1b86", + "zh:44d4f9156ed8b4f0444bd4dc456825940be49048828565964a192286d28c9f20", + "zh:492ad893d2f89bb17c9beb877c8ceb4a16caf39db1a79030fefeada6c7aa217f", + "zh:68dc552c19ad9d209ec6018445df6e06fb77a637513a53cc66ddce1b024082be", + "zh:7492495ffda6f6c49ab38b539bd2eb965b1150a63fb6b191a27dec07d17601cb", + "zh:850fe92005981ea00db86c3e49ba5b49732fdf1f7bd5530a68f6e272847059fc", + "zh:8cb67f744c233acfb1d68a6c27686315439d944edf733b95f113b4aa63d86713", + "zh:8e13dac46e8c2497772ed1baee701b1d1c26bcc95a63b5c4566c83468f504868", + "zh:c44249c6a8ba931e208a334792686b5355ab2da465cadea03c1ea8e73c02db12", + "zh:d103125a28a85c89aea0cb0c534fe3f504416c4d4fc75c37364b9ec5f66dd77d", + "zh:ed8f64e826aa9bfca95b72892271678cb78411b40d7b404a52404141e05a4ab1", + "zh:f40efad816de00b279bd1e2cbf62c76b0e5b2da150a0764f259984b318e30945", + "zh:f5e912d0873bf4ecc43feba4ceccdf158048080c76d557e47f34749139fdd452", + ] +} + +provider "registry.opentofu.org/opentofu/hcloud" { + version = "1.49.1" + constraints = "~> 1.49.1" + hashes = [ + "h1:FKGRNHVbcfQJd8EWrb8Ze5QHkaGr8zI+ZKxBMjvOwPk=", + "zh:3d5f9773da4f8203cf625d04a5a0e4ff7e202684c010a801a945756140c61cde", + "zh:446305d492017cda91e5c15122ec16ff15bfe3ef4d3fd6bcea0cdf7742ab1b86", + "zh:44d4f9156ed8b4f0444bd4dc456825940be49048828565964a192286d28c9f20", + "zh:492ad893d2f89bb17c9beb877c8ceb4a16caf39db1a79030fefeada6c7aa217f", + "zh:68dc552c19ad9d209ec6018445df6e06fb77a637513a53cc66ddce1b024082be", + "zh:7492495ffda6f6c49ab38b539bd2eb965b1150a63fb6b191a27dec07d17601cb", + "zh:850fe92005981ea00db86c3e49ba5b49732fdf1f7bd5530a68f6e272847059fc", + "zh:8cb67f744c233acfb1d68a6c27686315439d944edf733b95f113b4aa63d86713", + "zh:8e13dac46e8c2497772ed1baee701b1d1c26bcc95a63b5c4566c83468f504868", + "zh:c44249c6a8ba931e208a334792686b5355ab2da465cadea03c1ea8e73c02db12", + "zh:d103125a28a85c89aea0cb0c534fe3f504416c4d4fc75c37364b9ec5f66dd77d", + "zh:ed8f64e826aa9bfca95b72892271678cb78411b40d7b404a52404141e05a4ab1", + "zh:f40efad816de00b279bd1e2cbf62c76b0e5b2da150a0764f259984b318e30945", + "zh:f5e912d0873bf4ecc43feba4ceccdf158048080c76d557e47f34749139fdd452", + ] +} diff --git a/modules/server/main.tf b/modules/server/main.tf new file mode 100644 index 0000000..069d95f --- /dev/null +++ b/modules/server/main.tf @@ -0,0 +1,37 @@ +resource "hcloud_server" "server" { + name = var.hostname + image = "debian-12" + server_type = var.type + location = var.location + + ssh_keys = ["cardno:22_498_026"] + + public_net { + ipv4_enabled = true + ipv6_enabled = true + } +} + +data "cloudflare_zone" "zone" { + filter = { + name = var.dns_zone + } +} + +resource "cloudflare_dns_record" "a" { + zone_id = data.cloudflare_zone.zone.id + + name = "${var.hostname}.${var.dns_zone}" + content = hcloud_server.server.ipv4_address + type = "A" + ttl = "1" +} + +resource "cloudflare_dns_record" "aaaa" { + zone_id = data.cloudflare_zone.zone.id + + name = "${var.hostname}.${var.dns_zone}" + content = hcloud_server.server.ipv6_address + type = "AAAA" + ttl = "1" +} diff --git a/modules/server/outputs.tf b/modules/server/outputs.tf new file mode 100644 index 0000000..1b979b7 --- /dev/null +++ b/modules/server/outputs.tf @@ -0,0 +1,7 @@ +output "ipv4_address" { + value = hcloud_server.server.ipv4_address +} + +output "ipv6_address" { + value = hcloud_server.server.ipv6_address +} diff --git a/modules/server/providers.tf b/modules/server/providers.tf new file mode 100644 index 0000000..6c7d02e --- /dev/null +++ b/modules/server/providers.tf @@ -0,0 +1,12 @@ +terraform { + required_providers { + cloudflare = { + source = "cloudflare/cloudflare" + version = "5.0.0-rc1" + } + hcloud = { + source = "opentofu/hcloud" + version = "~> 1.49.1" + } + } +} diff --git a/modules/server/variables.tf b/modules/server/variables.tf new file mode 100644 index 0000000..910d2ba --- /dev/null +++ b/modules/server/variables.tf @@ -0,0 +1,22 @@ +variable "hostname" { + type = string + description = "The hostname for the server" +} + +variable "location" { + type = string + description = "The datacenter location for the server" + default = "nbg1" +} + +variable "type" { + type = string + description = "The server type" + default = "cax11" +} + +variable "dns_zone" { + type = string + description = "The Cloudflare DNS zone" + default = "escapeangle.com" +} diff --git a/providers.tf b/providers.tf index 311b06d..3e634e5 100644 --- a/providers.tf +++ b/providers.tf @@ -18,7 +18,13 @@ terraform { source = "cloudflare/cloudflare" version = "5.0.0-rc1" } + hcloud = { + source = "opentofu/hcloud" + version = "~> 1.49.1" + } } } provider "cloudflare" {} + +provider "hcloud" {} diff --git a/servers.tf b/servers.tf new file mode 100644 index 0000000..139597f --- /dev/null +++ b/servers.tf @@ -0,0 +1,2 @@ + +