agones.dev/agones@v1.54.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'