Files
artifactapi/docs/ansible/local.md
T
unkin-agent a00e45c3a7 Add local ansible Galaxy repositories (#157)
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>
2026-10-18 18:01:09 +11:00

1.2 KiB

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.

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.