diff --git a/cloudflare.tf b/cloudflare.tf index 23557a6..3166480 100644 --- a/cloudflare.tf +++ b/cloudflare.tf @@ -20,9 +20,13 @@ locals { demeter_providers = [ { name = "blinklabs-us" - cardano_node = { + node = { enabled = true - address = "blinklabs-us-cardano-node.blinklabs.io" + networks = { + cardano_preview = "blinklabs-us-cardano-node.blinklabs.io" + cardano_preprod = "blinklabs-us-cardano-node.blinklabs.io" + cardano_mainnet = "blinklabs-us-cardano-node.blinklabs.io" + } } kupo = { enabled = true @@ -47,9 +51,14 @@ locals { }, { name = "txpipe-m2" - cardano_node = { + node = { enabled = true - address = "cnode-m1.demeter.run" + networks = { + cardano_preview = "txpipe.cardano-preview.cnode-m1.demeter.run" + cardano_preprod = "txpipe.cardano-preprod.cnode-m1.demeter.run" + cardano_mainnet = "txpipe.cardano-mainnet.cnode-m1.demeter.run" + vector_testnet = "txpipe.vector-testnet.cnode-m1.demeter.run" + } } kupo = { enabled = true @@ -65,6 +74,7 @@ locals { cardano_preview = "preview-v6.ogmios-m1.demeter.run" cardano_preprod = "preprod-v6.ogmios-m1.demeter.run" cardano_mainnet = "mainnet-v6.ogmios-m1.demeter.run" + vector_testnet = "vector-testnet-v6.ogmios-m1.demeter.run" } } tx_submit_api = { @@ -170,7 +180,7 @@ resource "cloudflare_certificate_pack" "this" { // Balius // TRP - "*.trp-m1.dmtr.host", + "*.trp-m1.dmtr.host", // Mumak "*.mumak-m0.dmtr.host", @@ -180,36 +190,119 @@ resource "cloudflare_certificate_pack" "this" { validity_days = 90 } -# Cardano Node +# Node +resource "cloudflare_load_balancer_pool" "node_cardano_mainnet" { + name = "NodeCardanoMainnet" + + account_id = var.cloudflare_account_id + monitor = cloudflare_load_balancer_monitor.node_cardano_mainnet.id + + dynamic "origins" { + for_each = { for p in local.demeter_providers : p.name => p if p.node.enabled && can(p.node.networks.cardano_mainnet) } + content { + name = origins.value.name + address = origins.value.node.networks.cardano_mainnet + } + } +} + +resource "cloudflare_load_balancer" "node_cardano_mainnet" { + zone_id = var.cloudflare_zone_id + name = "*.cardano-mainnet.cnode-m1.${var.cloudflare_zone_name}" + default_pool_ids = [cloudflare_load_balancer_pool.node_cardano_mainnet.id] + fallback_pool_id = cloudflare_load_balancer_pool.node_cardano_mainnet.id + proxied = false + steering_policy = "off" +} + +resource "cloudflare_load_balancer_monitor" "node_cardano_mainnet" { + account_id = var.cloudflare_account_id + type = "http" + description = "Health check for Cardano Mainnet node." + path = "/healthcheck" + interval = 60 + timeout = 5 + retries = 2 + method = "GET" + expected_codes = "200" + allow_insecure = true + + header { + header = "Host" + values = ["cardano-mainnet.cnode-m1.dmtr.host"] + } +} + +resource "cloudflare_load_balancer_pool" "node_cardano_preprod" { + name = "NodeCardanoPreprod" + + account_id = var.cloudflare_account_id + monitor = cloudflare_load_balancer_monitor.node_cardano_preprod.id + + dynamic "origins" { + for_each = { for p in local.demeter_providers : p.name => p if p.node.enabled && can(p.node.networks.cardano_preprod) } + content { + name = origins.value.name + address = origins.value.node.networks.cardano_preprod + } + } +} + +resource "cloudflare_load_balancer" "node_cardano_preprod" { + zone_id = var.cloudflare_zone_id + name = "*.cardano-preprod.cnode-m1.${var.cloudflare_zone_name}" + default_pool_ids = [cloudflare_load_balancer_pool.node_cardano_preprod.id] + fallback_pool_id = cloudflare_load_balancer_pool.node_cardano_preprod.id + proxied = false + steering_policy = "off" +} + +resource "cloudflare_load_balancer_monitor" "node_cardano_preprod" { + account_id = var.cloudflare_account_id + type = "http" + description = "Health check for Cardano preprod node." + path = "/healthcheck" + interval = 60 + timeout = 5 + retries = 2 + method = "GET" + expected_codes = "200" + allow_insecure = true + + header { + header = "Host" + values = ["cardano-preprod.cnode-m1.dmtr.host"] + } +} -resource "cloudflare_load_balancer_pool" "cardano_node_m1" { - name = "CardanoNodeM1" +resource "cloudflare_load_balancer_pool" "node_cardano_preview" { + name = "NodeCardanoPreview" account_id = var.cloudflare_account_id - monitor = cloudflare_load_balancer_monitor.cardano_node_m1_monitor.id + monitor = cloudflare_load_balancer_monitor.node_cardano_preview.id dynamic "origins" { - for_each = { for p in local.demeter_providers : p.name => p if p.cardano_node.enabled } + for_each = { for p in local.demeter_providers : p.name => p if p.node.enabled && can(p.node.networks.cardano_preview) } content { name = origins.value.name - address = origins.value.cardano_node.address != "" ? origins.value.cardano_node.address : "${origins.value.name}.${var.cloudflare_zone_name}" + address = origins.value.node.networks.cardano_preview } } } -resource "cloudflare_load_balancer" "cardano_node_m1" { +resource "cloudflare_load_balancer" "node_cardano_preview" { zone_id = var.cloudflare_zone_id - name = "*.cnode-m1.${var.cloudflare_zone_name}" - default_pool_ids = [cloudflare_load_balancer_pool.cardano_node_m1.id] - fallback_pool_id = cloudflare_load_balancer_pool.cardano_node_m1.id + name = "*.cardano-preview.cnode-m1.${var.cloudflare_zone_name}" + default_pool_ids = [cloudflare_load_balancer_pool.node_cardano_preview.id] + fallback_pool_id = cloudflare_load_balancer_pool.node_cardano_preview.id proxied = false steering_policy = "off" } -resource "cloudflare_load_balancer_monitor" "cardano_node_m1_monitor" { +resource "cloudflare_load_balancer_monitor" "node_cardano_preview" { account_id = var.cloudflare_account_id type = "http" - description = "Health check for cardano_node_m1" + description = "Health check for Cardano preview node." path = "/healthcheck" interval = 60 timeout = 5 @@ -220,7 +313,49 @@ resource "cloudflare_load_balancer_monitor" "cardano_node_m1_monitor" { header { header = "Host" - values = ["cnode-m1.dmtr.host"] + values = ["cardano-preview.cnode-m1.dmtr.host"] + } +} + +resource "cloudflare_load_balancer_pool" "node_vector_testnet" { + name = "NodeVectorTestnet" + + account_id = var.cloudflare_account_id + monitor = cloudflare_load_balancer_monitor.node_vector_testnet.id + + dynamic "origins" { + for_each = { for p in local.demeter_providers : p.name => p if p.node.enabled && can(p.node.networks.vector_testnet) } + content { + name = origins.value.name + address = origins.value.node.networks.vector_testnet + } + } +} + +resource "cloudflare_load_balancer" "node_vector_testnet" { + zone_id = var.cloudflare_zone_id + name = "*.vector_testnet.cnode-m1.${var.cloudflare_zone_name}" + default_pool_ids = [cloudflare_load_balancer_pool.node_cardano_preview.id] + fallback_pool_id = cloudflare_load_balancer_pool.node_cardano_preview.id + proxied = false + steering_policy = "off" +} + +resource "cloudflare_load_balancer_monitor" "node_vector_testnet" { + account_id = var.cloudflare_account_id + type = "http" + description = "Health check for vector testnet node." + path = "/healthcheck" + interval = 60 + timeout = 5 + retries = 2 + method = "GET" + expected_codes = "200" + allow_insecure = true + + header { + header = "Host" + values = ["vector-testnet.cnode-m1.dmtr.host"] } } @@ -515,6 +650,56 @@ resource "cloudflare_load_balancer_monitor" "ogmios_mainnet_monitor" { } } +resource "cloudflare_load_balancer_pool" "ogmios_vector_testnet" { + name = "OgmiosVectorTestnet" + account_id = var.cloudflare_account_id + monitor = cloudflare_load_balancer_monitor.ogmios_vector_testnet_monitor.id + + dynamic "origins" { + for_each = { for p in local.demeter_providers : p.name => p if p.ogmios.enabled && can(p.ogmios.networks.vector_testnet) } + content { + name = origins.value.name + address = origins.value.ogmios.networks.vector_testnet + } + } +} + +resource "cloudflare_load_balancer" "ogmios_vector_testnet" { + zone_id = var.cloudflare_zone_id + name = "vector-testnet-v6.ogmios-m1.${var.cloudflare_zone_name}" + default_pool_ids = [cloudflare_load_balancer_pool.ogmios_vector_testnet.id] + fallback_pool_id = cloudflare_load_balancer_pool.ogmios_vector_testnet.id + proxied = true + steering_policy = "off" +} + +resource "cloudflare_load_balancer" "ogmios_vector_testnet_splat" { + zone_id = var.cloudflare_zone_id + name = "*.vector-testnet-v6.ogmios-m1.${var.cloudflare_zone_name}" + default_pool_ids = [cloudflare_load_balancer_pool.ogmios_vector_testnet.id] + fallback_pool_id = cloudflare_load_balancer_pool.ogmios_vector_testnet.id + proxied = true + steering_policy = "off" +} + +resource "cloudflare_load_balancer_monitor" "ogmios_vector_testnet_monitor" { + account_id = var.cloudflare_account_id + type = "https" + description = "Health check for OgmiosVectorTestnet" + path = "/healthz" + interval = 60 + timeout = 5 + retries = 2 + method = "GET" + expected_codes = "200" + allow_insecure = true + + header { + header = "Host" + values = ["health.vector-testnet-v6.ogmios-m1.dmtr.host"] + } +} + # Tx-Submit-API resource "cloudflare_load_balancer_pool" "tx_submit_api_m1" { name = "TxSubmitApiM1"