Container image virtual registry: manage APIs (registries and upstreams)
## :notepad_spiral: Problem statement
In virtual registries, we usually have two set of APIs:
1. APIs to manage the virtual registry objects. This issue deals with this part.
1. APIs for the clients, `$ docker`, so that they can pull files through the virtual registry.
**NOTE**:
- Cache entries API endpoints are in https://gitlab.com/gitlab-org/gitlab/-/issues/569403
- Registry upstreams API endpoints are in https://gitlab.com/gitlab-org/gitlab/-/issues/573284
## :one: Registries
| Route | Notes |
| ------ | ------ |
| GET /groups/:id/-/virtual_registries/containers/registries | List virtual registries for the given top level group |
| POST /groups/:id/-/virtual_registries/containers/registries | Create a new virtual registry |
| GET /virtual_registries/containers/registries/:id | Get the details of the virtual registry |
| PATCH /virtual_registries/containers/registries/:id | Update a virtual registry |
| DELETE /virtual_registries/containers/registries/:id | Delete a virtual registry |
## :two: Upstreams
| Route | Notes |
| ------ | ------ |
| GET /virtual_registries/containers/registries/:id/upstreams | Get the upstreams of a given registry |
| POST /virtual_registries/containers/registries/:id/upstreams | Create an upstream for a given registry |
| GET /virtual_registries/containers/upstreams/:id | Get the upstream details |
| PATCH /virtual_registries/containers/upstreams/:id | Update the upstream details |
| DELETE /virtual_registries/containers/upstreams/:id | Delete an upstream |
## :crystal_ball: Other considerations
Use a ~"feature flag"
## :tools: Implementation plan
* https://gitlab.com/gitlab-org/gitlab/-/issues/548783+s
* https://gitlab.com/gitlab-org/gitlab/-/issues/549103+s
* https://gitlab.com/gitlab-org/gitlab/-/issues/549104+s
* https://gitlab.com/gitlab-org/gitlab/-/issues/549134+s
* https://gitlab.com/gitlab-org/gitlab/-/issues/548794+s :point_left:
* https://gitlab.com/gitlab-org/gitlab/-/issues/549131+s
* https://gitlab.com/gitlab-org/gitlab/-/issues/549136+s
* https://gitlab.com/gitlab-org/gitlab/-/issues/549138+s
* https://gitlab.com/gitlab-org/gitlab/-/issues/549470+s
issue