terraform/emqx/main.tf (82 lines of code) (raw):
# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
provider "google" {
project = var.project_id
region = var.region
}
resource "local_file" "tf_backend_config" {
file_permission = "0644"
filename = "backend.tf"
content = templatefile("../templates/backend.tftpl", {
bucket = var.tf_state_bucket
prefix = "broker/terraform/state"
})
}
data "google_client_config" "provider" {}
data "google_container_cluster" "my_cluster" {
name = var.gke_cluster_name
location = var.region
}
locals {
deployment_prefix = "emqx"
emqx_server_cert_id = "${local.deployment_prefix}-server-cert"
network_name = "${local.deployment_prefix}-network"
kubernetes_host = "https://${data.google_container_cluster.my_cluster.endpoint}"
kubernetes_cluster_ca_certificate = base64decode(
data.google_container_cluster.my_cluster.master_auth[0].cluster_ca_certificate,
)
}
provider "kubernetes" {
host = local.kubernetes_host
token = data.google_client_config.provider.access_token
cluster_ca_certificate = local.kubernetes_cluster_ca_certificate
}
provider "helm" {
kubernetes {
host = local.kubernetes_host
token = data.google_client_config.provider.access_token
cluster_ca_certificate = local.kubernetes_cluster_ca_certificate
}
}
module "emqx_operator" {
source = "../modules/emqx-operator"
}
module "emqx_broker_ee" {
count = var.emqx_broker_type == "ee" ? 1 : 0
source = "../modules/emqx-ee"
project_id = var.project_id
cluster_name = var.gke_cluster_name
cluster_location = var.region
module_depends_on = [
module.emqx_operator.operator_status
]
}
module "emqx_broker_oss" {
count = var.emqx_broker_type == "oss" ? 1 : 0
source = "../modules/emqx-oss"
project_id = var.project_id
cluster_name = var.gke_cluster_name
cluster_location = var.region
module_depends_on = [
module.emqx_operator.operator_status
]
}
# IAP resources
module "iap" {
source = "../modules/iap"
iap_support_email = var.iap_support_email
}
module "admin_load_balancer" {
source = "../modules/admin-lb"
external_address_name = "emqx-admin-ui"
admin_ingress_name = "emqx-admin-ui-ingress"
admin_domain = var.emqx_domain
admin_server_cert_id = local.emqx_server_cert_id
admin_k8s_service_name = var.emqx_broker_type == "oss" ? module.emqx_broker_oss[0].admin_service_name : module.emqx_broker_ee[0].admin_service_name
admin_k8s_service_port = var.emqx_broker_type == "oss" ? module.emqx_broker_oss[0].admin_service_port : module.emqx_broker_ee[0].admin_service_port
admin_domain_prefix = "emqx"
mqtt_domain_prefix = "mqtt"
}
module "mqtt_load_balancer" {
source = "../modules/mqtt-lb"
vpc_id = local.network_name
server_certificate_name = module.admin_load_balancer.server_certificate_name
network_endpoint_groups = var.emqx_broker_type == "oss" ? module.emqx_broker_oss[0].network_endpoint_groups : module.emqx_broker_ee[0].network_endpoint_groups
}