赞
踩
我们(可能)知道,Terraform不支持if语句。
幸运的是,我们可以通过使用名为count
的特定参数来实现相同的结果。
我们可以这样考虑:可以将count设置为1,即获得该资源的一个副本。
但是,将相同的count参数设置为0将不会创建任何资源。
所以,正如前面提到的,你根本不需要if/else语句,terrform使用以下格式的条件表达式:
<CONDITION> ? <TRUE_VAL> <FALSE_VAL>
Terraform所做的只是在CONDITION
中计算布尔逻辑,基于此,如果值为true,它将返回TRUE_VAL
; 否则,如果结果为false,它将返回FALSE_VAL
。
例如,我们将在terrraform中迁移我们现有的AWS基础设施(之前基于Ansible&Boto3部署)。
这个示例是关于ELB创建的,其中包含一个target group和一个listener。
取自我目前正在进行的一个迁移项目,它实际上将展示我刚才解释的内容:
resource "aws_lb_target_group" "tg" { count = var.target_group_addition ? 1 : 0 name = "tg-${var.name}" port = var.tg_port protocol = var.tg_protocol vpc_id = var.vpc_id deregistration_delay = var.tg_deregistration_delay health_check { interval = var.tg_healthcheck_interval path = var.tg_healthcheck_path port = "traffic-port" protocol = var.tg_protocol timeout = 5 healthy_threshold = 2 unhealthy_threshold = 2 matcher = var.tg_healthcheck_success_code } }
正如你所看到的,只有当分配给var.target_group_add
的布尔值设置为true(1)
时,才会创建资源aws_lb_target_group。
这是在Terraform中处理if语句的一种非常简单的方法,并展示了如何在需要时使用terrraform中的count
属性来进行动态资源配置。
REF:
https://medium.com/swlh/terraform-how-to-use-conditionals-for-dynamic-resources-creation-6a191e041857
关注公众号:“云原生SRE”
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。