首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用variables.tf命令从terraform variables.tf文件中提取变量值

如何使用variables.tf命令从terraform variables.tf文件中提取变量值
EN

Stack Overflow用户
提问于 2022-04-29 09:04:16
回答 2查看 730关注 0票数 2

我有一个variables.tf文件,其中包含所有项目变量,im试图使用PowerShell获取变量值。

variables.tf

代码语言:javascript
复制
variable "products" {
   default = [
     "Product-1",
     "Product-2",
     "Product-3",
     "Product-4"
     ]
}

variable "product_unified_container" {
   default =  [
     "cont-data",
     "cont-data-2"
     ]
}

variable "location" {
  default = "westeurope"
}

使用PowerShell,我需要能够为我想要的任何变量获取变量值。

示例:如果variables.tf中有多个值,则该命令应该为我提供一个包含所有产品变量的数组。

写主机$product_list

产品-1

产品-2

产品-3

产品-4

如果变量有一个值,那么它应该给出类似于"location“变量的值。

写主机$deployed_location

魏斯特罗普

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-23 12:01:29

我能够通过下面的方法来解决这个问题,希望这能帮助有类似需求的人。下面的命令将获取variables.tf文件中的任何变量值,在本例中是变量"products",并将其分配给另一个数组变量。

代码语言:javascript
复制
$product_list = (Get-Content "variables.tf" -Raw) | Foreach-Object {
                $_ -replace '(?s)^.*products', '' `
                -replace '(?s)variable.+' `
                -replace '[\[\],"{}]+' `
                -replace ("default =","") | Where { $_ -ne "" } | ForEach { $_.Replace(" ","") } | Out-String | ForEach-Object { $_.Trim() }
                }

foreach ( $Each_Product in $product_list.Split("`n")) {
    write-host "Each Product Name : "$Each_Product
}

Output : 
    Each Product Name : Product-1
    Each Product Name : Product-2
    Each Product Name : Product-3
    Each Product Name : Product-4
票数 1
EN

Stack Overflow用户

发布于 2022-05-01 01:14:11

我遇到了一个类似的问题,所以,我可以分享一种方法,您可以使用它来提取值。问题是,在json或其他格式中很容易提取和操作值,但在tf文件中则不一样。因此,我基本上已经使用了一种解决办法,在一个结构中设置给定的文件,而这个结构的值是用一行填充的,因此,variables.tf将查看

代码语言:javascript
复制
variable "products" {
   default = ["Product-1", "Product-2", "Product-3", "Product-4"]
}

variable "product_unified_container" {
   default =  ["cont-data","cont-data-2"]
}

variable "location" {
  default = "westeurope"
}

接下来是PS代码来提取变量的值-

代码语言:javascript
复制
$paramsArray = @()
[system.array]$params = Select-String -Path "variables.tf" -Pattern "default =" -SimpleMatch
if (!([string]::IsNullOrEmpty($Params)))
        {
            [system.array]$paramsStrings =  $params -split {$_ -eq "="}

            foreach ($paramString in $paramsStrings)
            {
             
                if (($paramString -match "TF-Template") -or ($paramString -match "tf:"))
                    {
                       #Write-Output $paramString
                    }
                    else
                    {
                      If ($paramsArray -notcontains $paramString)
                      {
                        $paramsArray+=$paramString
                      }
                    }
            }
        }

write-host $paramsArray

所产生的输出是-

因为这是一个数组,所以您可以在脚本中迭代并使用它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72055453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档