Composite catalog item schema definition#55
Conversation
54b869d to
37c7b42
Compare
f6cea40 to
acfc4a0
Compare
acfc4a0 to
e379073
Compare
e379073 to
00227eb
Compare
gabriel-farache
left a comment
There was a problem hiding this comment.
some comment and IMO we should only have 1 shape and get rid of the useless difference between primitive and composite in the format as the primitive is just a special case of composite where there is only 1 resource
6ad00c9 to
9fe3935
Compare
|
Really like this — the composite catalog item shape is clean. Worth flagging for reuse: this model lines up almost 1:1 with two existing designs, which I think is a strong signal to converge on a shared substrate rather than maintain parallel ones.
Three independent designs converging on the same model is a good problem to have. Concretely, I'd suggest framing the catalog schema as the authoring/ordering projection over UDLM Resource Type Specifications (the vendor-neutral type contract):
That keeps the catalog as the UX/curation layer and UDLM as the substrate underneath — so a Happy to share the Resource Type Spec meta-schema + a few base entities we've been drafting (VM / Database / Container / Cluster) — |
My understanding of UDLM is scarce, so not sure exactly what it is. Is UDLM going to be the standard for all schema definitions or is it something completely different? Also, could you share the link to the resource type schemas for UDLM? From what you mentioned, I'm assuming the goal is one standard that works across DCM and OSAC, is that right? |
|
Following up on the above — we took the convergence and built out the shared substrate, with the full reasoning written down in case it's useful here. The substrate + why it's shaped this way — croadfeldt/udlm#1:
The DCM side of the boundary — croadfeldt/dcm#5 ( Net for this PR: your |
|
Sorry, following up again and one clarification on CEL. One substrate across DCM + OSAC is good, but more succintly I want to extend UDLM where it makes sense to. I would like to leverage the value they have that can inform UDLM and there was some enhancements to UDLM that would cover the spec that OSAC used and that had some genuine benefit overall. UDLM is the type/contract standard, the catalog is the authoring projection over it — and the one concrete ask back is to drop CEL from the catalog spec in favor of declarative typed bindings (transformation → policy). The reason is that CEL leaves the door open to violating Data Sovereignty constraints. If the data spec allows for outreach directly, there is a potential for bypassing policies. Since the intent of CEL can be applied using the same policy mechanism, we can get the same effect while conforming. Open to feedback on this. |
| - Database | ||
| Fields common across all database types (SQL, NoSQL, search, time-series, | ||
| etc.) | ||
|
|
There was a problem hiding this comment.
The link points to #composite-catalog-item, but that anchor doesn't exist in catalog-item-schema.md. The closest heading is "Catalog item blueprint" which generates #catalog-item-blueprint.
Can you either update the link to match the actual heading, or add a "Composite catalog item" heading to catalog-item-schema.md if that's what this should reference?
There was a problem hiding this comment.
This is not needed anymore after the unification. Removed it now, see here: 784102c
| "resources": [ | ||
| { | ||
| "name": "ordersDb", | ||
| "serviceType": "database", |
There was a problem hiding this comment.
The requiresResources field in the CatalogItem blueprint gets renamed to requirements in the placement payload, but there's no documentation explaining this transformation. Implementors will hit this mismatch and have to reverse-engineer it.
Either use the same field name in both places or add a note in the catalog resolution section explaining the rename and why it happens. Either way, the rename shouldn't be a surprise.
There was a problem hiding this comment.
Good catch, this is my (and my collaborative ai partner) mistake. It's supposed to be requiresResources. Updated it now, see: 2163a25
| "serviceType": "database", | ||
| "requirements": [], | ||
| "spec": { | ||
| "service_type": "database", |
There was a problem hiding this comment.
nit: The placement payload JSON example mixes naming conventions — serviceType is camelCase but the spec object uses snake_case (service_type, container_port). The blueprint YAML examples and service-type-definitions both use camelCase throughout. Is this intentional or an oversight?
There was a problem hiding this comment.
Good catch, we usually use camelCase for the examples in the enhacement, updated it now. See: 2163a25
I believe we can achieve the same with CEL by:
Utlimately, I still think CEL can achieve what explicit bindings does but I may be missing something. What do you think? |
I am not sure I understand your concern @croadfeldt .
So I do not see where and how the CEL could bypass the policies as their evaluation will come only after the CEL has replaced the expressions/placeholders with their real values. Thus, the payload that is evaluated is similar to a payload that would come straight from a user (like the parent resource is). |
Just FYI, fullfilment service has no notion of composite types (currently), this enhacement is about type composition. The catalog schema is already defined in different enahcement. |
Assisted-By: Cursor AI Signed-off-by: Jennifer Ubah <cju.cipher@gmail.com>
Assisted-By: Cursor AI Signed-off-by: Jennifer Ubah <cju.cipher@gmail.com>
Assisted-By: Cursor AI Signed-off-by: Jennifer Ubah <cju.cipher@gmail.com>
Assisted-By: Cursor AI Signed-off-by: Jennifer Ubah <cju.cipher@gmail.com>
Assisted-By: Cursor AI Signed-off-by: Jennifer Ubah <cju.cipher@gmail.com>
Assisted-By: Cursor AI Signed-off-by: Jennifer Ubah <cju.cipher@gmail.com>
Assisted-By: Cursor AI Signed-off-by: Jennifer Ubah <cju.cipher@gmail.com>
Assisted-By: Cursor AI Signed-off-by: Jennifer Ubah <cju.cipher@gmail.com>
Assisted-By: Cursor AI Signed-off-by: Jennifer Ubah <cju.cipher@gmail.com>
c952427 to
eddf135
Compare
This enhancement defines catalog items on a single spec.resources[] model, so single- and multi-resource offerings share the same shape and validation path instead of separate primitive/composite types.