我使用terraform和helm提供程序来部署舵机图表,所有东西都与terraform一起工作,问题是应用程序已经在运行时,我从gitlab管道中更改了图像标记。
因此,下次我运行terraform时,从gitlab部署的图像标记将更改为前一个。
我尝试使用生命周期,这是我的terraform代码:
resource "helm_release" "app1" {
name = "app1"
namespace = "money"
chart = "stable/perl"
set {
name = "image.repository"
value = "docker.registry.local/app1-api"
}
set {
name = "replicaCount"
value = "2"
}
set {
name = "image.tag"
value = "1.0.1"
}
set {
name = "image.pullPolicy"
value = "Always"
}
set {
name = "service.type"
value = "ClusterIP"
}
lifecycle {
ignore_changes = [for s in set : s.name if s.name == "image.tag"]
}
}
terraform适用:
A static list expression is required.
发布于 2020-06-16 08:53:15
对于Helm资源,可以欺骗Terraform忽略所有相同“类型”的对象,这意味着您可以在set
中使用三个对象中的一个( set_sensitive
、set_string
)并忽略它们。
这是理想吗?当然不是,但确实有用。为什么对象不可寻址的根本原因是这里。
在您的示例中,应该是这样的:
resource "helm_release" "app1" {
set_string {
name = "image.tag"
value = "1.0.1"
}
lifecycle {
ignore_changes = [set_string]
}
}
编辑:请注意,ignore_changes
是非常字面的,因为任何更新都将强制执行旧值来替换当前在Helm中配置的任何内容。
示例: Terraform配置了初始标记和初始replicaCount == 2
。然后,CI/CD系统完成它的工作,并更新标签。现在,如果您要使用Terraform来更改replicaCount
,那么将重新应用初始标记,因为Terraform知道.
https://serverfault.com/questions/1004039
复制相似问题