Replies: 1 comment
|
Answers to the open questions (owner, 2026-11-05):
With these settled, the next step is the ADR-0034 amendment and the plan update, then migration step 1. The "Not yet verified" item about inventory updates seeing project-installed collections gets tested before migration step 4, as the RFC says. |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Proposes: an amendment to ADR-0034
Tracks: dmfdeploy/dmfdeploy#443
Summary
ADR-0034 bans public Galaxy at runtime. Today the ban holds only because the AWX execution environment (EE) image carries the collections. This RFC proposes that AWX project sync resolves runtime collections from git mirrors in the platform's own Forgejo, pinned by tag or commit. The EE keeps only the collections the bootstrap path needs before Forgejo and AWX exist. The same mirror mechanic can serve the next dependency type.
Context
ADR-0034 decided four things: the Organization Galaxy credentials are internal or empty, the internal source is a Forgejo git mirror, collections are baked into the EE, and
collections/requirements.ymlstays declarative and pinned. It deferred Zot-OCI. The accepted ADR calls the EE bake an interim step and says an opaque EE is not the permanent shape.The baked image is the weakness of that interim fix:
requirements.ymlin the project no longer lists what runs. The awx-integration role pushescollections: []to match the image.Issue #443 shows the cost of the original problem. A public Galaxy outage failed a workload launch while nothing else changed.
Proposal
Split the collections by when they are needed.
Mirror naming. Each collection gets a Forgejo repo named
mirrors/<namespace>.<name>, filled by Forgejo's pull-mirror feature from the upstream source.Pinning.
requirements.ymlreferences the mirror as a git source:Use a full commit SHA when you need a pin that a tag move cannot change.
How
requirements.ymlchanges. The awx-integration role renders the list from one variable instead of the empty list it pushes today. Each entry holds a name, an upstream URL, and a pin. The remaining runtime entries are listed in the table below.Galaxy credentials. The default organization carries no Galaxy credential, or only an internal one. The role sets this explicitly and a check asserts it.
One reusable mechanic. One list variable, for example
dmf_dependency_mirrors, drives both the Forgejo mirror creation and the rendered requirements file. Each entry has akind(collectiontoday). To add a dependency, add one entry. A new dependency type adds a newkindand a renderer for it, not a new mechanism.Zot-OCI stays deferred, as ADR-0034 says.
Collection sets
The classification comes from the playbooks that dmf-init runs (the
bootstrap-sandbox-*wrappers in dmf-infra), the launcher playbooks in dmf-runbooks, and the awx-integration role.kubernetes.coreroles/base/cert-manager/tasks/main.yml:37; dmf-runbooksplaybooks/launch-nmos-cpp.yml:165community.generalroles/base/audit-log-archival/tasks/main.yml:53(ini_file);roles/stack/operator/awx-integration/tasks/main.yml:39(random_string)ansible.posixroles/base/harden/tasks/main.yml:30(authorized_key)netbox.netboxroles/stack/operator/awx-integration/tasks/main.yml:772(nb_inventory, AWX inventory source)community.dockeree/requirements.yml:26-29cites playbook 630, but 630 copies images withskopeo; nocommunity.dockercall exists in dmf-infra, dmf-media, or dmf-runbooksThe bootstrap trio matches dmf-init's own
requirements-collections.yml:17-22.Consequences and trade-offs
requirements.ymlin the project lists what a job runs.project_updatefails with a git clone or version error that names the mirror URL. Today an outage fails the sync with an HTTP 502 from a third party. The new message points at a platform-owned repo you can fix.What the release gate checks
The gate asserts that no runtime resolves from public Galaxy and that the EE image holds only the bootstrap set. It checks:
requirements.ymlis atype: gitsource on the platform's Forgejo, with a tag or SHA pin.ansible-galaxy collection listinside the published EE image shows only the bootstrap set.galaxy.ansible.comblocked, a freshproject_updateand one catalog launch succeed.Checks 1 to 3 are static. Check 4 runs on the sandbox profile (ADR-0031).
Migration steps
Each step is one PR.
dmf_dependency_mirrorsvariable and the mirror-creation task forkind: collection.collections/requirements.ymlfrom the variable, withnetbox.netboxas the first entry.netbox.netboxandcommunity.dockerfromee/requirements.yml; rebuild and publish the EE.Alternatives considered
ansible-galaxyper sync.ansible-galaxyOCI support is not first-class. Revisit when it is.Open questions
kubernetes.corefor the launchers?scm_update_on_launch), as ADR-0034 asks us to reconsider?Not yet verified
netbox.netboxcannot leave the EE. Test this before migration step 4.All reactions