Skip to content

Commit

Permalink
Merge pull request #72 from swathiswaminathan/master
Browse files Browse the repository at this point in the history
Updated TF to 0.12
  • Loading branch information
Chris Love committed Jul 25, 2019
2 parents ba07555 + e3161a9 commit a3d8e66
Show file tree
Hide file tree
Showing 8 changed files with 102 additions and 66 deletions.
2 changes: 1 addition & 1 deletion Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ metadata:
spec:
containers:
- name: ${containerName}
image: gcr.io/pso-helmsman-cicd/jenkins-k8s-node:${env.CONTAINER_VERSION}
image: gcr.io/pso-helmsman-cicd/jenkins-k8s-node:${env.JENKINS_CONTAINER_VERSION}
command: ['cat']
tty: true
volumeMounts:
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ bootstrap:
.PHONY: terraform_preapply
terraform_preapply:
terraform init terraform/
terraform validate -check-variables=false terraform/
terraform validate terraform/
terraform plan -var "project=$(PROJECT)" -out=tfplan terraform/

.PHONY: terraform
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ gcloud init

### Tools

1. [Terraform >= 0.11.7](https://www.terraform.io/downloads.html)
1. [Terraform >= 0.12](https://www.terraform.io/downloads.html)
2. [Google Cloud SDK version >= 204.0.0](https://cloud.google.com/sdk/docs/downloads-versioned-archives)
3. [kubectl matching the latest GKE version](https://kubernetes.io/docs/tasks/tools/install-kubectl/)
4. bash or bash compatible shell
Expand Down
3 changes: 2 additions & 1 deletion terraform/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,10 @@ limitations under the License.
// Provides access to available Google Container Engine versions in a zone for a given project.
// https://www.terraform.io/docs/providers/google/d/google_container_engine_versions.html
data "google_container_engine_versions" "gke_version" {
zone = "${var.zone_on_prem}"
zone = var.zone_on_prem
}

data "external" "account" {
program = ["sh", "${path.module}/../scripts/get-gcloud-account.sh"]
}

4 changes: 2 additions & 2 deletions terraform/provider.tf
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ limitations under the License.

// Configures the GCP Cloud Provider with default project and region
provider "google" {
version = "~> 1.16.2"
project = "${var.project}"
version = "~> 2.11.0"
project = var.project
}
126 changes: 71 additions & 55 deletions terraform/staging.tf
Original file line number Diff line number Diff line change
Expand Up @@ -23,72 +23,76 @@ limitations under the License.
// Reserve regional external (static) IP addresses

locals {
resource_labels = "${merge(var.labels, map("owner", data.external.account.result.gcloud_account))}"
resource_labels = merge(
var.labels,
{
"owner" = data.external.account.result.gcloud_account
},
)
}

resource "google_compute_address" "staging_public_ip_1" {
name = "gke-enterprise-demo-cloud-public-ip-1"
region = "${var.region_cloud}"
region = var.region_cloud
}

resource "google_compute_address" "staging_public_ip_2" {
name = "gke-enterprise-demo-cloud-public-ip-2"
region = "${var.region_on_prem}"
region = var.region_on_prem
}

// STAGING: invokes a module to create a policy based VPN, custom network/subnet, firewall rules as Cloud
module "staging_cloud" {
source = "modules/datacenter"
project = "${var.project}"
source = "./modules/datacenter"
project = var.project
network_name = "gke-enterprise-demo-staging-cloud"
subnet_region = "${var.region_cloud}"
primary_range = "${lookup(var.cloud, "primary_range")}"
secondary_range = "${lookup(var.cloud, "secondary_range")}"
vpn_ip = "${google_compute_address.staging_public_ip_1.address}"
peer_ip = "${google_compute_address.staging_public_ip_2.address}"
destination_range = "${lookup(var.cloud, "destination_range")}"
shared_secret = "${random_string.staging_shared_secret.result}"
subnet_region = var.region_cloud
primary_range = var.cloud["primary_range"]
secondary_range = var.cloud["secondary_range"]
vpn_ip = google_compute_address.staging_public_ip_1.address
peer_ip = google_compute_address.staging_public_ip_2.address
destination_range = var.cloud["destination_range"]
shared_secret = random_string.staging_shared_secret.result
}

// invokes a module to create policy based VPN, custom network/subnet, firewall rules as
// STAGING: on prem data center
module "staging_on_prem" {
source = "modules/datacenter"
project = "${var.project}"
source = "./modules/datacenter"
project = var.project
network_name = "gke-enterprise-demo-staging-on-prem"
subnet_region = "${var.region_on_prem}"
primary_range = "${lookup(var.on_prem, "primary_range")}"
secondary_range = "${lookup(var.on_prem, "secondary_range")}"
vpn_ip = "${google_compute_address.staging_public_ip_2.address}"
peer_ip = "${google_compute_address.staging_public_ip_1.address}"
destination_range = "${lookup(var.on_prem, "destination_range")}"
shared_secret = "${random_string.staging_shared_secret.result}"
subnet_region = var.region_on_prem
primary_range = var.on_prem["primary_range"]
secondary_range = var.on_prem["secondary_range"]
vpn_ip = google_compute_address.staging_public_ip_2.address
peer_ip = google_compute_address.staging_public_ip_1.address
destination_range = var.on_prem["destination_range"]
shared_secret = random_string.staging_shared_secret.result
}

// Creates a Google Kubernetes Engine (GKE) cluster for the on premise data center
// https://www.terraform.io/docs/providers/google/r/container_cluster.html
resource "google_container_cluster" "staging_on_prem_cluster" {
name = "gke-enterprise-staging-on-prem-cluster"
project = "${var.project}"
project = var.project

zone = "${var.zone_on_prem}"
additional_zones = "${var.zone_on_prem_failover}"
zone = var.zone_on_prem
additional_zones = var.zone_on_prem_failover

network = "${module.staging_on_prem.network}"
network = module.staging_on_prem.network

subnetwork = "${module.staging_on_prem.subnetwork}"
subnetwork = module.staging_on_prem.subnetwork
initial_node_count = 1

min_master_version = "${var.gke_master_version}"
min_master_version = var.gke_master_version

resource_labels = "${local.resource_labels}"
resource_labels = local.resource_labels

ip_allocation_policy {
cluster_secondary_range_name = "${module.staging_on_prem.secondary_range_name}"
cluster_secondary_range_name = module.staging_on_prem.secondary_range_name
}

remove_default_node_pool = true
initial_node_count = 1

addons_config {
network_policy_config {
Expand All @@ -103,7 +107,11 @@ resource "google_container_cluster" "staging_on_prem_cluster" {

// Lifecycle is used for preventing destruction of the following resources when the terraform apply again
lifecycle {
ignore_changes = ["network", "subnetwork", "ip_allocation_policy.0.services_secondary_range_name"]
ignore_changes = [
network,
subnetwork,
"ip_allocation_policy[0].services_secondary_range_name",
]
}

timeouts {
Expand All @@ -115,14 +123,14 @@ resource "google_container_cluster" "staging_on_prem_cluster" {

resource "google_container_node_pool" "staging_on_prem_cluster" {
name = "gke-enterprise-staging-on-prem-node-pool"
project = "${var.project}"
project = var.project

cluster = "${google_container_cluster.staging_on_prem_cluster.name}"
zone = "${var.zone_on_prem}"
cluster = google_container_cluster.staging_on_prem_cluster.name
zone = var.zone_on_prem
node_count = 1

node_config {
machine_type = "${lookup(var.on_prem, "machine_type")}"
machine_type = var.on_prem["machine_type"]

// https://cloud.google.com/kubernetes-engine/docs/how-to/access-scopes
// Enable private gcr.io read access for the same project
Expand All @@ -134,29 +142,31 @@ resource "google_container_node_pool" "staging_on_prem_cluster" {
}

lifecycle {
ignore_changes = ["id", "node_config.0.metadata"]
ignore_changes = [
id,
"node_config[0].metadata",
]
}
}

// Creates a Google Kubernetes Engine (GKE) cluster for the cloud
// https://www.terraform.io/docs/providers/google/r/container_cluster.html
resource "google_container_cluster" "staging_cloud_cluster" {
name = "gke-enterprise-staging-cloud-cluster"
zone = "${var.zone_cloud}"
network = "${module.staging_cloud.network}"
subnetwork = "${module.staging_cloud.subnetwork}"
zone = var.zone_cloud
network = module.staging_cloud.network
subnetwork = module.staging_cloud.subnetwork
initial_node_count = 1

min_master_version = "${var.gke_master_version}"
min_master_version = var.gke_master_version

resource_labels = "${local.resource_labels}"
resource_labels = local.resource_labels

ip_allocation_policy {
cluster_secondary_range_name = "${module.staging_cloud.secondary_range_name}"
cluster_secondary_range_name = module.staging_cloud.secondary_range_name
}

remove_default_node_pool = true
initial_node_count = 1

addons_config {
network_policy_config {
Expand All @@ -170,26 +180,29 @@ resource "google_container_cluster" "staging_cloud_cluster" {
}

lifecycle {
ignore_changes = ["network", "subnetwork", "ip_allocation_policy.0.services_secondary_range_name"]
ignore_changes = [
network,
subnetwork,
"ip_allocation_policy[0].services_secondary_range_name",
]
}

timeouts {
create = "30m"
update = "40m"
delete = "30m"
}

}

resource "google_container_node_pool" "staging_cloud_cluster" {
name = "gke-enterprise-staging-cloud-node-pool"
project = "${var.project}"
cluster = "${google_container_cluster.staging_cloud_cluster.name}"
zone = "${var.zone_cloud}"
project = var.project
cluster = google_container_cluster.staging_cloud_cluster.name
zone = var.zone_cloud
node_count = 1

node_config {
machine_type = "${lookup(var.cloud, "machine_type")}"
machine_type = var.cloud["machine_type"]

// https://cloud.google.com/kubernetes-engine/docs/how-to/access-scopes
// Enable private gcr.io read access for the same project
Expand All @@ -205,35 +218,38 @@ resource "google_container_node_pool" "staging_cloud_cluster" {
}

lifecycle {
ignore_changes = ["id", "node_config.0.metadata"]
ignore_changes = [
id,
"node_config[0].metadata",
]
}
}

resource "google_bigquery_dataset" "staging-log-sink-dataset" {
dataset_id = "staging_gke_elasticsearch_log_dataset"
project = "${var.project}"
project = var.project
location = "US"
default_table_expiration_ms = "3600000"

labels {
labels = {
env = "default"
}
}

resource "google_logging_project_sink" "staging-bigquery-sink" {
name = "gke-enterprise-demo-staging-gke-elasticsearch-log-sink"
project = "${var.project}"
project = var.project
destination = "bigquery.googleapis.com/projects/${var.project}/datasets/${google_bigquery_dataset.staging-log-sink-dataset.dataset_id}"
filter = "resource.type=container"
unique_writer_identity = true
}

resource "google_project_iam_binding" "staging_bigquery-sink-permissions" {
project = "${var.project}"
project = var.project
role = "roles/bigquery.dataEditor"

members = [
"${google_logging_project_sink.staging-bigquery-sink.writer_identity}",
google_logging_project_sink.staging-bigquery-sink.writer_identity,
]
}

Expand Down
10 changes: 5 additions & 5 deletions terraform/variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ limitations under the License.

// Required variables
variable "project" {
type = "string"
type = string
}

// Optional variables
Expand All @@ -33,7 +33,7 @@ variable "zone_on_prem" {
}

variable "zone_on_prem_failover" {
type = "list"
type = list(string)
default = ["us-central1-b", "us-central1-c"]
}

Expand All @@ -43,7 +43,7 @@ variable "zone_cloud" {

variable "cloud" {
description = "the cloud"
type = "map"
type = map(string)

default = {
primary_range = "10.1.0.0/17"
Expand All @@ -55,7 +55,7 @@ variable "cloud" {

variable "on_prem" {
description = "the on prem dc"
type = "map"
type = map(string)

default = {
primary_range = "10.2.0.0/17"
Expand All @@ -71,6 +71,6 @@ variable "gke_master_version" {

// this map should be set should more labels be required to identify the container clusters and node groups
variable "labels" {
type = "map"
type = map(string)
default = {}
}
19 changes: 19 additions & 0 deletions terraform/versions.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/*
Copyright 2018 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
https://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.
*/

terraform {
required_version = ">= 0.12"
}

0 comments on commit a3d8e66

Please sign in to comment.