在 Windows 中将 Azure CLI 命令与 Terraform "data source" 结合使用失败

Use Azure CLI command with Terraform "data source" in Windows is failing

我有一个 Azure CLI 命令,returns 认知搜索 API 键,需要在 terraform 中使用它的输出。命令读取

> az search admin-key show  -g <my resource group> --service-name <my search service>
{
  "primaryKey": "1...",
  "secondaryKey": "4..."
}

我正在使用此 Terraform 资源:

data "external" "search_admin_key" {
  count   = local.deploy_indexes ? 1 : 0
  program = [
    "az", "search admin-key show -g ${var.rg_name}  --service-name ${var.cognitive_search_name}"
  ]

}

我无法让它在 windows 上运行:

请注意,我在 null-resource / local-exec provisioner 中使用了 az,它在那里工作正常。

如何通过外部数据源语法修复问题和运行我需要的命令?

external 数据源期望它的 program 参数为程序的每个单独参数包含一个单独的列表元素。

我不熟悉你在这里 运行 的 Azure CLI,所以我不能确定它是如何解释其命令行的,但是根据 Windows 的典型约定进行猜测CLI 应用程序我会尝试以下操作:

data "external" "search_admin_key" {
  count   = local.deploy_indexes ? 1 : 0
  program = [
    "az", "search", "admin-key", "show", "-g", var.rg_name, "--service-name", var.cognitive_search_name,
  ]
}

当运行程序时,数据源会插入任何必要的引号并自动转义以处理var.rg_namevar.cognitive_search_name可能包含空格和其他特殊字符的可能性。但是,在 Windows 上,对于需要什么引用和转义没有单一的标准,因此它将始终使用最初由 Microsoft Visual C++ 运行时库引入的最典型的约定。大多数现代 Windows CLI 程序都将接受该格式,因此我希望上面的内容能够工作,但我提到它是为了以防万一 az 是一个有不寻常要求的程序。