anthos-onprem-terraform/abm_user_cluster_metallb/main.tf (150 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_bare_metal_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
}
# Create an anthos baremetal user cluster and enroll it with the gkeonprem API
resource "google_gkeonprem_bare_metal_cluster" "default" {
name = var.cluster_name
description = "Anthos bare metal user cluster with MetalLB"
provider = google-beta
depends_on = [google_project_service.default]
location = var.region
bare_metal_version = var.bare_metal_version
admin_cluster_membership = "projects/${var.project_id}/locations/global/memberships/${var.admin_cluster_name}"
network_config {
island_mode_cidr {
service_address_cidr_blocks = ["172.26.0.0/16"]
pod_address_cidr_blocks = ["10.240.0.0/13"]
}
}
control_plane {
control_plane_node_pool_config {
node_pool_config {
operating_system = "LINUX"
dynamic "node_configs" {
for_each = var.control_plane_ips
content {
node_ip = node_configs.value
}
}
}
}
}
load_balancer {
port_config {
control_plane_load_balancer_port = 443
}
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
}
}
}
}
storage {
lvp_share_config {
lvp_config {
path = "/mnt/localpv-share"
storage_class = "local-shared"
}
shared_path_pv_count = 5
}
lvp_node_mounts_config {
path = "/mnt/localpv-disk"
storage_class = "local-disks"
}
}
dynamic "security_config" {
for_each = length(var.admin_user_emails) == 0 ? [] : [1]
content {
authorization {
dynamic "admin_users" {
for_each = var.admin_user_emails
content {
username = admin_users.value
}
}
}
}
}
lifecycle {
ignore_changes = [
annotations["onprem.cluster.gke.io/user-cluster-resource-link"],
annotations["alpha.baremetal.cluster.gke.io/cluster-metrics-webhook"],
annotations["baremetal.cluster.gke.io/operation"],
annotations["baremetal.cluster.gke.io/operation-id"],
annotations["baremetal.cluster.gke.io/start-time"],
annotations["baremetal.cluster.gke.io/upgrade-from-version"]
]
}
}
# Create a node pool of worker nodes for the anthos baremetal user cluster
resource "google_gkeonprem_bare_metal_node_pool" "default" {
name = "${var.cluster_name}-nodepool"
display_name = "Nodepool for ${var.cluster_name}"
provider = google-beta
bare_metal_cluster = google_gkeonprem_bare_metal_cluster.default.name
location = var.region
node_pool_config {
operating_system = "LINUX"
labels = {}
dynamic "node_configs" {
for_each = var.worker_node_ips
content {
labels = {}
node_ip = node_configs.value
}
}
}
lifecycle {
ignore_changes = [
annotations["baremetal.cluster.gke.io/gke-version"],
annotations["baremetal.cluster.gke.io/version"],
]
}
}
#[END anthos_onprem_terraform_bare_metal_user_cluster_metallb_main]