azurerm_virtual_machine没有属性标识0.principal_id

时间:2019-07-16 15:01:12

标签: terraform terraform-provider-azure

tf 0.11.11和 天青石0.31.0

我已经尝试了一段时间,但是我缺少一些东西。

我在不使用identity {}块的情况下,释放了少量的azurerm_virtual_machine资源。 机器启动后,我想添加一个:

./ modules / linux / main.tf

resource "azurerm_virtual_machine" "instance" {
  count                 = "${length(compact(var.hosts))}"

  name                  = "${var.hosts[count.index]}"
  location              = "${data.azurerm_resource_group.instance.location}"
  resource_group_name   = "${data.azurerm_resource_group.instance.name}"

  identity {
    type  = "SystemAssigned"
  }
}

output "system_assigned_identity_principal_ids" {
  value       = "${azurerm_virtual_machine.instance.*.identity.0.principal_id}"
  depends_on  = [ "azurerm_virtual_machine.instance" ]
}

./ main.tf

module "linuxvm" {
  source = "./modules/linux"

  hosts = [ "${var.hostnames}" ]
  resource_group_name = "${module.sample_resource_group.name}"
  resource_tags = "${var.resource_tags}"
}

在Terraform计划期间,出现此错误: 错误:错误的运行计划:发生了1个错误:

* module.linuxvm.output.system_assigned_identity_principal_ids: Resource
'azurerm_virtual_machine.instance' does not have attribute 
'identity.0.principal_id' for variable 
'azurerm_virtual_machine.instance.*.identity.0.principal_id'

在状态文件中,没有其他标识属性(这是预期的)。最初创建的虚拟机没有身份块。

[user@host test]$ terraform show | grep iden
  identity.# = 0
  identity.# = 0
  identity.# = 0

如果我从头开始创建虚拟机,则根本看不到此问题 如果我注释掉输出块,则将执行地形计划。 此时,我没有其他东西可以尝试。

修改: 我还有另一个观察。如果我将输出更改为:

azurerm_virtual_machine.instance.*.identity.0.principal_id

收件人:

azurerm_virtual_machine.instance.0.identity.0.principal_id

地形计划通过。我有3位主机,0-2通过,但使用splat不会。

1 个答案:

答案 0 :(得分:0)

实际上,当您通过启用了标识的Terraform创建VM时,如果有VM,则无法输出标识ID。 Terraform仅导出VM ID,因此您只能输出VM ID。参见VM Attributes

命令terraform plan仅检查terraform文件的语法。因此,您无法通过Terraform输出VM标识ID。但是您可以使用Azure CLI或Azure PowerShell的帮助。例如,可以使用如下所示的Azure CLI命令:

resource "null_resource" "output" {
    provisioner "local-exec" {
        command = "az vm show --ids  ${azurerm_virtual_machine.main.id} --query identity.principalId"
    }
}

然后输出如下:

enter image description here

希望有帮助!