使用 terraform 获取和更新特定字段

Posted

技术标签:

【中文标题】使用 terraform 获取和更新特定字段【英文标题】:fetch and update particular field using terraform 【发布时间】:2021-05-06 18:41:20 【问题描述】:

我有一个场景,

如何获取特定字段值并更新特定字段值?

例如: 我正在使用配置了环境变量 (endpoint=abc) 和 replicas=2 的 terraform "kubernetes_deployment" 资源部署应用程序。

resource "kubernetes_deployment" “app” 
…..….
spec 
  replicas = 2
  template 
    spec 
     ….
      env 
        name  = “ENDPOINT”
        value = “abc”
    

一旦我使用 terraform 脚本进行部署,另一个脚本可能会更改配置 replicas=5 和环境值(endpoint=xyz)

现在我需要通过 terraform 脚本仅将副本更新到 20(如果副本

resource "kubernetes_deployment" “app” 
…..….
spec 
  replicas = 20       -> only this has to reflect in apply
  template 
    spec 
     ….
      env 
        name  = “ENDPOINT”
        value = “abc”
    

如果副本数 > 20,我如何获取特定字段(副本)进行比较并仅更新副本数?

有更多 Terraform 经验的人可以帮助我吗?

【问题讨论】:

你看过ignore_changes吗? 感谢重播,我应用了 ignore_changes 并且工作正常。 【参考方案1】:

在“kubernetes_deployment”资源块中,考虑添加一个生命周期块。使用它来忽略可能在 Terraform 知识之外对资源属性进行的更改。

为“ignore_changes”提供资源属性列表,Terrform 将在后续运行中忽略该列表。参数是资源中属性的相对地址。地图和列表元素可以使用索引符号来引用。

lifecycle 
    ignore_changes = [spec["env"]]
  

参考:https://www.terraform.io/docs/language/meta-arguments/lifecycle.html#ignore_changes

【讨论】:

以上是关于使用 terraform 获取和更新特定字段的主要内容,如果未能解决你的问题,请参考以下文章

使用 terraform 将 EC2 自己的 IP 添加为入站规则

使用Terraform更新服务原则密码

在更新实体的特定属性时,其他属性获取空值

为啥 terraform 试图重建已经提供的基础设施?

我无法使用 jQuery 发布特定行并获取字段的值,我获取第一行的值而不是提交的行

使用 terraform 创建 IAM 角色并将其附加到 EC2