Local-exec 销毁触发器 - 忽略对 google 访问令牌的更改
Local-exec destroy triggers - ignore changes to google access token
我有一个 null_resource,它有一个本地执行块,使用 google 访问令牌进行卷曲。
由于这是在销毁期间执行的,因此我不得不将其定义为触发器 var.
每次我执行 terraform apply
时,null_resource 都必须被替换,因为 google 访问令牌不断变化。
resource "null_resource" "env_to_group" {
for_each = local.map_env_group
triggers = {
env_id = google_apigee_environment.apigee[each.value.env].id
group_id = google_apigee_envgroup.apigee[each.value.group].id
access_token = data.google_client_config.current.access_token
project = var.project
group = each.value.group
env = each.value.env
}
provisioner "local-exec" {
when = destroy
command = <<EOF
curl -o /dev/null -s -w "%%{http_code}" -H "Authorization: Bearer ${self.triggers.access_token}"\
"https://apigee.googleapis.com/v1/organizations/${self.triggers.project}/envgroups/${self.triggers.group}/attachments/${self.triggers.env}" \
-X DELETE -H "content-type:application/json"
EOF
}
}
有没有办法忽略对 google 访问令牌的更改,或者有没有办法不必在触发器块中指定访问令牌变量?
我认为您仍然应该能够使用 depends_on
元参数和一个单独的资源来完成此操作,以便在销毁生命周期期间为命令提供临时访问令牌。
resource "local_file" "access_token" {
content = data.google_client_config.current.access_token
filename = "/var/share/access-token"
}
resource "null_resource" "env_to_group" {
for_each = local.map_env_group
triggers = {
env_id = google_apigee_environment.apigee[each.value.env].id
group_id = google_apigee_envgroup.apigee[each.value.group].id
project = var.project
group = each.value.group
env = each.value.env
}
depends_on = [local_file.access_token]
provisioner "local-exec" {
when = destroy
command = <<EOF
curl -o /dev/null -s -w "%%{http_code}" -H "Authorization: Bearer $(cat /var/share/access-token)"\
"https://apigee.googleapis.com/v1/organizations/${self.triggers.project}/envgroups/${self.triggers.group}/attachments/${self.triggers.env}" \
-X DELETE -H "content-type:application/json"
EOF
}
}
我想另一种解决方案是将某种凭据传递给命令,您可以通过该命令通过 API 调用获取相关服务帐户的访问令牌,或者使用应用程序默认凭据(如果已配置)。
我有一个 null_resource,它有一个本地执行块,使用 google 访问令牌进行卷曲。 由于这是在销毁期间执行的,因此我不得不将其定义为触发器 var.
每次我执行 terraform apply
时,null_resource 都必须被替换,因为 google 访问令牌不断变化。
resource "null_resource" "env_to_group" {
for_each = local.map_env_group
triggers = {
env_id = google_apigee_environment.apigee[each.value.env].id
group_id = google_apigee_envgroup.apigee[each.value.group].id
access_token = data.google_client_config.current.access_token
project = var.project
group = each.value.group
env = each.value.env
}
provisioner "local-exec" {
when = destroy
command = <<EOF
curl -o /dev/null -s -w "%%{http_code}" -H "Authorization: Bearer ${self.triggers.access_token}"\
"https://apigee.googleapis.com/v1/organizations/${self.triggers.project}/envgroups/${self.triggers.group}/attachments/${self.triggers.env}" \
-X DELETE -H "content-type:application/json"
EOF
}
}
有没有办法忽略对 google 访问令牌的更改,或者有没有办法不必在触发器块中指定访问令牌变量?
我认为您仍然应该能够使用 depends_on
元参数和一个单独的资源来完成此操作,以便在销毁生命周期期间为命令提供临时访问令牌。
resource "local_file" "access_token" {
content = data.google_client_config.current.access_token
filename = "/var/share/access-token"
}
resource "null_resource" "env_to_group" {
for_each = local.map_env_group
triggers = {
env_id = google_apigee_environment.apigee[each.value.env].id
group_id = google_apigee_envgroup.apigee[each.value.group].id
project = var.project
group = each.value.group
env = each.value.env
}
depends_on = [local_file.access_token]
provisioner "local-exec" {
when = destroy
command = <<EOF
curl -o /dev/null -s -w "%%{http_code}" -H "Authorization: Bearer $(cat /var/share/access-token)"\
"https://apigee.googleapis.com/v1/organizations/${self.triggers.project}/envgroups/${self.triggers.group}/attachments/${self.triggers.env}" \
-X DELETE -H "content-type:application/json"
EOF
}
}
我想另一种解决方案是将某种凭据传递给命令,您可以通过该命令通过 API 调用获取相关服务帐户的访问令牌,或者使用应用程序默认凭据(如果已配置)。