re-implement previous functionalities with cloud deployment and usb drive creation
This commit is contained in:
90
terraform/main.tf
Normal file
90
terraform/main.tf
Normal file
@@ -0,0 +1,90 @@
|
||||
terraform {
|
||||
required_providers {
|
||||
hcloud = {
|
||||
source = "hetznercloud/hcloud"
|
||||
version = "~> 1.48"
|
||||
}
|
||||
hetznerdns = {
|
||||
source = "timohirt/hetznerdns"
|
||||
version = "~> 2.2"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
locals {
|
||||
domain = var.domain
|
||||
participants = [
|
||||
"hopper", "curie", "lovelace", "noether", "hamilton",
|
||||
"franklin", "johnson", "clarke", "goldberg", "liskov",
|
||||
"wing", "rosen", "shaw", "karp", "rich"
|
||||
]
|
||||
}
|
||||
|
||||
provider "hcloud" {
|
||||
token = var.hcloud_token
|
||||
}
|
||||
|
||||
provider "hetznerdns" {
|
||||
apitoken = var.hetzner_dns_token
|
||||
}
|
||||
|
||||
resource "hcloud_ssh_key" "workshop" {
|
||||
name = "code-crispies-workshop"
|
||||
public_key = var.ssh_public_key
|
||||
}
|
||||
|
||||
resource "hcloud_server" "participant" {
|
||||
for_each = toset(local.participants)
|
||||
|
||||
name = each.key
|
||||
image = "ubuntu-22.04"
|
||||
server_type = "cx21"
|
||||
location = "nbg1"
|
||||
|
||||
ssh_keys = [hcloud_ssh_key.workshop.id]
|
||||
|
||||
user_data = templatefile("${path.module}/cloud-init.yml", {
|
||||
participant_name = each.key
|
||||
domain = local.domain
|
||||
ssh_public_key = var.ssh_public_key
|
||||
})
|
||||
|
||||
labels = {
|
||||
project = "code-crispies-workshop"
|
||||
participant = each.key
|
||||
}
|
||||
}
|
||||
|
||||
resource "hetznerdns_record" "participant_main" {
|
||||
for_each = toset(local.participants)
|
||||
|
||||
zone_id = var.dns_zone_id
|
||||
name = each.key
|
||||
type = "A"
|
||||
value = hcloud_server.participant[each.key].ipv4_address
|
||||
ttl = 60
|
||||
}
|
||||
|
||||
resource "hetznerdns_record" "participant_wildcard" {
|
||||
for_each = toset(local.participants)
|
||||
|
||||
zone_id = var.dns_zone_id
|
||||
name = "*.${each.key}"
|
||||
type = "A"
|
||||
value = hcloud_server.participant[each.key].ipv4_address
|
||||
ttl = 60
|
||||
}
|
||||
|
||||
output "participant_ips" {
|
||||
value = {
|
||||
for name, server in hcloud_server.participant : name => server.ipv4_address
|
||||
}
|
||||
description = "IP addresses of participant servers"
|
||||
}
|
||||
|
||||
output "participant_urls" {
|
||||
value = {
|
||||
for name, server in hcloud_server.participant : name => "https://traefik.${name}.${local.domain}"
|
||||
}
|
||||
description = "Traefik URLs for each participant"
|
||||
}
|
||||
Reference in New Issue
Block a user