Skip to content

feat(umbrella): typed spec.componentValues - configure any component through the umbrella#30

Merged
braghettos merged 1 commit into
mainfrom
feat/umbrella-componentvalues
Jun 11, 2026
Merged

feat(umbrella): typed spec.componentValues - configure any component through the umbrella#30
braghettos merged 1 commit into
mainfrom
feat/umbrella-componentvalues

Conversation

@braghettos

Copy link
Copy Markdown
Owner

Problem (raised by @braghettos): the umbrella emitted every component with a hardcoded spec: {}, so you could not configure a component when deploying via the Openstack Composition — only by dropping to a standalone per-component Composition.

Fix: spec.componentValues — a map keyed by component name whose value becomes that component's Composition spec. Strictly typed: hack/gen-componentvalues-schema.py merges every component's own values.schema.json under componentValues.properties.<name> (required stripped — partial override), so componentValues.neutron.network.interface.tunnel is a validated field crdgen turns into the Openstack CRD (+ Portal form), not an untyped additionalProperties/preserve-unknown-fields blob. Named componentValues (not overrides) to avoid OSH's conf-override concept; mirrors the braghettos/installer generator.

CI regenerates the schema and fails on drift. Validated: valid override accepted + passed through; unknown component rejected; lint clean; deterministic.

🤖 Generated with Claude Code

…h the umbrella

The umbrella emitted every component with a hardcoded spec: {}, so you could not
configure a component when deploying via the Openstack Composition - only via a
standalone per-component Composition. Add spec.componentValues: a map keyed by
component name whose value becomes that component's Composition spec.

Crucially it is STRICTLY TYPED: hack/gen-componentvalues-schema.py merges every
component's own values.schema.json under componentValues.properties.<name> (required
stripped - it's a partial override), so e.g. componentValues.neutron.network.interface.
tunnel is a validated field that crdgen turns into the Openstack CRD and the Portal
renders a form for - not an untyped additionalProperties/preserve-unknown-fields blob.
Named componentValues (not 'overrides') to avoid clashing with OSH's own conf-override
concept; mirrors braghettos/installer hack/gen-componentvalues-schema.py.

CI (lint.yaml) regenerates the schema and fails on drift, tying it to the component
schemas. Validated: valid override accepted + passed through to the Composition spec,
unknown component rejected by additionalProperties:false, lint clean, deterministic.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@braghettos braghettos merged commit b345e39 into main Jun 11, 2026
@braghettos braghettos deleted the feat/umbrella-componentvalues branch June 11, 2026 16:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant