a00e45c3a7
Internal Ansible collections can only be installed from galaxy.ansible.com through the remote; there is nowhere to publish them for ansible-galaxy. - add the Galaxy v3 publish endpoint (multipart, base64 parts) with an import task that is already completed - read collection_info from MANIFEST.json under size and decompression caps, rejecting escaping paths and links - serve collection, paginated versions (root-relative links, as Galaxy does), version detail and artifact downloads - reject an existing namespace.name:version with 409 - add docs/ansible/local.md, a UI snippet and an e2e-docker case driving real ansible-galaxy requires unkin/artifactapi#137 Reviewed-on: #157 Co-authored-by: unkin-agent <unkin-agent@unkin.net> Co-committed-by: unkin-agent <unkin-agent@unkin.net>
27 lines
1.2 KiB
Markdown
27 lines
1.2 KiB
Markdown
# Local ansible repository
|
|
|
|
A local `ansible` repo is a Galaxy v3 server: `ansible-galaxy collection publish`
|
|
and `ansible-galaxy collection install` work against `/api/v1/local/<repo>`.
|
|
`publish` needs an API key; any value works.
|
|
|
|
```bash
|
|
ansible-galaxy collection build
|
|
ansible-galaxy collection publish unkin-hello-1.0.0.tar.gz \
|
|
--server https://artifactapi.example.com/api/v1/local/<repo>/ --api-key unused
|
|
ansible-galaxy collection install unkin.hello \
|
|
--server https://artifactapi.example.com/api/v1/local/<repo>/
|
|
```
|
|
|
|
Publishing reads `collection_info` from the tarball's `MANIFEST.json` and
|
|
finishes the import synchronously, so the import task is already `completed`.
|
|
Uploads over 256 MiB, tarballs with members or symlinks escaping the collection root, or
|
|
with an invalid name, version or dependency map are rejected with 400.
|
|
|
|
The repo serves `api/v3/collections/<ns>/<name>/`, the paginated
|
|
`versions/` list (`limit` up to 100, `offset`), `versions/<version>/` with
|
|
`download_url`, `artifact.sha256` and `metadata.dependencies`, and
|
|
`artifacts/<ns>-<name>-<version>.tar.gz`.
|
|
|
|
Versions are immutable: publishing an existing `namespace.name:version` is
|
|
rejected with 409.
|