- This commit introduces the Terraform configuration to provision a production environment on Hetzner Cloud, building on the existing test setup. - Key improvements and new features include: * **Multi-node clusters:** Scaling to 3-node Swarm application and database clusters for improved resilience. * **High availability:** Utilizing a Hetzner Floating IP for the application entry point and `spread` placement groups for fault tolerance across physical hosts. * **Enhanced network security:** Internal management services (RabbitMQ, APISIX, Prometheus, Grafana) are restricted to the application subnet, expected to be accessed via an internal reverse proxy (SWAG). * **Internal database replication:** New firewall rules enable PostgreSQL replication and MongoDB replica set traffic within the database subnet. * **Refined test environment:** Updates to align `test` configuration with the new `prod` structure, including a dedicated floating IP and adjusted firewall rules. * **Configuration standardization:** Environment-specific details moved to `locals.tf` for clarity, with upgraded server types and migration to Rocky Linux as the base image. - Updates were also made to the latest version of Terraform to ensure consistency in the documentation
53 lines
1.3 KiB
HCL
53 lines
1.3 KiB
HCL
output "ansible_inventory_yaml" {
|
|
description = "Ansible inventory in YAML format — write to ansible/inventory/generated/test.yml"
|
|
sensitive = false
|
|
value = yamlencode({
|
|
all = {
|
|
children = {
|
|
swarm = {
|
|
hosts = {
|
|
(hcloud_server.swarm.name) = {
|
|
ansible_host = hcloud_server.swarm.ipv4_address
|
|
private_ip = local.swarm_private_ip
|
|
ansible_user = "root"
|
|
}
|
|
}
|
|
}
|
|
db = {
|
|
hosts = {
|
|
(hcloud_server.db.name) = {
|
|
ansible_host = hcloud_server.db.ipv4_address
|
|
private_ip = local.db_private_ip
|
|
ansible_user = "root"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
output "test_private_ips" {
|
|
description = "Private IPs assigned to test nodes"
|
|
sensitive = false
|
|
value = {
|
|
swarm_01 = local.swarm_private_ip
|
|
db_01 = local.db_private_ip
|
|
}
|
|
}
|
|
|
|
output "test_public_ips" {
|
|
description = "Public IPv4 addresses of test nodes"
|
|
sensitive = false
|
|
value = {
|
|
swarm_01 = hcloud_server.swarm.ipv4_address
|
|
db_01 = hcloud_server.db.ipv4_address
|
|
}
|
|
}
|
|
|
|
output "test_floating_ip" {
|
|
description = "Floating IP for test app entry point — point DNS A records here"
|
|
sensitive = false
|
|
value = hcloud_floating_ip.app.ip_address
|
|
}
|