背景
我们(可能)知道,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”