🏹 Archer (1.4.1)

Download OpenAPI specification:Download

URL: https://sap.com License: Apache 2.0

Documentation

Archer is an API service that can privately connect services from one private OpenStack Network to another. Consumers can select a service from a service catalog and inject it to their network, which means making this service available via a private ip address.

Archer implements an OpenStack like API and integrates with OpenStack Keystone and OpenStack Neutron.

Architecture

There are two types of resources: services and endpoints

  • Services are private or public services that are manually configured in Archer. They can be accessed by creating an endpoint.
  • Service endpoints, or short endpoints, are IP endpoints in a local network used to transparently access services residing in different private networks.

Features

  • Multi-tenant capable via OpenStack Identity service
  • OpenStack policy.json access policy support
  • Prometheus Exporter
  • Rate limiting

Supported Backends

  • F5 BigIP

Requirements

  • PostgreSQL Database

API properties

This section describes properties of the Archer API. It uses a ReSTful HTTP API.

Request format

The Archer API only accepts requests with the JSON data serialization format. The Content-Type header for POST requests is always expected to be application/json.

Response format

The Archer API always response with JSON data serialization format. The Content-Type header is always Content-Type: application/json.

Authentication and authorization

The Archer API uses the OpenStack Identity service as the default authentication service. When Keystone is enabled, users that submit requests to the OpenStack Networking service must provide an authentication token in X-Auth-Token request header. You obtain the token by authenticating to the Keystone endpoint.

When Keystone is enabled, the project_id attribute is not required in create requests because the project ID is derived from the authentication token.

Pagination

To reduce load on the service, list operations will return a maximum number of items at a time. To navigate the collection, the parameters limit, marker and page_reverse can be set in the URI. For example:

?limit=100&marker=1234&page_reverse=False

The marker parameter is the ID of the last item in the previous list. The limit parameter sets the page size. The page_reverse parameter sets the page direction. These parameters are optional. If the client requests a limit beyond the maximum limit configured by the deployment, the server returns the maximum limit number of items.

For convenience, list responses contain atom next links and previous links. The last page in the list requested with page_reverse=False will not contain next link, and the last page in the list requested with page_reverse=True will not contain previous link.

To determine if pagination is supported, a user can check whether the pagination capability is available through the Archer API detail endpoint.

Sorting

You can use the sort parameter to sort the results of list operations. The sort parameter contains a comma-separated list of sort keys, in order of the sort priority. Each sort key can be optionally prepended with a minus - character to reverse default sort direction (ascending).

For example:

?sort=key1,-key2,key3

key1 is the first key (ascending order), key2 is the second key (descending order) and key3 is the third key in ascending order.

To determine if sorting is supported, a user can check whether the sort capability is available through the Archer API detail endpoint.

Filtering by tags

Most resources (e.g. service and endpoint) support adding tags to the resource attributes. Archer supports advanced filtering using these tags for list operations. The following tag filters are supported by the Archer API:

  • tags - Return the list of entities that have this tag or tags.
  • tags-any - Return the list of entities that have one or more of the given tags.
  • not-tags - Return the list of entities that do not have one or more of the given tags.
  • not-tags-any - Return the list of entities that do not have at least one of the given tags.

Each tag supports a maximum amount of 64 characters.

For example to get a list of resources having both, red and blue tags:

?tags=red,blue

To get a list of resourcing having either, red or blue tags:

?tags-any=red,blue

Tag filters can also be combined in the same request:

?tags=red,blue&tags-any=green,orange

Response Codes (Faults)

Code Description
400 Validation Error
401 Unauthorized
403 Policy does not allow current user to do this
The project is over quota for the request
404 Not Found
Resource not found
409 Conflict
422 Unprocessable Entity
429 You have reached maximum request limit
500 Internal server error

Endpoint identification

Archer supports the Proxy Protocol v2 for endpoint identification.

The Proxy Protocol is a widely used protocol for passing client connection information through a load balancer to the backend server. It is used to identify the original client IP address and port number. The Proxy Protocol v2 is a binary protocol that is more efficient than the original text-based Proxy Protocol v1.

The proxy protocol header also includes the ID of the endpoint. This information is encoded using a custom Type-Length-Value (TLV) vector as follows.

Field Length (Octets) Description
Type 1 PP2_TYPE_SAPCC (0xEC)
Length 2 Length of the value (UUIDv4 is always 36 byte as ASCII string)
Value 36 ASCII UUID of the endpoint

Version

Version API

Lists information of enabled Archer capabilities.

Shows details for Archer API

Responses

Response samples

Content type
application/json
{
  • "updated": "2018-09-30T00:00:00Z",
  • "version": "1.3.0",
  • "links": [
    ],
  • "capabilities": [
    ]
}

Service

Services

Services are for publishing TCP/UDP services using internal IP addresses in your private network.

List services

Authorizations:
X-Auth-TokenNone
query Parameters
marker
string <uuid>

Pagination ID of the last item in the previous list.

limit
integer

Sets the page size.

sort
string

Comma-separated list of sort keys, optionally prefix with - to reverse sort order.

page_reverse
boolean

Sets the page direction.

tags
Array of strings

Filter for tags, multiple tags are considered as logical AND. Should be provided in a comma separated list.

tags-any
Array of strings

Filter for tags, multiple tags are considered as logical OR. Should be provided in a comma separated list.

not-tags
Array of strings

Filter for resources not having tags, multiple not-tags are considered as logical AND. Should be provided in a comma separated list.

not-tags-any
Array of strings

Filter for resources not having tags, multiple tags are considered as logical OR. Should be provided in a comma separated list.

project_id
string = 32 characters

Filter for resources belonging or accessible by a specific project.

Responses

Response samples

Content type
application/json
{
  • "links": [
    ],
  • "items": [
    ]
}

Add a new service to the catalog

Authorizations:
X-Auth-TokenNone
Request Body schema: application/json
required

Service object that needs to be added to the catalog

enabled
boolean
Default: true

Enable/disable this service. Existing endpoints are not touched by this.

name
string <= 64 characters

Name of the service.

description
string <= 255 characters

Description of the service.

port
required
integer <int32> [ 1 .. 65535 ]

Port exposed by the service.

network_id
required
string <uuid>

Network ID of the network that provides this service.

ip_addresses
required
Array of strings <ipv4> non-empty [ items <ipv4 > ]

IP Addresses of the providing service, multiple addresses will be round robin load balanced.

require_approval
boolean
Default: true

Require explicit project approval for the service owner.

visibility
string
Default: "private"
Enum: "private" "public"

Set global visibility of the service. For private visibility, RBAC policies can extend the visibility to specific projects.

availability_zone
string or null

Availability zone of this service.

proxy_protocol
boolean
Default: true

Proxy protocol v2 enabled for this service.

tags
Array of strings or null[ items <= 64 characters ]

The list of tags on the resource.

provider
string or null
Default: "tenant"
Enum: "tenant" "cp"

Provider type, defaults to tenant type.

project_id
string (Project) = 32 characters

The ID of the project owning this resource.

Responses

Request samples

Content type
application/json
{
  • "enabled": true,
  • "name": "ExampleService",
  • "description": "An example of an Service.",
  • "port": 80,
  • "network_id": "d6797cf4-42b9-4cad-8591-9dd91c3f0fc3",
  • "ip_addresses": [
    ],
  • "require_approval": true,
  • "visibility": "private",
  • "availability_zone": "AZ-A",
  • "proxy_protocol": true,
  • "tags": [
    ],
  • "provider": "tenant",
  • "project_id": "fa84c217f361441986a220edf9b1e337"
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "enabled": true,
  • "name": "ExampleService",
  • "description": "An example of an Service.",
  • "port": 80,
  • "network_id": "d6797cf4-42b9-4cad-8591-9dd91c3f0fc3",
  • "ip_addresses": [
    ],
  • "status": "AVAILABLE",
  • "require_approval": true,
  • "visibility": "private",
  • "availability_zone": "AZ-A",
  • "host": "string",
  • "proxy_protocol": true,
  • "tags": [
    ],
  • "provider": "tenant",
  • "created_at": "2023-03-31T18:37:54.581099Z",
  • "updated_at": "2023-03-31T18:37:54.581099Z",
  • "project_id": "fa84c217f361441986a220edf9b1e337"
}

Show details of an service

Authorizations:
X-Auth-TokenNone
path Parameters
service_id
required
string <uuid>

The UUID of the service

Responses

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "enabled": true,
  • "name": "ExampleService",
  • "description": "An example of an Service.",
  • "port": 80,
  • "network_id": "d6797cf4-42b9-4cad-8591-9dd91c3f0fc3",
  • "ip_addresses": [
    ],
  • "status": "AVAILABLE",
  • "require_approval": true,
  • "visibility": "private",
  • "availability_zone": "AZ-A",
  • "host": "string",
  • "proxy_protocol": true,
  • "tags": [
    ],
  • "provider": "tenant",
  • "created_at": "2023-03-31T18:37:54.581099Z",
  • "updated_at": "2023-03-31T18:37:54.581099Z",
  • "project_id": "fa84c217f361441986a220edf9b1e337"
}

Update an existing service

Authorizations:
X-Auth-TokenNone
path Parameters
service_id
required
string <uuid>

The UUID of the service

Request Body schema: application/json
required

Service object that needs to be updated

enabled
boolean or null

Enable/disable this service. Existing endpoints are not touched by this.

name
string or null <= 64 characters

Name of the service.

description
string or null <= 255 characters

Description of the service.

ip_addresses
Array of strings <ipv4> non-empty [ items <ipv4 > ]

IP Addresses of the providing service, multiple addresses will be round robin load balanced.

port
integer or null <int32> [ 1 .. 65535 ]

Port exposed by the service.

require_approval
boolean or null

Require explicit project approval for the service owner.

visibility
string or null
Enum: "private" "public"

Set global visibility of the service. For private visibility, RBAC policies can extend the visibility to specific projects.

proxy_protocol
boolean or null

Proxy protocol v2 enabled for this service.

tags
Array of strings[ items <= 64 characters ]

The list of tags on the resource.

Responses

Request samples

Content type
application/json
{
  • "enabled": true,
  • "name": "ExampleService",
  • "description": "An example of an Service.",
  • "ip_addresses": [
    ],
  • "port": 80,
  • "require_approval": true,
  • "visibility": "private",
  • "proxy_protocol": true,
  • "tags": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "enabled": true,
  • "name": "ExampleService",
  • "description": "An example of an Service.",
  • "port": 80,
  • "network_id": "d6797cf4-42b9-4cad-8591-9dd91c3f0fc3",
  • "ip_addresses": [
    ],
  • "status": "AVAILABLE",
  • "require_approval": true,
  • "visibility": "private",
  • "availability_zone": "AZ-A",
  • "host": "string",
  • "proxy_protocol": true,
  • "tags": [
    ],
  • "provider": "tenant",
  • "created_at": "2023-03-31T18:37:54.581099Z",
  • "updated_at": "2023-03-31T18:37:54.581099Z",
  • "project_id": "fa84c217f361441986a220edf9b1e337"
}

Remove service from catalog

Deletes this service. There must be no active associated endpoint for successfully deleting the service. Active endpoints can be rejected by the service owner via the /service/{service_id}/reject_endpoints API.

Authorizations:
X-Auth-TokenNone
path Parameters
service_id
required
string <uuid>

The UUID of the service

Responses

Response samples

Content type
application/json
{
  • "code": 0,
  • "message": "string"
}

List service endpoints consumers

Provides a list of service consumers (endpoints).

This list can be used to accept or reject requests, or disable active endpoints. Rejected endpoints will be cleaned up after a specific time.

Authorizations:
X-Auth-TokenNone
path Parameters
service_id
required
string <uuid>

The UUID of the service

query Parameters
marker
string <uuid>

Pagination ID of the last item in the previous list.

limit
integer

Sets the page size.

sort
string

Comma-separated list of sort keys, optionally prefix with - to reverse sort order.

page_reverse
boolean

Sets the page direction.

Responses

Response samples

Content type
application/json
{
  • "links": [
    ],
  • "items": [
    ]
}

Accept endpoints

Specify a list of endpoint consumers (endpoint_ids and/or project_ids) whose endpoints should be accepted.

  • Existing active endpoints will be untouched.
  • Rejected endpoints will be accepted.
  • Pending endpoints will be accepted.
Authorizations:
X-Auth-TokenNone
path Parameters
service_id
required
string <uuid>

The UUID of the service

Request Body schema: application/json
required

Service object that needs to be updated

endpoint_ids
Array of strings <uuid> [ items <uuid > ]
project_ids
Array of strings (Project) [ items = 32 characters ]

Responses

Request samples

Content type
application/json
{
  • "endpoint_ids": [
    ],
  • "project_ids": [
    ]
}

Response samples

Content type
application/json
[
  • {
    }
]

Reject endpoints

Specify a list of consumers (endpoint_ids and/or project_ids) whose endpoints should be rejected.

  • Existing active endpoints will be rejected.
  • Rejected endpoints will be untouched.
  • Pending endpoints will be rejected.
Authorizations:
X-Auth-TokenNone
path Parameters
service_id
required
string <uuid>

The UUID of the service

Request Body schema: application/json
required

Service object that needs to be updated

endpoint_ids
Array of strings <uuid> [ items <uuid > ]
project_ids
Array of strings (Project) [ items = 32 characters ]

Responses

Request samples

Content type
application/json
{
  • "endpoint_ids": [
    ],
  • "project_ids": [
    ]
}

Response samples

Content type
application/json
[
  • {
    }
]

Endpoint

Endpoints

Endpoints are for accessing existing Services using internal IP addresses in your private network.

List existing service endpoints

Authorizations:
X-Auth-TokenNone
query Parameters
marker
string <uuid>

Pagination ID of the last item in the previous list.

limit
integer

Sets the page size.

sort
string

Comma-separated list of sort keys, optionally prefix with - to reverse sort order.

page_reverse
boolean

Sets the page direction.

tags
Array of strings

Filter for tags, multiple tags are considered as logical AND. Should be provided in a comma separated list.

tags-any
Array of strings

Filter for tags, multiple tags are considered as logical OR. Should be provided in a comma separated list.

not-tags
Array of strings

Filter for resources not having tags, multiple not-tags are considered as logical AND. Should be provided in a comma separated list.

not-tags-any
Array of strings

Filter for resources not having tags, multiple tags are considered as logical OR. Should be provided in a comma separated list.

project_id
string = 32 characters

Filter for resources belonging or accessible by a specific project.

Responses

Response samples

Content type
application/json
{
  • "links": [
    ],
  • "items": [
    ]
}

Create endpoint for accessing a service

Authorizations:
X-Auth-TokenNone
Request Body schema: application/json
required

Service and target network to inject. Only one of target_network, target_subnet or target_port must be specified.

service_id
string <uuid>

The ID of the service.

name
string <= 64 characters

Name of the endpoint.

description
string <= 255 characters

Description of the endpoint.

object

Endpoint target

tags
Array of strings or null[ items <= 64 characters ]

The list of tags on the resource.

project_id
string (Project) = 32 characters

The ID of the project owning this resource.

Responses

Request samples

Content type
application/json
{
  • "service_id": "641e839f-864e-4cce-98f9-40f6cbb3e9e0",
  • "name": "Example endpoint.",
  • "description": "An example of an endpoint.",
  • "target": {
    },
  • "tags": [
    ],
  • "project_id": "fa84c217f361441986a220edf9b1e337"
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "service_id": "641e839f-864e-4cce-98f9-40f6cbb3e9e0",
  • "name": "Example endpoint.",
  • "description": "An example of an endpoint.",
  • "target": {
    },
  • "ip_address": "1.2.3.4",
  • "tags": [
    ],
  • "status": "AVAILABLE",
  • "created_at": "2023-03-31T18:37:54.581099Z",
  • "updated_at": "2023-03-31T18:37:54.581099Z",
  • "project_id": "fa84c217f361441986a220edf9b1e337"
}

Show existing service endpoint

Authorizations:
X-Auth-TokenNone
path Parameters
endpoint_id
required
string <uuid>

The UUID of the endpoint

Responses

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "service_id": "641e839f-864e-4cce-98f9-40f6cbb3e9e0",
  • "name": "Example endpoint.",
  • "description": "An example of an endpoint.",
  • "target": {
    },
  • "ip_address": "1.2.3.4",
  • "tags": [
    ],
  • "status": "AVAILABLE",
  • "created_at": "2023-03-31T18:37:54.581099Z",
  • "updated_at": "2023-03-31T18:37:54.581099Z",
  • "project_id": "fa84c217f361441986a220edf9b1e337"
}

Update an existing endpoint

Authorizations:
X-Auth-TokenNone
path Parameters
endpoint_id
required
string <uuid>

The UUID of the endpoint

Request Body schema: application/json
required

Endpoint object that needs to be updated

tags
Array of strings or null[ items <= 64 characters ]

The list of tags on the resource.

name
string or null <= 64 characters

Name of the endpoint.

description
string or null <= 255 characters

Description of the endpoint.

Responses

Request samples

Content type
application/json
{
  • "tags": [
    ],
  • "name": "Example endpoint.",
  • "description": "An example of an endpoint."
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "service_id": "641e839f-864e-4cce-98f9-40f6cbb3e9e0",
  • "name": "Example endpoint.",
  • "description": "An example of an endpoint.",
  • "target": {
    },
  • "ip_address": "1.2.3.4",
  • "tags": [
    ],
  • "status": "AVAILABLE",
  • "created_at": "2023-03-31T18:37:54.581099Z",
  • "updated_at": "2023-03-31T18:37:54.581099Z",
  • "project_id": "fa84c217f361441986a220edf9b1e337"
}

Remove an existing endpoint

Authorizations:
X-Auth-TokenNone
path Parameters
endpoint_id
required
string <uuid>

The UUID of the endpoint

Responses

Response samples

Content type
application/json
{
  • "code": 0,
  • "message": "string"
}

RBAC

RBAC Policies

RBAC Policies are used to provide service visibility to specific project or domains.

List RBAC policies

Authorizations:
X-Auth-TokenNone
query Parameters
marker
string <uuid>

Pagination ID of the last item in the previous list.

limit
integer

Sets the page size.

sort
string

Comma-separated list of sort keys, optionally prefix with - to reverse sort order.

page_reverse
boolean

Sets the page direction.

Responses

Response samples

Content type
application/json
{
  • "links": [
    ],
  • "items": [
    ]
}

Create RBAC policy

Authorizations:
X-Auth-TokenNone
Request Body schema: application/json
required

RBAC Policy

target_type
string
Default: "project"
Value: "project"
target
string

The ID of the project to which the RBAC policy will be enforced.

service_id
required
string <uuid>

The ID of the service resource.

project_id
string (Project) = 32 characters

The ID of the project owning this resource.

Responses

Request samples

Content type
application/json
{
  • "target_type": "project",
  • "target": "666da95112694b37b3efb0913de3f499",
  • "service_id": "641e839f-864e-4cce-98f9-40f6cbb3e9e0",
  • "project_id": "fa84c217f361441986a220edf9b1e337"
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "target_type": "project",
  • "target": "666da95112694b37b3efb0913de3f499",
  • "service_id": "641e839f-864e-4cce-98f9-40f6cbb3e9e0",
  • "created_at": "2023-03-31T18:37:54.581099Z",
  • "updated_at": "2023-03-31T18:37:54.581099Z",
  • "project_id": "fa84c217f361441986a220edf9b1e337"
}

Show details of an RBAC policy

Authorizations:
X-Auth-TokenNone
path Parameters
rbac_policy_id
required
string <uuid>

The UUID of the RBAC policy.

Responses

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "target_type": "project",
  • "target": "666da95112694b37b3efb0913de3f499",
  • "service_id": "641e839f-864e-4cce-98f9-40f6cbb3e9e0",
  • "created_at": "2023-03-31T18:37:54.581099Z",
  • "updated_at": "2023-03-31T18:37:54.581099Z",
  • "project_id": "fa84c217f361441986a220edf9b1e337"
}

Update an existing RBAC policy

Authorizations:
X-Auth-TokenNone
path Parameters
rbac_policy_id
required
string <uuid>

The UUID of the RBAC policy.

Request Body schema: application/json
required

RBAC policy resource that needs to be updated

target_type
string
Default: "project"
Value: "project"
target
required
string

The ID of the project to which the RBAC policy will be enforced.

project_id
string (Project) = 32 characters

The ID of the project owning this resource.

Responses

Request samples

Content type
application/json
{
  • "target_type": "project",
  • "target": "666da95112694b37b3efb0913de3f499",
  • "project_id": "fa84c217f361441986a220edf9b1e337"
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "target_type": "project",
  • "target": "666da95112694b37b3efb0913de3f499",
  • "service_id": "641e839f-864e-4cce-98f9-40f6cbb3e9e0",
  • "created_at": "2023-03-31T18:37:54.581099Z",
  • "updated_at": "2023-03-31T18:37:54.581099Z",
  • "project_id": "fa84c217f361441986a220edf9b1e337"
}

Delete RBAC policy

Authorizations:
X-Auth-TokenNone
path Parameters
rbac_policy_id
required
string <uuid>

The UUID of the RBAC policy.

Responses

Response samples

Content type
application/json
{
  • "code": 0,
  • "message": "string"
}

Quota

Quota Operations

Administrative API for listing and setting quotas for services and endpoints.

List Quotas

Authorizations:
X-Auth-TokenNone
query Parameters
project_id
string = 32 characters

The ID of the project to query.

Responses

Response samples

Content type
application/json
{
  • "quotas": [
    ],
  • "links": [
    ]
}

Show Quota Defaults

Authorizations:
X-Auth-TokenNone

Responses

Response samples

Content type
application/json
{
  • "quota": {
    }
}

Show Quota detail

Authorizations:
X-Auth-TokenNone
path Parameters
project_id
required
string

The ID of the project to query.

Responses

Response samples

Content type
application/json
{
  • "service": 5,
  • "endpoint": 5,
  • "in_use_service": 5,
  • "in_use_endpoint": 5
}

Update Quota

Authorizations:
X-Auth-TokenNone
path Parameters
project_id
required
string

The ID of the project to query.

Request Body schema: application/json
required
service
integer <int64> >= -1

The configured service quota limit. A setting of null means it is using the deployment default quota. A setting of -1 means unlimited.

endpoint
integer <int64> >= -1

The configured endpoint quota limit. A setting of null means it is using the deployment default quota. A setting of -1 means unlimited.

Responses

Request samples

Content type
application/json
{
  • "service": 5,
  • "endpoint": 5
}

Response samples

Content type
application/json
{
  • "service": 5,
  • "endpoint": 5
}

Reset all Quota of a project

Authorizations:
X-Auth-TokenNone
path Parameters
project_id
required
string

The ID of the project to query.

Responses

Response samples

Content type
application/json
{
  • "code": 0,
  • "message": "string"
}