- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在编写一些 Terraform 代码,用于将 Azure 私有(private) DNS 区域部署到 Azure 中。
我已使用以下代码成功部署了 DNS 区域:
dns_zones = [
"domain1.com",
"domain2.com",
"domain3.com",
]
resource "azurerm_private_dns_zone" "dns_zones" {
for_each = toset(var.dns_zones)
name = each.value
resource_group_name = var.resource_group
}
我的问题是配置区域和虚拟网络之间的链接。我需要迭代 dns_zones 列表并有一个嵌套循环,然后迭代 vnet_links 列表并配置区域上的 vnet 链接。
以下解决方案有效,但它不是很强大,因为从任一列表中删除配置都会打乱列表的索引号,导致 Terraform 删除并重新创建配置,这不是一个选项:
vnet_links = [
{
"linkName": "name-of-vnet-link1"
"vnetId": "vnet--resource-id-placeholder1"
},{
"linkName": "name-of-vnet-link2"
"vnetId": "vnet--resource-id-placeholder2"
}
]
resource "azurerm_private_dns_zone_virtual_network_link" "vnet_link" {
count = length(setproduct(var.dns_zones, var.vnet_links))
name = element(setproduct(var.dns_zones, var.vnet_links)[count.index], 1).linkName
resource_group_name = var.resource_group
private_dns_zone_name = element(setproduct(var.dns_zones, var.vnet_links)[count.index], 0)
virtual_network_id = element(setproduct(var.dns_zones, var.vnet_links)[count.index], 1).vnetId
}
我发现使用下面的 setproduct() 函数可以创建一个包含我想要使用的数据的新列表,并且我打算将其与 for_each 而不是计数一起使用,但不可能使用这与 toset() 函数一起使用,因为它只接受字符串列表。
setproduct(var.dns_zones, var.vnet_links)
现在我有点不知该去哪里。我可以将区域信息包含在 vnet_links 列表中,但这需要大量重复,我想避免这种情况。理想情况下,我希望能够找到一种解决方案,不需要对 dns_zones 列表进行任何更改,并保留带有 vnet 链接的单独列表。
谢谢!
编辑:
感谢 Charles 提供了一种格式化数据的方法。除了 Charles 响应之外,我还需要在 for_each 循环中创建动态映射来使用数据。最终解决方案如下所示:
dns_zones = [
"domain1.com",
"domain2.com",
"domain3.com",
]
vnet_links = [
{
"linkName": "name-of-vnet-link1"
"vnetId": "vnet--resource-id-placeholder1"
},{
"linkName": "name-of-vnet-link2"
"vnetId": "vnet--resource-id-placeholder2"
}
]
locals {
association = flatten([
for dns_zone in var.dns_zones: [
for link in var.vnet_links: {
zone = dns_zone
vnet_link = link
}
]
])
}
resource "azurerm_private_dns_zone_virtual_network_link" "vnet_link" {
for_each = { for row in local.association:
"${row.zone}_${row.vnet_link.linkName}" => {
zone = row.zone
linkName = row.vnet_link.linkName
vnetId = row.vnet_link.vnetId
}
}
name = each.value.linkName
resource_group_name = var.resource_group
private_dns_zone_name = each.value.zone
virtual_network_id = each.value.vnetId
}
最佳答案
根据您的要求,我认为 for 循环适合您,我假设您希望将区域信息和 Vnet 链接关联为以下格式:
{
"vnet_link" = {
"linkName": "name-of-vnet-link1"
"vnetId": "vnet--resource-id-placeholder1"
}
"zone" = "domain1.com"
}
然后您可以使用 for 循环将所有可能的关联放入如下列表中:
variable "dns_zones" {
default = [
"domain1.com",
"domain2.com",
"domain3.com",
]
}
variable "vnet_links" {
default = [
{
"linkName": "name-of-vnet-link1"
"vnetId": "vnet--resource-id-placeholder1"
},
{
"linkName": "name-of-vnet-link2"
"vnetId": "vnet--resource-id-placeholder2"
}
]
}
locals {
association = flatten([
for dns_zone in var.dns_zones: [
for link in var.vnet_links: {
zone = dns_zone
vnet_link = link
}
]
])
}
output "association" {
value = local.association
}
最后,输出如下:
如果还有其他问题,请告诉我。希望这是您想要的解决方案。
关于azure - 地形循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60138478/
示例:https://www.terraform.io/docs/providers/kubernetes/r/service_account.html 我们看到了: resource "kubern
示例:https://www.terraform.io/docs/providers/kubernetes/r/service_account.html 我们看到了: resource "kubern
我有 5 个 keyvaults,有 5 个 secret ,问题是我不希望我的 terraform 文件有 10 个这样的数据 block : data "azurerm_key_vault" "k
我之前在我的 TF 代码中使用过这个: count = "${var.whatever == "true" ? 1 : 0}" 这非常适合我想要使用的东西。但是,我正在考虑如何最好地使用类似于说的
我之前在我的 TF 代码中使用过这个: count = "${var.whatever == "true" ? 1 : 0}" 这非常适合我想要使用的东西。但是,我正在考虑如何最好地使用类似于说的
我想创建一个上面有山的地形,使用一个非常基本的原理,如这个高度映射所示: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
根据文档,使用terraform,我能够在 digital ocean 上创建一个小滴: resource "digitalocean_volume" "foobar" { region
在 Terraform 中,我正在尝试创建一个模块,其中包含一个带有变量键的 map 。我不确定这是否可能,但我尝试了以下但没有成功。 resource "aws_instance" "web" {
我正在使用Box2d进行自行车物理游戏,Box2d可以让你拥有8点或更少的凸多边形的固定装置,有人知道更简单的方法吗除了制作一大堆固定装置之外,还有复杂的凹形地形?或者这是唯一的方法? 任何想法、指示
我正在尝试在 LWJGL 中制作 2D 游戏。我在地形生成方面遇到问题。 我目前有一个生成地形的算法,但它总是随机的,我永远无法再次获得相同的世界,我想制作一个基于生成 x 和 y 坐标的算法给定的数
我在使用 libgdx 和 box2d 进行卡车游戏。 在我的游戏中 1 米 = 100 像素。 我的 2d 地形是由我生成的,由点组成。 我所做的是为整个多边形制作了一个多边形区域并使用了textu
我有一个 3D boolean 值数组,代表一些 3D 地形。目前我可以通过在数组中的 x y 和 z 指定的位置绘制一个点来绘制它,它看起来像这样。 我想不通的是如何使用三角形绘制它,所以它看起来像
我读过很多关于这个概念的教程,但我觉得它们都没有深入探讨如何做到这一点。我已经知道 3D 编程(光栅化、投影矩阵等)、光线转换(使用欧几里得几何和矢量)和光线追踪如何工作,我只需要知道如何使用柏林噪声
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 9 年前。 Improve this qu
我正在做一些地形渲染,但遇到了一些麻烦。在这个时间点,我只是镶嵌顶点补丁,然后用高度图替换它们。我目前的问题是渲染看起来很时髦。我已经调试了一段时间,看起来这是深度缓冲区的问题。除此之外,我对正在发生
在 OpenGL 中用四边形制作地形纹理的最佳方法是什么?我有大约 30 种不同的纹理我想为我的地形(每种地形类型 1 个纹理,所以 30 种地形类型)并且希望在任何两个地形之间平滑过渡。 我一直在浏
执行时 terraform plan我没有错误,但是当我执行 terraform apply 时我收到以下错误。 地形计划输出:- + aws_route53_record.alm_route_rec
执行 terraform init 时出现以下错误升级到 0.12.2 后的命令版本。早期的相同代码在 terraform 中运行良好,没有问题 0.11.10版本。 alb.tf tags {
terraform init成功初始化但卡在 terraform 计划上。 该错误与功能块有关。我不确定在哪里添加功能块: Insufficient features blocks (source c
我正在使用 terraform 版本 0.14.3。我有一个用于创建 Azure 网络接口(interface)卡的模块,如下所示: resource "azurerm_network_interfa
我是一名优秀的程序员,十分优秀!