Terraform资源未正确读取其他资源的更新值
我不知道这是地形问题还是提供商有bug 我正在使用kubernetes_部署和kubernetes_配置图 在kubernetes_部署中,我有:Terraform资源未正确读取其他资源的更新值,terraform,terraform-provider-kubernetes,Terraform,Terraform Provider Kubernetes,我不知道这是地形问题还是提供商有bug 我正在使用kubernetes_部署和kubernetes_配置图 在kubernetes_部署中,我有: template { metadata { labels = { config_version = kubernetes_config_map.myconfig.metadata[0].resource_version 情况就是这样: 我修改kubernetes\u config\u映射资源正在使用的配置文件 然后运行应用程
template {
metadata {
labels = {
config_version = kubernetes_config_map.myconfig.metadata[0].resource_version
情况就是这样:
我修改kubernetes\u config\u映射资源正在使用的配置文件
然后运行应用程序
Terraform看到配置映射资源更改,但
kubernetes_部署资源未显示任何更改
申请后,我会再次运行申请
现在kubernetes_部署会看到更改的值并将其注册为更改
这取决于是否有显式表达式
为什么会这样?kubernetes_部署应该看到值已更改,并将其注册为更改。我没有注意发生了什么 我认为这是kubernetes_config_映射资源中的一个bug 修改配置映射数据时,kubernetes_config_映射资源仅显示数据属性中的更改,这是导致我的问题的错误行为 如果数据被修改,则资源的版本必须并且将始终更改,但资源不会注册此更改。因此,查看该属性的从属资源看不到任何更改 太糟糕了,因为这将是一个非常明确的方法 幸运的是,在修复该错误之前,我可以使用数据属性的散列:
template {
metadata {
labels = {
config_hash = md5(kubernetes_config_map.myconfig.data)
这实际上是提供者有意为之,因为在修改ConfigMap或Secret时,Kubernetes中的部署不会重新启动。在Terraform和Kubernetes中,有几种方法可以获得所需的行为: 将Secret或ConfigMap装载为卷,并在应用程序代码中使用热重新加载机制,例如,或类似的sidecar容器。 运行确保部署使用最新配置的控制器,如或。 向部署或守护程序添加注释,该注释是配置映射和密码中数据的散列。以下是一个例子:
3的缺点是,对于使用特定configmap/secret的每个部署,都必须复制此代码。它还会在差异中产生一些噪音,对于未设置此设置的进行配置更改的人来说,这些噪音可能不是直观的。这确实似乎是提供程序中缺少的行为。如您所说,如果数据的更改会导致resource_version发生更改,那么原则上,在这种情况下,提供者可以将resource_version参数标记为在计划阶段应用后已知,这将获得您期望的行为。也许您可以在提供者的存储库中报告这一点,看看是否有可能实现该行为。
annotations = {
config_change = sha1(jsonencode(merge(
kubernetes_config_map.test_config.data,
kubernetes_secret.test_secret.data
)))
}