From 372d708945fff942277257a6b5586ebf32b60e12 Mon Sep 17 00:00:00 2001 From: Martin Goik <goik@hdm-stuttgart.de> Date: Sun, 21 Apr 2024 15:02:29 +0200 Subject: [PATCH] Terraform + cloud init --- .../Terra/050CloudInitBasic/main.tf | 27 +++++++++++++++++ .../Terra/050CloudInitBasic/network.tf | 30 +++++++++++++++++++ .../Terra/050CloudInitBasic/outputs.tf | 9 ++++++ .../secrets.auto.tfvars.template | 1 + .../Terra/050CloudInitBasic/userData.yml | 7 +++++ .../Terra/050CloudInitBasic/variables.tf | 4 +++ 6 files changed, 78 insertions(+) create mode 100644 Doc/Sdi/CloudProvider/Terra/050CloudInitBasic/main.tf create mode 100644 Doc/Sdi/CloudProvider/Terra/050CloudInitBasic/network.tf create mode 100644 Doc/Sdi/CloudProvider/Terra/050CloudInitBasic/outputs.tf create mode 100644 Doc/Sdi/CloudProvider/Terra/050CloudInitBasic/secrets.auto.tfvars.template create mode 100644 Doc/Sdi/CloudProvider/Terra/050CloudInitBasic/userData.yml create mode 100644 Doc/Sdi/CloudProvider/Terra/050CloudInitBasic/variables.tf diff --git a/Doc/Sdi/CloudProvider/Terra/050CloudInitBasic/main.tf b/Doc/Sdi/CloudProvider/Terra/050CloudInitBasic/main.tf new file mode 100644 index 000000000..e6d2dede5 --- /dev/null +++ b/Doc/Sdi/CloudProvider/Terra/050CloudInitBasic/main.tf @@ -0,0 +1,27 @@ +terraform { + required_providers { + hcloud = { + source = "hetznercloud/hcloud" + } + } + required_version = ">= 0.13" +} + +provider "hcloud" { + token = var.hcloud_token +} + +resource "hcloud_ssh_key" "goik" { + name = "goik@hdm-stuttgart.de" + public_key = file("~/.ssh/id_ed25519.pub") +} + +resource "hcloud_server" "helloServer" { + name = "hello" + image = "debian-12" + server_type = "cx11" + location = "nbg1" + user_data = file("userData.yml") + ssh_keys = [hcloud_ssh_key.goik.id] + firewall_ids = [hcloud_firewall.wwwFw.id] +} diff --git a/Doc/Sdi/CloudProvider/Terra/050CloudInitBasic/network.tf b/Doc/Sdi/CloudProvider/Terra/050CloudInitBasic/network.tf new file mode 100644 index 000000000..a17a78fff --- /dev/null +++ b/Doc/Sdi/CloudProvider/Terra/050CloudInitBasic/network.tf @@ -0,0 +1,30 @@ +resource "hcloud_firewall" "wwwFw" { + name = "www-firewall" + rule { + direction = "in" + protocol = "tcp" + port = "22" + source_ips = [ + "0.0.0.0/0", + "::/0" + ] + } + rule { + direction = "in" + protocol = "tcp" + port = "80" + source_ips = [ + "0.0.0.0/0", + "::/0" + ] + } + rule { + direction = "in" + protocol = "tcp" + port = "443" + source_ips = [ + "0.0.0.0/0", + "::/0" + ] + } +} diff --git a/Doc/Sdi/CloudProvider/Terra/050CloudInitBasic/outputs.tf b/Doc/Sdi/CloudProvider/Terra/050CloudInitBasic/outputs.tf new file mode 100644 index 000000000..fb93fbb76 --- /dev/null +++ b/Doc/Sdi/CloudProvider/Terra/050CloudInitBasic/outputs.tf @@ -0,0 +1,9 @@ +output "hello_ip_addr" { + value = hcloud_server.helloServer.ipv4_address + description = "The server's IPv4 address" +} + +output "hello_datacenter" { + value = hcloud_server.helloServer.datacenter + description = "The server's datacenter" +} \ No newline at end of file diff --git a/Doc/Sdi/CloudProvider/Terra/050CloudInitBasic/secrets.auto.tfvars.template b/Doc/Sdi/CloudProvider/Terra/050CloudInitBasic/secrets.auto.tfvars.template new file mode 100644 index 000000000..5929da087 --- /dev/null +++ b/Doc/Sdi/CloudProvider/Terra/050CloudInitBasic/secrets.auto.tfvars.template @@ -0,0 +1 @@ +hcloud_token="your_api_token_goes_here" diff --git a/Doc/Sdi/CloudProvider/Terra/050CloudInitBasic/userData.yml b/Doc/Sdi/CloudProvider/Terra/050CloudInitBasic/userData.yml new file mode 100644 index 000000000..89e3a181e --- /dev/null +++ b/Doc/Sdi/CloudProvider/Terra/050CloudInitBasic/userData.yml @@ -0,0 +1,7 @@ +#cloud-config +packages: + - nginx +runcmd: + - systemctl enable nginx + - rm /var/www/html/* + - echo "Hello! I am Nginx @ $(curl -s ipinfo.io/ip)! This record added at $(date -u)." >>/var/www/html/index.html diff --git a/Doc/Sdi/CloudProvider/Terra/050CloudInitBasic/variables.tf b/Doc/Sdi/CloudProvider/Terra/050CloudInitBasic/variables.tf new file mode 100644 index 000000000..3eefa6804 --- /dev/null +++ b/Doc/Sdi/CloudProvider/Terra/050CloudInitBasic/variables.tf @@ -0,0 +1,4 @@ +variable "hcloud_token" { # See secret.auto.tfvars + nullable = false + sensitive = true +} \ No newline at end of file -- GitLab