Terraform,"ignore_changes"和子块

Wre*_*nch 11 amazon-web-services terraform aws-codepipeline

我在terraform文件中配置了AWS CodePipeline,如下所示:

resource {
    name = "Cool Pipeline"
    ...

    stage {
        name = "Source"
        ...

        action {
            name = "Source"
            ...

            configuration {
                Owner = "Me"
                Repo = "<git-repo-uri>"
                Branch = develop
                OAuthToken = "b3287d649a28374e9283c749cc283ad74"
            }
        }
    }

    lifecycle {
        ignore_changes = "OAuthToken"
    }
}
Run Code Online (Sandbox Code Playgroud)

忽略令牌的原因是AWS API没有将该令牌显示为terraform,而是AWS API通过以下方式输出aws codepipeline get-pipeline <name>:

"pipeline": {
    "stages": {
        "name": "Source",
        "actions": {
            "configuration": {
                "OAuthToken": "****"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

结果是,当我执行terraform plan它时,它显示我想要更新该令牌,如下所示:

module.modulename.aws_codepipeline.codepipeline
      stage.0.action.0.configuration.%:          "3" => "4"
      stage.0.action.0.configuration.OAuthToken: "" => "b3287d649a28374e9283c749cc283ad74"
Run Code Online (Sandbox Code Playgroud)

我的问题是,我怎样才能ignore_changes使其生效?我试过这个但没有成功:

ignore_changes = ["OAuthToken"]
ignore_changes = ["oauthtoken"]
ignore_changes = ["stage.action.configuration.OAuthToken"]
Run Code Online (Sandbox Code Playgroud)

我发现谷歌搜索的所有示例都显示了如何在同一块级别上忽略.

(令牌是这个文字是假的.)

小智 14

此语法已弃用

ignore_changes = [
    "stage.0.action.0.configuration.OAuthToken",
    "stage.0.action.0.configuration.%"
]
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,新的在 v1.0.0 中被忽略了

ignore_changes = [
  stage[0].action[0].configuration.OAuthToken,
  stage[0].action[0].configuration,
]
Run Code Online (Sandbox Code Playgroud)


Wre*_*nch 13

正如terraform plan输出所暗示的,这种语法解决了这个问题:

ignore_changes = [
    "stage.0.action.0.configuration.OAuthToken",
    "stage.0.action.0.configuration.%"
]
Run Code Online (Sandbox Code Playgroud)

另一种解决方法是添加GITHUB_TOKEN系统环境变量,并将标记作为值.这样,您就不需要ignore_changestf文件中的指令.

  • 很高兴您找到了解决此问题的方法,但这是资源中的错误,应作为问题提出。如果您愿意,您可以在 [此处](https://github.com/terraform-providers/terraform-provider-aws/issues) 提出它,以便为其他人修复它,这意味着您可以删除您的` ignore_changes 节。 (2认同)
  • 这帮助我解决了 Azure 应用程序服务获取基础设施(例如 Azure DevOps 部署)添加的大量应用程序设置的问题,我不想影响 TF 计划。将过滤后的此设置添加到计划差异 `lifecycle {ignore_changes = [ "app_settings.APPINSIGHTS_PROFILERFEATURE_VERSION" ] }` (2认同)