agones.dev/agones@v1.53.0/install/terraform/modules/oke-helm3/helm.tf (about) 1 # Copyright 2024 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 # This is a Helm 3.x module, and is the module that should be actively used. 17 # 18 terraform { 19 required_version = ">= 1.0.0" 20 required_providers { 21 helm = { 22 version = "~> 2.3" 23 source = "hashicorp/helm" 24 } 25 } 26 } 27 28 provider "helm" { 29 kubernetes { 30 host = local.cluster_endpoint 31 cluster_ca_certificate = local.cluster_ca_certificate 32 insecure = local.external_private_endpoint 33 exec { 34 api_version = "client.authentication.k8s.io/v1beta1" 35 args = ["ce", "cluster", "generate-token", "--cluster-id", local.cluster_id, "--region", local.cluster_region] 36 command = "oci" 37 } 38 } 39 } 40 41 resource "helm_release" "agones" { 42 name = "agones" 43 repository = "https://agones.dev/chart/stable" 44 force_update = var.force_update 45 chart = var.chart 46 timeout = 900 47 version = var.agones_version 48 namespace = "agones-system" 49 create_namespace = true 50 51 # Use terraform of the latest >=1.0.0 version 52 values = [ 53 length(var.values_file) == 0 ? "" : file(var.values_file), 54 ] 55 56 dynamic "set" { 57 for_each = tolist(var.set_values) 58 iterator = set_item 59 60 content { 61 name = set_item.value.name 62 type = set_item.value.type 63 value = set_item.value.value 64 } 65 } 66 67 dynamic "set_list" { 68 for_each = tolist(var.set_list_values) 69 iterator = set_item 70 71 content { 72 name = set_item.value.name 73 value = set_item.value.value 74 } 75 } 76 77 // Due to a Terraform limitation sensitive values can't be iterated over. 78 // See https://github.com/hashicorp/terraform/issues/29744 79 dynamic "set_sensitive" { 80 for_each = tolist(nonsensitive(var.set_sensitive_values)) 81 iterator = set_item 82 83 content { 84 name = set_item.value.name 85 type = set_item.value.type 86 value = sensitive(set_item.value.value) 87 } 88 } 89 90 set { 91 name = "agones.crds.CleanupOnDelete" 92 value = var.crd_cleanup 93 } 94 95 set { 96 name = "agones.image.registry" 97 value = var.image_registry 98 } 99 100 set { 101 name = "agones.image.controller.pullPolicy" 102 value = var.pull_policy 103 } 104 105 set { 106 name = "agones.image.sdk.alwaysPull" 107 value = var.always_pull_sidecar 108 } 109 110 set { 111 name = "agones.image.controller.pullSecret" 112 value = var.image_pull_secret 113 } 114 115 set { 116 name = "agones.ping.http.serviceType" 117 value = var.ping_service_type 118 } 119 120 set { 121 name = "agones.ping.udp.expose" 122 value = var.udp_expose 123 } 124 125 set { 126 name = "agones.ping.udp.serviceType" 127 value = var.ping_service_type 128 } 129 130 set { 131 name = "agones.controller.logLevel" 132 value = var.log_level 133 } 134 135 set { 136 name = "agones.featureGates" 137 value = var.feature_gates 138 } 139 140 set { 141 name = "gameservers.namespaces" 142 value = "{${join(",", var.gameserver_namespaces)}}" 143 } 144 145 set { 146 name = "gameservers.minPort" 147 value = var.gameserver_minPort 148 } 149 150 set { 151 name = "gameservers.maxPort" 152 value = var.gameserver_maxPort 153 } 154 155 set { 156 name = "agones.allocator.service.loadBalancerIP" 157 value = var.load_balancer_ip 158 } 159 } 160 161 locals { 162 cluster_endpoint = yamldecode(var.cluster_kebuconfig)["clusters"][0]["cluster"]["server"] 163 external_private_endpoint = (var.cluster_endpoint_visibility == "Private") ? true : false 164 cluster_ca_certificate = base64decode(yamldecode(var.cluster_kebuconfig)["clusters"][0]["cluster"]["certificate-authority-data"]) 165 cluster_id = yamldecode(var.cluster_kebuconfig)["users"][0]["user"]["exec"]["args"][4] 166 cluster_region = yamldecode(var.cluster_kebuconfig)["users"][0]["user"]["exec"]["args"][6] 167 }