Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Terraform 在地形图中,如何使用-var重新创建已发送列表_Terraform - Fatal编程技术网

Terraform 在地形图中,如何使用-var重新创建已发送列表

Terraform 在地形图中,如何使用-var重新创建已发送列表,terraform,Terraform,这就是我的配置的样子,因为当我将tfvars文件作为CI CD的一部分运行时,我没有将其签入到源代码管理中,因此我需要使用-var而不是-var文件。执行此操作时,与-var一起使用时,如何表示列表 config.tfvars包含 subnets = ["subnet-0160740dss2324df7e1","subnet-0faa77cc23fs6776"] prefix = "tktest2" count_webapp = 1

这就是我的配置的样子,因为当我将tfvars文件作为CI CD的一部分运行时,我没有将其签入到源代码管理中,因此我需要使用
-var
而不是
-var文件
。执行此操作时,与
-var
一起使用时,如何表示列表

config.tfvars包含

subnets = ["subnet-0160740dss2324df7e1","subnet-0faa77cc23fs6776"]
prefix =  "tktest2"
count_webapp = 1
当使用
terraform plan
而不是使用文件
-var file
时,我们通过使用
-var
来指定每个参数,我们如何表示列表。当我运行此命令时,会出现错误,无法重新编码列表

terraform plan -var subnets=["subnet-0160740dss2324df7e1","subnet-0faa77cc23fs6776"] -var count_webapp=1 -var prefix="tktest2"
展示如何做。在您的情况下,您可以使用:

terraform plan -var='subnets=["subnet-0160740dss2324df7e1","subnet-0faa77cc23fs6776"]' -var='count_webapp=1' -var='prefix="tktest2"'

Terraform本身希望在这里看到正常的Terraform列表语法,如中所示

但是,由于这是在命令行上,而不是Terraform将直接读取的文件中,因此存在一个额外的问题,即通过shell将这些值传递给Terraform,而shell也不会尝试对其进行解析和解释

如果在Linux或macOS上使用Unix样式的shell,例如
bash
zsh
,则确保shell不修改表达式的最简单方法是在值周围使用
引号字符,如下所示:

terraform apply -var='image_id_list=["ami-abc123","ami-def456"]'
如果您是从Windows命令解释器运行Terraform,则需要使用不同的转义语法,因为Windows上的命令行处理约定不同:

terraform apply -var=image_id_list=[\"ami-abc123\",\"ami-def456\"]
这里,
\
字符前面的
\
字符告诉命令行解析器使用文字引号字符,而不是删除引号并禁用将空格作为参数分隔符的通常解释

如果您是在Windows上从PowerShell运行Terraform,那么不幸的是,答案要复杂得多,因为PowerShell的设计目的是解析命令行本身,评估任何特定于PowerShell的序列,然后重建新的命令行字符串以用于运行Terraform,以及第二级构造和重新parsing使得很难准确控制将哪个字符串发送到Terraform。因此,如果您使用PowerShell,我建议您不要使用PowerShell(改用普通的Windows命令解释器)或者将您的值写入一个单独的
.tfvars
文件,并将其与
-var文件一起传递,这样Terraform就可以完全按照您所写的方式传递数据,而无需中间系统进行任何解释