Я пишу настраиваемую задачу для публикации документов на портале Azure API. Я хочу, чтобы пользовательский интерфейс для задачи отображал доступные службы управления API для выбранной группы подписки и ресурсов. Согласно this issue, это должно быть технически возможно, указав endlineUrl inline с привязкой к привязке к данным. Я попытался смоделировать конечную точку после источников данных в задаче Azure RM Web Deployment, но я не могу заставить ее работать. В моей задаче я могу выбрать свою подписку, выбрать свою группу ресурсов, но pickList для моего настраиваемого источника данных всегда пуст. Я не делаю никакой явной проверки подлинности в моей задаче, поэтому я не уверен, что это как-то связано. Ниже приведены inputs
и dataSourceBindings
для моей задачи:Как использовать endpointUrl в привязке встроенного источника данных?
"inputs": [
{
"name": "ConnectedServiceName",
"type": "connectedService:AzureRM",
"label": "Azure RM Subscription",
"defaultValue": "",
"required": true,
"helpMarkDown": "Select the Azure Resource Manager subscription for the deployment."
},
{
"name": "ResourceGroupName",
"label": "Resource Group",
"type": "pickList",
"required": true,
"helpMarkDown": "Select resource group which contains the API portal"
},
{
"name": "ApiPortalName",
"type": "pickList",
"label": "API Portals",
"defaultValue": "",
"required": true,
"properties": {
"EditableOptions": "True"
},
"helpMarkDown": "Select the Azure Resource Manager subscription for the deployment."
}
],
"dataSourceBindings": [
{
"target": "ResourceGroupName",
"endpointId": "$(ConnectedServiceName)",
"dataSourceName": "AzureResourceGroups"
},
{
"name": "ApiPortals",
"target": "ApiPortalName",
"endpointId": "$(ConnectedServiceName)",
"endpointUrl": "https://management.azure.com/subscriptions/$(endpoint.subscriptionId)/resourceGroups/$(ResourceGroupName)/providers/Microsoft.ApiManagement/service?api-version=2016-07-07",
"resultSelector": "jsonpath:$.value[*].name",
"parameters": {
"ResourceGroupName": "$(ResourceGroupName)"
}
}
UPDATE
После проверки консоли в Chrome я получил сообщение об ошибке, указывающее, что я не могу назвать URL-адресов, которые не начинаются с {{endpoint.url}}
. Я обновил свою задачу с {{endpoint.url}}
в корне, и я вижу, что попытка сделать API вызов я ожидал:
{
"name": "ApiPortals",
"target": "ApiPortalName",
"endpointId": "$(ConnectedServiceName)",
"endpointUrl": "{{endpoint.url}}/subscriptions/$(endpoint.subscriptionId)/resourceGroups/$(ResourceGroupName)/providers/Microsoft.ApiManagement/service?api-version=2016-07-07",
"resultSelector": "jsonpath:$.value[*].name",
"parameters": {
"ResourceGroupName": "$(ResourceGroupName)"
}
}
Сейчас проблема заключается в том, что по какой-то причине endpoint.url
решает https://management.core.windows.net
для типов конечных точек Azure RM. API Azure RM размещены по адресу https://management.azure.com
. В результате я получаю 403, так как мои учетные данные для конечной точки предназначены для принципала Azure RM Service Principal, а не для API управления Azure Classic.
Я также обновил мою Github Issue с этой информацией. Я считаю, что это ошибка, а endpoint.url
для конечной точки Azure RM Service необходимо решить до https://management.azure.com
. Если вы посмотрите на источники данных, определенные в конечной точке службы Azure RM, все они ссылаются на API, размещенные по адресу https://managemnet.azure.com
, а не https://management.core.windows.net
.
Как выглядит ваш extension.json? Ваш источник данных должен быть определен там. – jessehouwing
Check out: https://github.com/Microsoft/vsts-tasks/issues/973 – jessehouwing
@jessehouwing Я могу определить источник данных вне конечной точки пользовательского сервиса? Я действительно хочу использовать существующую конечную точку подписки AzureRM, но просто расширьте ее дополнительными источниками данных, которые не поставляются с ней. – mclark1129