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 调用获取相关服务帐户的访问令牌,或者使用应用程序默认凭据(如果已配置)。