我是 Terraform(提供程序)新手,我尝试创建一个开箱即用的脚本,该脚本运行 terraform init 并完成使其运行所需的所有准备工作。例如,应始终避免注册表查找,因为要使用的 Terraform 提供程序只是一个本地二进制文件。
我的脚本失败了(见屏幕截图),我真的不明白为什么。生成了正确的文件(例如 terraformrc)。二进制文件已复制到插件文件夹等。它应该可以正常工作。但我收到错误。查看屏幕截图和脚本。
我希望有人可以帮助我重写我的脚本以terraform init
使其正常运行。
#!/usr/bin/env bash
set -e # Exit on any error
###############################################################################
# VARIABLES
###############################################################################
HOME_DIR=$(eval echo "~$USER") # Get the full home directory path
PLUGIN_DIR="$HOME_DIR/.terraform.d/plugins/local/flowtrends/1.0.0/linux_amd64"
TERRAFORMRC_PATH="$HOME_DIR/.terraformrc"
BINARY_NAME="terraform-provider-flowtrends_v1.0.0"
LOCAL_BINARY="./$BINARY_NAME"
MAIN_TF="main.tf"
###############################################################################
# STEP 1: FORCEFULLY OVERWRITE ~/.terraformrc WITH ABSOLUTE PATH
###############################################################################
cat << EOF > "$TERRAFORMRC_PATH"
provider_installation {
dev_overrides {
"local/flowtrends" = "$HOME_DIR/.terraform.d/plugins"
}
direct {
exclude = []
}
}
EOF
echo "Created $TERRAFORMRC_PATH with dev overrides for local/flowtrends."
###############################################################################
# STEP 2: CREATE A GUARANTEED VALID main.tf
###############################################################################
cat << EOF > "$MAIN_TF"
terraform {
required_providers {
flowtrends = {
source = "local/flowtrends"
version = "1.0.0"
}
}
}
provider "flowtrends" {}
EOF
echo "Created $MAIN_TF with source = \"local/flowtrends\"."
###############################################################################
# STEP 3: CREATE THE NECESSARY PLUGIN DIRECTORY STRUCTURE
###############################################################################
mkdir -p "$PLUGIN_DIR"
echo "Created directory structure: $PLUGIN_DIR"
###############################################################################
# STEP 4: COPY THE PROVIDER BINARY TO THE CORRECT LOCATION
###############################################################################
if [[ ! -f "$LOCAL_BINARY" ]]; then
echo "ERROR: Local provider binary $LOCAL_BINARY not found in the current directory."
echo "Please place the binary here and rerun the script."
exit 1
fi
cp "$LOCAL_BINARY" "$PLUGIN_DIR/"
echo "Copied provider binary to $PLUGIN_DIR/"
###############################################################################
# STEP 5: SET EXECUTABLE PERMISSION FOR THE PROVIDER BINARY
###############################################################################
chmod +x "$PLUGIN_DIR/$BINARY_NAME"
echo "Set execute permissions on $PLUGIN_DIR/$BINARY_NAME."
###############################################################################
# STEP 6: CLEAR TERRAFORM CACHE (FORCE CLEAN START)
###############################################################################
echo "Cleaning up Terraform cache..."
rm -rf .terraform/ .terraform.lock.hcl
###############################################################################
# STEP 7: FORCE DISABLE REGISTRY IN main.tf
###############################################################################
cat << EOF >> "$MAIN_TF"
// DISABLING REGISTRY LOOKUP
terraform {
backend "local" {}
}
EOF
###############################################################################
# STEP 8: RUN `terraform init` AND FORCE REGISTRY BYPASS
###############################################################################
echo "Running terraform init..."
terraform init -input=false
更新
使用filesystem_mirror
应该可以工作(参见这个新脚本)但不幸的是出现了同样的错误。
#!/usr/bin/env bash
set -e # Exit on any error
###############################################################################
# VARIABLES
###############################################################################
HOME_DIR=$(eval echo "~$USER") # Get the full home directory path
PLUGIN_DIR="$HOME_DIR/.terraform.d/plugins/local/flowtrends/1.0.0/linux_amd64"
TERRAFORMRC_PATH="$HOME_DIR/.terraformrc"
BINARY_NAME="terraform-provider-flowtrends_v1.0.0"
LOCAL_BINARY="./$BINARY_NAME"
MAIN_TF="main.tf"
###############################################################################
# STEP 1: CONFIGURE ~/.terraformrc WITH FILESYSTEM MIRROR
###############################################################################
cat << EOF > "$TERRAFORMRC_PATH"
provider_installation {
filesystem_mirror {
path = "$HOME_DIR/.terraform.d/plugins"
}
direct {
exclude = []
}
}
EOF
echo "Configured $TERRAFORMRC_PATH with filesystem_mirror."
###############################################################################
# STEP 2: CREATE A GUARANTEED VALID main.tf
###############################################################################
cat << EOF > "$MAIN_TF"
terraform {
required_providers {
flowtrends = {
source = "local/flowtrends"
version = "1.0.0"
}
}
}
provider "flowtrends" {}
EOF
echo "Created $MAIN_TF with source = \"local/flowtrends\"."
###############################################################################
# STEP 3: CREATE THE NECESSARY PLUGIN DIRECTORY STRUCTURE
###############################################################################
mkdir -p "$PLUGIN_DIR"
echo "Created directory structure: $PLUGIN_DIR"
###############################################################################
# STEP 4: COPY THE PROVIDER BINARY TO THE FILESYSTEM MIRROR LOCATION
###############################################################################
if [[ ! -f "$LOCAL_BINARY" ]]; then
echo "ERROR: Local provider binary $LOCAL_BINARY not found in the current directory."
echo "Please place the binary here and rerun the script."
exit 1
fi
cp "$LOCAL_BINARY" "$PLUGIN_DIR/"
echo "Copied provider binary to $PLUGIN_DIR/"
###############################################################################
# STEP 5: SET EXECUTABLE PERMISSION FOR THE PROVIDER BINARY
###############################################################################
chmod +x "$PLUGIN_DIR/$BINARY_NAME"
echo "Set execute permissions on $PLUGIN_DIR/$BINARY_NAME."
###############################################################################
# STEP 6: CLEAR TERRAFORM CACHE (FORCE CLEAN START)
###############################################################################
echo "Cleaning up Terraform cache..."
rm -rf .terraform/ .terraform.lock.hcl
###############################################################################
# STEP 7: RUN `terraform init` AND FORCE FILESYSTEM MIRROR USAGE
###############################################################################
echo "Running terraform init..."
terraform init -input=false