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  }