2017-06-14 242 views
0

这似乎是一个简单的问题,也许我在某处误读了文档。我试图设置一个字符串值的变量,在我的情况下,它是一个Azure blob的SAS令牌,然后我想传递给模板部署。我遇到的问题是字符串被插入导致令牌无效。我无法弄清楚如何传递一个变量,而不是插入它。无插值的Terraform变量

scripts_blob_sas_token = "${var.scripts_blob_sas_token}" 

这是字符串:

?sv=2015-04-05&sr=c&sig=O%2FurgY2Eu%2FZN3Ax1GSN58cNpc2DRMahLdB7lPqVifNc%3D&st=2017-06-13T17%3A17%3A45Z&se=2027-06-13T17%3A17%3A45Z&sp=r 

当我引用${var.scripts_blob_sas_token}变量得到它插入到这一点:

?sv=2015-04-05\\u0026sr=c\\u0026sig=O%2FurgY2Eu%2FZN3Ax1GSN58cNpc2DRMahLdB7lPqVifNc%3D\\u0026st=2017-06-13T17%3A17%3A45Z 

有没有办法来调用Terraform和逃跑的变量插入的字符串?

任何想法/建议,将不胜感激。

+0

你是如何传递字符串到变量?我个人从来没有在terraform的URL上编码的问题。我想知道在字符串到达​​Terraform之前是否发生了这种情况。或者相反,也许它可能是在您正在使用的资源提供程序或提供程序中转义字符串,而不是在插值引擎中。该价值被传递给什么资源或供应商?这也可能有助于了解您使用的地形的哪个版本。 – nbering

回答

0

您可以将该变量放入一个文件并将其读入一个字符串中。

file(path) - 将文件内容读入字符串。 该文件中的变量不是插值的。该文件的内容按原样读取。路径是相对于工作目录解释的。路径变量可用于引用相对于其他基本位置的路径。例如,当从模块内部使用file()时,通常需要使路径相对于模块库,如下所示:file(“$ {path.module}/file”)。

https://www.terraform.io/docs/configuration/interpolation.html#file-path-