{"id":19096524,"url":"https://github.com/sapcc/archer","last_synced_at":"2026-04-16T23:01:42.759Z","repository":{"id":181879797,"uuid":"617503388","full_name":"sapcc/archer","owner":"sapcc","description":"CCloud Endpoint Service","archived":false,"fork":false,"pushed_at":"2026-04-14T13:26:18.000Z","size":2627,"stargazers_count":5,"open_issues_count":10,"forks_count":6,"subscribers_count":34,"default_branch":"main","last_synced_at":"2026-04-14T13:33:04.245Z","etag":null,"topics":["cloud","golang","networking","openstack"],"latest_commit_sha":null,"homepage":"https://sapcc.github.io/archer/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sapcc.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":"COPYRIGHT.txt","agents":null,"dco":null,"cla":null}},"created_at":"2023-03-22T14:25:52.000Z","updated_at":"2026-04-14T13:26:22.000Z","dependencies_parsed_at":"2026-02-13T22:06:15.280Z","dependency_job_id":null,"html_url":"https://github.com/sapcc/archer","commit_stats":null,"previous_names":["sapcc/archer"],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/sapcc/archer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sapcc%2Farcher","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sapcc%2Farcher/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sapcc%2Farcher/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sapcc%2Farcher/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sapcc","download_url":"https://codeload.github.com/sapcc/archer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sapcc%2Farcher/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31907720,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T18:22:33.417Z","status":"ssl_error","status_checked_at":"2026-04-16T18:21:47.142Z","response_time":69,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloud","golang","networking","openstack"],"created_at":"2024-11-09T03:36:57.590Z","updated_at":"2026-04-16T23:01:42.680Z","avatar_url":"https://github.com/sapcc.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!--\nSPDX-FileCopyrightText: Copyright 2025 SAP SE or an SAP affiliate company\n\nSPDX-License-Identifier: Apache-2.0\n--\u003e\n\n# Archer - CCloud Endpoint Service [![Go Reference](https://pkg.go.dev/badge/github.com/sapcc/archer.svg)](https://pkg.go.dev/github.com/sapcc/archer) [![Swagger](https://img.shields.io/badge/Swagger-UI-brightgreen)](https://sapcc.github.io/archer/) [![Go Report Card](https://goreportcard.com/badge/github.com/sapcc/archer)](https://goreportcard.com/report/github.com/sapcc/archer) [![Checks](https://github.com/sapcc/archer/actions/workflows/checks.yaml/badge.svg)](https://github.com/sapcc/archer/actions/workflows/checks.yaml) [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\nArcher is an API service that can privately connect services from one private [OpenStack Network](https://docs.openstack.org/neutron/latest/admin/intro-os-networking.html) 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.\n\nArcher implements an *OpenStack* like API and integrates with *OpenStack Keystone* and *OpenStack Neutron*.\n\n## Architecture\nThere are two types of resources: **services** and **endpoints**\n\n* **Services** are private or public services that are manually configured in *Archer*. They can be accessed by creating an endpoint.\n* **Service endpoints**, or short **endpoints**, are IP endpoints in a local network used to transparently access services residing in different private networks.\n\n### Features\n* Multi-tenant capable via OpenStack Identity service\n* OpenStack `policy.json` access policy support\n* Prometheus Exporter\n* Rate limiting\n* CORS\n* CADF compatible audit tracing\n* Sentry support\n* CLI Client `archerctl`\n\n### Supported Backends\n* F5 BigIP\n* Network Injection agent (together with `openvswitch-agent` or `linuxbridge-agent`)\n\n### Requirements\n* PostgreSQL Database\n* OpenStack Keystone\n* OpenStack Neutron\n\n## CLI Client\n`archerctl` provides a OpenStack-like CLI client for interacting with the Archer API Service. It supports common OpenStack environment setting as set by the OpenStack RC File.\n\n```sh\n# archerctl --help\nUsage:\n  archerctl [OPTIONS] \u003ccommand\u003e\n\nApplication Options:\n      --debug                                  Show verbose debug information\n      --os-endpoint=                           The endpoint that will always be used [$OS_ENDPOINT]\n      --os-auth-url=                           Authentication URL [$OS_AUTH_URL]\n      --os-token=                              Authentication token [$OS_TOKEN]\n      --os-password=                           User's password to use with [$OS_PASSWORD]\n      --os-username=                           User's username to use with [$OS_USERNAME]\n      --os-project-domain-name=                Domain name containing project [$OS_PROJECT_DOMAIN_NAME]\n      --os-project-name=                       Project name to scope to [$OS_PROJECT_NAME]\n      --os-region-name=                        Authentication region name [$OS_REGION_NAME]\n      --os-user-domain-name=                   User's domain name [$OS_USER_DOMAIN_NAME]\n      --os-pw-cmd=                             Derive user's password from command [$OS_PW_CMD]\n\nOutput formatters:\n  -f, --format=[table|csv|markdown|html|value] The output format, defaults to table (default: table)\n  -c, --column=                                specify the column(s) to include, can be repeated to show multiple columns\n      --sort-column=                           specify the column(s) to sort the data (columns specified first have a priority, non-existing columns are ignored), can be repeated\n      --long                                   Show all columns in output\n      --no-color                               Disable colorized output for tables [$NO_COLOR]\n\nHelp Options:\n  -h, --help                                   Show this help message\n\nAvailable commands:\n  endpoint  Endpoints\n  quota     Quotas\n  rbac      RBACs\n  service   Services\n  version   Version\n```\n\n\n#### Example\n```sh\n# archerctl service list\n+--------------------------------------+------+------+---------+----------+-----------+-------------------+\n| ID                                   | NAME | PORT | ENABLED | PROVIDER | STATUS    | AVAILABILITY_ZONE |\n+--------------------------------------+------+------+---------+----------+-----------+-------------------+\n| 3c8ab870-a409-46f2-b19a-f5672e793705 | test | 80   | true    | tenant   | AVAILABLE |                   |\n+--------------------------------------+------+------+---------+----------+-----------+-------------------+\n```\n\n#### Colorized Output\nThe CLI provides colorized output by default when connected to an interactive terminal. Colors help distinguish between different states and values:\n\n* **Green**: Active states (`true`, `enabled`, `active`, `available`, `success`, `accepted`)\n* **Red**: Inactive or error states (`false`, `disabled`, `inactive`, `error`, `failed`, `rejected`)\n* **Yellow**: Pending states (`pending`, `processing`, `waiting`)\n* **Cyan**: Headers, status values, and names\n* **Gray**: IDs, project IDs, and null values\n\nColors are automatically disabled when:\n* Output is piped or redirected (e.g., `archerctl service list | less`)\n* `NO_COLOR` environment variable is set\n* `TERM` is set to `dumb`\n* Using non-table output formats (`--format=csv`, `--format=markdown`, etc.)\n\nTo explicitly disable colors, use the `--no-color` flag:\n```sh\n# Disable colorized output\narcherctl service list --no-color\n\n# Or via environment variable\nNO_COLOR=1 archerctl service list\n```\n\n\n## API\nThis section describes properties of the Archer API. It uses a ReSTful HTTP API.\n\n#### Request format\nThe 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`.\n\n#### Response format\nThe Archer API always response with JSON data serialization format. The Content-Type header is always `Content-Type: application/json`.\n\n#### Authentication and authorization\nThe **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.\nYou obtain the token by authenticating to the Keystone endpoint.\n\nWhen Keystone is enabled, the `project_id` attribute is not required in create requests because the project ID is derived from the authentication token.\n\n#### Pagination\nTo 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:\n\n```\n?limit=100\u0026marker=1234\u0026page_reverse=False\n```\n\nThe `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.\nThese parameters are optional.\nIf the client requests a limit beyond the maximum limit configured by the deployment, the server returns the maximum limit number of items.\n\nFor 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.\n\nTo determine if pagination is supported, a user can check whether the `pagination` capability is available through the Archer API detail endpoint.\n\n#### Sorting\nYou can use the `sort` parameter to sort the results of list operations.\nThe 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).\n\nFor example:\n\n```\n?sort=key1,-key2,key3\n```\n\n**key1** is the first key (ascending order), **key2** is the second key (descending order) and **key3** is the third key in ascending order.\n\n\nTo determine if sorting is supported, a user can check whether the `sort` capability is available through the Archer API detail endpoint.\n\n#### Filtering by tags\nMost 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:\n\n* `tags` - Return the list of entities that have this tag or tags.\n* `tags-any` - Return the list of entities that have one or more of the given tags.\n* `not-tags` - Return the list of entities that do not have one or more of the given tags.\n* `not-tags-any` - Return the list of entities that do not have at least one of the given tags.\n\nEach tag supports a maximum amount of 64 characters.\n\nFor example to get a list of resources having both, **red** and **blue** tags:\n\n```\n?tags=red,blue\n```\n\nTo get a list of resourcing having either, **red** or **blue** tags:\n\n```\n?tags-any=red,blue\n```\n\nTag filters can also be combined in the same request:\n\n```\n?tags=red,blue\u0026tags-any=green,orange\n```\n\n#### Response Codes (Faults)\n\n| Code | Description                                                                                    |\n|------|------------------------------------------------------------------------------------------------|\n| 400  | Validation Error                                                                               |\n| 401  | Unauthorized                                                                                   |\n| 403  | Policy does not allow current user to do this \u003cbr\u003e The project is over quota for the request   |\n| 404  | Not Found \u003cbr\u003e Resource not found                                                              |\n| 409  | Conflict                                                                                       |\n| 429  | You have reached maximum request limit                                                         |\n| 500  | Internal server error                                                                          |\n\n## Support, Feedback, Contributing\n\nThis project is open to feature requests/suggestions, bug reports etc. via [GitHub issues](https://docs.github.com/en/issues/tracking-your-work-with-issues/using-issues/creating-an-issue). Contribution and feedback are encouraged and always welcome. For more information about how to contribute, the project structure, as well as additional contribution information, see our [Contribution Guidelines](https://github.com/SAP-cloud-infrastructure/.github/blob/main/CONTRIBUTING.md).\n\n## Security / Disclosure\n\nIf you find any bug that may be a security problem, please follow our instructions [in our security policy](https://github.com/SAP-cloud-infrastructure/.github/blob/main/SECURITY.md) on how to report it. Please do not create GitHub issues for security-related doubts or problems.\n\n## Code of Conduct\n\nWe as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone. By participating in this project, you agree to abide by its [Code of Conduct](https://github.com/SAP-cloud-infrastructure/.github/blob/main/CODE_OF_CONDUCT.md) at all times.\n\n## Licensing\n\nCopyright 2023-2025 SAP SE or an SAP affiliate company and archer contributors. Please see our [LICENSE](./LICENSE) for copyright and license information. Detailed information including third-party components and their licensing/copyright information is available [via the REUSE tool](https://api.reuse.software/info/github.com/sapcc/archer).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsapcc%2Farcher","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsapcc%2Farcher","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsapcc%2Farcher/lists"}