terraform/modules/config_controller/main.tf (105 lines of code) (raw):
# Copyright 2024 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.
locals {
cluster_name = "krmapihost-${var.name}"
kubeconfig_file_name = "${var.project_id}_${local.cluster_name}"
kubeconfig_file_path = "${var.kubeconfig_directory}/${local.kubeconfig_file_name}"
}
data "google_project" "project" {
project_id = var.project_id
}
resource "google_project_service" "anthos_googleapis_com" {
disable_dependent_services = false
disable_on_destroy = false
project = data.google_project.project.project_id
service = "anthos.googleapis.com"
}
resource "google_project_service" "cloudresourcemanager_googleapis_com" {
disable_dependent_services = false
disable_on_destroy = false
project = data.google_project.project.project_id
service = "cloudresourcemanager.googleapis.com"
}
resource "google_project_service" "container_googleapis_com" {
disable_dependent_services = false
disable_on_destroy = false
project = data.google_project.project.project_id
service = "container.googleapis.com"
}
resource "google_project_service" "krmapihosting_googleapis_com" {
disable_dependent_services = false
disable_on_destroy = false
project = data.google_project.project.project_id
service = "krmapihosting.googleapis.com"
}
resource "google_project_service" "serviceusage_googleapis_com" {
disable_dependent_services = false
disable_on_destroy = false
project = data.google_project.project.project_id
service = "serviceusage.googleapis.com"
}
resource "null_resource" "config_controller" {
provisioner "local-exec" {
command = "scripts/gcloud_create.sh"
environment = {
FULL_MANAGEMENT = self.triggers.FULL_MANAGEMENT
LOCATION = self.triggers.LOCATION
NAME = self.triggers.NAME
NETWORK = self.triggers.NETWORK
PROJECT_ID = self.triggers.PROJECT_ID
SUBNET = self.triggers.SUBNET
}
interpreter = ["bash", "-c"]
working_dir = path.module
}
provisioner "local-exec" {
command = "scripts/gcloud_delete.sh"
environment = {
LOCATION = self.triggers.LOCATION
NAME = self.triggers.NAME
PROJECT_ID = self.triggers.PROJECT_ID
}
interpreter = ["bash", "-c"]
when = destroy
working_dir = path.module
}
triggers = {
FULL_MANAGEMENT = var.full_management
LOCATION = var.location
NAME = var.name
NETWORK = var.network
PROJECT_ID = var.project_id
SUBNET = var.subnet
}
}
data "google_container_cluster" "config_controller" {
depends_on = [
null_resource.config_controller
]
location = var.location
name = local.cluster_name
project = data.google_project.project.project_id
}
resource "null_resource" "kubeconfig" {
provisioner "local-exec" {
command = <<EOT
KUBECONFIG="${self.triggers.KUBECONFIG_FILE_NAME}" \
gcloud anthos config controller get-credentials ${self.triggers.NAME} \
--location ${self.triggers.LOCATION} \
--project ${self.triggers.PROJECT_ID}
EOT
interpreter = ["bash", "-c"]
working_dir = self.triggers.KUBECONFIG_DIRECTORY
}
provisioner "local-exec" {
command = "rm -f ${self.triggers.KUBECONFIG_FILE_NAME}"
when = destroy
interpreter = ["bash", "-c"]
working_dir = self.triggers.KUBECONFIG_DIRECTORY
}
triggers = {
NAME = var.name
KUBECONFIG_DIRECTORY = var.kubeconfig_directory
KUBECONFIG_FILE_NAME = local.kubeconfig_file_name
LOCATION = var.location
PROJECT_ID = data.google_project.project.project_id
}
}