2016-06-28 2 views
0

새롭게 생성 된 aws_instance에서 스크립트에 변수를 전달하려고하지만 확실하지 않습니다. 다음은 내가 가지고있는 것입니다.Terraform remote-exec 변수 전달

provisioner "file" { 
    source  = "${path.module}/scripts/slave-provisioner.sh" 
    destination = "/tmp/slave-provisioner.sh" 
} 

provisioner "remote-exec" { 
    inline = [ 
     "chmod +x /tmp/slave-provisioner.sh", 
     "sudo /tmp/slave-provisioner.sh ${split(",",var.zookeeper_ips_list)}" 
    ] 
} 

나는 zookeeper_ips_list에 올바른 IP 목록이 있는지 확인했습니다. 내가 terraform를 통해 얻을 적용

이 오류는 다음과 같습니다

/tmp/terraform_939984059.sh: 5: /tmp/terraform_939984059.sh: 10.239.12.181: not found 

그래서 기본적으로 나는이 기계와 그것을 구성의 할 수 있도록 IP 목록을 전달됩니다 내 제공자 스크립트의 다음 킥을 만들려고합니다.

+0

쉼표로 구분 된 문자열을 가져 와서 배열로 변환 한 다음 프로비저 스크립트로 전달할 때 꽤 이상하게 보입니다. 나는 그것이 당신이 그것을 문자열로 전달하기를 기대하기 때문에 기대되는 행동이 실제로 무엇인지를 100 % 확신하지는 못합니다. 너 정말 그 뜻 이니? 또는 쉼표를 공백으로 대체하는 것이 더 낫지 않습니까 ('replace() '사용)? – ydaetskcoR

+0

우리는이 IP 주소를 우리 클러스터의 사육사 구성을 업데이트하는 bash 스크립트로 전달합니다. 문제는 bash 포맷으로 해결되었습니다. –

답변

1

이것은 관련없는 bash 정리를 통해 해결되었습니다. Terraform 형식이 정확하며 예상대로 작동하고 있습니다. 우리는 우리의 bash 스크립트에서 들어오는 IP 주소를 제대로 다루지 못하고 실패했습니다.

디버깅과 관련하여 Terraform이 가장 강력하지 않으므로 추적하기가 다소 까다 롭습니다.

+0

답변을 수정하여 _how_ 고정하여 표시 할 수 있습니까? – ydaetskcoR

+0

해결책은 기본 쉘 스크립트를 수정하여 발생합니다. bash 구문 오류를 수정하고 배열을 처리 할 때. 결국 Terraform 문제는 없었습니다. –

0

최신 버전의 terraform을 사용하기를 바랍니다.

terraform은 변수 var.zookeeper_ips_list의 값을 얻지 만 큰 따옴표로 묶은 큰 따옴표로 인해 문제가 발생합니다. 당신은 \하여 그들을 탈출을 시도 할 수 있습니다, 내가 코드를 시도하지 않았다, 내가 결과

"sudo /tmp/slave-provisioner.sh ${split(\",\",var.zookeeper_ips_list)}" 

을 알려 주시기 바랍니다 그리고 당신은 그것을 꺼내 나뿐만 아니라 결과를 알려 수 있습니다.

zookeeper_ips_list = ${split(",",var.zookeeper_ips_list)} 

provisioner "remote-exec" { 
    inline = [ 
     "chmod +x /tmp/slave-provisioner.sh", 
     "sudo /tmp/slave-provisioner.sh ${zookeeper_ips_list)}" 
    ] 
+0

큰 따옴표를 제거하고 bash 포맷을 수정하여이를 해결할 수있었습니다. Terraform은 오늘날의 디버깅 옵션이 부족합니다. 원격 호스트에 파일을 복사하고 패스 변수로 파일을 실행하는 것은 Terraform에서 가장 간단하지 않습니다. –

+0

업데이트 주셔서 감사합니다. Terraform은 아직 GA 버전이 아닌 개발 모드입니다. 내 대답이 도움이된다면 투표하십시오. 문제를 해결하려면 동의하십시오. – BMW