Terraform 在地形图中,如何使用-var重新创建已发送列表
这就是我的配置的样子,因为当我将tfvars文件作为CI CD的一部分运行时,我没有将其签入到源代码管理中,因此我需要使用Terraform 在地形图中,如何使用-var重新创建已发送列表,terraform,Terraform,这就是我的配置的样子,因为当我将tfvars文件作为CI CD的一部分运行时,我没有将其签入到源代码管理中,因此我需要使用-var而不是-var文件。执行此操作时,与-var一起使用时,如何表示列表 config.tfvars包含 subnets = ["subnet-0160740dss2324df7e1","subnet-0faa77cc23fs6776"] prefix = "tktest2" count_webapp = 1
-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就可以完全按照您所写的方式传递数据,而无需中间系统进行任何解释