2017-01-16 2 views
0

Я пишу настраиваемую задачу для публикации документов на портале 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.

+0

Как выглядит ваш extension.json? Ваш источник данных должен быть определен там. – jessehouwing

+0

Check out: https://github.com/Microsoft/vsts-tasks/issues/973 – jessehouwing

+0

@jessehouwing Я могу определить источник данных вне конечной точки пользовательского сервиса? Я действительно хочу использовать существующую конечную точку подписки AzureRM, но просто расширьте ее дополнительными источниками данных, которые не поставляются с ней. – mclark1129

ответ

1

Проверьте Custom build task JSON schema, вы не можете использовать «endpointUrl» и «resultSelector» для «dataSourceBindings» в task.json. Они используются для определения конечной точки пользовательского сервиса в файле vss-extension.json. И вы также пропустили «dataSourceName» для «ApiPortals».

Если вы хотите вызвать Rest API с URL-адресом и использовать селектор из task.json, вы можете использовать «sourceDefinitions» вместо «dataSourceBindings». Обратитесь к моему ответу в this question. Однако на данный момент поддерживается только базовая аутентификация с помощью «sourceDefinitions», что означает, что это также не относится к вашему сценарию.

Таким образом, вам необходимо создать пользовательскую конечную точку обслуживания для достижения требуемой функции.

+0

@ Eddie-MFST Это не совсем так.Я могу использовать 'endpointUrl', поскольку URL-адрес начинается с' {{endpoint.url}} '. Я обновил свой вопрос с дополнительной информацией. – mclark1129

Смежные вопросы