【发布时间】:2020-07-11 22:40:45
【问题描述】:
我对 Terraform 很陌生,但我正在尝试做一些条件逻辑来构建资源块。
到目前为止,我的天真尝试看起来像这样,希望能让您了解我的意图:
resource "azurerm_kubernetes_cluster_node_pool" "node_pools" {
{ for pool in var.node_pools:
kubernetes_cluster_id = azurerm_kubernetes_cluster.aks.id
name = pool.name
vm_size = pool.vm_size
max_pods = pool.max_pods
vnet_subnet_id = "${data.azurerm_virtual_network.vnet.id}/subnets/${pool.vnet_subnet_name}"
os_type = pool.os_type
os_disk_size_gb = pool.os_disk_size_gb
node_taints = pool.node_taints
availability_zones = pool.availability_zones
node_labels = pool.node_labels
enable_auto_scaling = pool.enable_auto_scaling
max_count = pool.max_count
min_count = pool.min_count
if pool.enable_auto_scaling
}
{ for pool in var.node_pools:
kubernetes_cluster_id = azurerm_kubernetes_cluster.aks.id
name = pool.name
vm_size = pool.vm_size
max_pods = pool.max_pods
vnet_subnet_id = "${data.azurerm_virtual_network.vnet.id}/subnets/${pool.vnet_subnet_name}"
os_type = pool.os_type
os_disk_size_gb = pool.os_disk_size_gb
node_taints = pool.node_taints
availability_zones = pool.availability_zones
node_labels = pool.node_labels
enable_auto_scaling = pool.enable_auto_scaling
node_count = pool.count
if !pool.enable_auto_scaling
}
}
如果 pool.enable_auto_scaling 为真,我想拥有 max_count 和 min_count 属性。如果它是假的,我只想要 node_count。
如果没有条件逻辑,当 enable_auto_scaling == true 时它可能看起来像这样:
resource "azurerm_kubernetes_cluster_node_pool" "node_pools" {
count = length(var.node_pools)
kubernetes_cluster_id = azurerm_kubernetes_cluster.aks.id
name = var.node_pools[count.index].name
vm_size = var.node_pools[count.index].vm_size
max_pods = var.node_pools[count.index].max_pods
vnet_subnet_id = "${data.azurerm_virtual_network.vnet.id}/subnets/${var.node_pools[count.index].vnet_subnet_name}"
os_type = var.node_pools[count.index].os_type
os_disk_size_gb = var.node_pools[count.index].os_disk_size_gb
node_taints = var.node_pools[count.index].node_taints
availability_zones = var.node_pools[count.index].availability_zones
node_labels = var.node_pools[count.index].node_labels
enable_auto_scaling = var.node_pools[count.index].enable_auto_scaling
max_count = var.node_pools[count.index].enable_auto_scaling ? var.node_pools[count.index].max_count : 0
min_count = var.node_pools[count.index].enable_auto_scaling ? var.node_pools[count.index].min_count : 0
}
当 enable_auto_scaling == false 时:
resource "azurerm_kubernetes_cluster_node_pool" "node_pools" {
count = length(var.node_pools)
kubernetes_cluster_id = azurerm_kubernetes_cluster.aks.id
name = var.node_pools[count.index].name
vm_size = var.node_pools[count.index].vm_size
max_pods = var.node_pools[count.index].max_pods
vnet_subnet_id = "${data.azurerm_virtual_network.vnet.id}/subnets/${var.node_pools[count.index].vnet_subnet_name}"
os_type = var.node_pools[count.index].os_type
os_disk_size_gb = var.node_pools[count.index].os_disk_size_gb
node_taints = var.node_pools[count.index].node_taints
availability_zones = var.node_pools[count.index].availability_zones
node_labels = var.node_pools[count.index].node_labels
enable_auto_scaling = var.node_pools[count.index].enable_auto_scaling
node_count = var.node_pools[count.index].enable_auto_scaling ? var.node_pools[count.index].min_count : var.node_pools[count.index].count
}
我的 variables.tf 文件包含一个定义如下的变量:
variable "node_pools" {
type = list(object({
name = string
count = number
vm_size = string
max_pods = number
vnet_subnet_name = string
os_type = string
os_disk_size_gb = number
node_taints = list(string)
availability_zones = list(string)
node_labels = map(string)
enable_auto_scaling = bool
max_count = number
min_count = number
}))
}
我在构建语法正确的资源块时遇到问题。
你会如何解决这个问题?
将 max_count / min_count / node_count 设置为零或 null 不起作用,如果属性存在,Azure RM API 将返回错误,似乎唯一可行的方法是从资源块中完全排除属性。
【问题讨论】:
标签: terraform terraform-provider-azure