Terraform,"ignore_changes" 和子块
Terraform, "ignore_changes" and sub-blocks
我在 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"
}
}
忽略令牌的原因是 AWS API 没有向 terraform 显示该令牌,而是 AWS API 使用 aws codepipeline get-pipeline <name>
:[=18= 输出]
"pipeline": {
"stages": {
"name": "Source",
"actions": {
"configuration": {
"OAuthToken": "****"
}
}
}
}
结果是,当我执行 terraform plan
它显示它想要更新该令牌,如下所示:
module.modulename.aws_codepipeline.codepipeline
stage.0.action.0.configuration.%: "3" => "4"
stage.0.action.0.configuration.OAuthToken: "" => "b3287d649a28374e9283c749cc283ad74"
我的问题是,如何让ignore_changes
生效?我已经尝试过但没有成功:
ignore_changes = ["OAuthToken"]
ignore_changes = ["oauthtoken"]
ignore_changes = ["stage.action.configuration.OAuthToken"]
我在谷歌上找到的所有示例都只是展示了如何在同一块级别上忽略。
(说明此文字是假的。)
这个语法,正如 terraform plan
输出所暗示的那样,解决了问题:
ignore_changes = [
"stage.0.action.0.configuration.OAuthToken",
"stage.0.action.0.configuration.%"
]
另一种解决方法是添加GITHUB_TOKEN
系统环境变量,以token为值。这样你就不需要 tf 文件中的 ignore_changes
指令。
此语法已弃用
ignore_changes = [
"stage.0.action.0.configuration.OAuthToken",
"stage.0.action.0.configuration.%"
]
但由于某些原因,新版本在 v1.0.0 中被忽略了
ignore_changes = [
stage[0].action[0].configuration.OAuthToken,
stage[0].action[0].configuration,
]
我遇到过类似情况,我解决如下:
ignore_changes = [
stage[0].action[0].configuration["OAuthToken"]
]
我在 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"
}
}
忽略令牌的原因是 AWS API 没有向 terraform 显示该令牌,而是 AWS API 使用 aws codepipeline get-pipeline <name>
:[=18= 输出]
"pipeline": {
"stages": {
"name": "Source",
"actions": {
"configuration": {
"OAuthToken": "****"
}
}
}
}
结果是,当我执行 terraform plan
它显示它想要更新该令牌,如下所示:
module.modulename.aws_codepipeline.codepipeline
stage.0.action.0.configuration.%: "3" => "4"
stage.0.action.0.configuration.OAuthToken: "" => "b3287d649a28374e9283c749cc283ad74"
我的问题是,如何让ignore_changes
生效?我已经尝试过但没有成功:
ignore_changes = ["OAuthToken"]
ignore_changes = ["oauthtoken"]
ignore_changes = ["stage.action.configuration.OAuthToken"]
我在谷歌上找到的所有示例都只是展示了如何在同一块级别上忽略。
(说明此文字是假的。)
这个语法,正如 terraform plan
输出所暗示的那样,解决了问题:
ignore_changes = [
"stage.0.action.0.configuration.OAuthToken",
"stage.0.action.0.configuration.%"
]
另一种解决方法是添加GITHUB_TOKEN
系统环境变量,以token为值。这样你就不需要 tf 文件中的 ignore_changes
指令。
此语法已弃用
ignore_changes = [
"stage.0.action.0.configuration.OAuthToken",
"stage.0.action.0.configuration.%"
]
但由于某些原因,新版本在 v1.0.0 中被忽略了
ignore_changes = [
stage[0].action[0].configuration.OAuthToken,
stage[0].action[0].configuration,
]
我遇到过类似情况,我解决如下:
ignore_changes = [
stage[0].action[0].configuration["OAuthToken"]
]