anthos-onprem-terraform/avmw_user_cluster_metallb/main.tf (119 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.
*/
#[START anthos_onprem_terraform_vmware_user_cluster_metallb_main]
module "enable_google_apis_primary" {
source = "terraform-google-modules/project-factory/google//modules/project_services"
version = "~> 18.0"
project_id = var.project_id
activate_apis = [
"cloudresourcemanager.googleapis.com",
"anthos.googleapis.com",
"anthosgke.googleapis.com",
"container.googleapis.com",
"gkeconnect.googleapis.com",
"gkehub.googleapis.com",
"serviceusage.googleapis.com",
"stackdriver.googleapis.com",
"monitoring.googleapis.com",
"logging.googleapis.com",
"iam.googleapis.com",
"compute.googleapis.com",
"anthosaudit.googleapis.com",
"opsconfigmonitoring.googleapis.com",
"file.googleapis.com",
"connectgateway.googleapis.com"
]
disable_services_on_destroy = false
}
# Enable GKE OnPrem API
resource "google_project_service" "default" {
project = var.project_id
service = "gkeonprem.googleapis.com"
disable_on_destroy = false
}
# This module is used to update the platform controller on your admin cluster. This
# is a necessary step for the user cluster version update. If the admin cluster is
# already on the correct version, then this module does not change anything
module "gcloud_update_admin_cluster_platform_controller" {
source = "terraform-google-modules/gcloud/google"
version = "~> 3.0"
platform = "linux"
create_cmd_entrypoint = "gcloud"
create_cmd_body = <<EOT
beta container vmware admin-clusters \
update ${var.admin_cluster_name} \
--required-platform-version=${var.on_prem_version} \
--project ${var.project_id} \
--location ${var.region}
EOT
}
# Create an anthos vmware user cluster and enroll it with the gkeonprem API
resource "google_gkeonprem_vmware_cluster" "default" {
name = var.cluster_name
description = "Anthos VMware user cluster with MetalLB"
provider = google-beta
depends_on = [
google_project_service.default,
module.gcloud_update_admin_cluster_platform_controller
]
location = var.region
on_prem_version = var.on_prem_version
admin_cluster_membership = "projects/${var.project_id}/locations/global/memberships/${var.admin_cluster_name}"
network_config {
service_address_cidr_blocks = ["10.96.0.0/12"]
pod_address_cidr_blocks = ["192.168.0.0/16"]
dhcp_ip_config {
enabled = true
}
}
control_plane_node {
cpus = var.control_plane_node_cpus
memory = var.control_plane_node_memory
replicas = var.control_plane_node_replicas
}
load_balancer {
vip_config {
control_plane_vip = var.control_plane_vip
ingress_vip = var.ingress_vip
}
metal_lb_config {
dynamic "address_pools" {
for_each = var.lb_address_pools
content {
pool = address_pools.value.name
addresses = address_pools.value.addresses
}
}
}
}
authorization {
dynamic "admin_users" {
for_each = var.admin_user_emails
content {
username = admin_users.value
}
}
}
}
# Create a node pool for the anthos vmware user cluster
resource "google_gkeonprem_vmware_node_pool" "default" {
name = "${var.cluster_name}-nodepool"
display_name = "Nodepool for ${var.cluster_name}"
provider = google-beta
vmware_cluster = google_gkeonprem_vmware_cluster.default.name
location = var.region
config {
replicas = 3
image_type = "ubuntu_containerd"
enable_load_balancer = true
}
depends_on = [
google_gkeonprem_vmware_cluster.default
]
}
#[END anthos_onprem_terraform_vmware_user_cluster_metallb_main]