我有以下 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
,但仍然不起作用。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?
任何建议或解决方案将不胜感激。谢谢!
当您对 HCP Terraform(以前称为 Terraform Cloud)使用“远程操作”时,您正在 HCP Terraform 的运行环境中运行 Terraform CLI,因此您的配置只能使用该环境中可用的软件。
该文档在撰写本文时做了相当广泛的声明:
工作虚拟机上安装的操作系统和其他软件是 HCP Terraform 的内部实现细节。它不是稳定的公共接口的一部分,并且可能随时更改。
由于
local-exec
配置程序的目的是执行执行环境中可用的其他软件,上述声明实际上意味着 您根本不应该在 HCP Terraform 中使用 local-exec
配置程序,因为没有特定的外部软件可以保证可供您使用它运行。
相反,您需要找到一种方法来使用 Terraform 提供程序的功能(例如
hashicorp/google
)来实现您想要实现的目标,而不是使用配置程序。否则,您将需要禁用工作区的远程操作,然后在安装了 gcloud
程序的计算机上运行 Terraform。