首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型图的变量插值

类型图的变量插值
EN

Stack Overflow用户
提问于 2019-06-23 11:26:40
回答 1查看 566关注 0票数 0

升级到terraform v0.12.2,大部分东西停止了直线工作。(我的错,我没有检查这个页面:升级前的https://www.terraform.io/upgrade-guides/0-12.html )

无论如何,修正了大多数事情,但变量插值类型map仍然不起作用。在pre-v012.x中,这将完美地工作:

security_groups.tf

代码语言:javascript
复制
// SecurityGroup: default access
resource "aws_security_group" "default" {
  count        = "${length(var.s_zones)}"
  vpc_id       = "${element(aws_vpc.vpcs.*.id, count.index)}"
  name         = "${var.vpc_names[count.index]}-default"

  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["${var.vpn_cidrs["lan"]}",
                   "${var.vpn_cidrs["ovp"]}"]
    description = "SSH from vpn"
  }
}

vars.tf

代码语言:javascript
复制
// Variable: vpn_cidrs
variable "vpn_cidrs" {
  type = "map"
  default = {
    lan = ["10.0.11.0/28", "10.0.12.0/28"]
    ovp = ["10.1.13.0/28", "10.1.14.0/28"]
  }
}

使用0.12.2,它返回:

错误:属性值类型不正确 在资源"aws_security_group“"default":55 : cidr_blocks =[${var.vpn_cidrs”lan“}”“中的./../模块/vpc/security_groups.tf第55行, 属性“cidr_blocks”的不适当值:元素0:字符串必需。

我尝试使用新的构造函数:

代码语言:javascript
复制
// Variable: vpn_cidrs
variable "vpn_cidrs" {
  type = map(string)
  default = {
    lan1 = "10.0.11.0/28",
    lan2 = "10.0.12.0/28",
    ovp1 = "10.1.13.0/28",
    ovp2 = "10.1.14.0/28",
  }
}

但是,我不知道如何将它用于模块中的SG规则。有人知道我错过了什么或者怎么解决这个问题吗?从周五晚上开始就被困住了。任何有针对性的示例代码都将不胜感激。

-S

EN

回答 1

Stack Overflow用户

发布于 2019-06-23 14:26:27

"${var.vpn_cidrs["lan"]}"返回list ["10.0.11.0/28", "10.0.12.0/28"],但需要字符串作为错误消息状态。

尝试使用"${join(", ", var.vpn_cidrs["lan"])}"生成字符串10.0.11.0/28, 10.0.12.0/28

要生成两个列表( vpn_cidrs"lan“和vpn_cidrs"ovp”)的组合列表,请使用concat()函数(参见这里)。

代码语言:javascript
复制
cidr_blocks = "${concat(var.vpn_cidrs["lan"], var.vpn_cidrs["ovp"])}"

这会生成["10.0.11.0/28", "10.0.12.0/28", "10.1.13.0/28", "10.1.14.0/28"]

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56723402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档