/ terraform / main.tf
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