gcloud:使用 Terraform Cloud 时找不到命令,但可以在本地使用

问题描述 投票:0回答:1

我有以下 Terraform 配置,该配置使用 null_resource 和 local-exec 配置程序运行简单的 gcloud 命令。

resource "null_resource" "test_gcloud" {
  provisioner "local-exec" {
    command = <<EOT
      gcloud version
    EOT
  }
}

当我在本地运行 terraform apply 时,效果非常好。但是,当我在 Terraform Cloud 上运行它时,出现以下错误:

/bin/sh: 1: gcloud: not found

我尝试过的:

  • 添加
    terraform-google-modules/gcloud/google
    ,但仍然不起作用。
  • 使用gcloud前添加gcloud安装
resource "null_resource" "install_gcloud" {
  provisioner "local-exec" {
    command = <<EOT
      if ! command -v gcloud &> /dev/null; then
        echo "gcloud not found. Installing gcloud SDK..."
        curl -o google-cloud-sdk.tar.gz https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-409.0.0-linux-x86_64.tar.gz
        tar -xvzf google-cloud-sdk.tar.gz
        ./google-cloud-sdk/install.sh -q
        export PATH=$PATH:$(pwd)/google-cloud-sdk/bin
        echo 'export PATH=$PATH:$(pwd)/google-cloud-sdk/bin' >> ~/.bashrc
      else
        echo "gcloud is already installed."
      fi
    EOT
  }
}

resource "null_resource" "test_gcloud" {
  provisioner "local-exec" {
    command = <<EOT
      gcloud version
    EOT
  }
}

问题:

1.  Why does gcloud work locally but not in Terraform Cloud?
2.  How can I make gcloud available in Terraform Cloud so I can run commands using local-exec?

任何建议或解决方案将不胜感激。谢谢!

terraform gcloud terraform-provider-gcp terraform-cloud
1个回答
0
投票

当您对 HCP Terraform(以前称为 Terraform Cloud)使用“远程操作”时,您正在 HCP Terraform 的运行环境中运行 Terraform CLI,因此您的配置只能使用该环境中可用的软件。

该文档在撰写本文时做了相当广泛的声明:

工作虚拟机上安装的操作系统和其他软件是 HCP Terraform 的内部实现细节。它不是稳定的公共接口的一部分,并且可能随时更改。

由于

local-exec
配置程序的目的是执行执行环境中可用的其他软件,上述声明实际上意味着 您根本不应该在 HCP Terraform 中使用
local-exec
配置程序
,因为没有特定的外部软件可以保证可供您使用它运行。

相反,您需要找到一种方法来使用 Terraform 提供程序的功能(例如

hashicorp/google
)来实现您想要实现的目标,而不是使用配置程序。否则,您将需要禁用工作区的远程操作,然后在安装了
gcloud
程序的计算机上运行 Terraform。

© www.soinside.com 2019 - 2024. All rights reserved.