【问题标题】:terraform to append consul_key values in jsonterraform 在 json 中附加 consul_key 值
【发布时间】:2022-01-18 16:10:31
【问题描述】:

我有一个项目,我必须使用 terraform,在 terraform 结束时,我需要在 /path 上附加 consul 键的值。我有以下内容:

resource "consul_keys" "write" {
  datacenter = "dc1"
  token = "xxxx-x-x---xxxxxx--xx-x-x-x"
  key {
    path = "path/to/name"
    value = jsonencode([
      {
        cluster_name = "test", "region" : "us-east1" 
      },
    {
            cluster_name = "test2", "region" : "us-central1" 
        }
    ])
  }
}

但如果我再次使用新值运行 terraform,它会删除所有以前的值并更新新值。

我有什么方法可以继续追加保持以前值不变的值?

【问题讨论】:

    标签: terraform consul


    【解决方案1】:

    the hashicorp/consul provider 中的The consul_keys resource type 仅支持它负责管理每个给定键的全部值的情况。这是因为the underlying Consul API 本身将每个键视为单个原子单元,并且不支持您希望在此处实现的部分更新。

    如果您能够更改使用这些值的系统的设计,获得可比较结果的另一种方法是留出特定的键前缀 作为消费者在阅读后将合并在一起的值的集合。 Consul's Read Key API 包含一个模式 recurse=true,它允许您提供一个前缀,以便在单个请求中读取具有给定前缀的所有条目。

    通过以这种方式设计您的密钥结构,您可以为 Terraform 将提供的数据和其他系统提供的数据使用单独的密钥,这些系统将在此共享前缀下生成数据。因此,这些不同的系统可以各自维护自己指定的子密钥,而无需采取任何特殊的额外步骤来保存已存储在该位置的现有数据。

    如果您使用的是consul-template,那么consul-template's ls function 会包装我上面描述的多键查找。

    如果您在其他 Terraform 配置中从 Consul 读取数据,the consul_key_prefix data source 类似地实现了获取给定前缀下的所有键/值对的操作。

    【讨论】:

      猜你喜欢
      • 2022-11-26
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 2019-08-12
      • 2022-08-19
      • 2019-09-21
      • 2021-06-20
      • 1970-01-01
      相关资源
      最近更新 更多