Получите oauth2_permissions от azuread_application с помощью Terraform - PullRequest
1 голос
/ 02 августа 2020

У меня есть регистрация приложения, которая определяет два блока oauth2_permissions, например (другие детали опущены)

resource "azuread_application" "myapp" {
  oauth2_permissions {
    is_enabled = true
    type       = "User"
    value      = "Permission.One"
  }

  oauth2_permissions {
    is_enabled = true
    type       = "User"
    value      = "Permission.Two"
  }
}

Что, если оно применяется, работает нормально. Затем я хочу сослаться на эти разрешения при регистрации другого приложения, например

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

    resource_access {
      id   = ??
      type = "Scope"
    }
  }
}

Для идентификатора здесь я попробовал:

id = lookup(azuread_application.myapp.oauth2_permissions[0], "id")

, что дает This value does not have any indices. Как и

id = azuread_application.myapp.oauth2_permissions.0.id

, я могу определить блок данных и получить вывод oauth2_permissions из myapp:

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

output "myapp-perms" {
  value = data.azuread_application.myapp.oauth2_permissions
}

И при применении, это будет правильно отображать массив из двух блоков разрешений . Если я попытаюсь обратиться к блоку данных вместо блока приложения, т.е.

id = lookup(data.azuread_application.myapp.oauth2_permissions[0], "id")

, это даст мне другую ошибку: The given key does not identify an element in this collection value

Если я применю эти два разрешения вручную на консоль, все нормально работает. Читая вокруг, я был почти уверен, что хотя бы один из вышеперечисленных методов должен работать, но мне явно чего-то не хватает.

Для полноты, определение поставщика:

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

provider "azuread" {
  version = "~> 0.11.0"
}

1 Ответ

1 голос
/ 03 августа 2020

На основании комментариев.

Решение - использовать tolist . Причина в том, что несколько блоков oauth2_permissions будут представлены как наборы объектов, к которым нельзя получить доступ с помощью индексов.

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

Однако наборы не имеют гарантированного порядка. Таким образом, на это следует обратить особое внимание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...