if-statement - terraform 中的 if 语句,使用 2 个不同的代码块
问题描述
我有这个代码块
launchpad_tmpl = {
apiVersion = "<Link for the API>"
kind = "mke"
spec = {
mke = {
adminUsername = "admin"
adminPassword = var.admin_password
installFlags : [
"--default-node-orchestrator=kubernetes",
"--san=${module.masters.lb_dns_name}",
]
}
hosts = concat(local.managers, local.msrs, local.workers, local.windows_workers)
}
}
}
我还有另一个代码块
launchpad_tmpl = {
apiVersion = "<Some link for the API>"
kind = "mke"
spec = {
mke = {
adminUsername = "admin"
adminPassword = var.admin_password
installFlags : [
"--default-node-orchestrator=kubernetes",
"--san=${module.masters.lb_dns_name}",
]
}
msr = {
...some_code
}
hosts = concat(local.managers, local.msrs, local.workers, local.windows_workers)
}
}
}
我想告诉 terraform 类似的东西
IF msr_count >= 1 - 使用第二个代码块运行 ELSE 使用第一个...
在 Terraform 中是否有可能,或者我需要在某个地方制作一个包装器?提前致谢。
更新:::
Error: Inconsistent conditional result types
on main.tf line 162, in output "mke_cluster":
162: value = yamlencode(var.msr_count > 0 ? local.msr_launchpad_tmpl : local.mke_launchpad_tmpl)
|----------------
| local.mke_launchpad_tmpl is object with 3 attributes
| local.msr_launchpad_tmpl is object with 3 attributes
| var.msr_count is 1
The true and false result expressions must have consistent types. The given
expressions are object and object, respectively.
这是这样放置时的输出:
mke_launchpad_tmpl = {
apiVersion = "API"
kind = "mke"
spec = {
mke = {
adminUsername = "admin"
adminPassword = var.admin_password
installFlags : [
"--default-node-orchestrator=kubernetes",
"--san=${module.masters.lb_dns_name}",
]
}
hosts = concat(local.managers, local.msrs, local.workers, local.windows_workers)
}
}
msr_launchpad_tmpl = {
apiVersion = "API"
kind = "mke+msr"
spec = {
mke = {
adminUsername = "admin"
adminPassword = var.admin_password
installFlags : [
"--default-node-orchestrator=kubernetes",
"--san=${module.masters.lb_dns_name}",
]
}
msr = {
installFlags : [
"--ucp-insecure-tls",
"--dtr-external-url ${module.msrs.lb_dns_name}",
]
}
hosts = concat(local.managers, local.msrs, local.workers, local.windows_workers)
}
}
launchpad_tmpl = var.msr_count > 0 ? local.msr_launchpad_tmpl : local.mke_launchpad_tmpl
}
output "mke_cluster" {
value = yamlencode(local.launchpad_tmpl)
}
解决方案
您可以使用条件表达式。同样为简单起见,您可以将两个备选方案创建为局部变量,这将简化表达式。
例如:
locals {
mke_launchpad_tmpl = {
apiVersion = "API"
kind = "mke"
spec = {
mke = {
adminUsername = "admin"
adminPassword = var.admin_password
installFlags : [
"--default-node-orchestrator=kubernetes",
"--san=${module.masters.lb_dns_name}",
]
}
msr = {}
hosts = concat(local.managers, local.msrs, local.workers, local.windows_workers)
}
}
msr_launchpad_tmpl = {
apiVersion = "API"
kind = "mke+msr"
spec = {
mke = {
adminUsername = "admin"
adminPassword = var.admin_password
installFlags : [
"--default-node-orchestrator=kubernetes",
"--san=${module.masters.lb_dns_name}",
]
}
msr = {
installFlags : [
"--ucp-insecure-tls",
"--dtr-external-url ${module.msrs.lb_dns_name}",
]
}
hosts = concat(local.managers, local.msrs, local.workers, local.windows_workers)
}
}
}
然后,在您的资源中:
launchpad_tmpl = var.msr_count > -1 ? local.second_launchpad_tmpl : local.first_launchpad_tmpl
推荐阅读
- element - PuppeteerJS - 如何根据相邻 td 的文本从 td 元素中抓取文本内容?
- asp.net - 在 IIS 8.5 中发布时如何修复此错误
- coldfusion - 使用 webhook 和 Coldfusion 的 Twilio 入站 SMS
- azure - 为什么 spark num-executors 不等于 yarn 容器?
- android - 如何在 /init.rc 中创建服务?
- sql-server - 从 Python 将字符串传递给存储过程
- spring-boot - 从数据库获取数据时,Jpa Repository 出错无法序列化
- excel - 宏未从包含数学公式的单元格中读取正确的值
- php - 如何通过 Suitetalk 添加 CustomerCreditCardsList/CustomerCreditCards
- python - 在 docker 容器中使用 python win32 访问主机屏幕?