Azure active directory 使用Terraform从azuread_应用程序获取oauth2_权限
我有一个应用程序注册,它定义了两个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
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