【发布时间】:2021-12-30 20:04:07
【问题描述】:
我只想每小时执行一次 exec 操作。意思是,如果现在是 12 点,那么在 13 点之前不要再次执行。
时间戳与 fomatdate 相结合将产生仅每小时不同的时间戳。
resource "null_resource" "helm_login" {
triggers = {
hour = formatdate("YYYYMMDDhh", timestamp())
}
provisioner "local-exec" {
command = <<-EOF
az acr login -n ${var.helm_chart_acr_fqdn} -t -o tsv --query accessToken \
| helm registry login ${var.helm_chart_acr_fqdn} \
-u "00000000-0000-0000-0000-000000000000" \
--password-stdin
EOF
}
问题是 terraform 报告说这个值只有在 appy 之后才知道,并且总是想重新创建资源。
# module.k8s.null_resource.helm_login must be replaced
-/+ resource "null_resource" "helm_login" {
~ id = "4503742218368236410" -> (known after apply)
~ triggers = {
- "hour" = "2021112010"
} -> (known after apply) # forces replacement
}
我观察到类似的问题,即从数据中获取值并在创建时传递给资源,这迫使我不使用这些数据值,而是对它们进行硬编码。
【问题讨论】:
-
我猜这个问题出在
trigger上。做文档说The triggers argument allows specifying an arbitrary set of values that, when changed, will cause the resource to be replaced. -
"我只想每小时执行一次 exec 操作。"目前尚不清楚您的意思是什么,以及
timestamp()函数将如何帮助实现这一目标。请在问题中添加更多详细信息。 -
如果时间戳没有改变,那么不要执行。这就是为什么它的格式只有在新的一小时才会有所不同。问题是 terraform 不会先对此进行评估,然后再确定触发值是否不同。
-
这个确切的问题就是我在从数据中获取值时提到的问题。即使数据每次带来完全相同的值。 Terraform 想要重新创建某些资源,因为它说这只有在应用后才知道。它以这种方式工作有点愚蠢。如果你只能做一次,当你不想不断地重新创建资源时,从数据中获取它有什么意义。
-
让我们澄清一下“每小时仅执行一次”terraform 不是调度程序,此代码可能会在 8:59 触发执行,然后在 9:01 再次触发...如果您需要它运行每小时你需要一些其他工具
标签: terraform