Как вызвать переменную строки с пробелами в поставщике terraform? - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь запустить Terraform Provider, который вызывает мою ANSIBLE PlayBook, теперь я передаю открытый ключ как переменную от пользователя.При передаче открытого ключа он не берет весь ключ и только ssh-rsa, но не полную строку.Я хочу передать всю строку как «ssh-rsa Aghdgdhfghjfdh»

Поставщик в terraform, который я использую:

resource "null_resource" "bastion_user_provisioner" {
  provisioner "local-exec" {
    command = "sleep 30 && ansible-playbook ../../../../ansible/create-user.yml --private-key ${path.module}/${var.project_name}.pem -vvv -u ubuntu -e 'username=${var.username}' -e 'user_key=${var.user_key}' -i ${var.bastion_public_ip}, -e 'root_shell=/bin/rbash' -e 'raw_password=${random_string.bastion_password.result}'"
  }
}

Если я запускаю playbook как1007 *

это работает, но я хочу, чтобы строка была в переменной terraform, которая передается в инициаторе.

Я хочу скопировать ключ в файл как

ssh-rsa AWRDkj;jfdljdfldkf'sd.......

а не только

ssh-rsa

1 Ответ

0 голосов
/ 26 июня 2019

Вы укушены разделением -e key=value, которое происходит с интерпретацией командной строки --extra-args [ цитата ].То, что вы действительно хотите - это набрать -e некоторый текст JSON, чтобы он не пытался разбить пробел.Это также пригодится для достаточно сложных паролей случайных строк, которые в противном случае могли бы привести к очень плохому результату при попытке передать их в командной строке.

К счастью, существует jsonencode() функция, которая поможет вам с этой проблемой:

resource "null_resource" "bastion_user_provisioner" {
  provisioner "local-exec" {
    command = <<SH
set -e
sleep 30
ansible -vvv -i localhost, -c local -e '${jsonencode({
   "username"="${var.username}",
   "user_key"="${var.user_key}",
   "raw_password"="${random_string.bastion_password.result}",
})}' -m debug -a var=vars all
SH
  }
}
...