如何通过Terraform Helm Provider修改RabbitMQ的存活/就绪探针执行命令?
问题原因与解决办法
你的核心问题是探针命令的格式不匹配Helm Chart的预期类型:RabbitMQ Helm Chart中livenessProbe.exec.command和readinessProbe.exec.command是数组类型,但你通过set传递的是单个字符串,Helm无法将字符串解析为数组,因此不会覆盖默认的数组配置。
另外,直接在values块中配置时,你之前的尝试可能格式有误(比如没写成数组),导致未生效。
修正方案(二选一,推荐第一种)
方案1:在values heredoc中直接配置探针(更直观)
直接在你已有的values块里添加探针配置,用数组格式定义命令:
resource "helm_release" "rabbitmq" { repository = var.repository description = var.description lint = var.lint verify = var.verify name = var.name version = var.version chart = var.chart namespace = var.namespace create_namespace = var.create_namespace set { name = "service.type" value = var.service_type } values = [ <<EOF service: annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" service.beta.kubernetes.io/azure-load-balancer-internal-subnet: "my-subnet" # 覆盖存活探针 livenessProbe: exec: command: - rabbitmq-diagnostics - -q - ping # 覆盖就绪探针 readinessProbe: exec: command: - rabbitmq-diagnostics - -q - ping EOF ] }
方案2:用set块传递数组类型的命令
如果坚持用set块,需要逐个指定数组元素,或者使用Terraform helm_release的array参数:
方式A:逐个设置数组元素
set { name = "livenessProbe.exec.command[0]" value = "rabbitmq-diagnostics" } set { name = "livenessProbe.exec.command[1]" value = "-q" } set { name = "livenessProbe.exec.command[2]" value = "ping" } # 就绪探针同理 set { name = "readinessProbe.exec.command[0]" value = "rabbitmq-diagnostics" } set { name = "readinessProbe.exec.command[1]" value = "-q" } set { name = "readinessProbe.exec.command[2]" value = "ping" }
方式B:使用array参数(Terraform 0.13+支持)
set { name = "livenessProbe.exec.command" array = true value = ["rabbitmq-diagnostics", "-q", "ping"] } set { name = "readinessProbe.exec.command" array = true value = ["rabbitmq-diagnostics", "-q", "ping"] }
额外说明
之前删除StatefulSet、Release等操作无效,是因为配置本身格式错误,Helm始终使用默认值。修正配置后,执行terraform apply即可覆盖原有探针配置,无需手动删除资源。
内容的提问来源于stack exchange,提问作者FidelCasto
相关产品推荐
相关产品推荐

