首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从terraform创建可分析的清单?

如何从terraform创建可分析的清单?
EN

Stack Overflow用户
提问于 2020-12-31 23:48:43
回答 2查看 80关注 0票数 0

我用这个简单的问题回答了堆栈。

假设我需要创建几个实例资源,那么我如何从tf变量迭代以收集所有私有it并将其传递给ansible清单文件。

因为我发现我必须使用*,就像这里:

代码语言:javascript
复制
k8s_master_name = "${join("\n", azurerm_virtual_machine.k8s-master.*.name)}"

但我认为对我来说,它会是这样的:

代码语言:javascript
复制
inst_ip = "${join("\n", ${aws_instance.*.private_ip})}"

但是我得到了一个错误:

代码语言:javascript
复制
Error: Invalid reference
 on crc.cloud.connect.tf line 72, in resource "local_file" "servers1":
 72:       inst_ip = "${join("\n", aws_instance.*.private_ip)}"
  
 A reference to a resource type must be followed by at least one attribute
 access, specifying the resource name.

完整的tf文件:

代码语言:javascript
复制
  resource "aws_instance" "sp-1" {
  ami               = "cmi-993E674A"
  instance_type     = "c5.large"
  monitoring        = true
  source_dest_check = false
  user_data         = file("user_data.sh")
  subnet_id              = "subnet-F6C45280"
  private_ip             = "172.31.16.18"
  vpc_security_group_ids = ["sg-230C7615"]
  key_name = "mmk-key"
  #network_interface {
  #  network_interface_id = "${aws_network_interface.ni-sp-1.id}"
  #  device_index         = 0
  #}
  tags = {
    desc = "sp-1"  
    group_name = "sp"
  }

}

  resource "aws_instance" "sp-2" {
  ami               = "cmi-993E674A"
  instance_type     = "c5.large"
  monitoring        = true
  source_dest_check = false
  user_data         = file("user_data.sh")
  subnet_id              = "subnet-F6C45280"
  private_ip             = "172.31.16.19"
  vpc_security_group_ids = ["sg-230C7615"]
  key_name = "mmk-key"
  tags = {
    desc = "sp-2"  
    group_name = "sp"

  }
}

resource "local_file" "servers1" {
  content = templatefile("${path.module}/templates/servers1.tpl",
    {
      inst_ip = "${join("\n", ${aws_instance.*.private_ip})}"
    }
  )
  filename = "../ansible/inventory/servers1"
}
EN

回答 2

Stack Overflow用户

发布于 2021-01-01 03:43:38

根据Terraform documentation,您需要引用资源类型及其相关名称。

在配置文件中,您有一个名为sp-1aws_instance资源。如果您希望访问资源的private_ip属性,则需要这样做:aws_instance.sp-1[*].private_ip

票数 0
EN

Stack Overflow用户

发布于 2021-01-01 06:13:52

您正在创建实例aws_instance.sp-1,而不是多个实例。要创建多个实例,您需要使用countfor_each,或者通过aws_autoscaling_group配置实例。

因此,要访问private_ip,您并不真正需要在本例中使用splat *join (但如果您愿意,仍然可以使用它们),因为您只有一个实例,并且只有一个private_ip。以下内容应该足够了:

代码语言:javascript
复制
inst_ip = aws_instance.sp-1.private_ip
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65522942

复制
相关文章

相似问题

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