如何将Terraform与Azure CLI和REST API相结合?

时间:2019-08-19 19:06:55

标签: azure terraform

我的大部分Azure基础结构都由Terraform管理。 但是,我很快发现许多小细节丢失了。

例如不完全支持客户机密https://github.com/terraform-providers/terraform-provider-azuread/issues/95

似乎无法向APIM添加Active Directory提供程序 How Do I Add Active Directory To APIM Using Terraform?

创建APIM会留下无法删除的演示产品 How Can I Remove Demo Products From APIM Created With Terraform?

等,等等。

这些解决方案似乎正在利用cli

例如https://docs.microsoft.com/en-us/cli/azure/ad/app/permission?view=azure-cli-latest#az-ad-app-permission-add

或者回退到REST API: 例如 https://docs.microsoft.com/en-us/rest/api/apimanagement/2019-01-01/apis/delete

如何将Terraform与CLI和REST API混合使用?

它们可以嵌入在terraform中吗?

还是在地形完成后我只运行一些命令来运行它们?

是否可以跨平台执行这些命令?

在Terraform之后运行CLI和REST API是否会导致状态错误并可能在下次运行terraform时引起问题?

1 个答案:

答案 0 :(得分:0)

  

如何将Terraform与CLI和REST API混合使用?

您可以使用Terraform设置程序local-execremote-exec。通过这些方式,您可以使用CLI命令或REST API运行脚本。有关更多详细信息,请参见local-execremote-exec。但是您需要照顾好他们。这两种方式仅运行脚本并显示输出,但没有输出。

如果要在同一Terraform文件中将脚本结果用于其他资源,则需要使用Terraform外部数据源,请参见详细信息here

更新

这里是一个例子。

Bash脚本文件vmTags.sh

#!/bin/bash
az vm show -d -g myGroup -n myVM --query tags

Terraform外部数据源:

data "external" "test" {
  program = ["/bin/bash", "./vmTags.sh"]
}

output "value" {
  value = "${data.external.test.result}"
}