builds/infra_terraform.yaml (94 lines of code) (raw):
# Copyright 2022 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.
timeout: 14400s # 2hr
substitutions:
_PROJECT_ID: ${PROJECT_ID}
_DEBUG_SKIP_INFRA: "false" # used to skip infra portions while testing asm and gateway deployments only
_VPC: "true"
_GKE: "true"
_KUBE_VERSION: 1.28.7-gke.1026000 # via: https://cloud.google.com/kubernetes-engine/docs/release-notes
tags:
- infra-main-terraform
steps:
# Build GCS storage bucket for TF state, project files, vars.sh etc
# This step creates a GCS storage bucket in the project with the name of project ID.
# This step creates the following resources:
# GCS storage bucket (with versioning enabled) named PROJECT_ID.
- name: "gcr.io/cloud-builders/gcloud"
id: "infra-create-gcs"
entrypoint: bash
args:
- -c
- |
exec gcloud builds submit --config builds/terraform/infra-create-gcs.yaml --substitutions=_PROJECT_ID=${_PROJECT_ID}
# Enable APIs
- name: "gcr.io/cloud-builders/gcloud"
id: "infra-enable-apis"
entrypoint: bash
args:
- -c
- |
[[ "${_DEBUG_SKIP_INFRA}" == "true" ]] && exit 0
exec gcloud builds submit --config builds/terraform/infra-enable-apis.yaml --substitutions=_PROJECT_ID=${_PROJECT_ID}
# Create CloudSource repos, artifact registries and triggers
- name: "gcr.io/cloud-builders/gcloud"
id: "infra-create-repos"
entrypoint: bash
args:
- -c
- |
[[ "${_DEBUG_SKIP_INFRA}" == "true" ]] && exit 0
exec gcloud builds submit --config builds/terraform/infra-create-repos.yaml --substitutions=_PROJECT_ID=${_PROJECT_ID}
# Create VPC
- name: "gcr.io/cloud-builders/gcloud"
id: "infra-create-vpc"
entrypoint: bash
args:
- -c
- |
[[ "${_DEBUG_SKIP_INFRA}" == "true" ]] && exit 0
[[ "${_VPC}" == "false" ]] && exit 0
exec gcloud builds submit --config builds/terraform/infra-create-vpc.yaml --substitutions=_PROJECT_ID=${_PROJECT_ID}
# Create GKE clusters
- name: "gcr.io/cloud-builders/gcloud"
id: "infra-create-gke"
entrypoint: bash
args:
- -c
- |
[[ "${_DEBUG_SKIP_INFRA}" == "true" ]] && exit 0
[[ "${_GKE}" == "false" ]] && exit 0
exec gcloud builds submit --config builds/terraform/infra-create-gke.yaml --substitutions=_PROJECT_ID=${_PROJECT_ID},_KUBE_VERSION=${_KUBE_VERSION}
# Confirm Mesh on GKE
# This step confirms that ASM managed control plane (MCP) is successfully Provisioned on prod GKE clusters.
- name: "gcr.io/cloud-builders/gcloud"
id: "infra-features-gke-prod-mesh-confirm"
entrypoint: bash
args:
- -c
- |
[[ "${_DEBUG_SKIP_INFRA}" == "true" ]] && exit 0
exec gcloud builds submit --config builds/infra-features-gke-prod-mesh-confirm.yaml --substitutions=_PROJECT_ID=${_PROJECT_ID}
# Configure Mesh (multicluster and telemetry) on GKE
# This step configures multicluster service discovery and access logging/tracing on the GKE clusters.
# This step creates the following resources:
# 1. Patches the existing asm-options configmap with multicluster_mode: connected.
# 2. Updates the istio-asm-managed configmap with access logging and tracing to stackdriver
- name: "gcr.io/cloud-builders/gcloud"
id: "infra-features-gke-prod-mesh-config"
entrypoint: bash
args:
- -c
- |
exec gcloud builds submit --config builds/infra-features-gke-prod-mesh-config.yaml --substitutions=_PROJECT_ID=${_PROJECT_ID}
# Configure Mesh Gateways via ACM ConfigSync
# This step deploys ASM ingress gateways on all apps clusters.
# This step creates the following resources:
# 1. Ingress gateway Deployment, Service and ServiceExport.
# 2. Required Role and RoleBinding for the KSA for all the gateways.
- name: "gcr.io/cloud-builders/gcloud"
id: "infra-features-gke-mesh-gateways"
entrypoint: bash
args:
- -c
- |
exec gcloud builds submit --config builds/infra-features-gke-mesh-gateways.yaml --substitutions=_PROJECT_ID=${_PROJECT_ID}
# Confirm Mesh gateways on GKE - prod
# This step confirms that the ASM ingress gateway and the multicluster gateway are up and running on the prod GKE clusters.
- name: "gcr.io/cloud-builders/gcloud"
id: "infra-features-gke-mesh-gateways-prod"
entrypoint: bash
args:
- -c
- |
exec gcloud builds submit --config builds/infra-features-gke-mesh-gateways-prod.yaml --substitutions=_PROJECT_ID=${_PROJECT_ID}
# Deploy MC Gateway to Config cluster
- name: "gcr.io/cloud-builders/gcloud"
id: "infra-features-gke-gateways"
entrypoint: bash
args:
- -c
- |
exec gcloud builds submit --config builds/infra-features-gke-gateway.yaml --substitutions=_PROJECT_ID=${_PROJECT_ID}
# Give the MCI service account the necessary roles
- name: "gcr.io/cloud-builders/gcloud"
id: "infra-sa-gke-roles"
entrypoint: bash
args:
- -c
- |
exec gcloud builds submit --config builds/infra-sa-gke-mci-roles.yaml --substitutions=_PROJECT_ID=${_PROJECT_ID}