You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform local-exec执行Packer多行脚本报错:找不到配置文件

问题

我正尝试创建VMSS,计划用Packer打包镜像,Terraform部署剩余Azure基础设施。本地测试阶段执行terraform apply时触发以下错误:

Error: local-exec provisioner error
│
│   with null_resource.packer,
│   on main.tf line 14, in resource "null_resource" "packer":
│   14:   provisioner "local-exec" {
│
│ Error running command 'packer build \
│ -var client_id=[client] \
│ -var client_secret=[secret] \
│ -var install_password=CHANGEME! \
│ -var location=UKSOUTH \
│ -var resource_group=[resourcegroup] \
│ -var storage_account=[sa] \
│ -var subscription_id=[sub] \
│ -var temp_resource_group_name=rg-packerbuild-test \
│ -var tenant_id=[tenant] \
│ -var virtual_network_name=[vnet] \
│ -var virtual_network_resource_group_name=[resource group] \
│ -var virtual_network_subnet_name=hosts \
│ windows2022.pkr.json
│ ': exit status 1. Output: Error: Could not find any config file in \
│
│ A config file must be suffixed with `.pkr.hcl` or `.pkr.json`. A folder can be
│ referenced.

对应的Terraform代码如下:

locals {
  ami_name = join("-", [var.name, formatdate("YYYYMMDDhhmmss", timestamp())])
}

resource "null_resource" "packer" {
  triggers = {
    ami_name = local.ami_name
  }

  provisioner "local-exec" {
    working_dir = path.module
    command     = <<-EOF
    packer build \
    -var client_id=${var.client_id} \
    -var client_secret=${var.client_secret} \
    -var install_password=${var.install_password} \
    -var location=${var.location} \
    -var resource_group=${var.resource_group} \
    -var storage_account=${var.storage_account} \
    -var subscription_id=${var.SubscriptionId} \
    -var temp_resource_group_name=${var.TempResourceGroupName} \
    -var tenant_id=${var.TenantId} \
    -var virtual_network_name=${var.VirtualNetworkName} \
    -var virtual_network_resource_group_name=${var.VirtualNetworkRG} \
    -var virtual_network_subnet_name=${var.VirtualNetworkSubnet} \
    windows2022.pkr.json 
EOF
  }
}

已确认windows2022.pkr.json文件存在,在packer build前加dir命令也能显示正确路径,请问哪里操作有误?


排查与解决

  • 删除文件名后的多余空格:你的Terraform代码里,windows2022.pkr.json这行末尾有个空格,EOF会保留这个空格,导致实际执行的命令中文件名变成windows2022.pkr.json (带尾空格),系统无法识别这个文件。把该行末尾的空格删掉即可。
  • 使用绝对路径指定配置文件:虽然设置了working_dir = path.module,可以尝试将文件名替换为绝对路径:${path.module}/windows2022.pkr.json,避免路径解析时的歧义。
  • 验证最终执行的命令:可以在local-exec中先把命令输出到临时文件,比如在packer build前添加echo "packer build ..." > debug_cmd.txt,查看实际生成的命令是否存在格式问题,比如变量注入导致的路径异常。
  • 检查Packer版本:确保使用的Packer版本支持.pkr.json格式配置,虽然后缀符合要求,但部分旧版本可能对JSON配置的兼容有差异,尝试升级到稳定版Packer再测试。

内容的提问来源于stack exchange,提问作者joko_88

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 22:33:09