【问题标题】:How to Extract the variable values from terraform variables.tf file using PowerShell commands如何使用 PowerShell 命令从 terraform variables.tf 文件中提取变量值
【发布时间】:2022-06-23 20:01:29
【问题描述】:

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

variables.tf

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

如果变量有一个值,那么它应该给我那个值,比如“位置”变量。

写入主机 $deployed_location

西欧

【问题讨论】:

  • 到目前为止你尝试了哪些方法,遇到了什么样的问题?
  • 另外,为什么必须从 tf 文件中读取这些值?
  • @zett42 我试图在 Bash 中获得相同的效果,但现在需要在 Powershell 中完成。 Bash 代码如下。 cat variables.tf | sed '/products/,$!d' | sed '1d;$d' | sed 's|default|allproducts|g' | tr -d '\n' | tr -d ' '
  • @Marko E - 我需要这个值来进行进一步的自动化工作,这在 terraform 部署之外。
  • 好吧,您不妨为此使用TF_VAR_<varname> 选项,即将它们设置为环境变量并从那里提取值。我建议的其他方法是为代码的 Terraform 部分定义输出并使用 terraform output 获取值。

标签: powershell terraform azure-powershell


【解决方案1】:

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

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代码-

$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

生成的输出是-

由于这是一个数组,因此您可以在稍后的脚本中迭代并使用它。

【讨论】:

    【解决方案2】:

    我能够通过以下方法解决此问题,希望这对有类似要求的人有所帮助。 以下命令将从 variables.tf 文件中获取所有值并将其分配给一个数组。

    $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() }
                    }
    

    写主机 $product_list 产品-1 产品-2 产品-3 产品-4

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-28
      • 1970-01-01
      • 2019-11-24
      • 2018-08-18
      • 2014-11-14
      • 1970-01-01
      • 2020-05-10
      • 1970-01-01
      相关资源
      最近更新 更多