2017-01-16 27 views
0

Azure APIポータルにドキュメントを公開するカスタムタスクを作成しています。タスクのUIで、選択したサブスクリプションおよびリソースグループの利用可能なAPI管理サービスを一覧にしたいとします。 this issueによれば、私のデータソースバインディングでendpointUrl inlineを指定することで、これは技術的に可能です。 Azure RM Web Deploymentタスクのデータソースの後にエンドポイントをモデル化しようとしましたが、動作させることができません。自分のサブスクリプションを選択して自分のリソースグループを選択することができますが、私のカスタムデータソースのpickListは常に空です。私は自分の仕事定義で明示的な認証をしていないので、どういう関係かどうかは分かりません。以下は私の仕事のためのinputsdataSourceBindingsです:インラインデータソースバインディングで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

私は{{endpoint.url}}で始まらないURLを呼び出すことができないことを示すエラーメッセージを受け取ったChromeでコンソールを検査した後。私はルートに{{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は、AzureのRMエンドポイントタイプについてhttps://management.core.windows.netに解決されることです。 Azure RM APIはhttps://management.azure.comでホストされています。その結果、エンドポイントの資格情報がAzure RMサービスプリンシパルのものであり、Azureクラシック管理APIのものではないので、私は403を受け取っています。

この情報でもGithub Issueを更新しました。これはバグだと思うし、Azure RMサービスエンドポイントのendpoint.urlhttps://management.azure.comに解決されるはずです。 Azure RMサービスエンドポイントで定義されているデータソースを見ると、https://managemnet.azure.comにホストされているAPIはすべて、https://management.core.windows.netではありません。

+0

extension.jsonの外観はどうですか?あなたのデータソースはそこで定義されていなければなりません。 – jessehouwing

+0

チェックアウト:https://github.com/Microsoft/vsts-tasks/issues/973 – jessehouwing

+0

@jessehouwingカスタムサービスエンドポイントの外でデータソースを定義できましたか?私は実際には既存のAzureRMサブスクリプションエンドポイントを使用したいが、それを箱から出さない追加のデータソースで拡張するだけだ。 – mclark1129

答えて

1

Custom build task JSON schemaをチェックすると、task.jsonの "dataSourceBindings"に "endpointUrl"と "resultSelector"を使用することはできません。 vss-extension.jsonファイルにカスタムサービスエンドポイントを定義するために使用されます。また、「ApiPortals」の「dataSourceName」も欠けていました。

URLでRest APIを呼び出し、task.jsonのセレクタを使用する場合は、 "dataSourceBindings"ではなく "sourceDefinitions"を使用できます。詳細はthis questionの私の答えを参照してください。ただし、 "sourceDefinitions"では基本認証のみがサポートされています。つまり、これはあなたのシナリオにも当てはまりません。

今のところ必要な機能を実現するには、カスタムサービスエンドポイントを作成する必要があります。

+0

@ Eddie-MFSTそうではありません。私は '{{endpoint.url}} 'で始まるURLを提供する' endpointUrl'を使うことができます。私は追加情報で私の質問を更新しました。 – mclark1129

関連する問題