tf 0.11.11和 天青石0.31.0
我已经尝试了一段时间,但是我缺少一些东西。
我在不使用identity {}块的情况下,释放了少量的azurerm_virtual_machine资源。 机器启动后,我想添加一个:
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" ]
}
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不会。
答案 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"
}
}
然后输出如下:
希望有帮助!