无法通过Terraform Output获取my-vpc的vpc_id与public_subnets.0值求助
问题:无法从Terraform的my-vpc输出中提取vpc_id和public_subnets[0]值
执行以下命令时,无法正确提取指定属性,只会输出my-vpc的完整结构体:
ansible-playbook playbook1.yml -e "vpc_id=$(terraform output my-vpc.vpc_id) vpc_subnet_id=$(terraform output my-vpc.public_subnets.0)" -vvv
已尝试调整命名路径、检查Jenkins权限、修改输出目标,均未解决。
解决方案
原因说明
my-vpc是一个复合输出对象,Terraform的output命令默认不支持通过my-vpc.vpc_id这种嵌套点语法直接提取属性,必须通过JSON解析或者单独定义输出项来获取指定值。
方法1:使用JSON输出+jq工具提取
通过-json参数让Terraform输出JSON格式的结果,再用jq工具解析提取目标属性:
# 提取vpc_id terraform output -json my-vpc | jq -r '.vpc_id' # 提取第一个public subnet terraform output -json my-vpc | jq -r '.public_subnets[0]'
修改后的Ansible命令:
ansible-playbook playbook1.yml -e "vpc_id=$(terraform output -json my-vpc | jq -r '.vpc_id') vpc_subnet_id=$(terraform output -json my-vpc | jq -r '.public_subnets[0]')" -vvv
方法2:在Terraform中单独定义输出项
在你的Terraform配置文件中添加单独的输出块,直接暴露需要的属性:
output "vpc_id" { value = module.my-vpc.vpc_id } output "public_subnet_0" { value = module.my-vpc.public_subnets[0] }
执行terraform apply更新输出后,即可直接通过输出名称获取值:
ansible-playbook playbook1.yml -e "vpc_id=$(terraform output vpc_id) vpc_subnet_id=$(terraform output public_subnet_0)" -vvv
内容的提问来源于stack exchange,提问作者Martin Lars
相关产品推荐
相关产品推荐

