小编Set*_*nta的帖子

Terraform - 有条件地在循环中创建资源

是否可以将资源创建与循环(使用计数)结合起来,并根据地图的值有条件地跳过一些资源?

我知道我们可以分开做这些事情:

  • 使用 count 在循环中创建资源。
  • 使用变量/计数解决方法(代替“if”语句)有条件地创建资源

为了说明,假设我有一个地图列表:

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。因此,在上面的示例中,我想创建两个存储帐户,但跳过了“弹性”存储帐户。这可能吗?

azure terraform

5
推荐指数
1
解决办法
2567
查看次数

在 Ansible 的字典列表中搜索键

我有一个类似于以下内容的字典列表:

"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)

我不确定只提取“名称”键的下一步是什么,或者是否有更好的方法?

jinja2 ansible

4
推荐指数
1
解决办法
7495
查看次数

标签 统计

ansible ×1

azure ×1

jinja2 ×1

terraform ×1