restapi

package
v2.5.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 10, 2026 License: Apache-2.0 Imports: 50 Imported by: 0

Documentation

Overview

Package restapi 🏹 Archer

# Documentation
Archer is an OpenStack-style API service that privately connects services across [OpenStack Networks](https://docs.openstack.org/neutron/latest/admin/intro-os-networking.html). Consumers pick a *service* from a catalog and **inject** it into their own network — the service becomes reachable through a private IP, without exposing either network to the other.

Archer integrates with *OpenStack Keystone* for authentication and *OpenStack Neutron* for network and port management.

### Concepts
Archer exposes two resource types:

* **Services** — private or public services registered in Archer. They are reached by creating an endpoint.
* **Endpoints** — IP endpoints in a local network that transparently forward to a service living in another private network.

### Features
* Multi-tenant via OpenStack Identity
* OpenStack `policy.json` access policies
* Prometheus exporter
* Rate limiting and CORS
* CADF-compatible audit trail
* Sentry error reporting
* OpenStack-style CLI client (`archerctl`)

### Supported Backends
* **F5 BigIP** — provisioned via the `archer-f5-agent`
* **Network Injection** — the `archer-ni-agent`, using HAProxy inside Linux network namespaces; works alongside `openvswitch-agent` or `linuxbridge-agent`

### Requirements
* PostgreSQL
* OpenStack Keystone
* OpenStack Neutron

## API properties
Archer exposes a RESTful HTTP API.

#### Request / Response format
Requests and responses use JSON. `POST` requests must set `Content-Type: application/json`; responses always come back with `Content-Type: application/json`.

#### Authentication
Archer uses OpenStack Keystone. Requests must include a Keystone token in the `X-Auth-Token` header. Because the project ID is derived from the token, `project_id` is not required on create requests.

#### Pagination
List operations return a bounded number of items. Navigate the collection with URI parameters:

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

* `marker` — the ID of the last item from the previous page
* `limit` — page size (clamped to the deployment maximum)
* `page_reverse` — reverse pagination direction

Responses include atom `next` and `previous` links. The final forward page has no `next`; the final reverse page has no `previous`. Deployments advertise pagination support through the `pagination` capability on the API detail endpoint.

#### Sorting
Use `sort` with a comma-separated list of keys, in priority order. Prefix a key with `-` to sort descending:

```
?sort=key1,-key2,key3
```

Sort support is advertised through the `sort` capability on the API detail endpoint.

#### Filtering by tags
Most resources (services, endpoints, …) accept tags. Archer supports four tag filters on list operations:

* `tags` — entities that have **all** the given tags
* `tags-any` — entities that have **any** of the given tags
* `not-tags` — entities that do **not** have all of the given tags
* `not-tags-any` — entities that do **not** have any of the given tags

Each tag is limited to 64 characters. Filters can be combined:

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

#### Response Codes (Faults)

| Code  | Description       |
| ----- | ----------------- |
| 400   | Validation error |
| 401   | Unauthorized |
| 403   | Policy denies the action, or the project is over quota |
| 404   | Resource not found |
| 409   | Conflict |
| 422   | Unprocessable Entity |
| 429   | Rate limit exceeded |
| 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                                     |

Schemes:
  http
  https
Host: localhost
BasePath: /
Version: 2.5.2
License: Apache 2.0 https://www.apache.org/licenses/LICENSE-2.0.html
Contact: SAP SE / Converged Cloud https://sap.com

Consumes:
  - application/json

Produces:
  - application/json

swagger:meta

Index

Constants

This section is empty.

Variables

View Source
var (
	// SwaggerJSON embedded version of the swagger document used at generation time
	SwaggerJSON json.RawMessage
	// FlatSwaggerJSON embedded flattened version of the swagger document used at generation time
	FlatSwaggerJSON json.RawMessage
)
View Source
var (
	// SwaggerSpec make parsed swaggerspec available globally
	SwaggerSpec *loads.Document
)

Functions

This section is empty.

Types

type Server

type Server struct {
	EnabledListeners []string         `long:"scheme" description:"the listeners to enable, this can be repeated and defaults to the schemes in the swagger spec"`
	CleanupTimeout   time.Duration    `long:"cleanup-timeout" description:"grace period for which to wait before killing idle connections" default:"10s"`
	GracefulTimeout  time.Duration    `long:"graceful-timeout" description:"grace period for which to wait before shutting down the server" default:"15s"`
	MaxHeaderSize    flagext.ByteSize `` /* 231-byte string literal not displayed */

	SocketPath flags.Filename `long:"socket-path" description:"the unix socket to listen on" default:"/var/run/archer.sock"`

	Host         string        `long:"host" description:"the IP to listen on" default:"localhost" env:"HOST"`
	Port         int           `long:"port" description:"the port to listen on for insecure connections, defaults to a random value" env:"PORT"`
	ListenLimit  int           `long:"listen-limit" description:"limit the number of outstanding requests"`
	KeepAlive    time.Duration `` /* 169-byte string literal not displayed */
	ReadTimeout  time.Duration `long:"read-timeout" description:"maximum duration before timing out read of the request" default:"30s"`
	WriteTimeout time.Duration `long:"write-timeout" description:"maximum duration before timing out write of the response" default:"30s"`

	TLSHost           string         `long:"tls-host" description:"the IP to listen on for tls, when not specified it's the same as --host" env:"TLS_HOST"`
	TLSPort           int            `long:"tls-port" description:"the port to listen on for secure connections, defaults to a random value" env:"TLS_PORT"`
	TLSCertificate    flags.Filename `long:"tls-certificate" description:"the certificate to use for secure connections" env:"TLS_CERTIFICATE"`
	TLSCertificateKey flags.Filename `long:"tls-key" description:"the private key to use for secure connections" env:"TLS_PRIVATE_KEY"`
	TLSCACertificate  flags.Filename `long:"tls-ca" description:"the certificate authority file to be used with mutual tls auth" env:"TLS_CA_CERTIFICATE"`
	TLSListenLimit    int            `long:"tls-listen-limit" description:"limit the number of outstanding requests"`
	TLSKeepAlive      time.Duration  `` /* 160-byte string literal not displayed */
	TLSReadTimeout    time.Duration  `long:"tls-read-timeout" description:"maximum duration before timing out read of the request"`
	TLSWriteTimeout   time.Duration  `long:"tls-write-timeout" description:"maximum duration before timing out write of the response"`
	// contains filtered or unexported fields
}

Server for the archer API

func NewServer

func NewServer(api *operations.ArcherAPI) *Server

NewServer creates a new api archer server but does not configure it

func (*Server) ConfigureAPI

func (s *Server) ConfigureAPI()

ConfigureAPI configures the API and handlers.

func (*Server) ConfigureFlags

func (s *Server) ConfigureFlags()

ConfigureFlags configures the additional flags defined by the handlers. Needs to be called before the parser.Parse

func (*Server) Fatalf

func (s *Server) Fatalf(f string, args ...any)

Fatalf logs message either via defined user logger or via system one if no user logger is defined. Exits with non-zero status after printing

func (*Server) GetHandler

func (s *Server) GetHandler() http.Handler

GetHandler returns a handler useful for testing

func (*Server) HTTPListener

func (s *Server) HTTPListener() (net.Listener, error)

HTTPListener returns the http listener

func (*Server) Listen

func (s *Server) Listen() error

Listen creates the listeners for the server

func (*Server) Logf

func (s *Server) Logf(f string, args ...any)

Logf logs message either via defined user logger or via system one if no user logger is defined.

func (*Server) Serve

func (s *Server) Serve() (err error)

Serve the api

func (*Server) SetAPI

func (s *Server) SetAPI(api *operations.ArcherAPI)

SetAPI configures the server with the specified API. Needs to be called before Serve

func (*Server) SetHandler

func (s *Server) SetHandler(handler http.Handler)

SetHandler allows for setting a http handler on this server

func (*Server) Shutdown

func (s *Server) Shutdown() error

Shutdown server and clean up resources

func (*Server) TLSListener

func (s *Server) TLSListener() (net.Listener, error)

TLSListener returns the https listener

func (*Server) UnixListener

func (s *Server) UnixListener() (net.Listener, error)

UnixListener returns the domain socket listener

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL