A Pulp plugin to support hosting your very own Ansible Galaxy server.
Our mission is to help organizations share Ansible automation and promote a culture of collaboration around Ansible automation development. We'll be providing features that make it easy to create, discover, use and distribute Ansible automation content.
- Framework: Django + Django REST Framework, running as a Pulp plugin
- Async Tasks: Pulp tasking system (RQ workers with resource locking)
- Database: PostgreSQL
- Configuration: Dynaconf (settings loaded from multiple sources with
PULP_env var prefix) - Access Control: Dual RBAC system (legacy Pulp access policies + django-ansible-base DAB RBAC)
To learn more about Pulp, view the Pulp project page.
galaxy_ng/
app/
models/ # Galaxy-native models (Namespace, User, Organization, etc.)
api/
v1/ # Legacy roles API
v3/ # Main Galaxy API (collections, namespaces, EE, tasks)
ui/v1/, ui/v2/ # UI-optimized endpoints
access_control/ # Access policies and RBAC statements
tasks/ # Async Pulp tasks (publishing, signing, sync, etc.)
auth/ # Authentication backends
settings.py # Settings fragment (merged via Dynaconf)
dynaconf_hooks.py # Post-load conditional settings
tests/
unit/ # Unit tests (real DB, DRF APIClient)
integration/ # Integration tests (require running compose stack)
For the full structure and architectural details, see AGENTS.md.
Project documentation is hosted on Read The Docs.
View the latest version of the spec at https://galaxy.ansible.com/api/v3/swagger-ui/. (Directlink to JSON or YAML)
This repository provides a static, curated OpenAPI specification (galaxy.json) that contains user-facing endpoints with AI-friendly metadata.
The static spec differs from the dynamically generated spec above in that it:
- Includes only user-facing endpoints (87 paths vs. 559 in the full spec)
- Contains
x-ai-descriptionfields for AI/MCP tool integration - Serves as the source of truth for Hub's API specification in AAP
This project uses both SonarCloud and Codecov for code coverage tracking:
- Public Coverage: Available at SonarCloud
- Badge Integration: Coverage metrics displayed in README badges above
- Configuration: Managed through
sonar-project.properties
- Purpose: Internal coverage tracking
- Coverage Configuration:
codecov.yml(aligned withsonar-project.propertiesexclusions) - CI Integration: Coverage uploads automatically on main branch pushes
- Flags:
unit-testsflag tracks unit test coverage separately
Refer to the Communication section of the Contributor Guide to find out how to get in touch with us.
You can also find more information in the Ansible communication guide.
This repository includes structured guidance for AI coding agents in AGENTS.md, covering architecture, conventions, and common pitfalls. Domain-specific guidelines live in docs/:
| Guide | Topics |
|---|---|
| Security | Access policies, RBAC, authentication, input validation |
| API Contracts | API versions, viewsets, serializers, backward compatibility |
| Database | Model patterns, migrations, query conventions |
| Error Handling | Exception handler, ValidationError usage, logging |
| Performance | Task dispatch, resource locking, query optimization |
| Testing | Unit/integration test structure, fixtures, markers |
| Integration | Pulp tasks, signal handlers, external services |
- If you're interested in jumping in and helping out, view the contributing guide.
- To setup your development environment, view the development setup guide.
- Found a bug or have a feature idea? Please open an issue.
$ docker compose -f dev/compose/standalone.yaml upPlease see the official Ansible Community Code of Conduct.
GNU General Public License v2. View LICENSE for full text.