首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >所需属性vars元素字符串的不适当值

所需属性vars元素字符串的不适当值
EN

Stack Overflow用户
提问于 2022-07-08 09:15:51
回答 1查看 278关注 0票数 0

应用terraform时出错,我正在用云端部署处理terraform。我想从数据locals.tf vars块中的template_file文件中获取ip地址。当我执行terraform应用时,它将显示“属性vars元素字符串所需的不合适的值”。locals.tf

代码语言:javascript
复制
locals {
  workers = {
    "worker-1" = { host_name = "wrkr-1", vm_ip = "90" }
    "worker-2" = { host_name = "wrkr-2", vm_ip = "91" }
    "worker-3" = { host_name = "wrkr-3", vm_ip = "92" }
    "worker-4" = { host_name = "wrkr-4", vm_ip = "93" }
    "worker-5" = { host_name = "wrkr-5", vm_ip = "94" }
    "worker-6" = { host_name = "wrkr-6", vm_ip = "95" }    
  }
  controllers = {
    "controllers-1" = { host_name = "ctrl-1", vm_ip = "87" }
    "controllers-2" = { host_name = "ctrl-2", vm_ip = "88" }
    "controllers-3" = { host_name = "ctrl-3", vm_ip = "89" }
  }
}

config.tf

代码语言:javascript
复制
data template_file "lb_userdata" {
  template = file("${path.module}/cloud-init/lb-cloud-config.yaml")
  vars = {
    network_cidr = var.network_cidr
    controller_ip = local.controllers
    ip_address  = var.loadbalancer_ip
  }
}

感谢你的任何帮助

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-11 08:11:12

谢谢,我找到了一个技巧,我们可以做到这一点。数据文件如下所示

代码语言:javascript
复制
data template_file "lb_userdata" {
  template = file("${path.module}/cloud-init/lb-cloud-config.yaml")
  vars = {
    network_cidr = var.network_cidr
    controller_ip = join(",",([for k in local.controllers: k.vm_ip ]))
    ip_address  = var.loadbalancer_ip
  }
}

我使用join函数并使用for循环来获得字符串的值。

这是我的lb_cloud_config.yaml文件

代码语言:javascript
复制
%{~ for f in split(",",controller_ip) ~}
server ${network_cidr}.${f}:30793
%{~ endfor ~}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72909220

复制
相关文章

相似问题

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