0cfde41612
ci/woodpecker/tag/docker Pipeline was successful
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>
29 lines
1.0 KiB
Markdown
29 lines
1.0 KiB
Markdown
# `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.
|
|
|
|
```hcl
|
|
resource "artifactapi_virtual" "ansible" {
|
|
name = "ansible"
|
|
package_type = "ansible"
|
|
members = [artifactapi_local_ansible.internal.name, artifactapi_remote_ansible.galaxy.name]
|
|
}
|
|
```
|
|
|
|
```bash
|
|
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.
|