如何在Azure DevOps管道中使用terraform输出作为变量

4
我想要将由 Terraform 部署和 Azure DevOps 生成的 Databricks 工作区名称作为变量传递给另一个步骤,但不确定如何操作。
因此,我在 output.tf 中定义了输出。
output "workspace_name" {
  value = azurerm_databricks_workspace.databricks.name
}

我可以看到输出:

enter image description here

浏览stackoverflow,有一个解决方案可以自动将所有输出作为变量:

1- 配置输出变量:

enter image description here

2- 配置PowerShell脚本以获取它们并填充。

powershell

3- 现在怎么办?变量名将是什么,如何在Databricks Bearer Token解决方案中使用它?


你不明白你正在使用的代码吗?名称将是 workspace_name - 4c74356b41
2个回答

5
$json = Get-Content $env:jsonPath | Out-String | ConvertFrom-Json

foreach($prop in $json.psobject.properties) {
    Write-Host("##vso[task.setvariable variable=$($prop.Name);]$($prop.Value.value)")
}

这个脚本的逻辑用于循环遍历之前由Terraform生成的output json文件。
而这行代码 "##vso[task.setvariable variable=$($prop.Name);]$($prop.Value.value)" 旨在将出现在output json文件中的name作为管道变量名进行设置,并将其对应的值从输出json文件设置为管道变量的值。
下面是它们的映射显示:
Terraform Output Json                          Azure devops pipeline 

   Output name            ================>      varaible name

   Output value           ================>      variable value

在Databricks的Bearer Token任务中,您可以通过在terraform文件中配置的名称直接调用变量:workspace_name


1
@Renm 欢迎:-) 现在你成功调用变量了吗? - Mengdi Liang
1
@Renm,你在terraform任务中指定了terraformoutput.jsonxxx作为输出变量,并将其传递给powershell任务中的jsonPath吗?请在powershell中使用write-host打印Terraformoupt.jsonoutputvariablepath的值。 - Mengdi Liang
1
@Renm,看起来你在调用变量时漏掉了()。尝试使用$(变量名)怎么样? - Mengdi Liang
1
@Renm,我刚下班,正在用手机回复你。你介意我明天回到办公室后再给你确切的原因吗? - Mengdi Liang
1
这个代码已经可以运行:`$json = Get-Content $(TerraformOutput.jsonOutputVariablesPath) | Out-String | ConvertFrom-Jsonforeach($prop in $json.psobject.properties) { Write-Host("##vso[task.setvariable variable=$($prop.Name);]$($prop.Value.value)") } `将 $env:jsonPath 更改为 $(TerraformOutput.jsonOutputVariablesPath) 解决了问题再次感谢 @Merlin Liang - MSFT 的帮助 :) - Renm
显示剩余7条评论

2

我注意到你正在使用Azure Devops创建Databricks Bearer token,可以通过使用Databricks Labs Terraform提供程序来简化此过程,该提供程序支持AAD令牌。 (链接)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接