2016-06-28 3 views
0

Я ищу передать переменные сценарию на новом созданном aws_instance, но я не уверен, как это сделать. Вот что у меня есть:Переменная переменной Torraform 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-адресов.

Там ошибка, которую я получаю через терраформировать применить это:

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

Поэтому в основном я хочу, чтобы создать эту машину, а затем удар моего Provisioner скрипт, который получает передается список IP-адресов, так что он может сделать это конфигурация.

+0

Это выглядит довольно странно для меня, поскольку вы берете разделенную запятыми строку и превращаете ее в массив, который затем переходите к сценарию создателя. Я не на 100% уверен, что ожидаемое поведение на самом деле для этого, как я ожидаю, он хочет, чтобы вы передали его как строку. Вы действительно хотите это сделать? Или вам лучше заменить запятые пробелами (используя 'replace()')? – ydaetskcoR

+0

Мы передаем эти IP-адреса в сценарий bash, который просто обновляет конфигурацию zookeeper для нашего кластера. Проблема была решена только с некоторым форматированием bash. –

ответ

1

Это было решено посредством некоторой несвязанной очистки баха. Формат Terraform верен, и он работает как ожидалось. Мы не имели дело с входящими IP-адресами должным образом в нашем сценарии bash, и поэтому он терпел неудачу.

Terraform не самый надежный, когда дело доходит до отладки, так что это было немного сложно отследить.

+0

Можете ли вы отредактировать свой ответ, чтобы показать, как вы его исправили? – ydaetskcoR

+0

Решение возникло из-за исправления базового сценария оболочки. Исправление ошибок синтаксиса bash и обращение к массиву, когда оно приходит. В конце концов не было проблемы с Terraform. –

0

Надеюсь, вы запустите терраформу с последней версией.

Кажется, что 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 не располагает хорошими вариантами отладки. Копирование файлов на удаленные хосты и их выполнение с помощью переменных pass не является самым простым в Terraform. –

+0

Спасибо за обновление. Terraform все еще находится в режиме разработки, а не в версии GA. Если мой ответ поможет вам, пожалуйста, проголосуйте. Если вы решите свою проблему, примите ее. – BMW

 Смежные вопросы

  • Нет связанных вопросов^_^