Azure active directory 使用Terraform从azuread_应用程序获取oauth2_权限

Azure active directory 使用Terraform从azuread_应用程序获取oauth2_权限,azure-active-directory,terraform,terraform-provider-azure,Azure Active Directory,Terraform,Terraform Provider Azure,我有一个应用程序注册,它定义了两个oauth2_权限块,例如(省略了其他细节) 应用时,效果很好。然后我想在另一个应用程序注册中引用这些权限,例如 resource "azuread_application" "myotherapp" { required_resource_access { resource_app_id = azuread_application.myapp.application_id resource_acce

我有一个应用程序注册,它定义了两个oauth2_权限块,例如(省略了其他细节)

应用时,效果很好。然后我想在另一个应用程序注册中引用这些权限,例如

resource "azuread_application" "myotherapp" {
  required_resource_access {
    resource_app_id = azuread_application.myapp.application_id

    resource_access {
      id   = ??
      type = "Scope"
    }
  }
}
对于此处的id,我已尝试:

id = lookup(azuread_application.myapp.oauth2_permissions[0], "id")
它给出的
此值没有任何索引。同样

id = azuread_application.myapp.oauth2_permissions.0.id
我可以定义一个数据块并从myapp获得oauth2_权限的输出:

data "azuread_application" "myapp" {
  application_id  = azuread_application.myapp.application_id
}

output "myapp-perms" {
  value = data.azuread_application.myapp.oauth2_permissions
}
在apply上,它将正确地显示两个权限块的数组。如果我尝试引用数据块而不是应用程序块,即

id = lookup(data.azuread_application.myapp.oauth2_permissions[0], "id")
这给了我一个不同的错误:
给定的键未标识此集合值中的元素

如果我在控制台上手动应用这两个权限,一切正常。从周围的阅读中,我相当肯定上述方法中至少有一种是有效的,但我显然遗漏了一些东西

为了完整性,提供程序定义:

provider "azurerm" {
  version = "~> 2.12"
}

provider "azuread" {
  version = "~> 0.11.0"
}
根据评论

解决办法是使用。原因是多个
oauth2_权限
块将表示为一组对象,不能使用索引访问这些对象

id = tolist(azuread_application.myapp.oauth2_permissions)[0].id

但是,这些集合没有保证顺序。因此,应特别注意这一点。

您能尝试一下
列表(azuread\u application.myapp.oauth2\u permissions)[0].id
?太棒了!这就成功了@Marcin。万分感谢,这几天来一直让我心烦意乱。很高兴听到这个消息。如果你不介意的话,我会提供一个答案供将来参考。
id = tolist(azuread_application.myapp.oauth2_permissions)[0].id