2016-09-13 2 views
0

에 정의 된 바이너리 형식이 없습니다 terraform에 같은terraform에 AND AND OR 조건 연산자가 있습니까?

카운트 = "$ {var.I_am_true}"& & "$ {var.I_am_false}"

+0

전 마지막으로 확인하지 않았다고 생각합니다. 하지만 문제 추적에서 뭔가를 찾을 수 있습니다. https://github.com/hashicorp/terraform/issues –

답변

1

deniszh의 대답은 거의 비슷하지만 조금 명확하게하고 구문을 정리한다고 생각했습니다. Terraform에서

은 부울 true1로 변환되고 부울 false0로 변환된다. 두 개의 부울 변수 var.foovar.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.bartrue 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 gotchasTerraform: Up & Running을 확인하는 방법에 대한 추가 정보를 원하시면.

1

뭔가를 사용하는 방법이 있나요 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} 

모두 해당

작동합니다.

3

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_idpublic_zone이 true 또는 false로 설정되었는지 여부에 따라 정의되지 않습니다.

관련 문제