如何使用Azure Devops将powershell列表变量传输到terraform?

如何使用Azure Devops将powershell列表变量传输到terraform?,azure,powershell,azure-devops,terraform,terraform-provider-azure,Azure,Powershell,Azure Devops,Terraform,Terraform Provider Azure,我有一个充满地址前缀的列表,比如192.168.1.0/24 在powershell中创建并传输到azure devops管道变量,我已经在azure devops中定义了该变量。 我使用的这个变量是在运行时设置的 terraform apply -var="availableSubnetList=$(availableSubnetList)" 在我的地形任务中,创建一个子网。以下是tf脚本: variable "availableSubnetList" { type = list(st

我有一个充满地址前缀的列表,比如192.168.1.0/24

在powershell中创建并传输到azure devops管道变量,我已经在azure devops中定义了该变量。 我使用的这个变量是在运行时设置的

terraform apply -var="availableSubnetList=$(availableSubnetList)" 
在我的地形任务中,创建一个子网。以下是tf脚本:

variable "availableSubnetList" {
  type = list(string)
  default = [""]
}
resource "azurerm_subnet" "Subnet-lab" {
    count = var.project_subnet_number
    name = join("-", ["${var.LabRGName}","subnet", "${count.index + 1}"])
    resource_group_name = var.AdminRGName
    virtual_network_name = var.lab_vnet
    address_prefix = var.availableSubnetList[count.index]
}
当我执行管道时,我在terraform apply任务上出现以下错误:


好的,Azure Devops中的变量是字符串。你知道如何使用Azure Devops将powershell列表正确地传输到terraform吗

从PowerShell脚本输出以逗号分隔的子网字符串:

Write-Host "##vso[task.setvariable variable=availableSubnetList]$($listOfSubnetsToBeCreated -join ',')"
然后在调用terraform时再次将其拆分为一个列表:

terraform apply -var='availableSubnetList=${split(",", $(availableSubnetList))}'
address_prefix = split(",", var.availableSubnetList)[count.index]
或者更改在terraform中解析每个子网的方式:

terraform apply -var='availableSubnetList=${split(",", $(availableSubnetList))}'
address_prefix = split(",", var.availableSubnetList)[count.index]

从PowerShell脚本输出以逗号分隔的子网字符串:

Write-Host "##vso[task.setvariable variable=availableSubnetList]$($listOfSubnetsToBeCreated -join ',')"
然后在调用terraform时再次将其拆分为一个列表:

terraform apply -var='availableSubnetList=${split(",", $(availableSubnetList))}'
address_prefix = split(",", var.availableSubnetList)[count.index]
或者更改在terraform中解析每个子网的方式:

terraform apply -var='availableSubnetList=${split(",", $(availableSubnetList))}'
address_prefix = split(",", var.availableSubnetList)[count.index]

我应用了它并得到了这个错误:2020-05-25T12:21:07.2672860Z[1m[31mError:[0m[0m[1m]无效引用[0m 2020-05-25T12:21:07.2674089Z 2020-05-25T12:21:07.2675081Z[0m on network.tf line 8,in resource azurerm_子网实验室:2020-05-25T12:21:07.2676095Z 8:address_前缀=[4AvailablesSubnetList[0m[count.index]2020-05-25T12:21:07.2676984Z[0m 2020-05-25T12:21:07.2700114Z对资源类型的引用必须后跟至少一个属性2020-05-25T12:21:07.2701181Z access,指定资源名称。此处$availableSubnetList在日志中似乎为空:terraform.exe plan-var=LabRGName=rg-deniztest3-87719dccbe-var=project_subnet\u number=3-var=availableSubnetList=${split,,}虽然我输入了-var=availableSubnetList=${split,,$availableSubnetList}我注意到我在tf脚本中犯了一个错误:address_prefix=availableSubnetList[count.index]。它应该是var.availableSubnetList[count.index]@MoonHorse我不能100%确定${split}表达式在命令行传递时有效,您可能需要在任务中执行此操作itself@MoonHorse非常抱歉,我无法在tf方面提供更多帮助,而不是我的强项。我已经更新了我的答案,以反映您的解决方案:我已经应用了它,并出现了以下错误:2020-05-25T12:21:07.2672860Z[1m[31mError:[0m[0m[1m无效引用[0m 2020-05-25T12:21:07.2674089Z 2020-05-25T12:21:07.2675081Z[0m在network.tf线路8上,在resource azurerm_子网实验室中:2020-05-25T12:21:07.2676095Z 8:address_前缀=[4AvailableSubnetList[0m[count.index]2020-05-25T12:21:07.2676984Z][0m 2020-05-25T12:21:07.2700114Z对资源类型的引用必须后跟至少一个属性2020-05-25T12:21:07.2701181Z access,指定资源名称。此处$availableSubnetList在日志中似乎为空:terraform.exe plan-var=LabRGName=rg-deniztest3-87719dccbe-var=project_subnet\u number=3-var=availableSubnetList=${split,,}虽然我输入了-var=availableSubnetList=${split,,$availableSubnetList}我注意到我在tf脚本中犯了一个错误:address_prefix=availableSubnetList[count.index]。它应该是var.availableSubnetList[count.index]@MoonHorse我不能100%确定${split}表达式在命令行传递时有效,您可能需要在任务中执行此操作itself@MoonHorse非常抱歉,我无法在tf方面提供更多帮助,而不是我的strongsuit。我已经更新了我的答案,以反映您的解决方案: