我有一个关于 Terraform 的问题。
我已经设置了一些文件,并且可以在 vSphere 上使用它很好地创建虚拟机。但在现在的公司:
我已经编写了几段代码,并且运行良好,但问题是每次我想从这段代码部署 VM 到 clusterA(网络为 1.2.3.4/24)时,网关为1.2.3.1等等,然后我将它们作为默认值放入代码中。然后,当我部署到 clusterB 时,我需要更新所有这些变量,例如。网络为 1.2.4.4/24,网关为 1.2.4.1,依此类推。能否以某种方式引入开关逻辑,例如:
我知道这不是最好的方法,而且由于我更精通 PowerShell,如果 Terraform 不支持 switch 语句(或者我红色),我最终会做一个解决方法(编写一个需要模板文件的 PS 脚本) ,进行切换,并根据用户的选择在运行 terraform plan / apply 之前替换模板文件中的变量),但我更愿意将所有内容保留在 Terraform 中...
我的起始代码在这里(抱歉有很多评论,它是为了给更初级/不熟悉 TF 团队成员的,所以需要啰嗦......): https: //code.prkr.li/ 4W4RsYTEm3
举个例子:
variable "vm_to_clone" {
description = "Enter the name of the vM that we will clone:"
# ! THIS IS THE VM THAT YOU ARE CLONING
# * changeme ->
# default = "bnw_2019_gui" # * uncomment this line for deploying in BN
default = "alw_2019_gui" # * uncomment this line for deploying in AL
}
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?
谢谢
Mar*_*cin 22
TF本身switch
不支持,但您可以使用常规地图来表示要使用的内容switch
(如果我正确理解您的用例)。
因此,您不必将所有变量分开,而是可以map
使用键foo
和将它们捆绑到一个变量中bar
。您可以从控制台提供要使用哪个密钥。
粗略的例子:
variable "cluster" {
}
variable "setup" {
default = {
"foo" = {
"vm_to_clone" = "bnw_2019_gui"
"vm_folder" = "BN-ALL-SIMPLIVITY-VMS"
# and the rest
},
"bar" = {
"vm_to_clone" = "alw_2019_gui"
"vm_folder" = "AL-ALL-SIMPLIVITY-VMS"
# and the rest
},
}
}
Run Code Online (Sandbox Code Playgroud)
然后,根据您的cluster
(foo
或bar
),您将在代码的其余部分中使用不同的变量值:
data "vsphere_virtual_machine" "template_vm" {
name = var.setup[var.cluster].vm_to_clone
datacenter_id = data.vsphere_datacenter.target_datacenter.id
}
# and similarly for the rest.
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10214 次 |
最近记录: |