agones.dev/agones@v1.53.0/build/includes/google-cloud.mk (about) 1 # Copyright 2019 Google LLC All Rights Reserved. 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); 4 # you may not use this file except in compliance with the License. 5 # You may obtain a copy of the License at 6 # 7 # http://www.apache.org/licenses/LICENSE-2.0 8 # 9 # Unless required by applicable law or agreed to in writing, software 10 # distributed under the License is distributed on an "AS IS" BASIS, 11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 # See the License for the specific language governing permissions and 13 # limitations under the License. 14 15 # ____ _ ____ _ _ 16 # / ___| ___ ___ __ _| | ___ / ___| | ___ _ _ __| | 17 # | | _ / _ \ / _ \ / _` | |/ _ \ | | | |/ _ \| | | |/ _` | 18 # | |_| | (_) | (_) | (_| | | __/ | |___| | (_) | |_| | (_| | 19 # \____|\___/ \___/ \__, |_|\___| \____|_|\___/ \__,_|\__,_| 20 # |___/ 21 22 # Initialise the gcloud login and project configuration, if you are working with GCP 23 gcloud-init: ensure-build-config 24 docker run --rm -it $(common_mounts) $(build_tag) gcloud init 25 26 # Creates and authenticates a small, 6 node GKE cluster to work against (2 nodes are used for agones-metrics and agones-system) 27 gcloud-test-cluster: GCP_CLUSTER_NODEPOOL_INITIALNODECOUNT ?= 4 28 gcloud-test-cluster: GCP_CLUSTER_NODEPOOL_MACHINETYPE ?= e2-standard-4 29 gcloud-test-cluster: GCP_CLUSTER_NODEPOOL_ENABLEIMAGESTREAMING ?= true 30 gcloud-test-cluster: GCP_CLUSTER_NODEPOOL_AUTOSCALE ?= false 31 gcloud-test-cluster: GCP_CLUSTER_NODEPOOL_MIN_NODECOUNT ?= 1 32 gcloud-test-cluster: GCP_CLUSTER_NODEPOOL_MAX_NODECOUNT ?= 5 33 gcloud-test-cluster: GCP_CLUSTER_NODEPOOL_WINDOWSINITIALNODECOUNT ?= 0 34 gcloud-test-cluster: GCP_CLUSTER_NODEPOOL_WINDOWSMACHINETYPE ?= e2-standard-4 35 gcloud-test-cluster: GCP_CLUSTER_NODEPOOL_ENABLE_AGONES_METRICS_NODEPOOL ?= true 36 gcloud-test-cluster: $(ensure-build-image) 37 $(MAKE) gcloud-terraform-cluster GCP_TF_CLUSTER_NAME="$(GCP_CLUSTER_NAME)" \ 38 GCP_CLUSTER_LOCATION="$(GCP_CLUSTER_LOCATION)" \ 39 GCP_CLUSTER_AUTOSCALE="$(GCP_CLUSTER_NODEPOOL_AUTOSCALE)" \ 40 GCP_CLUSTER_MIN_NODECOUNT="$(GCP_CLUSTER_NODEPOOL_MIN_NODECOUNT)" \ 41 GCP_CLUSTER_MAX_NODECOUNT="$(GCP_CLUSTER_NODEPOOL_MAX_NODECOUNT)" \ 42 GCP_CLUSTER_NODEPOOL_INITIALNODECOUNT="$(GCP_CLUSTER_NODEPOOL_INITIALNODECOUNT)" \ 43 GCP_CLUSTER_NODEPOOL_MACHINETYPE="$(GCP_CLUSTER_NODEPOOL_MACHINETYPE)" \ 44 GCP_CLUSTER_NODEPOOL_ENABLEIMAGESTREAMING="$(GCP_CLUSTER_NODEPOOL_ENABLEIMAGESTREAMING)" \ 45 GCP_CLUSTER_NODEPOOL_WINDOWSINITIALNODECOUNT="$(GCP_CLUSTER_NODEPOOL_WINDOWSINITIALNODECOUNT)" \ 46 GCP_CLUSTER_NODEPOOL_WINDOWSMACHINETYPE="$(GCP_CLUSTER_NODEPOOL_WINDOWSMACHINETYPE)" \ 47 GCP_CLUSTER_NODEPOOL_ENABLE_AGONES_METRICS_NODEPOOL="$(GCP_CLUSTER_NODEPOOL_ENABLE_AGONES_METRICS_NODEPOOL)" 48 $(MAKE) gcloud-auth-cluster 49 50 clean-gcloud-test-cluster: $(ensure-build-image) 51 $(MAKE) gcloud-terraform-destroy-cluster 52 53 # Pulls down authentication information for kubectl against a cluster, name can be specified through GCP_CLUSTER_NAME 54 # (defaults to 'test-cluster') 55 gcloud-auth-cluster: $(ensure-build-image) 56 docker run --rm $(common_mounts) $(build_tag) gcloud container clusters get-credentials $(GCP_CLUSTER_NAME) --zone $(GCP_CLUSTER_LOCATION) 57 58 # authenticate our docker configuration so that you can do a docker push directly 59 # to the Google Artifact Registry repository 60 gcloud-auth-docker: $(ensure-build-image) 61 docker run --rm $(common_mounts) $(build_tag) gcloud auth print-access-token | docker login -u oauth2accesstoken --password-stdin https://us-docker.pkg.dev 62 63 # Clean the gcloud configuration 64 clean-gcloud-config: 65 -sudo rm -r $(build_path)/.config 66 67 # Ensure the end-to-end infrastructure state bucket 68 ensure-e2e-infra-state-bucket: GCP_PROJECT ?= $(shell $(current_project)) 69 ensure-e2e-infra-state-bucket: 70 @buckets=$$(docker run --rm $(common_mounts) $(build_tag) gcloud storage buckets describe gs://$(GCP_PROJECT)-e2e-infra-bucket-tfstate --format="value(name)");\ 71 if [ -z $${buckets} ]; then\ 72 echo "** E2E infra state bucket $(GCP_PROJECT)-e2e-infra-bucket-tfstate does not exist (or gcloud failed), creating...";\ 73 $(MAKE) gcloud-e2e-infra-state-bucket;\ 74 fi 75 76 # Creates the end-to-end infrastructure bucket 77 gcloud-e2e-infra-state-bucket: GCP_PROJECT ?= $(shell $(current_project)) 78 gcloud-e2e-infra-state-bucket: 79 $(MAKE) terraform-init DIRECTORY=e2e/state-bucket 80 docker run --rm -it $(common_mounts) $(build_tag) bash -c 'cd $(mount_path)/build/terraform/e2e/state-bucket && \ 81 terraform apply -auto-approve -var project="$(GCP_PROJECT)"' 82 83 # Creates a gcloud cluster for end-to-end 84 gcloud-e2e-test-cluster: GCP_PROJECT ?= $(shell $(current_project)) 85 gcloud-e2e-test-cluster: $(ensure-build-image) ensure-e2e-infra-state-bucket 86 gcloud-e2e-test-cluster: 87 $(MAKE) terraform-init BUCKET=$(GCP_PROJECT)-e2e-infra-bucket-tfstate PREFIX=terraform/state DIRECTORY=e2e 88 docker run --rm -it $(common_mounts) $(DOCKER_RUN_ARGS) $(build_tag) bash -c 'cd $(mount_path)/build/terraform/e2e && \ 89 terraform apply -auto-approve -var project="$(GCP_PROJECT)"' 90 91 # Deletes the gcloud e2e cluster and cleanup any left pvc volumes 92 clean-gcloud-e2e-test-cluster: GCP_PROJECT ?= $(shell $(current_project)) 93 clean-gcloud-e2e-test-cluster: $(ensure-build-image) 94 clean-gcloud-e2e-test-cluster: 95 $(MAKE) terraform-init BUCKET=$(GCP_PROJECT)-e2e-infra-bucket-tfstate PREFIX=terraform/state DIRECTORY=e2e 96 $(DOCKER_RUN) bash -c 'cd $(mount_path)/build/terraform/e2e && terraform destroy -var project=$(GCP_PROJECT) -auto-approve' 97 98 # The GKE development cluster name 99 GCP_TF_CLUSTER_NAME ?= agones-tf-cluster 100 101 # The current project 102 current_project := $(DOCKER_RUN) bash -c "gcloud config get-value project 2> /dev/null" 103 104 ### Deploy cluster with Terraform 105 terraform-init: TERRAFORM_BUILD_DIR ?= $(mount_path)/build/terraform/$(DIRECTORY) 106 terraform-init: $(ensure-build-image) 107 terraform-init: 108 docker run --rm -it $(common_mounts) $(DOCKER_RUN_ARGS) $(build_tag) bash -c '\ 109 cd $(TERRAFORM_BUILD_DIR) && terraform init -backend-config="bucket=$(BUCKET)" -backend-config="prefix=$(PREFIX)" && gcloud auth application-default login' 110 111 terraform-clean: TERRAFORM_BUILD_DIR ?= $(mount_path)/build/terraform/gke 112 terraform-clean: 113 $(DOCKER_RUN) bash -c ' \ 114 cd $(TERRAFORM_BUILD_DIR) && rm -r ./.terraform || true && \ 115 rm ./terraform.tfstate* || true && \ 116 rm ./kubeconfig || true' 117 118 # Creates a cluster and install release version of Agones controller 119 # Version could be specified by AGONES_VERSION 120 # Alpha Feature gates are disabled 121 gcloud-terraform-cluster: GCP_CLUSTER_NODEPOOL_INITIALNODECOUNT ?= 4 122 gcloud-terraform-cluster: GCP_CLUSTER_NODEPOOL_MACHINETYPE ?= e2-standard-4 123 gcloud-terraform-cluster: GCP_CLUSTER_NODEPOOL_ENABLEIMAGESTREAMING ?= true 124 gcloud-terraform-cluster: GCP_CLUSTER_NODEPOOL_AUTOSCALE ?= false 125 gcloud-terraform-cluster: GCP_CLUSTER_NODEPOOL_MIN_NODECOUNT ?= 1 126 gcloud-terraform-cluster: GCP_CLUSTER_NODEPOOL_MAX_NODECOUNT ?= 5 127 gcloud-terraform-cluster: GCP_CLUSTER_NODEPOOL_WINDOWSINITIALNODECOUNT ?= 0 128 gcloud-terraform-cluster: GCP_CLUSTER_NODEPOOL_WINDOWSMACHINETYPE ?= e2-standard-4 129 gcloud-terraform-cluster: AGONES_VERSION ?= '' 130 gcloud-terraform-cluster: GCP_TF_CLUSTER_NAME ?= agones-tf-cluster 131 gcloud-terraform-cluster: LOG_LEVEL ?= debug 132 gcloud-terraform-cluster: $(ensure-build-image) 133 gcloud-terraform-cluster: FEATURE_GATES := "" 134 gcloud-terraform-cluster: GCP_PROJECT ?= $(shell $(current_project)) 135 gcloud-terraform-cluster: 136 $(MAKE) terraform-init DIRECTORY=gke 137 $(DOCKER_RUN) bash -c 'cd $(mount_path)/build/terraform/gke && \ 138 terraform apply -auto-approve -var agones_version="$(AGONES_VERSION)" \ 139 -var name=$(GCP_TF_CLUSTER_NAME) -var machine_type="$(GCP_CLUSTER_NODEPOOL_MACHINETYPE)" \ 140 -var values_file="" \ 141 -var feature_gates=$(FEATURE_GATES) \ 142 -var project="$(GCP_PROJECT)" \ 143 -var location="$(GCP_CLUSTER_LOCATION)" \ 144 -var log_level="$(LOG_LEVEL)" \ 145 -var autoscale=$(GCP_CLUSTER_NODEPOOL_AUTOSCALE) \ 146 -var min_node_count=$(GCP_CLUSTER_NODEPOOL_MIN_NODECOUNT) \ 147 -var max_node_count=$(GCP_CLUSTER_NODEPOOL_MAX_NODECOUNT) \ 148 -var node_count=$(GCP_CLUSTER_NODEPOOL_INITIALNODECOUNT) \ 149 -var enable_image_streaming=$(GCP_CLUSTER_NODEPOOL_ENABLEIMAGESTREAMING) \ 150 -var windows_node_count=$(GCP_CLUSTER_NODEPOOL_WINDOWSINITIALNODECOUNT) \ 151 -var windows_machine_type=$(GCP_CLUSTER_NODEPOOL_WINDOWSMACHINETYPE)' 152 GCP_CLUSTER_NAME=$(GCP_TF_CLUSTER_NAME) $(MAKE) gcloud-auth-cluster 153 154 # Creates a cluster and install current version of Agones controller 155 # Set all necessary variables as `make install` does 156 # Unifies previous `make gcloud-test-cluster` and `make install` targets 157 gcloud-terraform-install: GCP_CLUSTER_NODEPOOL_INITIALNODECOUNT ?= 4 158 gcloud-terraform-install: GCP_CLUSTER_NODEPOOL_MACHINETYPE ?= e2-standard-4 159 gcloud-terraform-install: GCP_CLUSTER_NODEPOOL_AUTOSCALE ?= false 160 gcloud-terraform-install: GCP_CLUSTER_NODEPOOL_MIN_NODECOUNT ?= 1 161 gcloud-terraform-install: GCP_CLUSTER_NODEPOOL_MAX_NODECOUNT ?= 5 162 gcloud-terraform-install: GCP_CLUSTER_NODEPOOL_WINDOWSINITIALNODECOUNT ?= 0 163 gcloud-terraform-install: GCP_CLUSTER_NODEPOOL_WINDOWSMACHINETYPE ?= e2-standard-4 164 gcloud-terraform-install: ALWAYS_PULL_SIDECAR := true 165 gcloud-terraform-install: IMAGE_PULL_POLICY := "Always" 166 gcloud-terraform-install: PING_SERVICE_TYPE := "LoadBalancer" 167 gcloud-terraform-install: CRD_CLEANUP := true 168 gcloud-terraform-install: GCP_TF_CLUSTER_NAME ?= agones-tf-cluster 169 gcloud-terraform-install: LOG_LEVEL ?= debug 170 gcloud-terraform-install: FEATURE_GATES := $(ALPHA_FEATURE_GATES) 171 gcloud-terraform-install: GCP_PROJECT ?= $(shell $(current_project)) 172 gcloud-terraform-install: 173 $(MAKE) terraform-init DIRECTORY=gke 174 $(DOCKER_RUN) bash -c ' \ 175 cd $(mount_path)/build/terraform/gke && terraform apply -auto-approve -var agones_version="$(VERSION)" -var image_registry="$(REGISTRY)" \ 176 -var pull_policy="$(IMAGE_PULL_POLICY)" \ 177 -var always_pull_sidecar="$(ALWAYS_PULL_SIDECAR)" \ 178 -var image_pull_secret="$(IMAGE_PULL_SECRET)" \ 179 -var ping_service_type="$(PING_SERVICE_TYPE)" \ 180 -var crd_cleanup="$(CRD_CLEANUP)" \ 181 -var chart="../../../install/helm/agones/" \ 182 -var name=$(GCP_TF_CLUSTER_NAME) -var machine_type="$(GCP_CLUSTER_NODEPOOL_MACHINETYPE)" \ 183 -var project=$(GCP_PROJECT) \ 184 -var location=$(GCP_CLUSTER_LOCATION) \ 185 -var log_level=$(LOG_LEVEL) \ 186 -var autoscale=$(GCP_CLUSTER_NODEPOOL_AUTOSCALE) \ 187 -var min_node_count=$(GCP_CLUSTER_NODEPOOL_MIN_NODECOUNT) \ 188 -var max_node_count=$(GCP_CLUSTER_NODEPOOL_MAX_NODECOUNT) \ 189 -var feature_gates=$(FEATURE_GATES) \ 190 -var node_count=$(GCP_CLUSTER_NODEPOOL_INITIALNODECOUNT) \ 191 -var windows_node_count=$(GCP_CLUSTER_NODEPOOL_WINDOWSINITIALNODECOUNT) \ 192 -var windows_machine_type=$(GCP_CLUSTER_NODEPOOL_WINDOWSMACHINETYPE)' 193 GCP_CLUSTER_NAME=$(GCP_TF_CLUSTER_NAME) $(MAKE) gcloud-auth-cluster 194 195 gcloud-terraform-destroy-cluster: GCP_PROJECT ?= $(shell $(current_project)) 196 gcloud-terraform-destroy-cluster: 197 $(MAKE) terraform-init DIRECTORY=gke 198 $(DOCKER_RUN) bash -c 'cd $(mount_path)/build/terraform/gke && terraform destroy -var project=$(GCP_PROJECT) -auto-approve'