Files
artifactapi/docs/ansible/virtual.md
T
unkin-agent 0cfde41612
ci/woodpecker/tag/docker Pipeline was successful
Add ansible virtual repositories (#158)
Clients need one Galaxy server to install both internal collections and galaxy.ansible.com ones; ansible has no virtual type.

- merge member collection version lists in member order, the earlier member winning a duplicate version, cached with the shared virtual merge cache
- paginate limit/offset over the merged list, following remote member pages
- serve version detail from the owning member with href and download_url via the virtual; downloads 302 to the member through the member-redirect validation
- fail closed with 502 on a member error or a member versions list shorter than its count
- add docs/ansible/virtual.md and an e2e-docker case driving real ansible-galaxy

requires unkin/artifactapi#157

Reviewed-on: #158
Co-authored-by: unkin-agent <unkin-agent@unkin.net>
Co-committed-by: unkin-agent <unkin-agent@unkin.net>
2026-10-18 18:09:08 +11:00

1.0 KiB

ansible virtual

An ansible virtual serves one Galaxy v3 API over local and remote ansible members: ansible-galaxy collection install works against /api/v1/virtual/<name>/.

  • versions/ concatenates member version lists in member order; on a duplicate version the earlier member wins. Pagination (limit up to 100, offset) runs over the merged list.
  • versions/<version>/ is the owning member's detail with href and download_url pointing at the virtual; the download 302s to that member.
  • A member error fails the request with 502; a member without the collection is skipped. Merges are cached for 60s.
resource "artifactapi_virtual" "ansible" {
  name         = "ansible"
  package_type = "ansible"
  members      = [artifactapi_local_ansible.internal.name, artifactapi_remote_ansible.galaxy.name]
}
ansible-galaxy collection install unkin.hello community.general \
  --server https://artifactapi.example.com/api/v1/virtual/ansible/

Publish to the local member directly; the virtual is read-only.