1
+ /* *
2
+ * Copyright 2018 Google LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ /* *****************************************
18
+ Create regional cluster
19
+ *****************************************/
20
+ resource "google_container_cluster" "primary" {
21
+ count = " ${ var . regional ? 1 : 0 } "
22
+ name = " ${ var . name } "
23
+ description = " ${ var . description } "
24
+ project = " ${ var . project_id } "
25
+
26
+ region = " ${ var . region } "
27
+ additional_zones = [" ${ coalescelist (compact (var. zones ), sort (random_shuffle. available_zones . result ))} " ]
28
+
29
+ network = " ${ replace (data. google_compute_network . gke_network . self_link , " https://www.googleapis.com/compute/v1/" , " " )} "
30
+ subnetwork = " ${ replace (data. google_compute_subnetwork . gke_subnetwork . self_link , " https://www.googleapis.com/compute/v1/" , " " )} "
31
+ min_master_version = " ${ local . kubernetes_version } "
32
+
33
+ logging_service = " ${ var . logging_service } "
34
+ monitoring_service = " ${ var . monitoring_service } "
35
+
36
+ master_authorized_networks_config = " ${ var . master_authorized_networks_config } "
37
+
38
+ addons_config {
39
+ http_load_balancing {
40
+ disabled = " ${ var . http_load_balancing ? 0 : 1 } "
41
+ }
42
+
43
+ horizontal_pod_autoscaling {
44
+ disabled = " ${ var . horizontal_pod_autoscaling ? 0 : 1 } "
45
+ }
46
+
47
+ kubernetes_dashboard {
48
+ disabled = " ${ var . kubernetes_dashboard ? 0 : 1 } "
49
+ }
50
+
51
+ network_policy_config {
52
+ disabled = " ${ var . network_policy ? 0 : 1 } "
53
+ }
54
+ }
55
+
56
+ ip_allocation_policy {
57
+ cluster_secondary_range_name = " ${ var . ip_range_pods } "
58
+ services_secondary_range_name = " ${ var . ip_range_services } "
59
+ }
60
+
61
+ maintenance_policy {
62
+ daily_maintenance_window {
63
+ start_time = " ${ var . maintenance_start_time } "
64
+ }
65
+ }
66
+
67
+ lifecycle {
68
+ ignore_changes = [" node_pool" ]
69
+ }
70
+
71
+ timeouts {
72
+ create = " 30m"
73
+ update = " 30m"
74
+ delete = " 30m"
75
+ }
76
+
77
+ node_pool {
78
+ name = " default-pool"
79
+
80
+ node_config {
81
+ service_account = " ${ lookup (var. node_pools [0 ], " service_account" , var. service_account )} "
82
+ }
83
+ }
84
+
85
+ remove_default_node_pool = " ${ var . remove_default_node_pool } "
86
+ }
87
+
88
+ /* *****************************************
89
+ Create regional node pools
90
+ *****************************************/
91
+ resource "google_container_node_pool" "pools" {
92
+ count = " ${ var . regional ? length (var. node_pools ) : 0 } "
93
+ name = " ${ lookup (var. node_pools [count . index ], " name" )} "
94
+ project = " ${ var . project_id } "
95
+ region = " ${ var . region } "
96
+ cluster = " ${ var . name } "
97
+ version = " ${ lookup (var. node_pools [count . index ], " auto_upgrade" , false ) ? " " : lookup (var. node_pools [count . index ], " version" , local. node_version )} "
98
+ initial_node_count = " ${ lookup (var. node_pools [count . index ], " min_count" , 1 )} "
99
+
100
+ autoscaling {
101
+ min_node_count = " ${ lookup (var. node_pools [count . index ], " min_count" , 1 )} "
102
+ max_node_count = " ${ lookup (var. node_pools [count . index ], " max_count" , 100 )} "
103
+ }
104
+
105
+ management {
106
+ auto_repair = " ${ lookup (var. node_pools [count . index ], " auto_repair" , true )} "
107
+ auto_upgrade = " ${ lookup (var. node_pools [count . index ], " auto_upgrade" , true )} "
108
+ }
109
+
110
+ node_config {
111
+ image_type = " ${ lookup (var. node_pools [count . index ], " image_type" , " COS" )} "
112
+ machine_type = " ${ lookup (var. node_pools [count . index ], " machine_type" , " n1-standard-2" )} "
113
+ labels = " ${ merge (map (" cluster_name" , var. name ), map (" node_pool" , lookup (var. node_pools [count . index ], " name" )), var. node_pools_labels [" all" ], var. node_pools_labels [lookup (var. node_pools [count . index ], " name" )])} "
114
+ metadata = " ${ merge (map (" cluster_name" , var. name ), map (" node_pool" , lookup (var. node_pools [count . index ], " name" )), var. node_pools_metadata [" all" ], var. node_pools_metadata [lookup (var. node_pools [count . index ], " name" )])} "
115
+ taint = " ${ concat (var. node_pools_taints [" all" ], var. node_pools_taints [lookup (var. node_pools [count . index ], " name" )])} "
116
+ tags = [" ${ concat (list (" gke-${ var . name } " ), list (" gke-${ var . name } -${ lookup (var. node_pools [count . index ], " name" )} " ), var. node_pools_tags [" all" ], var. node_pools_tags [lookup (var. node_pools [count . index ], " name" )])} " ]
117
+
118
+ disk_size_gb = " ${ lookup (var. node_pools [count . index ], " disk_size_gb" , 100 )} "
119
+ disk_type = " ${ lookup (var. node_pools [count . index ], " disk_type" , " pd-standard" )} "
120
+ service_account = " ${ lookup (var. node_pools [count . index ], " service_account" , var. service_account )} "
121
+ preemptible = " ${ lookup (var. node_pools [count . index ], " preemptible" , false )} "
122
+
123
+ oauth_scopes = [
124
+ " https://www.googleapis.com/auth/cloud-platform" ,
125
+ ]
126
+ }
127
+
128
+ lifecycle {
129
+ ignore_changes = [" initial_node_count" ]
130
+ }
131
+
132
+ timeouts {
133
+ create = " 30m"
134
+ update = " 30m"
135
+ delete = " 30m"
136
+ }
137
+
138
+ depends_on = [" google_container_cluster.primary" ]
139
+ }
140
+
141
+ resource "null_resource" "wait_for_regional_cluster" {
142
+ count = " ${ var . regional ? 1 : 0 } "
143
+
144
+ provisioner "local-exec" {
145
+ command = " ${ path . module } /scripts/wait-for-cluster.sh ${ var . project_id } ${ var . name } "
146
+ }
147
+
148
+ provisioner "local-exec" {
149
+ when = " destroy"
150
+ command = " ${ path . module } /scripts/wait-for-cluster.sh ${ var . project_id } ${ var . name } "
151
+ }
152
+
153
+ depends_on = [" google_container_cluster.primary" , " google_container_node_pool.pools" ]
154
+ }
0 commit comments