에 정의 된 바이너리 형식이 없습니다 terraform에 같은terraform에 AND AND OR 조건 연산자가 있습니까?
카운트 = "$ {var.I_am_true}"& & "$ {var.I_am_false}"
에 정의 된 바이너리 형식이 없습니다 terraform에 같은terraform에 AND AND OR 조건 연산자가 있습니까?
카운트 = "$ {var.I_am_true}"& & "$ {var.I_am_false}"
deniszh의 대답은 거의 비슷하지만 조금 명확하게하고 구문을 정리한다고 생각했습니다. Terraform에서
은 부울true
는
1
로 변환되고 부울
false
는
0
로 변환된다. 두 개의 부울 변수
var.foo
및
var.bar
이있는 경우, 당신은 간단한 곱셈 사용
AND
를 나타낼 수 있도록 : 위의 코드에서
count = "${var.foo * var.bar}"
을 count
1 * 1 인으로, 모두 true
있는 1 만 var.foo
경우 var.bar
될 것입니다 1. 다른 모든 경우 (1 * 0, 0 * 1, 0 * 0)는 0이됩니다.
OR을 나타내려면 signum(x) 함수를 활용하면 x
을 전달하면 1을 반환합니다. 양수이며, x
이 0 인 경우는 0, x
인 경우 -1 자연수. 여기서 고려 복용이 것은 OR : 어느 var.foo
OR var.bar
가 true
0 인 경우 상기 코드의
count = "${signum(var.foo + var.bar)}"
,
count
가 1 일 경우에만 모두
false
(
signum(1 + 1) = 1
,
signum(1 + 0) = 1
,
signum(0 + 1) = 1
,
signum(0 + 0) = 0
).
위의 기술을 사용하려면 변수가 아닌 문자열을 부울 값으로 설정해야합니다. 당신이 원하는 :
variable "foo" {
# Proper boolean usage
default = true
}
NOT이 :
variable "foo" {
# THIS WILL NOT WORK!
default = "true"
}
을 Terraform 조건문의 다양한 작업을 수행 Terraform tips & tricks: loops, if-statements, and gotchas 및 Terraform: Up & Running을 확인하는 방법에 대한 추가 정보를 원하시면.
뭔가를 사용하는 방법이 있나요 Terraform. 하지만 사용하려고 할 수 있습니다 simple math
예 : I_am_true == 1과 I_am_false의 ==가 0
는하지만, 모두를 시도하지 않은 경우
또는
count = signum(${var.I_am_true} + ${var.I_am_false})
해당
및count = ${var.I_am_true} * ${var.I_am_false}
모두 해당
작동합니다.Terraform 0.8 이전 해킹 된 해결 방법보다는 conditional logic에 대한 1 등급 지원이 추가되었습니다.env
가 "production"
로 설정되어있는 경우
variable "env" { default = "development" }
resource "aws_instance" "production_server" {
count = "${var.env == "production" ? 1 : 0}"
...
}
지금이 만 production_server
EC2 인스턴스를 생성합니다 :
이이 같은 일을 할 수 있도록 지금 고전 원 구문을 사용합니다. 의는 Terraform 실제로 다음에 사용 된 값을 선택하기 전에 양쪽을 평가하는 것입니다 알고 있어야
variable "env" { default = "development" }
variable "production_variable" { default = "foo" }
variable "development_variable" { default = "bar" }
output "example" {
value = "${var.env == "production" ? var.production_variable : var.development_variable}"
}
한 가지 :
또한 너무 이와 같은 변수/매개 변수를 설정하는 등 다른 곳에서 사용할 수 있습니다 그 논리가 촉발시킬 삼원 항의 측을 게으르게 평가하는 것이 아니라 삼항 진술.
이 당신이 aws_route53_zone
data source와 함께 문제를 해결 해킹 시도 나 최근의 예와 같이 뭔가를 할 수 없음을 의미 :이 계획에 실패합니다 위의 예에서
variable "vpc" {}
variable "domain" {}
variable "private_zone" { default = "true" }
data "aws_vpc" "vpc" {
filter {
name = "tag-key"
values = [ "Name" ]
}
filter {
name = "tag-value"
values = [ "${var.vpc}" ]
}
}
data "aws_route53_zone" "private_zone" {
count = "${var.private_zone == "true" ? 1 : 0}"
name = "${var.domain}"
vpc_id = "${data.aws_vpc.vpc.id}"
private_zone = "true"
}
data "aws_route53_zone" "public_zone" {
count = "${var.private_zone == "true" ? 0 : 1}"
name = "${var.domain}"
private_zone = "false"
}
output "zone_id" {
value = "${var.private_zone == "true" ? data.aws_route53_zone.private_zone.zone_id : data.aws_route53_zone.public_zone.zone_id}"
}
때문에 data.aws_route53_zone.private_zone.zone_id
또는 data.aws_route53_zone.public_zone.zone_id
중 public_zone
이 true 또는 false로 설정되었는지 여부에 따라 정의되지 않습니다.
전 마지막으로 확인하지 않았다고 생각합니다. 하지만 문제 추적에서 뭔가를 찾을 수 있습니다. https://github.com/hashicorp/terraform/issues –