2
votes

I'm trying to create a service connection using the Azure DevOps API. This is the reference I'm using:

MS Docs VSTS Endpoints - Create

I've build the request using this address type as specified:

https://dev.azure.com/organization/project/_apis/serviceendpoint/endpoints?api-version=5.0-preview.2

It is a POST request that has been submitted and the json payload below has been added to the body and submission made with content-type: application/json.

For some reason I'm receiving the following error:

The remote server returned an error: (400) Bad Request.

There's no specific details with this error, so it's very difficult to know what is causing the error.

{
"data": {
    "authorizationtype": "kubeconfig",
    "acceptUntrustedCerts": "true"
},
"name": "AKS1",
"id": "bbdb1f31-e6cf-4806-ba75-58ae5b52c920",
"type": "kubernetes",
"url": "https://serviceaddress.azmk8s.io",
"authorization": {
    "parameters": {
        "generatePfx": true
    },
    "acceptUntrustedCerts": true,
    "scheme": "none"
},
"isReady": true

}

Also, another question, the documentation doesn't say how or which field should be used to add the kubeconfig yaml authorization data to the request (see below in the image as highlighted). How should this be added to the json payload, which field should be used?

I'm running my code via Powershell.

Just to be clear, I have managed to run a load of GET requests successfully, so am able to access our project via the api successfully. This is more a question about POST request payload formats

thanks

Add service connection via a browser

1

1 Answers

2
votes

The simple way to check the detail request is capture the actual request of creating target service endpoint manually (Fiddler or F12 developer tool)

The sample REST API to create kubernetes service endpoint:

Post https://dev.azure.com/{organization}/{project}/_apis/serviceendpoint/endpoints?api-version=5.0-preview.2

Body:

{

    "description": "",
    "administratorsGroup": null,
    "authorization": {
        "parameters": {
            "kubeconfig": "apiVersion: v1
kind: Config
clusters:
- name: local
  cluster:
    insecure-skip-tls-verify: true
    server: https://192.168.43.66:6443
contexts:
- context:
    cluster: local
    user: admin
  name: kubelet-context
current-context: kubelet-context
users:
- name: admin
  user:
    password: admin
    username: admin",
            "username": "admin",
            "password": "admin"
        },
        "scheme": "UsernamePassword"
    },
    "createdBy": null,
    "data": {
        "authorizationType": "Kubeconfig",
        "acceptUntrustedCerts": "false"
    },
    "name": "{endpoint name}",
    "type": "kubernetes",
    "url": "{url}",
    "readersGroup": null,
    "groupScopeId": null,
    "isReady": false,
    "operationStatus": null
}

Sample kubeconfig: cni-plugin/kubeconfig.sample