【发布时间】:2020-12-10 16:39:06
【问题描述】:
我有许多嵌套模块的 terraform 设置。简化后看起来像这样
├── modules
│ ├── sec-groups
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ ├── variables.tf
│ │ └── versions.tf
├── dev
│ ├── env.dev.tfvars
│ ├── main.tf
│ ├── versions.tf
│ └── variables.tf
└── prod
├── env.prod.tfvars
├── main.tf
├── versions.tf
└── variables.tf
在开发中的位置:
main.tf
module "aws_dev_sec-groups" {
source = "../modules/sec-groups"
vpc_name = aws_vpc.dev_bp_vpc
vpc_id = aws_vpc.dev_bp_vpc.id
localip = var.localip
}
变量.tf
variable "localip" {
type = string
}
env.dev.tfvars
localip = "1.1.1.1/32"
在 sec-groups 模块中:
main.tf
resource "aws_security_group" "servers_sg" {
name = "servers_sg"
description = "Traffic allowed to and from Servers"
vpc_id = var.vpc_id
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = [var.localip]
}
}
变量.tf
variable vpc_id {}
variable localip {
type = string
}
--
'terraform init' 产生预期的结果。但是,“terraform plan”会产生以下错误。对我来说,这表明一个空的 localip 变量,这意味着我没有正确声明该变量,是这样吗?
Error: "" is not a valid CIDR block: invalid CIDR address:
on ../modules/sec-groups/main.tf line 63, in resource "aws_security_group" "servers_sg":
63: resource "aws_security_group" "servers_sg" {
}
提前致谢
--
% terraform -v
Terraform v0.13.0
+ provider registry.terraform.io/hashicorp/aws v3.2.0
+ provider registry.terraform.io/hashicorp/random v2.3.0
【问题讨论】:
-
我不认为
env.dev.tfvars会自动加载到变量中。将文件重命名为env.dev.auto.tfvars或在执行 terraform plan & apply 时使用-var-file="env.dev.tfvars"参数在命令行中指定它。 -
上面的评论是正确的,但是你应该得到一个关于
localip变量没有被设置的错误,因为它在根模块vars.tf中不包含默认值。你有没有轻微地破坏东西并删除它?或者这段代码正是minimal reproducible example? -
标题非常非常误导......你可以很好地传递变量_ _ _看看你的代码在哪里为变量设置了
"" -
当我调用计划时,我指定
-var-file=env.dev.auto.tfvars使用“自动”似乎没有什么不同。 -
@HelderSepulveda - 我不明白为什么标题具有误导性。我已将变量指定为“1.1.1.1”,据我所知,它没有传递给模块。有没有更好的方式来描述这个
标签: terraform terraform-aws-modules