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