我试图提供多个Azure虚拟机与Terraform,然后获得MSI标识ID的权利。我从这个对我有用的MSI示例(msi.html)开始,并试图添加计数,即
resource "azurerm_virtual_machine" "virtual_machine" {
count = "5"
name = "test"
....
identity = {
type = "SystemAssigned"
}
.....
}
resource "azurerm_virtual_machine_extension" "virtual_machine_extension" {
count = "5"
name = "test"
location = "${var.location}"
resource_group_name = "test"
virtual_machine_name = "${element(azurerm_virtual_machine.virtual_machine.*.name, count.index)}"
publisher = "Microsoft.ManagedIdentity"
type = "ManagedIdentityExtensionForWindows"
type_handler_version = "1.0"
settings = <<SETTINGS
{
"port": 50342
}
SETTINGS
}
output "vm_principals" {
# original had --- "${lookup(azurerm_virtual_machine.virtual_machine.identity[0], "principal_id"}"
value = ["${azurerm_virtual_machine.virtual_machine.*.identity[0]}"]
}
问题是,我得到一个输出数组如下:
vm_principals = [
{
principal_id = xxxxxxxxxxxxx,
type = SystemAssigned
},
{
principal_id = yyyyyyyyyyyyy,
type = SystemAssigned
}
]
我想得到的是
vm_principals = [
xxxxxxxxxxxxxxxxx,
yyyyyyyyyyyyyyyyy
]
我尝试了明显的变化,但我怀疑这是一个地形的限制。
value = ["${lookup(azurerm_virtual_machine.virtual_machine.*.identity[0], "principal_id)}"]
有什么想法吗?
发布于 2018-09-22 21:10:34
不幸的是你是对的。我相信你在打本期。然而,这可能在Terraform的0.12版本中得到解决,因为它将引入一种改进的语言(HCL)。有关更多细节,请参见此Hashicorp博客文章。
发布于 2019-02-11 22:40:20
我是如何处理这个问题的
resource "azurerm_virtual_machine" "kubenode" {
count = "3"
...
}对于名为kubenode的azurerm_virtual_machine资源,可以这样做:
${azurerm_virtual_machine.kubenode.*.identity.0.principal_id}它将返回主体ids的列表。然后你可以:
${azurerm_virtual_machine.kubenode.*.identity.0.principal_id[count.index]}例如,在角色分配场景中:
resource "azurerm_role_assignment" "kubenode-subscription-reader-role" {
count = "${azurerm_virtual_machine.kubenode.count}"
scope = "${data.azurerm_subscription.primary.id}"
role_definition_name = "Reader"
principal_id = "${azurerm_virtual_machine.kubenode.*.identity.0.principal_id[count.index]}"
}https://stackoverflow.com/questions/49987579
复制相似问题