main.tf
1 terraform { 2 required_providers { 3 cloudflare = { 4 source = "cloudflare/cloudflare" 5 version = "~> 4.0" 6 } 7 hcloud = { 8 source = "hetznercloud/hcloud" 9 version = "~> 1.45" 10 } 11 scaleway = { 12 source = "scaleway/scaleway" 13 version = ">= 0.13" 14 } 15 } 16 } 17 18 # Configure the Hetzner Cloud Provider 19 provider "hcloud" { 20 token = var.hcloud_token 21 } 22 23 provider "scaleway" { 24 profile = "garden_infra" 25 } 26 27 28 provider "cloudflare" { 29 api_token = var.cloudflare_api_token 30 } 31 provider "cloudflare" { 32 alias = "radiclegarden" 33 api_token = var.garden_cf_api_token 34 } 35 36 module "hetzner" { 37 source = "./modules/hetzner" 38 count = var.hcloud_token == "this_is_not_a_real_hcloud_token_but_only_used_to_avoid_failures_" ? 0 : 1 39 providers = { 40 hcloud = hcloud 41 } 42 } 43 44 module "scaleway" { 45 source = "./modules/scaleway" 46 count = var.scaleway_project_id == null ? 0 : 1 47 providers = { 48 scaleway = scaleway 49 } 50 project_id = var.scaleway_project_id 51 vm_image_name = "${var.distribution}_${var.distribution_version}" 52 production_internal_network_id = module.base_infra[0].radworks-network-id-production 53 internal_network_subnet_production = module.base_infra[0].radworks-network-subnet-production 54 test_node_count = var.test_node_count 55 gardener_node_count = var.gardener_node_count 56 customer_domain = var.customer_domain 57 garden_domain = var.garden_domain 58 host_signing_ca_path = var.host_signing_ca_path 59 user_signing_ca_public_key_path = var.user_signing_ca_public_key_path 60 scaleway_iam_user_id = var.scaleway_iam_user_id 61 } 62 63 64 module "base_infra" { 65 source = "./modules/base_infra" 66 count = var.scaleway_project_id == null ? 0 : 1 67 providers = { 68 scaleway = scaleway 69 } 70 project_id = var.scaleway_project_id 71 vm_image_name = "${var.distribution}_${var.distribution_version}" 72 customer_domain = var.customer_domain 73 host_signing_ca_path = var.host_signing_ca_path 74 user_signing_ca_public_key_path = var.user_signing_ca_public_key_path 75 } 76 77 module "cloudflare" { 78 source = "./modules/cloudflare" 79 cloudflare_zone_id = var.cloudflare_zone_id 80 garden_cf_zone_id = var.garden_cf_zone_id 81 node_public_ipv4_address = length(module.hetzner) == 0 ? module.scaleway[0].node_public_ipv4_address : module.hetzner[0].node_public_ipv4_address 82 gardener_node_public_ipv4_addresses = length(module.hetzner) == 0 ? module.scaleway[0].gardener_node_public_ipv4_addresses : module.hetzner[0].node_public_ipv4_address 83 providers = { 84 cloudflare.radworks = cloudflare 85 cloudflare.radiclegarden = cloudflare.radiclegarden 86 } 87 count = var.cloudflare_api_token == null ? 0 : 1 88 customer_domain = var.customer_domain 89 garden_domain = var.garden_domain 90 91 test_node_count = var.test_node_count 92 gardener_node_count = var.gardener_node_count 93 94 resend_mx = var.resend_mx 95 resend_txt_spf = var.resend_txt_spf 96 resend_txt_domainkey = var.resend_txt_domainkey 97 resend_dmarc = var.resend_dmarc 98 } 99