Skip to content

Commit 65172de

Browse files
authored
fix: Use gcloud module for scripts, closes #401 (#404)
1 parent f556416 commit 65172de

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+446
-352
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@ Then perform the following commands on the root folder:
114114
| enable\_resource\_consumption\_export | Whether to enable resource consumption metering on this cluster. When enabled, a table will be created in the resource export BigQuery dataset to store resource consumption data. The resulting table can be joined with the resource usage table or with BigQuery billing export. | bool | `"true"` | no |
115115
| firewall\_inbound\_ports | List of TCP ports for admission/webhook controllers | list(string) | `<list>` | no |
116116
| firewall\_priority | Priority rule for firewall rules | number | `"1000"` | no |
117+
| gcloud\_skip\_download | Whether to skip downloading gcloud (assumes gcloud is already available outside the module) | bool | `"true"` | no |
118+
| gcloud\_upgrade | Whether to upgrade gcloud at runtime | bool | `"false"` | no |
117119
| grant\_registry\_access | Grants created cluster-specific service account storage.objectViewer role. | bool | `"false"` | no |
118120
| horizontal\_pod\_autoscaling | Enable horizontal pod autoscaling addon | bool | `"true"` | no |
119121
| http\_load\_balancing | Enable httpload balancer addon | bool | `"true"` | no |

autogen/main/cluster.tf.tmpl

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -529,25 +529,21 @@ resource "google_container_node_pool" "pools" {
529529
}
530530
}
531531

532-
resource "null_resource" "wait_for_cluster" {
533-
count = var.skip_provisioners ? 0 : 1
534-
535-
triggers = {
536-
project_id = var.project_id
537-
name = var.name
538-
}
539-
540-
provisioner "local-exec" {
541-
command = "${path.module}/scripts/wait-for-cluster.sh ${self.triggers.project_id} ${self.triggers.name}"
542-
}
543-
544-
provisioner "local-exec" {
545-
when = destroy
546-
command = "${path.module}/scripts/wait-for-cluster.sh ${self.triggers.project_id} ${self.triggers.name}"
547-
}
548-
549-
depends_on = [
550-
google_container_cluster.primary,
551-
google_container_node_pool.pools,
552-
]
532+
module "gcloud_wait_for_cluster" {
533+
source = "terraform-google-modules/gcloud/google"
534+
version = "~> 1.0.1"
535+
enabled = var.skip_provisioners
536+
537+
upgrade = var.gcloud_upgrade
538+
skip_download = var.gcloud_skip_download
539+
540+
create_cmd_entrypoint = "${path.module}/scripts/wait-for-cluster.sh"
541+
create_cmd_body = "${var.project_id} ${var.name}"
542+
destroy_cmd_entrypoint = "${path.module}/scripts/wait-for-cluster.sh"
543+
destroy_cmd_body = "${var.project_id} ${var.name}"
544+
545+
module_depends_on = concat(
546+
[google_container_cluster.primary.master_version],
547+
[for pool in google_container_node_pool.pools : pool.name]
548+
)
553549
}

autogen/main/dns.tf.tmpl

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,23 @@
1919
/******************************************
2020
Delete default kube-dns configmap
2121
*****************************************/
22-
resource "null_resource" "delete_default_kube_dns_configmap" {
23-
count = (local.custom_kube_dns_config || local.upstream_nameservers_config) && ! var.skip_provisioners ? 1 : 0
24-
25-
provisioner "local-exec" {
26-
command = "${path.module}/scripts/kubectl_wrapper.sh https://${local.cluster_endpoint} ${data.google_client_config.default.access_token} ${local.cluster_ca_certificate} ${path.module}/scripts/delete-default-resource.sh kube-system configmap kube-dns"
27-
}
28-
29-
depends_on = [
30-
data.google_client_config.default,
31-
google_container_cluster.primary,
32-
google_container_node_pool.pools,
33-
]
22+
module "gcloud_delete_default_kube_dns_configmap" {
23+
source = "terraform-google-modules/gcloud/google"
24+
version = "~> 1.0.1"
25+
enabled = (local.custom_kube_dns_config || local.upstream_nameservers_config) && ! var.skip_provisioners
26+
additional_components = ["kubectl"]
27+
28+
upgrade = var.gcloud_upgrade
29+
skip_download = var.gcloud_skip_download
30+
31+
create_cmd_entrypoint = "${path.module}/scripts/kubectl_wrapper.sh"
32+
create_cmd_body = "https://${local.cluster_endpoint} ${data.google_client_config.default.access_token} ${local.cluster_ca_certificate} ${path.module}/scripts/delete-default-resource.sh kube-system configmap kube-dns"
33+
34+
module_depends_on = concat(
35+
[data.google_client_config.default.access_token],
36+
[google_container_cluster.primary.master_version],
37+
[for pool in google_container_node_pool.pools : pool.name]
38+
)
3439
}
3540

3641
/******************************************
@@ -55,7 +60,7 @@ EOF
5560
}
5661

5762
depends_on = [
58-
null_resource.delete_default_kube_dns_configmap,
63+
module.gcloud_delete_default_kube_dns_configmap.wait,
5964
data.google_client_config.default,
6065
google_container_cluster.primary,
6166
google_container_node_pool.pools,
@@ -82,7 +87,7 @@ EOF
8287
}
8388

8489
depends_on = [
85-
null_resource.delete_default_kube_dns_configmap,
90+
module.gcloud_delete_default_kube_dns_configmap.wait,
8691
data.google_client_config.default,
8792
google_container_cluster.primary,
8893
google_container_node_pool.pools,
@@ -112,7 +117,7 @@ EOF
112117
}
113118

114119
depends_on = [
115-
null_resource.delete_default_kube_dns_configmap,
120+
module.gcloud_delete_default_kube_dns_configmap.wait,
116121
data.google_client_config.default,
117122
google_container_cluster.primary,
118123
google_container_node_pool.pools,

autogen/main/scripts/delete-default-resource.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ RESOURCE_LIST=$(kubectl -n "${RESOURCE_NAMESPACE}" get "${RESOURCE_TYPE}" || exi
2929

3030
# Delete requested resource
3131
if [[ $RESOURCE_LIST = *"${RESOURCE_NAME}"* ]]; then
32-
RESOURCE_MAINTAINED_LABEL=$(kubectl -n "${RESOURCE_NAMESPACE}" get "${RESOURCE_TYPE}" -o json "${RESOURCE_NAME}" | jq -r '.metadata.labels."maintained_by"')
32+
RESOURCE_MAINTAINED_LABEL=$(kubectl -n "${RESOURCE_NAMESPACE}" get "${RESOURCE_TYPE}" "${RESOURCE_NAME}" -o=jsonpath='{.metadata.labels.maintained_by}')
3333
if [[ $RESOURCE_MAINTAINED_LABEL = "terraform" ]]; then
3434
echo "Terraform maintained ${RESOURCE_NAME} ${RESOURCE_TYPE} appears to have already been created in ${RESOURCE_NAMESPACE} namespace"
3535
else

autogen/main/scripts/wait-for-cluster.sh

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,9 @@ CLUSTER_NAME=$2
2525

2626
echo "Waiting for cluster $CLUSTER_NAME in project $PROJECT to reconcile..."
2727

28-
current_status=$(gcloud container clusters list --project="$PROJECT" --filter=name:"$CLUSTER_NAME" --format="value(status)")
29-
30-
while [[ "$current_status" == "RECONCILING" ]]; do
31-
printf "."
32-
sleep 5
33-
current_status=$(gcloud container clusters list --project="$PROJECT" --filter=name:"$CLUSTER_NAME" --format="value(status)")
34-
done
28+
while
29+
current_status=$(gcloud container clusters list --project="$PROJECT" --filter=name:"$CLUSTER_NAME" --format="value(status)")
30+
[[ "${current_status}" == "RECONCILING" ]]
31+
do printf ".";sleep 5; done
3532

3633
echo "Cluster is ready!"

autogen/main/variables.tf.tmpl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,3 +531,15 @@ variable "firewall_inbound_ports" {
531531
description = "List of TCP ports for admission/webhook controllers"
532532
default = ["8443", "9443", "15017"]
533533
}
534+
535+
variable "gcloud_upgrade" {
536+
type = bool
537+
description = "Whether to upgrade gcloud at runtime"
538+
default = false
539+
}
540+
541+
variable "gcloud_skip_download" {
542+
type = bool
543+
description = "Whether to skip downloading gcloud (assumes gcloud is already available outside the module)"
544+
default = true
545+
}

cluster.tf

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -249,25 +249,21 @@ resource "google_container_node_pool" "pools" {
249249
}
250250
}
251251

252-
resource "null_resource" "wait_for_cluster" {
253-
count = var.skip_provisioners ? 0 : 1
254-
255-
triggers = {
256-
project_id = var.project_id
257-
name = var.name
258-
}
259-
260-
provisioner "local-exec" {
261-
command = "${path.module}/scripts/wait-for-cluster.sh ${self.triggers.project_id} ${self.triggers.name}"
262-
}
263-
264-
provisioner "local-exec" {
265-
when = destroy
266-
command = "${path.module}/scripts/wait-for-cluster.sh ${self.triggers.project_id} ${self.triggers.name}"
267-
}
268-
269-
depends_on = [
270-
google_container_cluster.primary,
271-
google_container_node_pool.pools,
272-
]
252+
module "gcloud_wait_for_cluster" {
253+
source = "terraform-google-modules/gcloud/google"
254+
version = "~> 1.0.1"
255+
enabled = var.skip_provisioners
256+
257+
upgrade = var.gcloud_upgrade
258+
skip_download = var.gcloud_skip_download
259+
260+
create_cmd_entrypoint = "${path.module}/scripts/wait-for-cluster.sh"
261+
create_cmd_body = "${var.project_id} ${var.name}"
262+
destroy_cmd_entrypoint = "${path.module}/scripts/wait-for-cluster.sh"
263+
destroy_cmd_body = "${var.project_id} ${var.name}"
264+
265+
module_depends_on = concat(
266+
[google_container_cluster.primary.master_version],
267+
[for pool in google_container_node_pool.pools : pool.name]
268+
)
273269
}

dns.tf

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,23 @@
1919
/******************************************
2020
Delete default kube-dns configmap
2121
*****************************************/
22-
resource "null_resource" "delete_default_kube_dns_configmap" {
23-
count = (local.custom_kube_dns_config || local.upstream_nameservers_config) && ! var.skip_provisioners ? 1 : 0
24-
25-
provisioner "local-exec" {
26-
command = "${path.module}/scripts/kubectl_wrapper.sh https://${local.cluster_endpoint} ${data.google_client_config.default.access_token} ${local.cluster_ca_certificate} ${path.module}/scripts/delete-default-resource.sh kube-system configmap kube-dns"
27-
}
28-
29-
depends_on = [
30-
data.google_client_config.default,
31-
google_container_cluster.primary,
32-
google_container_node_pool.pools,
33-
]
22+
module "gcloud_delete_default_kube_dns_configmap" {
23+
source = "terraform-google-modules/gcloud/google"
24+
version = "~> 1.0.1"
25+
enabled = (local.custom_kube_dns_config || local.upstream_nameservers_config) && ! var.skip_provisioners
26+
additional_components = ["kubectl"]
27+
28+
upgrade = var.gcloud_upgrade
29+
skip_download = var.gcloud_skip_download
30+
31+
create_cmd_entrypoint = "${path.module}/scripts/kubectl_wrapper.sh"
32+
create_cmd_body = "https://${local.cluster_endpoint} ${data.google_client_config.default.access_token} ${local.cluster_ca_certificate} ${path.module}/scripts/delete-default-resource.sh kube-system configmap kube-dns"
33+
34+
module_depends_on = concat(
35+
[data.google_client_config.default.access_token],
36+
[google_container_cluster.primary.master_version],
37+
[for pool in google_container_node_pool.pools : pool.name]
38+
)
3439
}
3540

3641
/******************************************
@@ -55,7 +60,7 @@ EOF
5560
}
5661

5762
depends_on = [
58-
null_resource.delete_default_kube_dns_configmap,
63+
module.gcloud_delete_default_kube_dns_configmap.wait,
5964
data.google_client_config.default,
6065
google_container_cluster.primary,
6166
google_container_node_pool.pools,
@@ -82,7 +87,7 @@ EOF
8287
}
8388

8489
depends_on = [
85-
null_resource.delete_default_kube_dns_configmap,
90+
module.gcloud_delete_default_kube_dns_configmap.wait,
8691
data.google_client_config.default,
8792
google_container_cluster.primary,
8893
google_container_node_pool.pools,
@@ -112,7 +117,7 @@ EOF
112117
}
113118

114119
depends_on = [
115-
null_resource.delete_default_kube_dns_configmap,
120+
module.gcloud_delete_default_kube_dns_configmap.wait,
116121
data.google_client_config.default,
117122
google_container_cluster.primary,
118123
google_container_node_pool.pools,

modules/beta-private-cluster-update-variant/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,8 @@ Then perform the following commands on the root folder:
173173
| firewall\_inbound\_ports | List of TCP ports for admission/webhook controllers | list(string) | `<list>` | no |
174174
| firewall\_priority | Priority rule for firewall rules | number | `"1000"` | no |
175175
| gce\_pd\_csi\_driver | (Beta) Whether this cluster should enable the Google Compute Engine Persistent Disk Container Storage Interface (CSI) Driver. | bool | `"false"` | no |
176+
| gcloud\_skip\_download | Whether to skip downloading gcloud (assumes gcloud is already available outside the module) | bool | `"true"` | no |
177+
| gcloud\_upgrade | Whether to upgrade gcloud at runtime | bool | `"false"` | no |
176178
| grant\_registry\_access | Grants created cluster-specific service account storage.objectViewer role. | bool | `"false"` | no |
177179
| horizontal\_pod\_autoscaling | Enable horizontal pod autoscaling addon | bool | `"true"` | no |
178180
| http\_load\_balancing | Enable httpload balancer addon | bool | `"true"` | no |

modules/beta-private-cluster-update-variant/cluster.tf

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -481,25 +481,21 @@ resource "google_container_node_pool" "pools" {
481481
}
482482
}
483483

484-
resource "null_resource" "wait_for_cluster" {
485-
count = var.skip_provisioners ? 0 : 1
486-
487-
triggers = {
488-
project_id = var.project_id
489-
name = var.name
490-
}
491-
492-
provisioner "local-exec" {
493-
command = "${path.module}/scripts/wait-for-cluster.sh ${self.triggers.project_id} ${self.triggers.name}"
494-
}
495-
496-
provisioner "local-exec" {
497-
when = destroy
498-
command = "${path.module}/scripts/wait-for-cluster.sh ${self.triggers.project_id} ${self.triggers.name}"
499-
}
500-
501-
depends_on = [
502-
google_container_cluster.primary,
503-
google_container_node_pool.pools,
504-
]
484+
module "gcloud_wait_for_cluster" {
485+
source = "terraform-google-modules/gcloud/google"
486+
version = "~> 1.0.1"
487+
enabled = var.skip_provisioners
488+
489+
upgrade = var.gcloud_upgrade
490+
skip_download = var.gcloud_skip_download
491+
492+
create_cmd_entrypoint = "${path.module}/scripts/wait-for-cluster.sh"
493+
create_cmd_body = "${var.project_id} ${var.name}"
494+
destroy_cmd_entrypoint = "${path.module}/scripts/wait-for-cluster.sh"
495+
destroy_cmd_body = "${var.project_id} ${var.name}"
496+
497+
module_depends_on = concat(
498+
[google_container_cluster.primary.master_version],
499+
[for pool in google_container_node_pool.pools : pool.name]
500+
)
505501
}

modules/beta-private-cluster-update-variant/dns.tf

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,23 @@
1919
/******************************************
2020
Delete default kube-dns configmap
2121
*****************************************/
22-
resource "null_resource" "delete_default_kube_dns_configmap" {
23-
count = (local.custom_kube_dns_config || local.upstream_nameservers_config) && ! var.skip_provisioners ? 1 : 0
24-
25-
provisioner "local-exec" {
26-
command = "${path.module}/scripts/kubectl_wrapper.sh https://${local.cluster_endpoint} ${data.google_client_config.default.access_token} ${local.cluster_ca_certificate} ${path.module}/scripts/delete-default-resource.sh kube-system configmap kube-dns"
27-
}
28-
29-
depends_on = [
30-
data.google_client_config.default,
31-
google_container_cluster.primary,
32-
google_container_node_pool.pools,
33-
]
22+
module "gcloud_delete_default_kube_dns_configmap" {
23+
source = "terraform-google-modules/gcloud/google"
24+
version = "~> 1.0.1"
25+
enabled = (local.custom_kube_dns_config || local.upstream_nameservers_config) && ! var.skip_provisioners
26+
additional_components = ["kubectl"]
27+
28+
upgrade = var.gcloud_upgrade
29+
skip_download = var.gcloud_skip_download
30+
31+
create_cmd_entrypoint = "${path.module}/scripts/kubectl_wrapper.sh"
32+
create_cmd_body = "https://${local.cluster_endpoint} ${data.google_client_config.default.access_token} ${local.cluster_ca_certificate} ${path.module}/scripts/delete-default-resource.sh kube-system configmap kube-dns"
33+
34+
module_depends_on = concat(
35+
[data.google_client_config.default.access_token],
36+
[google_container_cluster.primary.master_version],
37+
[for pool in google_container_node_pool.pools : pool.name]
38+
)
3439
}
3540

3641
/******************************************
@@ -55,7 +60,7 @@ EOF
5560
}
5661

5762
depends_on = [
58-
null_resource.delete_default_kube_dns_configmap,
63+
module.gcloud_delete_default_kube_dns_configmap.wait,
5964
data.google_client_config.default,
6065
google_container_cluster.primary,
6166
google_container_node_pool.pools,
@@ -82,7 +87,7 @@ EOF
8287
}
8388

8489
depends_on = [
85-
null_resource.delete_default_kube_dns_configmap,
90+
module.gcloud_delete_default_kube_dns_configmap.wait,
8691
data.google_client_config.default,
8792
google_container_cluster.primary,
8893
google_container_node_pool.pools,
@@ -112,7 +117,7 @@ EOF
112117
}
113118

114119
depends_on = [
115-
null_resource.delete_default_kube_dns_configmap,
120+
module.gcloud_delete_default_kube_dns_configmap.wait,
116121
data.google_client_config.default,
117122
google_container_cluster.primary,
118123
google_container_node_pool.pools,

modules/beta-private-cluster-update-variant/scripts/delete-default-resource.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ RESOURCE_LIST=$(kubectl -n "${RESOURCE_NAMESPACE}" get "${RESOURCE_TYPE}" || exi
2929

3030
# Delete requested resource
3131
if [[ $RESOURCE_LIST = *"${RESOURCE_NAME}"* ]]; then
32-
RESOURCE_MAINTAINED_LABEL=$(kubectl -n "${RESOURCE_NAMESPACE}" get "${RESOURCE_TYPE}" -o json "${RESOURCE_NAME}" | jq -r '.metadata.labels."maintained_by"')
32+
RESOURCE_MAINTAINED_LABEL=$(kubectl -n "${RESOURCE_NAMESPACE}" get "${RESOURCE_TYPE}" "${RESOURCE_NAME}" -o=jsonpath='{.metadata.labels.maintained_by}')
3333
if [[ $RESOURCE_MAINTAINED_LABEL = "terraform" ]]; then
3434
echo "Terraform maintained ${RESOURCE_NAME} ${RESOURCE_TYPE} appears to have already been created in ${RESOURCE_NAMESPACE} namespace"
3535
else

0 commit comments

Comments
 (0)