Можно ли сделать этот нечитаемый фрагмент кода terraform более презентабельным?

У меня есть фрагмент кода, который задает имя пула узлов для кластера GKE, он очень нечитаем. Я был бы признателен за любую помощь в том, чтобы сделать его более презентабельным и легким для понимания того, что происходит.

output "test" {
  value = regex("(?:[a-z](?:[-a-z0-9]{0,38}[a-z0-9])?)", lower(var.node_pool_version != "" ? var.node_pool_name != "" ? "${var.node_pool_name}-v${replace("${var.node_pool_version}",".","-")}" : "${var.name_prefix}-v${replace("${var.node_pool_version}",".","-")}" : var.node_pool_name != "" ? var.node_pool_name : "${var.name_prefix}-standard"))
}

variable "node_pool_version" {
  description = "Override node_version for cluster upgrades"
  type        = string
  default     = ""
}

variable "node_pool_name" {
  type    = string
  default = ""
}

variable "name_prefix" {
  type    = string
  default = "develop"
}

Выходы:

❯ terraform apply

Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

Outputs:

test = develop-standard
❯ terraform apply -var node_pool_version=1.16.15-gke.7800

Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

Outputs:

test = develop-v1-16-15-gke-7800
❯ terraform apply -var node_pool_version=1.16.15-gke.7800 -var node_pool_name=develop-standard

Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

Outputs:

test = develop-standard-v1-16-15-gke-7800

Редактировать: Меня беспокоит широкое использование String Functions и Conditional Expressions для создания вывода. Мой вариант использования заключается в том, что если пользователь не передает ни node_pool_version, ни node_pool_name, мой вывод все равно должен сгенерировать имя узла, которое можно легко идентифицировать. Есть ли лучший способ переписать этот код и сделать его более читаемым для всех, кто плохо знаком с Terraform?


person hdhruna    schedule 15.04.2021    source источник
comment
вы могли бы сделать несколько выходов, не так ли?   -  person Captain Levi    schedule 15.04.2021
comment
Добавил еще немного ясности в то, что я ищу.   -  person hdhruna    schedule 15.04.2021


Ответы (1)


Я полагаю, что лучшее, что вы можете сделать, это использовать блок locals:

variable "node_pool_version" {
  description = "Override node_version for cluster upgrades"
  type        = string
  default     = ""
}

variable "node_pool_name" {
  type    = string
  default = ""
}

variable "name_prefix" {
  type    = string
  default = "develop"
}

locals {
  version            = replace("${var.node_pool_version}", ".", "-")
  prefix             = var.node_pool_name != "" ? var.node_pool_name : var.name_prefix
  id                 = var.node_pool_name != "" ? local.prefix : "${local.prefix}-standard"
  versioned_id       = local.version != "" ? "${local.prefix}-v${local.version}" : local.id
  clean_versioned_id = regex("(?:[a-z](?:[-a-z0-9]{0,38}[a-z0-9])?)", lower(local.versioned_id))
}

output "test" {
  value = local.clean_versioned_id
}
person hexbioc    schedule 17.04.2021