Murat ÖZDEMİR 2d515f7206 Add initial Terraform infrastructure for Hetzner test environment
This commit introduces the foundational Infrastructure-as-Code for provisioning a test environment on Hetzner Cloud. It defines server nodes, private networking, comprehensive firewalls, and includes documentation on resource lifecycle and safe configuration practices.
2026-05-10 14:09:23 +03:00

72 lines
1.9 KiB
HCL

resource "hcloud_ssh_key" "admin" {
name = "${local.name_prefix}-admin-key"
public_key = file(var.admin_ssh_public_key_path)
}
resource "hcloud_server" "swarm" {
name = "${var.environment}-swarm-01"
server_type = var.server_type_swarm
image = var.image
location = var.location
ssh_keys = [hcloud_ssh_key.admin.id]
placement_group_id = hcloud_placement_group.test_spread.id
labels = {
environment = var.environment
role = "swarm"
type = "service"
}
# prevent_destroy: Terraform'un sunucuyu kazara silmesini engeller.
# Kasitli silmek icin once bu bloku kaldir.
lifecycle {
prevent_destroy = true
}
}
resource "hcloud_server" "db" {
name = "${var.environment}-db-01"
server_type = var.server_type_db
image = var.image
location = var.location
ssh_keys = [hcloud_ssh_key.admin.id]
placement_group_id = hcloud_placement_group.test_spread.id
labels = {
environment = var.environment
role = "db"
type = "db"
}
lifecycle {
prevent_destroy = true
}
}
# Ayri resource: firewall veya network degistiginde sunucu recreation tetiklenmez.
resource "hcloud_server_network" "swarm" {
server_id = hcloud_server.swarm.id
network_id = hcloud_network.main.id
ip = local.swarm_private_ip
depends_on = [hcloud_network_subnet.app]
}
resource "hcloud_server_network" "db" {
server_id = hcloud_server.db.id
network_id = hcloud_network.main.id
ip = local.db_private_ip
depends_on = [hcloud_network_subnet.db]
}
resource "hcloud_firewall_attachment" "swarm" {
firewall_id = hcloud_firewall.swarm.id
server_ids = [hcloud_server.swarm.id]
}
resource "hcloud_firewall_attachment" "db" {
firewall_id = hcloud_firewall.db.id
server_ids = [hcloud_server.db.id]
}