是否可以将资源创建与循环(使用计数)结合起来,并根据地图的值有条件地跳过一些资源?
我知道我们可以分开做这些事情:
为了说明,假设我有一个地图列表:
variable "resources" {
type = "list"
default = [
{
name = "kafka"
createStorage = true
},
{
name = "elastic"
createStorage = false
},
{
name = "galera"
createStorage = true
}
]
}
Run Code Online (Sandbox Code Playgroud)
我可以遍历上面的列表并使用资源中的“计数”创建三个资源:
resource "azurerm_storage_account" "test" {
name = "test${var.environment}${lookup(var.resources[count.index], "name")}sa"
location = "${var.location}"
resource_group_name = "test-${var.environment}-vnet-rg"
account_tier = "Standard"
account_replication_type = "GRS"
enable_blob_encryption = true
count = "${length(var.resources)}"
}
Run Code Online (Sandbox Code Playgroud)
但是,我还想跳过在其中创建资源的过程createStorage = false。因此,在上面的示例中,我想创建两个存储帐户,但跳过了“弹性”存储帐户。这可能吗?
我有一个类似于以下内容的字典列表:
"subnets": [
{
"name": "subnet1-name34554",
"address": "192.168.1.100"
"id: "id1"
},
{
"name": "subnet2-name67678",
"addr": "192.168.1.200"
"id": "id2"
},
{
"name": "subnet3-name23345",
"addr": "192.168.1.300"
"id": "id3"
}
]
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用部分名称搜索字典并返回全名。例如搜索subnet1应该返回subnet1-name34554
如果我做这样的事情:
- name: test
debug: msg="{{ subnets | selectattr("name", "search", "subnet1") | list }}"
Run Code Online (Sandbox Code Playgroud)
我得到一个带有单个 dict 的列表:
[
{
"name": "subnet1-name34554",
"address": "192.168.1.100"
"id: "id1"
}
]
Run Code Online (Sandbox Code Playgroud)
我不确定只提取“名称”键的下一步是什么,或者是否有更好的方法?