Terraform执行plan/apply遇'missing value for command'错误求解决
解决Terraform Akamai Provider的"missing value for command"错误
问题重现
执行terraform apply时触发以下错误,删除.terraform*文件后terraform plan可正常运行,但apply仍报错:
│ Error: template: .terraform/providers/registry.terraform.io/akamai/akamai/6.0.0/darwin_amd64/terraform-provider-akamai_v6.0.0:70761: missing value for command
│
│ with data.akamai_property_rules_template.rules,
│ on akamai.tf line 54, in data "akamai_property_rules_template" "rules":
│ 54: data "akamai_property_rules_template" "rules" {
相关配置:
Terraform数据块
data "akamai_property_rules_template" "rules" { template_file = abspath("${path.root}/property-rules.json") variables { name = "directory_name" value = var.directory_name type = "string" } }
property-rules.json模板
{ "rules": { "name": "default", "behaviors": [ { "name": "origin", "options": { "originType": "NET_STORAGE", "netStorage": { "cpCode": 1111111, "downloadDomainName": "testnsx.download.akamai.com", "name": "TestNSx", "id": 0000000 } } }, { "name": "allowPost", "options": { "allowWithoutContentLength": false, "enabled": false } }, { "name": "caching", "options": { "behavior": "MAX_AGE" } } ], "variables": [ { "name": "PMUSER_DIR", "value": "${env.directory_name}", "description": "Main content directory", "hidden": false, "sensitive": false }, { "name": "PMUSER_FORCE_HTTPS", "value": "Y", "description": "Force secure connection", "hidden": false, "sensitive": false } ], "comments": "The behaviors in the Default Rule apply to all requests for the property hostname(s) unless another rule overrides the Default Rule settings." } }
解决方案
1. 修正模板变量引用格式
Akamai的property_rules_template数据块使用Go模板语法,而非Shell环境变量格式。将property-rules.json中的${env.directory_name}替换为{{var.directory_name}}:
{ "name": "PMUSER_DIR", "value": "{{var.directory_name}}", // 其他内容保持不变 }
2. 确保变量正确传递
- 在
variables.tf中声明directory_name变量:
variable "directory_name" { type = string description = "Main content directory name" }
- apply时通过命令行或tfvars文件传入变量值:
- 命令行方式:
terraform apply -var="directory_name=your-target-directory" - tfvars文件方式(新建
terraform.tfvars):directory_name = "your-target-directory"
- 命令行方式:
3. 完全清理Terraform缓存并重新初始化
避免旧缓存干扰,执行完整清理流程:
rm -rf .terraform* terraform.tfstate* terraform init terraform plan terraform apply
4. 检查Provider版本兼容性
v6.0.0版本的Akamai Provider可能存在模板处理的已知问题,尝试调整版本:
修改versions.tf中的版本约束:
terraform { required_providers { akamai = { source = "akamai/akamai" version = "~> 5.0" # 或最新稳定版 } } }
然后执行:
terraform init -upgrade
内容的提问来源于stack exchange,提问作者Lizzie
相关产品推荐
相关产品推荐

