If statement terraform中的If语句,使用2个不同的代码块

If statement terraform中的If语句,使用2个不同的代码块,if-statement,terraform,If Statement,Terraform,我有这个代码块 launchpad_tmpl = { apiVersion = "<Link for the API>" kind = "mke" spec = { mke = { adminUsername = "admin" adminPassword = var.admin_password installFlags :

我有这个代码块

  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)
    }
  }
}
这是按如下方式放置时的输出:

 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

请让我检查一下,谢谢。嘿,我听了你的回答似乎有些不好。编辑我的questions@SemyonKolesnikov我没有看到任何新的错误消息?@SemyonKolesnikov您的
mke_launchpad_tmpl
mke_launchpad_tmpl
有不同的形式。我更新了答案,使它们具有某种形式。@SemyonKolesnikov这将使这两个变量显示相同的形式,但值不同。条件需要这样做,这可能会令人困惑。
launchpad_tmpl = var.msr_count > -1 ? local.second_launchpad_tmpl : local.first_launchpad_tmpl