我不知道这是否是terraform问题,或者提供程序存在错误
我正在使用kubernetes_deployment和kubernetes_config_map
在kubernetes_deployment中,我有这个:
template {
metadata {
labels = {
config_version = kubernetes_config_map.myconfig.metadata[0].resource_version
这是发生了什么
无论有没有明确的depends_on,都会发生这种情况。
为什么会这样? kubernetes_deployment应该会看到该值已更改并将其注册为更改
答案 0 :(得分:1)
这实际上是提供程序中的有意design decision,因为修改ConfigMap或Secret后,Kubernetes中的部署不会currently重新启动。在Terraform和Kubernetes中,有几种获得所需行为的方法:
annotations = {
config_change = sha1(jsonencode(merge(
kubernetes_config_map.test_config.data,
kubernetes_secret.test_secret.data
)))
}
#3的缺点是您必须为使用特定configmap / secret的每个部署复制此代码。它还会在差异中产生一些噪音,对于没有进行此设置的更改配置的人来说可能不是直接直观的。
答案 1 :(得分:0)
我没有注意发生的事情
我认为这是kubernetes_config_map资源中的错误
修改配置映射数据时,kubernetes_config_map资源仅显示“ data”属性的变化,这是导致我的问题的错误行为。
如果修改了数据,则resource_version必须且将始终更改,但是资源不会记录此更改。由于存在这种依赖资源,因此查看该属性不会看到任何更改。
太糟糕了,因为那是实现这一目标的真正清晰的方法。
幸运的是,在修复该错误之前,我可以使用data属性的哈希值:
template {
metadata {
labels = {
config_hash = md5(kubernetes_config_map.myconfig.data)