Я пытаюсь избежать одиночной кавычки в своей строке:
${join("\n",formatlist("%s ansible_host=%s ansible_ssh_common_args='-o ProxyCommand=\"ssh -W %%h:%%p -q cloud-user@%s\"'","${module.compute.ops_master_names}","${module.compute.ops_master_priv_ips}","${module.ips.bastion_fips[0]}"))}"
Я пробовал использовать разные комбинации (\ 'или \\' или '' или '), но получил недопустимый escape-символ, или он не печатает одинарную кавычку. мне нужно напечатать строку
ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -q cloud-user@%s"'
двойные кавычки и символ процента хорошо интерпретируются
Никакого побега не требуется, у меня работает следующее:
locals {
test = ["foo", "bar"]
}
output "test" {
value = "${formatlist("ansible_ssh_common_args='-o ProxyCommand=\"ssh -W %%h:%%p -q cloud-user@%s\"'", local.test)}"
}
Возврат:
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
Outputs:
test = [
ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -q cloud-user@foo"',
ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -q cloud-user@bar"'
]
Используя template_file
также работает:
locals {
test = ["foo", "bar"]
}
data "template_file" "inventory" {
template = <<-EOT
$${test}
EOT
vars {
test = "${join("\n", formatlist("ansible_ssh_common_args='-o ProxyCommand=\"ssh -W %%h:%%p -q cloud-user@%s\"'", local.test))}"
}
}
output "test" {
value = "${data.template_file.inventory.rendered}"
}
Возврат:
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
Outputs:
test = ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -q cloud-user@foo"'
ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -q cloud-user@bar"'
Одиночные кавычки все еще присутствуют.
Это с Terraform 0.11.6.