terraform/modules/awx/main.tf (112 lines of code) (raw):

/** * Copyright 2021 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 { access_config = var.assign_public_ip ? [{ nat_ip = null network_tier = "PREMIUM" }] : [] awx_tag = "awx" iap_range = "35.235.240.0/20" network_parts = split("/", data.google_compute_subnetwork.subnetwork.network) network = element(local.network_parts, length(local.network_parts) - 1) subnetwork_project_id = var.subnetwork_project_id != "" ? var.subnetwork_project_id : var.project_id subnetwork_project_roles = var.subnetwork_project_id == "" ? toset([]) : toset([ "roles/compute.networkAdmin", "roles/compute.securityAdmin", "roles/iam.securityAdmin", ]) tags = toset(concat([local.awx_tag], var.tags)) } data "google_compute_subnetwork" "subnetwork" { name = var.subnetwork project = local.subnetwork_project_id region = var.region } resource "google_compute_firewall" "allow_iap" { name = "${var.instance_name}-allow-iap" network = local.network allow { protocol = "TCP" ports = ["80"] } project = local.subnetwork_project_id source_ranges = [local.iap_range] target_tags = [local.awx_tag] } resource "google_project_iam_member" "shared_vpc_project_iam_member" { for_each = local.subnetwork_project_roles project = var.subnetwork_project_id role = each.value member = "serviceAccount:${module.service_account.email}" } module "service_account" { source = "terraform-google-modules/service-accounts/google" version = "= 3.0.1" project_id = var.project_id names = [var.instance_name] project_roles = [ "${var.project_id}=>roles/compute.instanceAdmin", "${var.project_id}=>roles/compute.instanceAdmin.v1", "${var.project_id}=>roles/compute.networkAdmin", "${var.project_id}=>roles/compute.securityAdmin", "${var.project_id}=>roles/compute.storageAdmin", "${var.project_id}=>roles/storage.admin", "${var.project_id}=>roles/file.editor", "${var.project_id}=>roles/iam.serviceAccountAdmin", "${var.project_id}=>roles/iam.serviceAccountUser", "${var.project_id}=>roles/iam.securityAdmin", "${var.project_id}=>roles/servicenetworking.networksAdmin", ] } module "instance_template" { source = "terraform-google-modules/vm/google//modules/instance_template" version = "5.1.0" access_config = local.access_config machine_type = var.machine_type name_prefix = var.instance_name project_id = var.project_id region = var.region service_account = { email = module.service_account.email, scopes = ["cloud-platform"] } source_image_family = var.source_image_family source_image_project = var.source_image_project subnetwork = var.subnetwork subnetwork_project = local.subnetwork_project_id tags = local.tags } module "compute_instance" { source = "terraform-google-modules/vm/google//modules/compute_instance" version = "5.1.0" access_config = local.access_config instance_template = module.instance_template.self_link hostname = var.instance_name num_instances = 1 region = var.region subnetwork = var.subnetwork subnetwork_project = local.subnetwork_project_id } module "cloud_nat" { source = "terraform-google-modules/cloud-router/google" version = "0.3.0" count = var.nat_create ? 1 : 0 name = "${var.instance_name}-router" nats = [{name = "${var.instance_name}-nat"}] network = local.network project = local.subnetwork_project_id region = var.region }