From 9b118985950f56d9c09c59f55716d8c258cadb16 Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Fri, 13 Mar 2026 09:25:56 +0100 Subject: [PATCH 01/24] data-model: first version Signed-off-by: Silvano Cirujano Cuesta --- data-model/application-deployment.linkml.yaml | 130 ++++++ .../application-description.linkml.yaml | 387 ++++++++++++++++++ data-model/deployment-status.linkml.yaml | 124 ++++++ data-model/desired-state-manifest.linkml.yaml | 147 +++++++ data-model/device-capabilities.linkml.yaml | 146 +++++++ data-model/margo-data-model.linkml.yaml | 67 +++ data-model/margo-deployments.linkml.yaml | 178 ++++++++ data-model/margo-resources.linkml.yaml | 202 +++++++++ 8 files changed, 1381 insertions(+) create mode 100644 data-model/application-deployment.linkml.yaml create mode 100644 data-model/application-description.linkml.yaml create mode 100644 data-model/deployment-status.linkml.yaml create mode 100644 data-model/desired-state-manifest.linkml.yaml create mode 100644 data-model/device-capabilities.linkml.yaml create mode 100644 data-model/margo-data-model.linkml.yaml create mode 100644 data-model/margo-deployments.linkml.yaml create mode 100644 data-model/margo-resources.linkml.yaml diff --git a/data-model/application-deployment.linkml.yaml b/data-model/application-deployment.linkml.yaml new file mode 100644 index 00000000..6262f5c1 --- /dev/null +++ b/data-model/application-deployment.linkml.yaml @@ -0,0 +1,130 @@ +# yaml-language-server: $schema=https://linkml.io/linkml-model/linkml_model/jsonschema/meta.schema.json +id: https://specification.margo.org/application_deployment_schema +name: ApplicationDeployment +description: >- + Each workload is represented as an `ApplicationDeployment` YAML file that specifies its components, configuration, and parameters. + This resource is delivered via the Desired State API and referenced by `id` in the Deployment Status API. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#applicationdeployment-yaml-definition +version: 1.0.0 #Arne: update later +prefixes: + linkml: https://w3id.org/linkml/ + margo: https://specification.margo.org/ +imports: + - linkml:types + - margo-deployments.linkml + +default_prefix: margo +default_range: string + +classes: + ApplicationDeployment: + description: >- + A class representing the desired state of an entity. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#applicationdeployment-yaml-definition + attributes: + apiVersion: + description: Identifier of the version of the API the object definition follows. + required: true + range: string + kind: + description: Must be `ApplicationDeployment`. + equals_string: "ApplicationDeployment" + required: true + range: string + designates_type: true + metadata: + description: >- + Metadata element specifying characteristics about the application deployment. + See the [Metadata Attributes](#metadata-attributes) section below. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#metadata-attributes + range: DeploymentMetadata + required: true + spec: + description: >- + Spec element that defines deployment profile and parameters associated with the application deployment. + See the [Spec Attributes](#spec-attributes) section below. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#spec-attributes + range: Spec + required: true + + DeploymentMetadata: + description: >- + Metadata associated with the desired state. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#metadata-attributes + attributes: + annotations: + description: >- + Defines the application ID and unique identifier associated to the deployment specification. + Needs to be assigned by the Workload Orchestration Software. + See the [Annotation Attributes](#annotations-attributes) section below. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#annotations-attributes + range: DeploymentAnnotations + required: true + name: + description: >- + When deploying to Kubernetes, the manifests name. + The name is chosen by the workload orchestration vendor and is not displayed anywhere. + required: true + range: string + namespace: + description: When deploying to Kubernetes, the namespace the manifest is added under. The namespace is chosen by the workload orchestration solution vendor. + required: true + range: string + deviceId: + range: HierarchicalDeviceId + required: true + + DeploymentAnnotations: + description: >- + A class representing annotations. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#annotations-attributes + attributes: + applicationId: + description: >- + An identifier for the application. + The id is used to help create unique identifiers where required, such as namespaces. + The id must be lower case letters and numbers and MAY contain dashes. + Uppercase letters, underscores and periods MUST NOT be used. + The id MUST NOT be more than 200 characters. + The applicationId MUST match the associated application package Metadata "id" attribute. + range: string + required: true + pattern: "^[-a-z0-9]{1,200}$" + id: + description: >- + The unique identifier UUID of the deployment specification. + Needs to be assigned by the Workload Orchestration Software. + range: string + required: true + pattern: "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" + + Spec: + description: >- + Specification details of the desired state. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#spec-attributes + attributes: + deploymentProfile: + description: >- + Section that defines deployment details including type and components. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#deploymentprofile-attributes + range: DeploymentProfile + required: true + parameters: + description: >- + Describes the configured parameters applied via the end-user. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#parameter-attributes + range: Parameter + required: true + multivalued: true + inlined: true + inlined_as_list: false diff --git a/data-model/application-description.linkml.yaml b/data-model/application-description.linkml.yaml new file mode 100644 index 00000000..a7c0a9fa --- /dev/null +++ b/data-model/application-description.linkml.yaml @@ -0,0 +1,387 @@ +# yaml-language-server: $schema=https://linkml.io/linkml-model/linkml_model/jsonschema/meta.schema.json +id: https://specification.margo.org/application-schema +name: ApplicationDescription +title: Application Description +description: >- + The purpose of the Application Description is to enable an application's discovery, configuration, and deployment on edge devices. + To deploy an application the end user specifies values for the [parameters](#defining-configurable-application-parameters) given in + an Application Description (e.g., through a UI of the WFM) to instantiate an `ApplicationDeployment`, + which defines the [desired state](../margo-management-interface/desired-state.md) for an application. + + The structure of the ApplicationDescription object to be provided in the YAML document + specified in this page. + Some examples are provided also [at the bottom of this page](#examples). + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/applications/application-registry.md + for the application registry specification. +version: 1.0.0 +prefixes: + linkml: https://w3id.org/linkml/ + margo: https://specification.margo.org/ +imports: + - linkml:types + - margo-resources.linkml + - margo-deployments.linkml + +default_prefix: margo +# default_range: string # https://github.com/linkml/linkml/issues/1483 + + +# Class Definitions +classes: + ApplicationDescription: + description: Root class for an application description. + attributes: + apiVersion: + description: Identifier of the version of the API the object definition follows. + required: true + range: string + kind: + description: Specifies the object type; must be `ApplicationDescription`. + range: string + required: true + equals_string: "ApplicationDescription" + designates_type: true + metadata: + description: >- + Metadata element specifying characteristics about the application deployment. + See the [Metadata Attributes](#metadata-attributes) section below. + range: ApplicationMetadata + required: true + deploymentProfiles: + description: >- + Deployment profiles element specifying the types of deployments the application supports. + See the [Deployment](#deploymentprofile-attributes) section below. + range: DeploymentProfileDescription + multivalued: true + inlined: true + inlined_as_list: true + required: true + parameters: + description: >- + Parameters element specifying the configurable parameters to use when installing, or updating, the application. + See the [Parameter](#parameter-attributes) section below. + range: Parameter + multivalued: true + inlined: true + inlined_as_list: false + configuration: + description: >- + Configuration element specifying how parameters should be displayed to the user for setting the value + as well as the rules to use to validate the user's input. + See the [Configuration](#configuration-attributes) section below. + range: Configuration + + ApplicationMetadata: + description: Metadata about the application. + attributes: + id: + description: >- + An identifier for the application. The id is used to help create unique identifiers where required, + such as namespaces. The id must be lower case letters and numbers and MAY contain dashes. + Uppercase letters, underscores and periods MUST NOT be used. The id MUST NOT be more than 200 characters. + range: string + required: true + pattern: ^[a-z0-9-]{1,200}$ + name: + description: >- + The application's official name. + This name is for display purposes only and can container whitespace and special characters. + range: string + required: true + description: + range: string + version: + description: The application's version. + range: string + required: true + catalog: + description: >- + Catalog element specifying the application's metadata for enabling its discovery. + See the [Catalog](#catalog-attributes) section below. + range: Catalog + required: true + + Catalog: + description: Catalog metadata for displaying the application. + attributes: + application: + description: >- + Application element specifying the application specific metadata. + See the [Application Metadata](#applicationmetadata-attributes) section below. + range: CatalogApplicationMetadata + author: + description: >- + Author element specifying metadata about the application's author. + See the [Author Metadata](#author-attributes) section below. + range: Author + multivalued: true + inlined: true + inlined_as_list: true + organization: + description: >- + Organization element specifying metadata about the organization/company providing the application. + See the [Organization Metadata](#organization-attributes) section below. + range: Organization + multivalued: true + required: true + inlined: true + inlined_as_list: true + + CatalogApplicationMetadata: + description: Metadata specific to the application. + attributes: + descriptionFile: + description: Link to the file containing the application's full description. The file should be a markdown file. + range: string + icon: + description: Link to the icon file (e.g., in PNG format). + range: string + licenseFile: + description: Link to the file that details the application's license. The file should either be a plain text, markdown or PDF file. + range: string + releaseNotes: + description: Statement about the changes for this application's release. The file should either be a markdown or PDF file. + range: string + site: + description: Link to the application's website. + range: string + tagline: + description: The application's slogan. + range: string + tags: + description: An array of strings that can be used to provide additional context for the application in a user interface to assist with task such as categorizing, searching, etc. + range: string + multivalued: true + inlined: true + inlined_as_list: true + + Author: + description: Information about the application's author. + attributes: + name: + description: The name of the application's creator. + range: string + email: + description: Email address of the application's creator. + range: string + pattern: .*@[a-z0-9.-]* + + Organization: + description: Information about the providing organization. + attributes: + name: + description: Organization responsible for the application's development and distribution. + range: string + required: true + site: + description: Link to the organization's website. + range: string + + DeploymentProfileDescription: + description: Represents a deployment configuration for the application. + is_a: DeploymentProfile + attributes: + id: + description: >- + An identifier for the deployment profile, given by the application developer, used to uniquely identify this deployment profile from others within this application description's scope. + range: string + required: true + description: + description: >- + This human-readable description of a deployment profile allows for providing additional context about the deployment profile. E.g., the application developer can use this to describe the deployment profile's purpose, + such as the intended use case. Additionally, the application developer can use this to provide further details about the resources, peripherals, and interfaces required to run the application. + range: string + requiredResources: + description: >- + Required resources element specifying the resources required to install the application. + See the [Required Resources](#requiredresources-attributes) section below. + The consequences (e.g., aborting / blocking the installation or execution of the application) of not meeting these required resources are not defined (yet) by margo. + range: Resources + + HelmDeploymentProfileDescription: + is_a: DeploymentProfileDescription + slot_usage: + type: + equals_string: "helm.v3" + components: + range: HelmComponent + + ComposeDeploymentProfileDescription: + is_a: DeploymentProfileDescription + slot_usage: + type: + equals_string: "compose" + components: + range: ComposeComponent + + Configuration: + description: Configuration layout and validation rules. + attributes: + sections: + description: >- + Sections are used to group related parameters together, + so it is possible to present a user interface with a logical grouping of the parameters in each section. + See the [Section](#section-attributes) section below. + range: Section + multivalued: true + inlined: true + inlined_as_list: true + required: true + schema: + description: >- + Schema is used to provide details about how to validate each parameter value. + At a minimum, the parameter value must be validated to match the schema's data type. + The schema indicates additional rules the provided value must satisfy to be considered valid input. + See the [Schema](#schema-attributes) section below. + range: Schema + multivalued: true + inlined: true + inlined_as_list: true + required: true + + Section: + description: Named sections within the configuration layout. + attributes: + name: + description: >- + The name of the section. This may be used in the user interface to show the grouping of the associated parameters within the section. + range: string + required: true + settings: + description: >- + Settings are used to provide instructions to the workload orchestration software vendor for displaying parameters to the user. + A user MUST be able to provide values for all settings. + See the [Setting](#setting-attributes) section below. + range: Setting + multivalued: true + inlined: true + inlined_as_list: true + required: true + + Setting: + description: Individual configuration settings. + attributes: + parameter: + description: The name of the [parameter](#parameter-attributes) the setting is associated with. + range: string + required: true + name: + description: The parameter's display name to show in the user interface. + range: string + required: true + description: + description: The parameters's short description to provide additional context to the user in the user interface about what the parameter is for. + range: string + immutable: + description: If true, indicates the parameter value MUST not be changed once it has been set and used to install the application. Default is false if not provided. + range: boolean + schema: + description: The name of the schema definition to use to validate the parameter's value. See the [Schema](#schema-attributes) section below. + range: Schema + inlined: false + required: true + + Schema: + description: Defines data type and rules for validating user provided parameter values. Subclasses (see below) define for each data type their own set of validation rules that can be used. The value MUST be validated against all rules defined in the schema. + attributes: + name: + description: The name of the schema rule. This used in the [setting](#setting-attributes) to link the setting to the schema rule. + range: string + required: true + identifier: true + dataType: + description: >- + Indicates the expected data type for the user provided value. + Accepted values are string, integer, double, boolean, array[string], array[integer], array[double], array[boolean]. + At a minimum, the provided parameter value MUST match the schema's data type if no other validation rules are provided. + range: string + required: true + #validationRule: + # description: >- + # Defines the validation rules to use to validate the user provided parameter value. + # The rules are based on the schema's data type and are listed below. + # The value MUST be validated against any validation rules defined in the schema. + # range: ValidationRule + # required: false + + TextValidationSchema: + is_a: Schema + description: Extends schema to define a string/text-specific set of validation rules that can be used. + attributes: + allowEmpty: + description: >- + If true, indicates a value must be provided. Default is false if not provided. + range: boolean + minLength: + description: If set, indicates the minimum number of characters the value must have to be considered valid. + range: integer + maxLength: + description: If set, indicates the maximum number of characters the value must have to be considered valid. + range: integer + regexMatch: + description: If set, indicates a regular expression to use to validate the value. + range: string + + BooleanValidationSchema: + is_a: Schema + description: Extends schema to define a boolean-specific set of validation rules that can be used. + attributes: + allowEmpty: + description: >- + If true, indicates a value must be provided. Default is false if not provided. + range: boolean + + NumericIntegerValidationSchema: + is_a: Schema + description: Extends schema to define a integer-specific set of validation rules that can be used. + attributes: + allowEmpty: + description: >- + If true, indicates a value must be provided. Default is false if not provided. + range: boolean + minValue: + description: If set, indicates the minimum allowed integer value the value must have to be considered valid. + range: integer + maxValue: + description: If set, indicates the maximum allowed integer value the value must have to be considered valid. + range: integer + + NumericDoubleValidationSchema: + is_a: Schema + description: Extends schema to define a double-specific set of validation rules that can be used. + attributes: + allowEmpty: + description: >- + If true, indicates a value must be provided. Default is false if not provided. + range: boolean + minValue: + description: If set, indicates the minimum value to be considered valid. + range: float + maxValue: + description: If set, indicates the maximum value to be considered valid. + range: float + minPrecision: + description: If set, indicates the minimum level of precision the value must have to be considered valid. + range: integer + maxPrecision: + description: If set, indicates the maximum level of precision the value must have to be considered valid. + range: integer + + SelectValidationSchema: + is_a: Schema + description: Extends schema to define a specific set of validation rules that can be used for select options. + attributes: + allowEmpty: + description: >- + If true, indicates a value must be provided. Default is false if not provided. + range: boolean + multiselect: + description: If true, indicates multiple values can be selected. If multiple values can be selected the resulting value is an array of the selected values. The default is false if not provided. + range: boolean + options: + description: This provides the list of acceptable options the user can select from. The data type for each option must match the parameter setting’s data type. + range: string + multivalued: true + required: true + diff --git a/data-model/deployment-status.linkml.yaml b/data-model/deployment-status.linkml.yaml new file mode 100644 index 00000000..4f2c478b --- /dev/null +++ b/data-model/deployment-status.linkml.yaml @@ -0,0 +1,124 @@ +# yaml-language-server: $schema=https://linkml.io/linkml-model/linkml_model/jsonschema/meta.schema.json +id: https://specification.margo.org/deployment-status +name: DeploymentStatus +description: >- + Schema for reporting the deployment status of workloads from a device to the WFM. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/deployment-status.md +version: 1.0.0 +prefixes: + linkml: https://w3id.org/linkml/ + margo: https://specification.margo.org/ +imports: + - linkml:types + +default_prefix: margo +default_range: string + +classes: + DeploymentStatusManifest: + description: >- + Manifest sent by the device client to report the deployment status of a workload. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/deployment-status.md#request-body-attributes + attributes: + apiVersion: + range: string + required: true + kind: + range: string + required: true + equals_string: "DeploymentStatusManifest" + designates_type: true + deploymentId: + description: >- + The unique identifier of the deployment whose status is being reported. + range: string + required: true + deviceId: + description: >- + Id of the device hosting the deployment. Includes the full device hierarchy if applicable. + This attribute is required when reporting on behalf of a child-device. + range: HierarchicalDeviceId + status: + description: >- + Overall status of the deployment. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/deployment-status.md#status-attributes + range: Status + required: true + components: + description: >- + Per-component status list. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/deployment-status.md#component-attributes + range: ComponentStatus + required: true + multivalued: true + + Status: + description: >- + Overall deployment state and optional error details. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/deployment-status.md#status-attributes + slots: + - state + - error + + Error: + description: >- + Error details associated with a failed deployment state. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/deployment-status.md#error-attributes + attributes: + code: + range: string + source: + description: >- + Identifies the source of the error. It is set to the device id, with its full hierarchy + if applicable, of the device generating the error, or to the component name of the + component generating the error. + range: string + message: + range: string + + ComponentStatus: + is_a: Status + description: >- + Status of a component deployment. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/deployment-status.md#component-attributes + attributes: + name: + range: string + required: true + +slots: + state: + description: >- + Current deployment state. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/deployment-status.md#status-attributes + range: State + required: true + + error: + description: >- + Optional error details when the state is `failed`. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/deployment-status.md#error-attributes + range: Error + +enums: + State: + description: >- + Permissible deployment states. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/deployment-status.md#status-attributes + permissible_values: + pending: + installing: + installed: + failed: + removing: + removed: diff --git a/data-model/desired-state-manifest.linkml.yaml b/data-model/desired-state-manifest.linkml.yaml new file mode 100644 index 00000000..3cbe6d61 --- /dev/null +++ b/data-model/desired-state-manifest.linkml.yaml @@ -0,0 +1,147 @@ +# yaml-language-server: $schema=https://linkml.io/linkml-model/linkml_model/jsonschema/meta.schema.json +id: https://specification.margo.org/desired-state-manifest-schema +name: DesiredStateManifest +description: >- + Each workload is represented as an `ApplicationDeployment` YAML file that specifies its components, configuration, and parameters. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md +version: 1.0.0 +prefixes: + linkml: https://w3id.org/linkml/ + margo: https://specification.margo.org/ +imports: + - linkml:types + +default_prefix: margo +default_range: string + +classes: + DesiredStateManifest: + description: >- + Manifest from the Workload Fleet Manager, representing the complete desired workload configuration assigned to the device. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#endpoints---state-manifest + attributes: + manifestVersion: + description: >- + Monotonically increasing unsigned 64-bit integer in the inclusive range [1, 2^64-1]. Prevents rollback attacks. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#response-body-attributes + range: ManifestVersion + required: true + bundle: + description: >- + Package optimization containing multiple ApplicationDeployment YAMLs. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#response-body-attributes + range: Bundle + required: true + deployments: + description: >- + List of deployment objects describing each workload. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#response-body-attributes + multivalued: true + inlined: true + inlined_as_list: true + range: Deployment + required: true + + Bundle: + description: >- + Describes an archive containing all referenced ApplicationDeployment YAMLs. + If there are zero deployments (i.e., the deployments array is empty), this field MUST be present with the value null. + An empty archive MUST NOT be served. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#endpoints---deployment-bundle + attributes: + mediaType: + description: >- + MUST be application/vnd.margo.bundle.v1+tar+gzip, + which denotes a gzip-compressed tar archive (commonly delivered as a .tar.gz) whose root contains one or more ApplicationDeployment YAML files. + Servers MUST set the HTTP Content-Type to this media type. + The archive MUST contain exactly the set of YAML files referenced by deployments. + range: string + equals_string: "application/vnd.margo.bundle.v1+tar+gzip" + required: true + digest: + description: >- + Digest of the bundle archive. + MUST equal the digest computed over the exact sequence of bytes in the bundle endpoint's HTTP 200 OK response body. + See Protocol - Digest for further details. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#protocol---digest + range: DigestType + required: true + sizeBytes: + description: >- + Optional unsigned 64-bit advisory estimate of the decoded payload length in bytes for the bundle archive. + Provided for bandwidth estimation and update planning. + MUST NOT be used for integrity verification. + range: SizeBytesType + url: + description: >- + Content-addressable retrieval endpoint for the bundle of the form /api/v1/clients/{clientId}/bundles/{digest} where {digest} equals bundle.digest. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#endpoints---deployment-bundle + range: UrlType + required: true + + Deployment: + description: >- + Reference to an individual ApplicationDeployment within the desired state manifest. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#response-body-attributes + attributes: + deploymentId: + description: >- + The UUID of the deployment. + MUST equal metadata.annotations.id in the ApplicationDeployment. + range: string + required: true + digest: + description: >- + Digest of the corresponding ApplicationDeployment YAML file. + MUST equal the digest computed over the exact sequence of bytes in the individual deployment endpoint's HTTP 200 OK response body. + See Protocol - Digest for further details. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#protocol---digest + range: DigestType + required: true + sizeBytes: + description: >- + Optional unsigned 64-bit advisory estimate of the decoded payload length in bytes for the ApplicationDeployment YAML. + Provided for bandwidth estimation and update planning. + MUST NOT be used for integrity verification. + range: SizeBytesType + url: + description: >- + Content-addressable retrieval endpoint for the ApplicationDeployment YAML of the form /api/v1/clients/{clientId}/deployments/{deploymentId}/{digest} where {digest} equals deployments[].digest. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#endpoints---individual-deployment-yaml + range: UrlType + required: true + +types: + DigestType: + description: >- + Hash that identifies an element by its content. + Digests have to follow the pattern: ":". + For example: "sha256:8a9b07...". + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#protocol---digest + uri: xsd:string + base: string + repr: str + pattern: "^[a-zA-Z0-9_-]+:[0-9a-fA-F]+$" + SizeBytesType: + description: Size of an element in bytes. + uri: xsd:nonNegativeInteger + base: integer + minimum_value: 0 + UrlType: + description: Endpoint (URL without schema and domain) associated to an element. + uri: xsd:anyURI + base: URI + repr: str + pattern: "^/[a-zA-Z0-9-._~:/?#\\[\\]@!$&'()*+,;=]+$" diff --git a/data-model/device-capabilities.linkml.yaml b/data-model/device-capabilities.linkml.yaml new file mode 100644 index 00000000..d68f44d4 --- /dev/null +++ b/data-model/device-capabilities.linkml.yaml @@ -0,0 +1,146 @@ +# yaml-language-server: $schema=https://linkml.io/linkml-model/linkml_model/jsonschema/meta.schema.json +id: https://specification.margo.org/device-capabilities +name: DeviceCapabilities +title: Device Capabilities +description: >- + Schema for defining device capabilities. + The purpose of the Device Capabilities is that WFMs can match application deployments with the capabilities of the target devices. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md +version: 1.0.0 +prefixes: + linkml: https://w3id.org/linkml/ + margo: https://specification.margo.org/ +imports: + - linkml:types + - margo-resources.linkml + +default_prefix: margo +# default_range: string # https://github.com/linkml/linkml/issues/1483 + + +# Class Definitions +classes: + DeviceCapabilitiesManifest: + description: >- + Capabilities of a device on which applications can be deployed. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#request-body-attributes + attributes: + apiVersion: + description: Identifier of the version the API resource follows. + range: string + required: true + kind: + description: Must be `DeviceCapabilitiesManifest`. + range: string + required: true + equals_string: "DeviceCapabilitiesManifest" + designates_type: true + properties: + description: >- + Element that defines characteristics about the device. + See the [Properties Attributes](#properties-attributes) section below. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#properties-attributes + required: true + range: Properties + + Properties: + description: >- + Device properties reported to the WFM. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#properties-attributes + attributes: + id: + description: Unique deviceID assigned to the device via the Device Owner. + range: string + required: true + vendor: + description: Defines the device vendor. + range: string + required: true + modelNumber: + description: Defines the model number of the device. + range: string + required: true + serialNumber: + description: Defines the serial number of the device. + range: string + required: true + roles: + description: >- + Element that defines the device role it can provide to the Margo environment. + MUST be one of the following: Standalone Cluster, Cluster Leader, Standalone Device, or Gateway. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#enumerations + required: true + multivalued: true + inlined: false + range: DeviceRole + resources: + description: >- + Element that defines the device's resources available to the application deployed on the device. + See the [Resources Attributes](#resources-attributes) section below. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#resources-attributes + required: true + range: Resources + + # Override Resources for device capabilities (availability offering): + # all fields are required here, whereas in application descriptions (resource claiming) + # they are optional. Include the slots list so the OpenAPI generator emits the full schema. + DeviceResources: + slots: + - cpu + - memory + - storage + - peripherals + - interfaces + slot_usage: + cpu: + required: true + memory: + required: true + storage: + required: true + peripherals: + required: true + interfaces: + required: true + + +# Enumeration Definitions +enums: + DeviceRole: + description: >- + Role a device can provide to the Margo environment. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#enumerations + permissible_values: + Standalone Cluster: + description: >- + Select this role to run Helm applications. + See [Edge compute devices](../../concepts/edge-compute-devices/devices#standalone-cluster-role-details) for more information. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/concepts/edge-compute-devices/devices.md#standalone-cluster-role-details + Standalone Device: + description: >- + Select this role to run Compose applications. + See [Edge compute devices](../../concepts/edge-compute-devices/devices#standalone-device-role-details) for more information. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/concepts/edge-compute-devices/devices.md#standalone-device-role-details + Cluster Leader: + description: >- + Select this role for the leader node of a multi-node Helm cluster. + See [Edge compute devices](../../concepts/edge-compute-devices/devices#cluster-leader-role-details) for more information. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/concepts/edge-compute-devices/devices.md#cluster-leader-role-details + Gateway: + description: >- + Select this role for a see-thru gateway that connects one or more child-devices to the WFM, + exposing each child-device individually with its own capabilities. + See [Gateways](../../concepts/gateways/gateways.md) for more information. + + Pre-data-model reference https://github.com/margo/specification/blob/cea236c3a1cf96cb613a84cda464e638b7769dd9/system-design/specification/margo-management-interface/device-capabilities.md#see-thru-gateways + diff --git a/data-model/margo-data-model.linkml.yaml b/data-model/margo-data-model.linkml.yaml new file mode 100644 index 00000000..472425bf --- /dev/null +++ b/data-model/margo-data-model.linkml.yaml @@ -0,0 +1,67 @@ +# yaml-language-server: $schema=https://linkml.io/linkml-model/linkml_model/jsonschema/meta.schema.json +id: https://specification.margo.org/data-model +name: DataModel +title: Margo Data Model +description: >- + Margo specification involves complex, interrelated data structures that are used for multiple, different purposes. + + This data model documents the mentioned data structures and their relationships. + + ??? info "General information about the Margo data model" + + The Margo data model has been modelled with **[LinkML](https://linkml.io)** + a **modelling language** that does not only offer very poserfull modelling capabilities, + but also very useful conversion and validation tooling. + + All **examples** shown on the documentation of the classes (see + [ApplicationDescription](ApplicationDescription.md#examples) for an example) are being automatically validated + against the model before a new version of the specification gets published. + + The whole [**HTML documentation** of the data model](.) is also automatically generated from the model. + This documentation provides some graphics that help visualicing the relationship between classes. + + Also following **OpenAPI** v3.0.3 YAML specifications are being automatically generated from the model: + + - [workload-management-api-1.0.0.openapi.yaml](../specification/margo-management-interface/management-interface-swagger/) +version: 1.0.0 +prefixes: + margo: https://specification.margo.org/ +imports: + - application-deployment.linkml + - application-description.linkml + - desired-state-manifest.linkml + - device-capabilities.linkml + - deployment-status.linkml + +default_prefix: margo + +subsets: + api_resources: + title: API Resources + +types: + ManifestVersion: + description: >- + Monotonically increasing unsigned 64-bit integer in the inclusive range [1, 2^64-1]. + Prevents rollback attacks. The first manifest MUST use 1. + uri: xsd:unsignedLong + base: int + minimum_value: 1 + maximum_value: 18446744073709551615 + + FlatDeviceId: + description: >- + Unique identifier of a device or device hierarchy. + Format: "{id}[/{id}[/{id}...]]". The top-level id is required and must include only + unreserved characters as specified in RFC3986. Subsequent ids indicate child devices + in a gateway hierarchy and must also use only unreserved characters. + + Pre-data-model reference https://github.com/margo/specification/blob/cea236c3a1cf96cb613a84cda464e638b7769dd9/system-design/specification/margo-management-interface/device-capabilities.md#route-parameters + uri: xsd:string + base: str + pattern: '^[A-Za-z0-9._~-]+(\/[A-Za-z0-9._~-]+)*$' + + HierarchicalDeviceId: + uri: xsd:string + base: str + pattern: '^[A-Za-z0-9._~-]+(\/[A-Za-z0-9._~-]+)*(\/\*)?$' diff --git a/data-model/margo-deployments.linkml.yaml b/data-model/margo-deployments.linkml.yaml new file mode 100644 index 00000000..44cd01c0 --- /dev/null +++ b/data-model/margo-deployments.linkml.yaml @@ -0,0 +1,178 @@ +# yaml-language-server: $schema=https://linkml.io/linkml-model/linkml_model/jsonschema/meta.schema.json +id: https://specification.margo.org/deployments +name: Deployments +description: >- + Shared deployment profile, component, parameter, and target types used by both + ApplicationDescription and ApplicationDeployment schemas. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#deploymentprofile-attributes +version: 1.0.0 +prefixes: + linkml: https://w3id.org/linkml/ + margo: https://specification.margo.org/ +imports: + - linkml:types + +default_prefix: margo +default_range: string + +classes: + DeploymentProfile: + description: >- + Represents a deployment configuration for the application. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#deploymentprofile-attributes + slots: + - type + - components + + HelmDeploymentProfile: + is_a: DeploymentProfile + slot_usage: + type: + equals_string: "helm.v3" + components: + range: HelmComponent + + ComposeDeploymentProfile: + is_a: DeploymentProfile + slot_usage: + type: + equals_string: "compose" + components: + range: ComposeComponent + + Component: + description: >- + A class representing a component of a deployment profile. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#component-attributes + attributes: + name: + description: >- + A unique name used to identify the component package. For helm installations the name will be used as the chart name. + The name must be lower case letters and numbers and MAY contain dashes. + Uppercase letters, underscores and periods MUST NOT be used. + required: true + range: string + properties: + description: >- + A dictionary element specifying the component packages's deployment details. + See the [Component Properties](#componentproperties-attributes) section below. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#component-attributes + range: ComponentProperties + required: true + + HelmComponent: + is_a: Component + + ComposeComponent: + is_a: Component + + ComponentProperties: + description: >- + Properties dictionary for component deployment details. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#component-attributes + attributes: + repository: + description: Repository location for the component. + range: string + revision: + description: Revision version for the component. + range: string + wait: + description: If True, indicates the device waits for the component installation to complete. + range: boolean + timeout: + description: Time to wait for component installation to complete, formatted as "##m##s". + range: string + packageLocation: + description: URL indicating the Compose package's location. + range: string + keyLocation: + description: URL for the public key used to validate a digitally signed package. + range: string + + Parameter: + description: >- + Defines a configurable parameter for the application. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#parameter-attributes + attributes: + name: + description: Name of the parameter. + identifier: true + required: true + range: string + value: + description: >- + The parameter's default value. + Accepted data types are string, integer, double, boolean, array[string], array[integer], array[double], array[boolean]. + any_of: #support for arrays still TBD + - range: boolean + - range: integer + - range: double + - range: string + targets: + description: >- + Used to indicate which component the value should be applied to when installing, or updating, the application. + See the [Target](#target-attributes) section below. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#target-attributes + range: Target + required: true + multivalued: true + inlined: true + inlined_as_list: true + + Target: + description: >- + Specifies where the parameter applies in the deployment. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#target-attributes + attributes: + pointer: + description: >- + The name of the parameter in the deployment configuration. + For Helm deployments, this is the dot notation for the matching element in the `values.yaml` file. This follows the same naming convention you would use with the `--set` command line argument with the `helm install` command. + For compose deployments, this is the name of the environment variable to set. + range: string + required: true + components: + description: >- + Indicates which deployment profile [component](#component-attributes the parameter target applies to. + The component name specified here MUST match a component name in the [deployment profiles](#deploymentprofile-attributes) section. + range: string + multivalued: true + required: true + +slots: + type: + description: >- + Defines the type of this deployment configuration for the application. + The allowed values are `helm.v3`, to indicate the deployment profile's format is Helm version 3, + and `compose` to indicate the deployment profile's format is a Compose file. + When installing the application on a device supporting the Kubernetes platform, all `helm.v3` components, + and only `helm.v3` components, will be provided to the device in same order they are listed in the application description file. + When installing the application on a device supporting Compose, all `compose` components, + and only `compose` components, will be provided to the device in the same order they are listed in the application description file. + The device will install the components in the same order they are listed in the application description file. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#deploymentprofile-attributes + range: string + required: true + pattern: ^(helm\.v3|compose)$ + + components: + description: >- + Component element indicating the components to deploy when installing the application. + See the [Component](#component-attributes) section below. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#component-attributes + range: Component + multivalued: true + required: true + inlined: true + inlined_as_list: true diff --git a/data-model/margo-resources.linkml.yaml b/data-model/margo-resources.linkml.yaml new file mode 100644 index 00000000..c59e949c --- /dev/null +++ b/data-model/margo-resources.linkml.yaml @@ -0,0 +1,202 @@ +# yaml-language-server: $schema=https://linkml.io/linkml-model/linkml_model/jsonschema/meta.schema.json +id: https://specification.margo.org/device-resources +name: DeviceResources +description: >- + Shared resource types used by both device capabilities and application descriptions + to describe hardware resources (CPU, memory, storage, peripherals, communication interfaces). + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#resources-attributes +version: 1.0.0 +prefixes: + linkml: https://w3id.org/linkml/ + margo: https://specification.margo.org/ +imports: + - linkml:types + +default_prefix: margo +default_range: string + +classes: + Resources: + description: >- + Required resources element specifying the resources required to install the application. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#resources-attributes + slots: + - cpu + - memory + - storage + - peripherals + - interfaces + + CPU: + description: >- + CPU element specifying the CPU requirements for the application. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#cpu-attributes + attributes: + cores: + description: + The required amount of CPU cores the application must use to run in its full functionality. + Specified as decimal units of CPU cores (e.g., `0.5` is half a core). + This is defined by the application developer. + After deployment of the application, the device MUST provide this number of CPU cores for the application. + rank: 10 + range: double + required: true + architectures: + description: + The CPU architectures supported by the application. This can be e.g. amd64, x86_64, arm64, arm. + See the [CpuArchitectureType](#cpuarchitecturetype) definition for all permissible values. + Multiple arcitecture types can be specified, as the deployment profile may support multiple CPU architectures. + rank: 20 + range: CpuArchitectureType + multivalued: true + inlined: false + + DevicePeripheral: + description: >- + Peripheral hardware of a device. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#peripheral-attributes + attributes: + type: + description: + The type of peripheral. This can be e.g. GPU, display, camera, microphone, speaker. + See the [PeriperalType](#peripheraltype) definition for all permissible values. + rank: 20 + range: PeripheralType + required: true + manufacturer: + description: The name of the manufacturer. If `manufacturer` is specified as a requirement here, it may be difficult to find devices that can host the application. Please use these requirements with caution. + rank: 30 + range: string + model: + description: The model of the peripheral. If `model` is specified as a requirement here, it may be difficult to find devices that can host the application. Please use these requirements with caution. + rank: 40 + range: string + + DeviceCommunicationInterface: + description: >- + Communication interface of a device. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#communicationinterface-attributes + attributes: + type: + description: + The type of a communication interface. This can be e.g. Ethernet, WiFi, Cellular, Bluetooth, USB, CANBus, RS232. + See the [CommunicationInterfaceType](#communicationinterfacetype) definition for all permissible values. + rank: 30 + range: CommunicationInterfaceType + required: true + +slots: + cpu: + description: >- + CPU element specifying the CPU requirements for the application. + See the [CPU](#cpu-attributes) section below. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#cpu-attributes + range: CPU + + memory: + description: The minimum amount of memory required. + The value is given in binary units (`Ki` = Kibibytes, `Mi` = Mebibytes, `Gi` = Gibibytes). + This is defined by the application developer. + After deployment of the application, the device MUST provide this amount of memory for the application. + range: string + pattern: ^[0-9]+(Mi|Gi|Ki)$ + + storage: + description: + The amount of storage required for the application to run. This encompasses the installed application and the data it needs to store. + The value is given in binary units (`Ki` = Kibibytes, `Mi` = Mebibytes, `Gi` = Gibibytes, `Ti` Tebibytes, `Pi` = Pebibytes, `Ei` = Exbibytes). + This is defined by the application developer. + After deployment of the application, the device MUST provide this amount of storage for the application + range: string + pattern: ^[0-9]+(Mi|Gi|Ki|Ti|Pi|Ei)$ + + peripherals: + description: >- + Peripherals element specifying the peripherals required to run the application. + See the [Peripheral](#peripheral-attributes) section below. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#peripheral-attributes + range: DevicePeripheral + multivalued: true + inlined: true + inlined_as_list: true + + interfaces: + description: >- + Interfaces element specifying the communication interfaces required to run the application. + See the [Communication Interfaces](#communicationinterface-attributes) section below. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#communicationinterface-attributes + range: DeviceCommunicationInterface + multivalued: true + inlined: true + inlined_as_list: true + +enums: + CpuArchitectureType: + description: >- + Permissible CPU architecture values. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#cpuarchitecturetype + permissible_values: + amd64: + description: AMD 64-bit architecture. + x86_64: + description: x86 64-bit architecture. + arm64: + description: ARM 64-bit architecture. + arm: + description: ARM 32-bit architecture. + riscv64: + description: RISC-V 64-bit architecture. + other: + description: >- + Any other CPU architecture not listed here. The application developer MUST provide a description of the architecture in the deployment profile's `description` field. + + CommunicationInterfaceType: + description: >- + Permissible communication interface types. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#communicationinterfacetype + permissible_values: + ethernet: + description: This type stands for an Ethernet interface. + wifi: + description: This type stands for an WiFi interface. + cellular: + description: This type stands for cellular communication technologies such as 5G, LTE, 3G, 2G, .... + bluetooth: + description: This type stands for a Bluetooth or Bluetooth Low-Energy (BLE) interface. + usb: + description: This type stands for a USB interface. + canbus: + description: This type stands for a CANBus interface. + rs232: + description: This type stands for a RS232 interface. + other: + description: This type stands for any other communication interface not listed here. The application developer MUST provide a description of the interface in the deployment profile's `description` field. + + PeripheralType: + description: >- + Permissible peripheral types. + + Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#peripheraltype + permissible_values: + gpu: + description: This type stands for a Graphics Processing Unit (GPU) peripheral. + display: + description: This type stands for a display peripheral. + camera: + description: This type stands for a camera peripheral. + microphone: + description: This type stands for a microphone peripheral. + speaker: + description: This type stands for a speaker peripheral. + other: + description: This type stands for any other peripheral not listed here. The application developer MUST provide a description of the peripheral in the deployment profile's `description` field. From 3aa662aa658a5fb903ac829703df3cb308599cc4 Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Mon, 23 Mar 2026 11:51:25 +0100 Subject: [PATCH 02/24] linkml-openapigen: fixes and improvements over upstream Signed-off-by: Silvano Cirujano Cuesta --- data-model/tools/openapigen.py | 529 ++++++++++++++++++ ...workload-management-api-1.0.0.openapi.yaml | 473 ++++++++++++++++ 2 files changed, 1002 insertions(+) create mode 100644 data-model/tools/openapigen.py create mode 100644 data-model/tools/workload-management-api-1.0.0.openapi.yaml diff --git a/data-model/tools/openapigen.py b/data-model/tools/openapigen.py new file mode 100644 index 00000000..df5f604b --- /dev/null +++ b/data-model/tools/openapigen.py @@ -0,0 +1,529 @@ +"""Generate OpenAPI v3.0.3 Specification YAML files.""" + +import json +import os +import re +import textwrap +from dataclasses import dataclass, field + +import click +import yaml +from openapi_spec_validator import OpenAPIV30SpecValidator, validate +from referencing import Registry, Resource +from referencing.jsonschema import DRAFT4 +from yaml import MappingNode, ScalarNode + +from linkml._version import __version__ +from linkml.generators.jsonschemagen import JsonSchemaGenerator, json_schema_types +from linkml.utils.generator import Generator, shared_arguments + +openapi_generic_template = """openapi: 3.0.3 +# This is a valid OpenAPI template to be used by the LinkML OpenAPI generator. +# It adds one (random) class or type of the LinkML schema as an example. +# Please adapt it to your needs. +# See more information in the online documentation: +# https://linkml.io/linkml/generators/openapi.html +info: + title: Generic example referring in LinkML-modelled resources + version: 0.1.0 +servers: + - url: https://example.org/ +security: + - PayloadSignature: [] +paths: + /api/endpoint: + get: + responses: + '200': + description: Endpoint example involving random data schema + content: + application/json: + schema: + # any broken reference will cause template instantiation to fail + # OpenAPI editors typically also report them + $ref: '#/components/schemas/{data_schema}' +components: + # any data schema provided here that is not used by at least + # one endpoint will be eliminated from the template instantiation + # OpenAPI editors typically also report them + schemas: + # this resource name can differ from the name in the LinkML schema + # it must only match the corresponding endpoint `$ref` references + {data_schema}: + type: object + description: Resource schema to be generated from the LinkML data model. + # schema ID mismatching with provided schema will cause template + # instantiation to fail + x-linkml-schema: {linkml_schema_id} + x-linkml-source: {data_schema} +""" + + +@dataclass +class OpenApiGenerator(Generator): + """ + Generates OpenAPI v3.0.3 specification YAML from a LinkML schema. + + The generator composes a user-provided OpenAPI template (containing the API header, + paths/endpoints, and security schemes) with JSON Schema components generated from + the LinkML schema via :class:`.JsonSchemaGenerator`. Only data schemas referenced + by the template's endpoints (and their transitive dependencies) are included in + the ``components/schemas`` section. + """ + + generatorname = os.path.basename(__file__) + generatorversion = "0.2.0" + valid_formats = ["openapi303"] + file_extension = "yaml" + uses_schemaloader = False + + _template: dict = field(default_factory=dict, init=False, repr=False) + _renaming: dict[str, str] = field(default_factory=dict, init=False, repr=False) + keep_unreferenced: bool = False + inline_enums: bool = False + # Mapping of valid_formats entries to OpenAPI version strings. + # Extend this dict when adding support for additional OpenAPI versions. + _openapi_versions: dict[str, str] = field( + default_factory=lambda: {"openapi303": "3.0.3"}, + init=False, + repr=False, + ) + # Mapping of OpenAPI version strings to validators from openapi-spec-validator. + # Extend this dict when adding support for additional OpenAPI versions. + _openapi_validators: dict[str, type] = field( + default_factory=lambda: {"3.0.3": OpenAPIV30SpecValidator}, + init=False, + repr=False, + ) + + def _find_referenced_schemas(self) -> set[str]: + """Return the set of resource names referenced by the template's endpoints.""" + result = set() + for endp_spec in self._template["paths"].values(): + for req_spec in endp_spec.values(): + if "requestBody" in req_spec and "content" in req_spec["requestBody"]: + for content_spec in req_spec["requestBody"]["content"].values(): + if "$ref" in content_spec["schema"]: + resource_name = content_spec["schema"]["$ref"].removeprefix( + "#/components/schemas/" + ) + result.add(resource_name) + if "parameters" in req_spec: + for param_spec in req_spec["parameters"]: + if "$ref" in param_spec["schema"]: + resource_name = param_spec["schema"]["$ref"].removeprefix( + "#/components/schemas/" + ) + result.add(resource_name) + if "responses" in req_spec: + for response in req_spec["responses"].values(): + if "content" in response: + for content_spec in response["content"].values(): + if "$ref" in content_spec["schema"]: + resource_name = content_spec["schema"][ + "$ref" + ].removeprefix("#/components/schemas/") + result.add(resource_name) + return result + + def _fix_openapi_spec(self, element: dict | list) -> dict | list | None: + """ + Transform JSON Schema constructs into OpenAPI v3.0.3 compatible forms: + + - ``const`` becomes ``enum`` with a single value (OpenAPI 3.0 doesn't support ``const``) + - ``type`` as a list (e.g. nullable ``["string", "null"]``) becomes ``anyOf`` + - ``$ref`` paths are rewritten from ``#/$defs/`` to ``#/components/schemas/`` + """ + fixed_element = None + if isinstance(element, dict): + fixed_element = {} + for key, value in element.items(): + if key == "const": + fixed_element["enum"] = [value] + elif key == "type" and isinstance(value, list): + fixed_element["anyOf"] = [ + {"type": item} for item in value if item != "null" + ] + else: + if isinstance(value, dict | list): + value = self._fix_openapi_spec(value) + elif isinstance(value, str) and value.startswith("#/$defs/"): + value = value.replace("#/$defs/", "#/components/schemas/") + fixed_element[key] = value + elif isinstance(element, list): + fixed_element = [] + for item in element: + if isinstance(item, dict | list): + item = self._fix_openapi_spec(item) + elif isinstance(item, str) and item.startswith("#/$defs/"): + item = item.replace("#/$defs/", "#/components/schemas/") + fixed_element.append(item) + return fixed_element + + def _rename(self, element: dict | list) -> dict | list | None: + """ + If the resource names do not correspond the data schema names, + then some renaming is needed so that OpenAPI resource names + are properly referenced throughout the whole OpenAPI file. + """ + renamed_element = None + if isinstance(element, dict): + renamed_element = {} + for key, value in element.items(): + if key in self._renaming: + key = self._renaming[key] + if isinstance(value, dict | list): + value = self._rename(value) + elif isinstance(value, str) and value.startswith( + "#/components/schemas/" + ): + data_schema_name = value[len("#/components/schemas/") :] + if data_schema_name in self._renaming: + value = value.replace( + data_schema_name, self._renaming[data_schema_name] + ) + renamed_element[key] = value + elif isinstance(element, list): + renamed_element = [] + for item in element: + if isinstance(item, dict | list): + item = self._rename(item) + elif isinstance(item, str) and item.startswith("#/components/schemas/"): + data_schema_name = item[len("#/components/schemas/") :] + if data_schema_name in self._renaming: + item = item.replace( + data_schema_name, self._renaming[data_schema_name] + ) + renamed_element.append(item) + return renamed_element + + def _find_references( + self, element: dict | list, referenced_data_schemas: set[str] + ) -> None: + """Recursively collect all ``$ref`` target names from ``element`` into ``referenced_data_schemas``.""" + if isinstance(element, dict): + if "$ref" in element: + referenced_data_schemas.add(element["$ref"].replace("#/$defs/", "")) + for value in element.values(): + self._find_references(value, referenced_data_schemas) + elif isinstance(element, list): + for item in element: + self._find_references(item, referenced_data_schemas) + + def _sanitize_schemas( + self, data_schemas: dict, endpoint_referenced_schemas: set[str] + ) -> dict: + """Remove schemas not transitively reachable from any endpoint-referenced data schema.""" + referenced_schemas = endpoint_referenced_schemas.copy() + for data_schema in data_schemas.values(): + self._find_references(data_schema, referenced_schemas) + while set(data_schemas.keys()).difference(referenced_schemas): + data_schema_names = list(data_schemas.keys()) + for data_schema_name in data_schema_names: + if data_schema_name not in referenced_schemas: + del data_schemas[data_schema_name] + referenced_schemas = endpoint_referenced_schemas.copy() + for data_schema in data_schemas.values(): + self._find_references(data_schema, referenced_schemas) + return data_schemas + + def _generate_type_schema(self, type_name: str) -> dict: + """Build an OpenAPI-compatible JSON Schema for a LinkML TypeDefinition.""" + type_def = self.schemaview.get_type(type_name) + typ, fmt = json_schema_types.get(type_def.base.lower(), ("string", None)) + schema: dict = {} + if typ: + schema["type"] = str(typ) + if fmt: + schema["format"] = str(fmt) + if type_def.pattern: + schema["pattern"] = str(type_def.pattern) + if type_def.minimum_value is not None: + schema["minimum"] = str(type_def.minimum_value) + if type_def.maximum_value is not None: + schema["maximum"] = str(type_def.maximum_value) + if type_def.equals_string is not None: + schema["const"] = str(type_def.equals_string) + if type_def.equals_number is not None: + schema["const"] = str(type_def.equals_number) + if type_def.description: + schema["description"] = str(type_def.description) + return schema + + def _inline_enum_schemas(self, data_schemas: dict) -> dict: + """Inline enum subschemas into their parents instead of separate entries.""" + enum_schemas = { + name: schema + for name, schema in data_schemas.items() + if isinstance(schema, dict) and "enum" in schema and "properties" not in schema + } + if not enum_schemas: + return data_schemas + + def _replace_refs(obj): + if isinstance(obj, dict): + if "$ref" in obj: + ref_name = obj["$ref"].split("/")[-1] + if ref_name in enum_schemas: + return enum_schemas[ref_name] + return {k: _replace_refs(v) for k, v in obj.items()} + elif isinstance(obj, list): + return [_replace_refs(item) for item in obj] + return obj + + return {k: _replace_refs(v) for k, v in data_schemas.items() if k not in enum_schemas} + + def _find_schemas_line(self, template_text: str) -> int: + """Return the 0-indexed line number of the ``schemas`` key under ``components``.""" + doc = yaml.compose(template_text) + if not isinstance(doc, MappingNode): + raise ValueError("OpenAPI template is not a YAML mapping") + components_node = None + for key, value in doc.value: + if isinstance(key, ScalarNode) and key.value == "components": + components_node = value + break + if not isinstance(components_node, MappingNode): + raise ValueError("OpenAPI template is missing a valid 'components' section") + for key, _ in components_node.value: + if isinstance(key, ScalarNode) and key.value == "schemas": + return key.start_mark.line + raise ValueError( + "OpenAPI template is missing 'schemas' section under 'components'" + ) + + def serialize(self, template_file: str = "", **kwargs) -> str: + """Generate an OpenAPI v3.0.3 spec from ``template_file`` and the loaded LinkML schema.""" + if not template_file: + raise ValueError("An OpenAPI template file is required") + with open(template_file) as tf: + template_text = tf.read() + self._template = yaml.safe_load(template_text) + # Determine the expected OpenAPI version from the active output format + format_name = ( + getattr(self, "format", self.valid_formats[0]) or self.valid_formats[0] + ) + expected_version = self._openapi_versions.get(format_name) + if expected_version is None: + raise ValueError(f"Unsupported output format '{format_name}'") + validator_class = self._openapi_validators.get(expected_version) + if validator_class is None: + raise ValueError( + f"No validator available for OpenAPI version {expected_version}" + ) + # Validate that the template declares the expected OpenAPI version + declared_version = self._template.get("openapi") + if declared_version != expected_version: + raise ValueError( + f"Template OpenAPI version is '{declared_version}', " + f"but format '{format_name}' requires version '{expected_version}'" + ) + # Validate the input template against the OpenAPI specification + validate(self._template, cls=validator_class) + if not isinstance(self._template.get("paths"), dict): + raise ValueError("OpenAPI template is missing required 'paths' section") + if not isinstance(self._template.get("components"), dict): + raise ValueError( + "OpenAPI template is missing required 'components' section" + ) + endpoint_ref_schema_names = ( + self._find_referenced_schemas() + ) # schemas referenced by OpenAPI endpoint(s) + openapi_schemas = self._template["components"][ + "schemas" + ] # data schemas provided by the template + all_req_data_schemas = {} # data schemas directly or transitively required by the API + self._renaming = {} # openapi <-> linkml renaming map + directly_required_linkml_elements: set[str] = ( + set() + ) # LinkML class/type names of directly-referenced schemas + # get only the data schemas that are really referenced from an endpoint + for endpoint_reference_name in endpoint_ref_schema_names: + if endpoint_reference_name not in openapi_schemas: + raise KeyError( + f"data schema '{endpoint_reference_name}' referenced in one of the endpoints " + "does not have a schema declaration" + ) + data_schema = openapi_schemas[endpoint_reference_name] + # validate that linkml schema id is correct + if data_schema["x-linkml-schema"] != self.schema.id: + raise ValueError( + f"Template data schema '{endpoint_reference_name}' declares " + f"x-linkml-schema '{data_schema['x-linkml-schema']}' " + f"but the loaded schema has id '{self.schema.id}'" + ) + # if openapi schema name differs from linkml element name, add mapping + linkml_element_name = data_schema["x-linkml-source"] + if endpoint_reference_name != linkml_element_name: + self._renaming[linkml_element_name] = endpoint_reference_name + directly_required_linkml_elements.add(linkml_element_name) + if linkml_element_name in self.schemaview.all_types().keys(): + all_req_data_schemas[linkml_element_name] = self._generate_type_schema( + linkml_element_name + ) + continue + json_schema = JsonSchemaGenerator( + self.schemaview.schema, + include_null=False, + top_class=linkml_element_name, + ).generate() + json_schema_classes = json.loads(json_schema.to_json())["$defs"] + all_req_data_schemas = all_req_data_schemas | json_schema_classes + # Keep schemas listed in the template even if not endpoint-referenced + if self.keep_unreferenced: + template_schema_names = set(self._template["components"]["schemas"].keys()) + template_schema_names.discard("{data_schema}") + for tpl_schema_name in template_schema_names: + raw_source = self._template["components"]["schemas"][ + tpl_schema_name + ].get("x-linkml-source", tpl_schema_name) + # Resolve dotted path (class.slot) to synthetic $defs key + linkml_element_name = raw_source + if "." in raw_source and raw_source not in all_req_data_schemas: + parts = raw_source.split(".") + if len(parts) == 2: + synthetic_key = f"{parts[0]}__{parts[1]}_optional" + if synthetic_key in all_req_data_schemas: + linkml_element_name = synthetic_key + if tpl_schema_name != linkml_element_name: + self._renaming[linkml_element_name] = tpl_schema_name + directly_required_linkml_elements.add(linkml_element_name) + if linkml_element_name in all_req_data_schemas: + continue + if linkml_element_name in self.schemaview.all_types().keys(): + all_req_data_schemas[linkml_element_name] = ( + self._generate_type_schema(linkml_element_name) + ) + continue + json_schema = JsonSchemaGenerator( + self.schemaview.schema, + include_null=False, + top_class=linkml_element_name, + ).generate() + json_defs = json.loads(json_schema.to_json())["$defs"] + actual_key = [ + k + for k in json_defs.keys() + if k.lower() == linkml_element_name.lower() + ] + effective_key = actual_key[0] if actual_key else linkml_element_name + if effective_key in json_defs: + all_req_data_schemas[effective_key] = json_defs[effective_key] + sanitized_data_schemas = self._sanitize_schemas( + all_req_data_schemas, directly_required_linkml_elements + ) + # title always duplicates the schema dict key, so it is redundant in components/schemas + for data_schema in sanitized_data_schemas.values(): + data_schema.pop("title", None) + sanitized_data_schemas = self._fix_openapi_spec(sanitized_data_schemas) + if self._renaming: + sanitized_data_schemas = self._rename(sanitized_data_schemas) + if self.inline_enums: + sanitized_data_schemas = self._inline_enum_schemas(sanitized_data_schemas) + # Replace the existing schemas section in the text template with the generated schemas + lines = template_text.splitlines(keepends=True) + schemas_line_idx = self._find_schemas_line(template_text) + text_before_schemas = "".join(lines[:schemas_line_idx]) + schemas_yaml = yaml.dump(sanitized_data_schemas, sort_keys=False) + indented_schemas = textwrap.indent(schemas_yaml, " ") + result = text_before_schemas + " schemas:\n" + indented_schemas + # Check for dangling $ref references using the referencing library + result_obj = yaml.safe_load(result) + schemas = result_obj.get("components", {}).get("schemas", {}) + registry = Registry().with_resources( + ( + f"#/components/schemas/{name}", + Resource.from_contents(schema, default_specification=DRAFT4), + ) + for name, schema in schemas.items() + ) + + def _collect_refs(obj, refs): + if isinstance(obj, dict): + if ( + "$ref" in obj + and isinstance(obj["$ref"], str) + and obj["$ref"].startswith("#/") + ): + refs.append(obj["$ref"]) + for v in obj.values(): + _collect_refs(v, refs) + elif isinstance(obj, list): + for item in obj: + _collect_refs(item, refs) + + all_refs = [] + _collect_refs(result_obj, all_refs) + dangling = [] + for ref in all_refs: + try: + registry.get_or_retrieve(ref) + except Exception: + dangling.append(ref) + if dangling: + raise ValueError( + f"Dangling $ref in generated OpenAPI spec: {','.join(dangling)}" + ) + + # Validate the generated output against the OpenAPI specification + validate(result_obj, cls=validator_class) + return result + + def printout_template(self) -> str: + """Return a generic OpenAPI template pre-filled with the first class/type of the LinkML schema.""" + element_names = self.schemaview.all_classes().keys() + if not element_names: + element_names = self.schemaview.all_types().keys() + if not element_names: + # if no realistic schema and data can be used, put some placeholders + return openapi_generic_template.format( + linkml_schema_id="", data_schema="" + ) + first_element = next(iter(element_names)) + if re.search(r"[ :\d]", first_element): + first_element = f'"{first_element}"' + return openapi_generic_template.format( + linkml_schema_id=self.schema.id, data_schema=first_element + ) + + +@shared_arguments(OpenApiGenerator) +@click.command(name="openapi") +@click.option( + "--template", + "-t", + help="OpenAPI v3.0.3 template - includes the header, the endpoints and the security schemes", +) +@click.option( + "--keep-unreferenced", + "-k", + is_flag=True, + default=False, + help="Keep schemas listed in the template even if not referenced by any endpoint", +) +@click.option( + "--inline-enums", + "-e", + is_flag=True, + default=False, + help="Inline enum subschemas into their parent schemas instead of generating separate schema entries", +) +@click.version_option(__version__, "-V", "--version") +def cli(yamlfile, template, keep_unreferenced, inline_enums, **args): + """Generate an OpenAPI v3.0.3 spec with resources modelled with LinkML. + If no OpenAPI template is provided, + a generic one with one exemplary class/type schema is printed out.""" + # if no template provided, print out a generic one + if not template: + print(OpenApiGenerator(yamlfile, **args).printout_template()) + return + print( + OpenApiGenerator( + yamlfile, keep_unreferenced=keep_unreferenced, inline_enums=inline_enums, **args + ).serialize(template_file=template, **args), + end="", + ) + + +if __name__ == "__main__": + cli() diff --git a/data-model/tools/workload-management-api-1.0.0.openapi.yaml b/data-model/tools/workload-management-api-1.0.0.openapi.yaml new file mode 100644 index 00000000..a8bcff48 --- /dev/null +++ b/data-model/tools/workload-management-api-1.0.0.openapi.yaml @@ -0,0 +1,473 @@ +openapi: 3.0.3 +info: + title: Margo Workload Management API + version: 1.0.0 + description: + API for managing workloads on Margo-compliant edge devices. + Includes the APIs for exchanging desired state and current state. + Communication is secured using server-side TLS (TLS 1.3 preferred), + and payloads are signed using X.509 certificates. + +servers: + - url: https://wfm.margo.org/ + description: Workload Fleet Manager API + +security: + - PayloadSignature: [] + +paths: + /api/v1/onboarding/certificate: + get: + summary: Download Root CA certificate + security: [] + responses: + '200': + description: Root CA certificate + content: + application/json: + schema: + type: object + properties: + certificate: + type: string + description: Base64-encoded certificate text + /api/v1/onboarding: + post: + requestBody: + content: + application/json: + schema: + type: object + required: [apiVersion, kind, certificate] + properties: + apiVersion: + type: string + description: API version identifier + kind: + type: string + enum: [OnboardingRequest] + description: Resource kind + certificate: + description: Base64-encoded client certificate + type: string + required: true + responses: + '201': + content: + application/json: + schema: + properties: + clientId: + type: string + type: object + description: New client onboarded successfully. + '400': + content: + application/json: + schema: + properties: + error: + example: Invalid certificate + type: string + type: object + description: Invalid certificate format or structure. + '403': + content: + application/json: + schema: + properties: + error: + example: Client rejected + type: string + type: object + description: Client certificate not trusted or client rejected. + security: + - PayloadSignature: [] + summary: Complete onboarding with client certificate + + /api/v1/clients/{clientId}/capabilities/{deviceId}: + post: + summary: Report device capabilities + security: + - PayloadSignature: [] + parameters: + - name: clientId + in: path + required: true + schema: + type: string + - name: deviceId + in: path + required: true + schema: + $ref: '#/components/schemas/DeviceId' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/DeviceCapabilitiesManifest' + responses: + '201': + description: Capabilities reported successfully + '400': + description: Missing or invalid content-digest header. Ensure the SHA256 hash of the payload is included. + '401': + description: Signature verification failed. Ensure you are signing with the correct X.509 private key. + '403': + description: Client certificate is not trusted or has been revoked. + '404': + description: No client with the given `clientID` was found. + '422': + description: Request body includes a semantic error. + put: + summary: Update device capabilities (Update) + security: + - PayloadSignature: [] + parameters: + - name: clientId + in: path + required: true + schema: + type: string + - name: deviceId + in: path + required: true + schema: + $ref: '#/components/schemas/DeviceId' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/DeviceCapabilitiesManifest' + responses: + '201': + description: Capabilities reported successfully + '400': + description: Missing or invalid content-digest header. Ensure the SHA256 hash of the payload is included. + '401': + description: Signature verification failed. Ensure you are signing with the correct X.509 private key. + '403': + description: Client certificate is not trusted or has been revoked. + '404': + description: No client with the given `clientID` was found. + '422': + description: Request body includes a semantic error. + delete: + summary: Remove device (Unregister) + security: + - PayloadSignature: [] + parameters: + - name: clientId + in: path + required: true + schema: + type: string + - name: deviceId + in: path + required: true + schema: + $ref: '#/components/schemas/DeviceId' + responses: + '204': + description: Device capabilities removed successfully + '400': + description: Missing or invalid content-digest header. Ensure the SHA256 hash of the payload is included. + '401': + description: Signature verification failed. Ensure you are signing with the correct X.509 private key. + '403': + description: Client certificate is not trusted or has been revoked. + '404': + description: Client or device not found. + /api/v1/clients/{clientId}/bundles/{digest}: + get: + summary: Retrieve bundle information for a specific device and digest + security: + - PayloadSignature: [] + parameters: + - name: clientId + in: path + required: true + schema: + type: string + description: Unique identifier of the device-client + - name: digest + in: path + required: true + schema: + type: string + description: Content-addressable digest of the bundle archive. MUST conform to the 'digest' attribute in the Digest Specification and MUST equal the digest computed over the exact sequence of bytes (per Exact Bytes Rule) in the HTTP 200 OK response body. If the server cannot produce content whose digest matches this value it MUST return 404 Not Found. + - in: header + name: If-None-Match + required: false + schema: + type: string + description: Quoted ETag (same as digest) previously returned for this bundle. + responses: + '200': + description: Bundle archive (immutable) + headers: + ETag: + schema: + type: string + description: New ETag for the returned manifest + Cache-Control: + schema: + type: string + description: public, max-age=31536000, immutable + content: + application/vnd.margo.bundle.v1+tar+gzip: + schema: + type: string + format: binary + description: Gzip-compressed tar containing one YAML file per deployment. + '304': + description: Representation not modified + '404': + description: Bundle not found for the given digest + '400': + description: Invalid request. + # TBD + # '500': + # $ref: '#/components/responses/ErrorResponse' + + /api/v1/clients/{clientId}/deployments: + get: + summary: Retrieve the complete desired state for all workloads assigned to a device + security: + - PayloadSignature: [] + parameters: + - name: clientId + in: path + required: true + schema: + type: string + description: The unique identifier of the Edge Compute Device making the request + - name: If-None-Match + in: header + required: false + schema: + type: string + description: > + ETag value of the last successfully synced manifest. The ETag is returned to the client from the /deployments endpoint, it is the digest of the state manifest. + - name: Accept + in: header + required: false + schema: + type: string + description: > + Indicates which manifest formats the client supports. + Supported values: application/vnd.margo.manifest.v1+json. + responses: + '200': + description: Manifest returned in the negotiated format + headers: + Content-Type: + schema: + type: string + description: Format of the returned manifest + ETag: + schema: + type: string + description: New ETag for the returned manifest + content: + application/vnd.margo.manifest.v1+json: + schema: + $ref: '#/components/schemas/UnsignedAppStateManifest' + '304': + description: Not Modified - Manifest has not changed + '406': + description: Not Acceptable - Server cannot generate a response matching the Accept header + + + /api/v1/clients/{clientId}/deployments/{deploymentId}/{digest}: + get: + summary: Retrieve an individual ApplicationDeployment YAML file + security: + - PayloadSignature: [] + description: > + This endpoint is used by the client to fetch the YAML for a single ApplicationDeployment after it has processed a new State Manifest and identified a small number of new or updated deployments. This allows for highly efficient, incremental updates without needing to download the full bundle. + To make individual workload retrievals race-free and cache-friendly, this endpoint is content-addressable: the digest of the expected YAML is part of the URL. This guarantees immutability of the fetched resource and prevents a time-of-check / time-of-use race where a deployment changes between manifest retrieval and content fetch. + parameters: + - name: clientId + in: path + required: true + schema: + type: string + description: Unique identifier of the Edge Compute Device + - name: deploymentId + in: path + required: true + schema: + type: string + description: Unique identifier for the application deployment + - name: digest + in: path + required: true + schema: + type: string + description: > + Content-addressable digest of the ApplicationDeployment YAML file. MUST conform to the Digest Specification and MUST equal the digest computed over the exact sequence of bytes (per Exact Bytes Rule) in the HTTP 200 OK response body. If the server cannot produce content whose digest matches this value it MUST return 404 Not Found. + - name: If-None-Match + in: header + required: false + schema: + type: string + description: > + Optional ETag for caching. The ETag is returned to the client from the /deployments endpoint, it is the digest of the state manifest. + - name: Accept-Encoding + in: header + required: false + schema: + type: string + description: Indicates supported compression formats (e.g., gzip, br) + responses: + '200': + description: > + The response body is the raw ApplicationDeployment YAML file (Content-Type: application/yaml). The content MUST match the {digest} path segment; the server MUST return 404 if it does not have the exact digest referenced. + headers: + Content-Type: + schema: + type: string + description: application/yaml + ETag: + schema: + type: string + description: > + The ETag is returned to the client from the /deployments endpoint, it is the digest of the state manifest. + Cache-Control: + schema: + type: string + description: public, max-age=31536000, immutable + Vary: + schema: + type: string + description: Accept-Encoding + content: + application/yaml: + schema: + type: string + description: Raw YAML content of the ApplicationDeployment + '404': + description: Deployment not found for the given digest + + /api/v1/clients/{clientId}/deployments/{deploymentId}/status: + post: + summary: Report deployment status + security: + - PayloadSignature: [] + parameters: + - name: clientId + in: path + required: true + schema: + type: string + - name: deploymentId + in: path + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/DeploymentStatusManifest' + responses: + '200': + description: The deployment status was added, or updated, successfully. + '400': + description: Missing or invalid content-digest header. Ensure the SHA256 hash of the base64-encoded payload is included. + '401': + description: Signature verification failed. Ensure you are signing with the correct X.509 private key. + '403': + description: Client certificate is not trusted or has been revoked. + '422': + description: Request body includes a semantic error. + +components: + securitySchemes: + # TODO: fix this as we are following RFC 9421, instead of a custom signature header field + PayloadSignature: + type: apiKey + in: header + name: X-Payload-Signature + description: > + Base64-encoded payload signature using SHA-256 and device certificate. + Format: public_key;digital_signature + + # Modifications compared to pre-data-model stage: + # - ManifestVersion INLINED into UnsignedAppStateManifest(OpenAPI)/DesiredStateManifest(LinkML) + # - appDeploymentParams INLINED into appDeploymentSpec(OpenAPI)/Spec(LinkML) + schemas: + UnsignedAppStateManifest: + type: object + description: >- + Manifest from the Workload Fleet Manager, representing the complete desired workload configuration assigned to the device. + x-linkml-schema: https://specification.margo.org/data-model + x-linkml-source: DesiredStateManifest + DeviceCapabilitiesManifest: + type: object + description: >- + Capabilities of a device on which applications can be deployed. + x-linkml-schema: https://specification.margo.org/data-model + x-linkml-source: DeviceCapabilitiesManifest + DeploymentStatusManifest: + description: >- + Manifest sent by the device client to report the deployment status of a workload. + type: object + x-linkml-schema: https://specification.margo.org/data-model + x-linkml-source: DeploymentStatusManifest + DeviceId: + description: >- + Device properties reported to the WFM. + type: object + x-linkml-schema: https://specification.margo.org/data-model + x-linkml-source: FlatDeviceId + DeviceId_with_asterisk: + description: >- + Device properties reported to the WFM. + type: object + x-linkml-schema: https://specification.margo.org/data-model + x-linkml-source: HierarchicalDeviceId + appDeploymentManifest: + type: object + x-linkml-schema: https://specification.margo.org/data-model + x-linkml-source: ApplicationDeployment + appDeploymentMetadata: + type: object + x-linkml-schema: https://specification.margo.org/data-model + x-linkml-source: DeploymentMetadata + appDeploymentProfile: + type: object + x-linkml-schema: https://specification.margo.org/data-model + x-linkml-source: DeploymentProfile + appDeploymentSpec: + type: object + x-linkml-schema: https://specification.margo.org/data-model + x-linkml-source: Spec + appParameterTarget: + type: object + x-linkml-schema: https://specification.margo.org/data-model + x-linkml-source: Target + DeploymentBundleRef: + type: object + x-linkml-schema: https://specification.margo.org/data-model + x-linkml-source: Bundle + DeploymentManifestRef: + type: object + x-linkml-schema: https://specification.margo.org/data-model + x-linkml-source: Deployment + helmApplicationDeploymentProfileComponent: + type: object + x-linkml-schema: https://specification.margo.org/data-model + x-linkml-source: HelmComponent + composeApplicationDeploymentProfileComponent: + type: object + x-linkml-schema: https://specification.margo.org/data-model + x-linkml-source: ComposeComponent + appParameterValue: + type: object + x-linkml-schema: https://specification.margo.org/data-model + x-linkml-source: Parameter.identifier From 1af467f2b9440fcdc487cbc829643ee97e1ff7f2 Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Wed, 15 Jul 2026 19:01:31 +0200 Subject: [PATCH 03/24] openapi-validation: add tool to validate openapi generation Signed-off-by: Silvano Cirujano Cuesta --- data-model/tools/validate-openapi.py | 474 +++++++++++++++++++++++++++ 1 file changed, 474 insertions(+) create mode 100644 data-model/tools/validate-openapi.py diff --git a/data-model/tools/validate-openapi.py b/data-model/tools/validate-openapi.py new file mode 100644 index 00000000..d012beaa --- /dev/null +++ b/data-model/tools/validate-openapi.py @@ -0,0 +1,474 @@ +#!/usr/bin/env python3 +"""Compare the pre-draft OpenAPI spec with the generated one at object level.""" + +import json +import os +import re +import subprocess +import sys +import tempfile +from pathlib import Path + +import yaml + + +ROOT = Path(__file__).resolve().parent.parent.parent +PRE_DRAFT_FILE = "system-design/specification/margo-management-interface/workload-management-api-1.0.0.yaml" +GENERATED_FILE = "generated/openapi/workload-management-api-1.0.0.openapi.yaml" + + +def get_pre_draft_spec() -> dict: + """Retrieve the OpenAPI spec from the pre-draft branch.""" + result = subprocess.run( + ["git", "show", f"pre-draft:{PRE_DRAFT_FILE}"], + capture_output=True, text=True, cwd=ROOT, + ) + if result.returncode != 0: + print(f"ERROR: could not retrieve pre-draft file: {result.stderr}", file=sys.stderr) + sys.exit(1) + return yaml.safe_load(result.stdout) + + +def get_generated_spec() -> dict: + """Read the generated OpenAPI spec from disk.""" + path = ROOT / GENERATED_FILE + if not path.exists(): + print(f"ERROR: generated file not found: {path}", file=sys.stderr) + sys.exit(1) + with open(path) as f: + return yaml.safe_load(f) + + +def deep_diff(label: str, ref, gen, path: str = "", errors: list | None = None) -> list: + """Recursively compare two YAML-parsed objects and collect differences.""" + if errors is None: + errors = [] + + if type(ref) != type(gen): + errors.append(f"{path}: TYPE MISMATCH — {type(ref).__name__} vs {type(gen).__name__}") + return errors + + if isinstance(ref, dict): + ref_keys = set(ref.keys()) + gen_keys = set(gen.keys()) + only_ref = ref_keys - gen_keys + only_gen = gen_keys - ref_keys + if only_ref: + errors.append(f"{path}: MISSING IN GENERATED — {sorted(only_ref)}") + if only_gen: + errors.append(f"{path}: EXTRA IN GENERATED — {sorted(only_gen)}") + common = ref_keys & gen_keys + for key in sorted(common): + deep_diff(label, ref[key], gen[key], f"{path}.{key}", errors) + elif isinstance(ref, list): + if len(ref) != len(gen): + errors.append(f"{path}: LIST LENGTH MISMATCH — {len(ref)} vs {len(gen)}") + else: + for i, (r, g) in enumerate(zip(ref, gen)): + deep_diff(label, r, g, f"{path}[{i}]", errors) + elif isinstance(ref, str): + if ref != gen: + errors.append(f"{path}: STRING MISMATCH — {ref!r} vs {gen!r}") + elif isinstance(ref, (int, float)): + if ref != gen: + errors.append(f"{path}: NUMBER MISMATCH — {ref!r} vs {gen!r}") + elif isinstance(ref, bool): + if ref != gen: + errors.append(f"{path}: BOOL MISMATCH — {ref!r} vs {gen!r}") + elif ref is None: + if gen is not None: + errors.append(f"{path}: NULL MISMATCH — None vs {gen!r}") + else: + if ref != gen: + errors.append(f"{path}: VALUE MISMATCH — {ref!r} vs {gen!r}") + + return errors + + +def compare_section(label: str, ref: dict, gen: dict, path: str, errors: list) -> None: + """Compare a top-level section.""" + section_errors = deep_diff(label, ref.get(path, {}), gen.get(path, {}), path) + if section_errors: + print(f"\n {label} ({len(section_errors)} diff(s)):") + for e in section_errors: + print(f" - {e}") + else: + print(f" {label}: ✓ IDENTICAL") + + +MARKER_LINE = " # Schemas removed because they are neither direct nor transitive requirements:" + +TEMPLATE_FILE = "data-model/tools/workload-management-api-1.0.0.openapi.yaml" + +# Pattern for standardized INLINED comments: INLINED into (OpenAPI)[/(LinkML)] +INLINED_PATTERN = re.compile(r"#\s*-\s*(\S+)\s+INLINED\s+into\s+\S+\(OpenAPI\)(?:/\S+\(LinkML\))?") + + +def get_inlined_schemas() -> set[str]: + """Scan the template file for INLINED comment markers and return schema names.""" + path = ROOT / TEMPLATE_FILE + if not path.exists(): + return set() + result: set[str] = set() + with open(path) as f: + for line in f: + m = INLINED_PATTERN.search(line) + if m: + result.add(m.group(1)) + return result + + +def get_xlinkml_renames() -> dict[str, str]: + """Extract x-linkml-source renames from the template file.""" + renames: dict[str, str] = {} + path = ROOT / TEMPLATE_FILE + if not path.exists(): + return renames + with open(path) as f: + tpl = yaml.safe_load(f) + schemas = tpl.get("components", {}).get("schemas", {}) + for name, spec in schemas.items(): + src = spec.get("x-linkml-source") + if src and src != name: + renames[name] = src + return renames + + +def find_rename_candidates( + ref_schemas: dict, gen_schemas: dict +) -> list[tuple[str, str, float]]: + """Heuristically match missing ref schemas to extra gen schemas by structure. + + Compares property sets, required fields, and type (excluding descriptions). + Returns (ref_name, gen_name, score) tuples sorted by descending score. + """ + def _signature(name: str, s: dict) -> dict: + props = set(s.get("properties", {}).keys()) if isinstance(s.get("properties"), dict) else set() + req = set(s.get("required", [])) + typ = s.get("type") + return {"props": props, "req": req, "type": typ, "name": name} + + ref_sigs = {n: _signature(n, s) for n, s in ref_schemas.items()} + gen_sigs = {n: _signature(n, s) for n, s in gen_schemas.items()} + + candidates: list[tuple[str, str, float]] = [] + for rn, rs in ref_sigs.items(): + if rn in gen_schemas: + continue + for gn, gs in gen_sigs.items(): + if gn in ref_schemas: + continue + if rs["type"] != gs["type"]: + continue + prop_union = rs["props"] | gs["props"] + if not prop_union: + continue + prop_score = len(rs["props"] & gs["props"]) / len(prop_union) + req_score = ( + 1.0 + if not rs["req"] and not gs["req"] + else len(rs["req"] & gs["req"]) / len(rs["req"] | gs["req"]) + ) + score = 0.7 * prop_score + 0.3 * req_score + if score >= 0.3: + candidates.append((rn, gn, round(score, 3))) + candidates.sort(key=lambda x: -x[2]) + return candidates + + +def get_not_needed_schemas() -> set[str]: + """Scan the generated file text for a block comment listing removed schemas. + + Looks for a line matching MARKER_LINE, then collects every following + `` # `` line until a non-matching line is encountered. + """ + path = ROOT / GENERATED_FILE + if not path.exists(): + return set() + result = set() + in_block = False + schema_pat = re.compile(r"^ # (\S+)") + with open(path) as f: + for line in f: + if line.rstrip("\n") == MARKER_LINE: + in_block = True + continue + if in_block: + m = schema_pat.match(line) + if m: + result.add(m.group(1)) + else: + break + return result + + +def _schema_signature(s: dict) -> dict: + """Extract a comparable signature from a schema dict, ignoring descriptions.""" + if not isinstance(s, dict): + return {} + props = s.get("properties", {}) + return { + "type": s.get("type"), + "properties": set(props.keys()) if isinstance(props, dict) else set(), + "required": set(s.get("required", [])), + "enum": sorted(s.get("enum", [])) if isinstance(s.get("enum"), list) else [], + "additionalProperties": isinstance(s.get("additionalProperties"), dict) or s.get("additionalProperties") is True, + } + + +def _collect_inline_properties(ref_schemas: dict) -> list[tuple[str, str, dict]]: + """Walk all pre-draft schemas and collect inline object properties. + + Only collects nested properties (not the top-level schema itself) + to avoid false matches where a gen schema is structurally similar + to a parent schema that happens to share property names. + + Returns [(parent_name, property_path, inline_schema), ...] where + property_path is e.g. 'properties.foo.items' for nested inline objects. + """ + results: list[tuple[str, str, dict]] = [] + + def _walk(obj, parent: str, path: str, depth: int = 0): + if depth > 8: + return + if isinstance(obj, dict): + # Recurse into properties (skip top-level by requiring depth > 0 for the object itself) + props = obj.get("properties", {}) + if isinstance(props, dict): + for pname, pval in props.items(): + if isinstance(pval, dict) and "$ref" not in pval: + # Collect this inline property + if "properties" in pval or "enum" in pval or "items" in pval: + results.append((parent, f"{path}.properties.{pname}", pval)) + _walk(pval, parent, f"{path}.properties.{pname}", depth + 1) + # Recurse into items + items = obj.get("items", {}) + if isinstance(items, dict) and "$ref" not in items: + if "properties" in items or "enum" in items: + results.append((parent, f"{path}.items", items)) + _walk(items, parent, f"{path}.items", depth + 1) + # Recurse into additionalProperties + ap = obj.get("additionalProperties", {}) + if isinstance(ap, dict) and "$ref" not in ap: + if "properties" in ap or "enum" in ap: + results.append((parent, f"{path}.additionalProperties", ap)) + _walk(ap, parent, f"{path}.additionalProperties", depth + 1) + # Recurse into anyOf / oneOf / allOf + for comb in ("anyOf", "oneOf", "allOf"): + for i, entry in enumerate(obj.get(comb, [])): + if isinstance(entry, dict) and "$ref" not in entry: + if "properties" in entry or "enum" in entry: + results.append((parent, f"{path}.{comb}[{i}]", entry)) + _walk(entry, parent, f"{path}.{comb}[{i}]", depth + 1) + elif isinstance(obj, list): + for i, item in enumerate(obj): + if isinstance(item, dict) and "$ref" not in item: + if "properties" in item or "enum" in item: + results.append((parent, f"{path}[{i}]", item)) + _walk(item, parent, f"{path}[{i}]", depth + 1) + + for schema_name, schema_def in ref_schemas.items(): + if isinstance(schema_def, dict): + _walk(schema_def, schema_name, schema_name) + + return results + + +def find_inlined_candidates( + ref_schemas: dict, gen_schemas: dict, extra_gen: set[str] +) -> list[tuple[str, str, float]]: + """For each extra gen schema, find a matching inline property in the pre-draft. + + Returns [(gen_name, parent.property_path, score), ...] sorted by descending score. + """ + inline_props = _collect_inline_properties(ref_schemas) + gen_sigs = {n: _schema_signature(s) for n, s in gen_schemas.items() if n in extra_gen} + if not gen_sigs: + return [] + + candidates: list[tuple[str, str, float]] = [] + for gen_name, gs in gen_sigs.items(): + for parent_name, prop_path, inline_def in inline_props: + rs = _schema_signature(inline_def) + if rs["type"] and rs["type"] != gs["type"]: + continue + if rs["enum"] and rs["enum"] != gs["enum"]: + continue + prop_union = rs["properties"] | gs["properties"] + if not prop_union: + continue + prop_score = len(rs["properties"] & gs["properties"]) / len(prop_union) + req_score = ( + 1.0 + if not rs["required"] and not gs["required"] + else len(rs["required"] & gs["required"]) / len(rs["required"] | gs["required"]) + ) + score = round(0.7 * prop_score + 0.3 * req_score, 3) + candidates.append((gen_name, prop_path, score)) + + candidates.sort(key=lambda x: -x[2]) + return candidates + + +def main(): + print("=" * 60) + print("OpenAPI Spec Validation: pre-draft vs generated") + print("=" * 60) + + ref = get_pre_draft_spec() + gen = get_generated_spec() + + # 1. Info + print("\n--- Top-level ---") + for key in ["openapi", "info"]: + compare_section(key, ref, gen, key, []) + + # 2. Servers + compare_section("servers", ref, gen, "servers", []) + + # 3. Security + compare_section("security", ref, gen, "security", []) + + # 4. Paths + print(f"\n--- Paths ---") + ref_paths = ref.get("paths", {}) + gen_paths = gen.get("paths", {}) + ref_pkeys = set(ref_paths.keys()) + gen_pkeys = set(gen_paths.keys()) + only_ref_p = ref_pkeys - gen_pkeys + only_gen_p = gen_pkeys - ref_pkeys + common_p = ref_pkeys & gen_pkeys + + if only_ref_p: + print(f" MISSING IN GENERATED ({len(only_ref_p)}): {sorted(only_ref_p)}") + if only_gen_p: + print(f" EXTRA IN GENERATED ({len(only_gen_p)}): {sorted(only_gen_p)}") + + for path in sorted(common_p): + ref_methods = ref_paths[path] + gen_methods = gen_paths[path] + ref_mkeys = set(ref_methods.keys()) + gen_mkeys = set(gen_methods.keys()) + only_ref_m = ref_mkeys - gen_mkeys + only_gen_m = gen_mkeys - ref_mkeys + + if only_ref_m or only_gen_m: + print(f" {path}: METHOD DIFF — ref={sorted(ref_mkeys)} gen={sorted(gen_mkeys)}") + else: + all_method_ok = True + for method in sorted(ref_mkeys): + errs = deep_diff(path, ref_methods[method], gen_methods[method], f"{path}.{method}") + if errs: + all_method_ok = False + print(f" {path}.{method}: {len(errs)} diff(s)") + for e in errs[:3]: + print(f" - {e}") + if all_method_ok: + print(f" {path}: ✓ IDENTICAL") + + # 5. Components (excluding schemas — handled separately) + print(f"\n--- Components (non-schemas) ---") + ref_comp = ref.get("components", {}) + gen_comp = gen.get("components", {}) + comp_keys = set(ref_comp.keys()) | set(gen_comp.keys()) + for ck in sorted(comp_keys): + if ck == "schemas": + continue + compare_section(f"components.{ck}", ref_comp, gen_comp, ck, []) + + # 6. Schemas (detailed) + print(f"\n--- components/schemas ---") + ref_schemas = ref_comp.get("schemas", {}) + gen_schemas = gen_comp.get("schemas", {}) + not_needed = get_not_needed_schemas() + inlined = get_inlined_schemas() + xlinkml_renames = get_xlinkml_renames() + rename_candidates = find_rename_candidates(ref_schemas, gen_schemas) + + ref_keys = set(ref_schemas.keys()) + gen_keys = set(gen_schemas.keys()) + only_ref = ref_keys - gen_keys + only_gen = gen_keys - ref_keys + common = ref_keys & gen_keys + intentionally_omitted = (only_ref & not_needed) | (only_ref & inlined) + truly_missing = only_ref - not_needed - inlined + + inlined_candidates = find_inlined_candidates(ref_schemas, gen_schemas, only_gen) + # Deduplicate: pick the best match per gen schema + best_per_schema: dict[str, tuple[str, float]] = {} + for gen_name, prop_path, score in inlined_candidates: + prev = best_per_schema.get(gen_name) + if prev is None or score > prev[1]: + best_per_schema[gen_name] = (prop_path, score) + high_scoring_inlined = [] + explained_extra: set[str] = set() + for gen_name, (prop_path, score) in sorted(best_per_schema.items(), key=lambda x: -x[1][1]): + if score >= 0.9: + high_scoring_inlined.append((gen_name, prop_path, score)) + explained_extra.add(gen_name) + unexplained_extra = only_gen - explained_extra + + print(f"\n Schemas ({len(ref_keys)} ref, {len(gen_keys)} gen, {len(not_needed)} NOT-NEEDED, {len(inlined)} INLINED):") + + if xlinkml_renames: + print(f" x-linkml-source RENAMES ({len(xlinkml_renames)}):") + for openapi_name, linkml_name in sorted(xlinkml_renames.items()): + print(f" {openapi_name} ← {linkml_name}") + + if intentionally_omitted: + not_needed_only = intentionally_omitted & not_needed + inlined_only = intentionally_omitted & inlined + if not_needed_only: + print(f" NOT-NEEDED ({len(not_needed_only)}): {sorted(not_needed_only)}") + if inlined_only: + print(f" INLINED SUBSCHEMAS ({len(inlined_only)}): {sorted(inlined_only)}") + + if truly_missing: + print(f" MISSING IN GENERATED ({len(truly_missing)}): {sorted(truly_missing)}") + + if high_scoring_inlined: + print(f" INFERRED INLINED ({len(high_scoring_inlined)}):") + for gen_name, prop_path, score in sorted(high_scoring_inlined, key=lambda x: -x[2]): + print(f" {gen_name} inlined into {prop_path} (score {score})") + + if unexplained_extra: + print(f" EXTRA IN GENERATED ({len(unexplained_extra)}): {sorted(unexplained_extra)}") + + if rename_candidates: + print(f" RENAME CANDIDATES (missing → extra, by structural similarity):") + shown = 0 + for ref_name, gen_name, score in rename_candidates: + if ref_name in truly_missing and gen_name in unexplained_extra: + print(f" {ref_name} ↔ {gen_name} (score {score})") + shown += 1 + if shown >= 5: + break + + if common: + changed = 0 + for name in sorted(common): + ref_s = ref_schemas[name] + gen_s = gen_schemas[name] + s_errors = deep_diff("", ref_s, gen_s, name) + if s_errors: + changed += 1 + if changed <= 3: + print(f" {name}: CHANGED ({len(s_errors)} diff(s))") + for e in s_errors[:5]: + print(f" - {e}") + unchanged = len(common) - changed + print(f" Common schemas: {unchanged} identical, {changed} changed") + if changed > 3: + print(f" (only first 3 changed shown; {changed} total)") + + print("\n" + "=" * 60) + total_errors = len(deep_diff("", ref, gen, "")) + if total_errors == 0: + print("RESULT: FULLY IDENTICAL ✓") + else: + print(f"RESULT: {total_errors} difference(s) found") + print("=" * 60) + + +if __name__ == "__main__": + main() From 23dfd30b6de46e01e193a5d66a7ee3fd7a784749 Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Sat, 18 Jul 2026 11:42:26 +0200 Subject: [PATCH 04/24] tests: add (in)valid examples for data-model validation Signed-off-by: Silvano Cirujano Cuesta --- .../invalid/ApplicationDeployment-001.yaml | 92 ++++++++ .../invalid/ApplicationDeployment-002.yaml | 92 ++++++++ .../invalid/ApplicationDeployment-003.yaml | 92 ++++++++ .../invalid/ApplicationDeployment-004.yaml | 92 ++++++++ .../invalid/ApplicationDescription-001.yaml | 59 +++++ .../invalid/DeploymentStatusManifest-001.json | 14 ++ .../invalid/DeploymentStatusManifest-002.json | 14 ++ .../invalid/DeploymentStatusManifest-003.json | 13 ++ .../invalid/DesiredStateManifest-001.json | 15 ++ .../invalid/DesiredStateManifest-002.json | 15 ++ .../invalid/DesiredStateManifest-003.json | 15 ++ .../invalid/DesiredStateManifest-004.json | 10 + .../DeviceCapabilitiesManifest-001.json | 37 ++++ .../DeviceCapabilitiesManifest-002.json | 36 +++ .../DeviceCapabilitiesManifest-003.json | 37 ++++ .../valid/ApplicationDeployment-compose.yaml | 65 ++++++ .../valid/ApplicationDeployment-helm.yaml | 89 ++++++++ ...plicationDescription-helm_and_compose.yaml | 208 ++++++++++++++++++ .../ApplicationDescription-helm_only.yaml | 59 +++++ .../valid/DeploymentStatusManifest-001.json | 22 ++ .../valid/DesiredStateManifest-001.json | 15 ++ .../valid/DeviceCapabilitiesManifest-001.json | 37 ++++ 22 files changed, 1128 insertions(+) create mode 100644 data-model/resources/examples/invalid/ApplicationDeployment-001.yaml create mode 100644 data-model/resources/examples/invalid/ApplicationDeployment-002.yaml create mode 100644 data-model/resources/examples/invalid/ApplicationDeployment-003.yaml create mode 100644 data-model/resources/examples/invalid/ApplicationDeployment-004.yaml create mode 100644 data-model/resources/examples/invalid/ApplicationDescription-001.yaml create mode 100644 data-model/resources/examples/invalid/DeploymentStatusManifest-001.json create mode 100644 data-model/resources/examples/invalid/DeploymentStatusManifest-002.json create mode 100644 data-model/resources/examples/invalid/DeploymentStatusManifest-003.json create mode 100644 data-model/resources/examples/invalid/DesiredStateManifest-001.json create mode 100644 data-model/resources/examples/invalid/DesiredStateManifest-002.json create mode 100644 data-model/resources/examples/invalid/DesiredStateManifest-003.json create mode 100644 data-model/resources/examples/invalid/DesiredStateManifest-004.json create mode 100644 data-model/resources/examples/invalid/DeviceCapabilitiesManifest-001.json create mode 100644 data-model/resources/examples/invalid/DeviceCapabilitiesManifest-002.json create mode 100644 data-model/resources/examples/invalid/DeviceCapabilitiesManifest-003.json create mode 100644 data-model/resources/examples/valid/ApplicationDeployment-compose.yaml create mode 100644 data-model/resources/examples/valid/ApplicationDeployment-helm.yaml create mode 100644 data-model/resources/examples/valid/ApplicationDescription-helm_and_compose.yaml create mode 100644 data-model/resources/examples/valid/ApplicationDescription-helm_only.yaml create mode 100644 data-model/resources/examples/valid/DeploymentStatusManifest-001.json create mode 100644 data-model/resources/examples/valid/DesiredStateManifest-001.json create mode 100644 data-model/resources/examples/valid/DeviceCapabilitiesManifest-001.json diff --git a/data-model/resources/examples/invalid/ApplicationDeployment-001.yaml b/data-model/resources/examples/invalid/ApplicationDeployment-001.yaml new file mode 100644 index 00000000..e3438545 --- /dev/null +++ b/data-model/resources/examples/invalid/ApplicationDeployment-001.yaml @@ -0,0 +1,92 @@ +# Demonstrates validation of metadata.annotations.id +# Invalid kind of Kubernetes custom resource. +apiVersion: application.margo.org/v1alpha1 +# `kind` != `ApplicationDeployment` +kind: SomethingErroneous +metadata: + annotations: + applicationId: com-northstartida-digitron-orchestrator + id: a3e2f5dc-912e-494f-8395-52cf3769bc06 + name: com-northstartida-digitron-orchestrator-deployment + namespace: margo-poc +spec: + deploymentProfile: + type: helm.v3 + components: + - name: database-services + properties: + repository: oci://quay.io/charts/realtime-database-services + revision: 2.3.7 + timeout: 8m30s + wait: true + - name: digitron-orchestrator + properties: + repository: oci://northstarida.azurecr.io/charts/northstarida-digitron-orchestrator + revision: 1.0.9 + wait: true + parameters: + adminName: + value: Some One + targets: + - pointer: administrator.name + components: + - digitron-orchestrator + adminPrincipalName: + value: someone@somewhere.com + targets: + - pointer: administrator.userPrincipalName + components: + - digitron-orchestrator + cpuLimit: + value: "4" + targets: + - pointer: settings.limits.cpu + components: + - digitron-orchestrator + idpClientId: + value: 123-ABC + targets: + - pointer: idp.clientId + components: + - digitron-orchestrator + idpName: + value: Azure AD + targets: + - pointer: idp.name + components: + - digitron-orchestrator + idpProvider: + value: aad + targets: + - pointer: idp.provider + components: + - digitron-orchestrator + idpUrl: + value: https://123-abc.com + targets: + - pointer: idp.providerUrl + components: + - digitron-orchestrator + - pointer: idp.providerMetadata + components: + - digitron-orchestrator + memoryLimit: + value: "16384" + targets: + - pointer: settings.limits.memory + components: + - digitron-orchestrator + pollFrequency: + value: "120" + targets: + - pointer: settings.pollFrequency + components: + - digitron-orchestrator + - database-services + siteId: + value: SID-123-ABC + targets: + - pointer: settings.siteId + components: + - digitron-orchestrator + - database-services diff --git a/data-model/resources/examples/invalid/ApplicationDeployment-002.yaml b/data-model/resources/examples/invalid/ApplicationDeployment-002.yaml new file mode 100644 index 00000000..8876caa5 --- /dev/null +++ b/data-model/resources/examples/invalid/ApplicationDeployment-002.yaml @@ -0,0 +1,92 @@ +# Demonstrates validation of metadata.annotations.applicationId +# Invalid characters being used. +apiVersion: application.margo.org/v1alpha1 +kind: ApplicationDeployment +metadata: + annotations: + # id contains invalid characters: upper-case letters ('A' and 'Z'), special characters ('.' and '_') + applicationId: com_northstartida.Digitron-Orchestrator + id: a3e2f5dc-912e-494f-8395-52cf3769bc06 + name: com-northstartida-digitron-orchestrator-deployment + namespace: margo-poc +spec: + deploymentProfile: + type: helm.v3 + components: + - name: database-services + properties: + repository: oci://quay.io/charts/realtime-database-services + revision: 2.3.7 + timeout: 8m30s + wait: true + - name: digitron-orchestrator + properties: + repository: oci://northstarida.azurecr.io/charts/northstarida-digitron-orchestrator + revision: 1.0.9 + wait: true + parameters: + adminName: + value: Some One + targets: + - pointer: administrator.name + components: + - digitron-orchestrator + adminPrincipalName: + value: someone@somewhere.com + targets: + - pointer: administrator.userPrincipalName + components: + - digitron-orchestrator + cpuLimit: + value: "4" + targets: + - pointer: settings.limits.cpu + components: + - digitron-orchestrator + idpClientId: + value: 123-ABC + targets: + - pointer: idp.clientId + components: + - digitron-orchestrator + idpName: + value: Azure AD + targets: + - pointer: idp.name + components: + - digitron-orchestrator + idpProvider: + value: aad + targets: + - pointer: idp.provider + components: + - digitron-orchestrator + idpUrl: + value: https://123-abc.com + targets: + - pointer: idp.providerUrl + components: + - digitron-orchestrator + - pointer: idp.providerMetadata + components: + - digitron-orchestrator + memoryLimit: + value: "16384" + targets: + - pointer: settings.limits.memory + components: + - digitron-orchestrator + pollFrequency: + value: "120" + targets: + - pointer: settings.pollFrequency + components: + - digitron-orchestrator + - database-services + siteId: + value: SID-123-ABC + targets: + - pointer: settings.siteId + components: + - digitron-orchestrator + - database-services diff --git a/data-model/resources/examples/invalid/ApplicationDeployment-003.yaml b/data-model/resources/examples/invalid/ApplicationDeployment-003.yaml new file mode 100644 index 00000000..62513516 --- /dev/null +++ b/data-model/resources/examples/invalid/ApplicationDeployment-003.yaml @@ -0,0 +1,92 @@ +# Demonstrates validation of metadata.annotations.applicationId +# Too long. +apiVersion: application.margo.org/v1alpha1 +kind: ApplicationDeployment +metadata: + annotations: + # id is over 200 characters long (it is 201 characters long) + applicationId: "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901" + id: a3e2f5dc-912e-494f-8395-52cf3769bc06 + name: com-northstartida-digitron-orchestrator-deployment + namespace: margo-poc +spec: + deploymentProfile: + type: helm.v3 + components: + - name: database-services + properties: + repository: oci://quay.io/charts/realtime-database-services + revision: 2.3.7 + timeout: 8m30s + wait: true + - name: digitron-orchestrator + properties: + repository: oci://northstarida.azurecr.io/charts/northstarida-digitron-orchestrator + revision: 1.0.9 + wait: true + parameters: + adminName: + value: Some One + targets: + - pointer: administrator.name + components: + - digitron-orchestrator + adminPrincipalName: + value: someone@somewhere.com + targets: + - pointer: administrator.userPrincipalName + components: + - digitron-orchestrator + cpuLimit: + value: "4" + targets: + - pointer: settings.limits.cpu + components: + - digitron-orchestrator + idpClientId: + value: 123-ABC + targets: + - pointer: idp.clientId + components: + - digitron-orchestrator + idpName: + value: Azure AD + targets: + - pointer: idp.name + components: + - digitron-orchestrator + idpProvider: + value: aad + targets: + - pointer: idp.provider + components: + - digitron-orchestrator + idpUrl: + value: https://123-abc.com + targets: + - pointer: idp.providerUrl + components: + - digitron-orchestrator + - pointer: idp.providerMetadata + components: + - digitron-orchestrator + memoryLimit: + value: "16384" + targets: + - pointer: settings.limits.memory + components: + - digitron-orchestrator + pollFrequency: + value: "120" + targets: + - pointer: settings.pollFrequency + components: + - digitron-orchestrator + - database-services + siteId: + value: SID-123-ABC + targets: + - pointer: settings.siteId + components: + - digitron-orchestrator + - database-services diff --git a/data-model/resources/examples/invalid/ApplicationDeployment-004.yaml b/data-model/resources/examples/invalid/ApplicationDeployment-004.yaml new file mode 100644 index 00000000..ec985bec --- /dev/null +++ b/data-model/resources/examples/invalid/ApplicationDeployment-004.yaml @@ -0,0 +1,92 @@ +# Demonstrates validation of metadata.annotations.id +# Not a valid UUID. +apiVersion: application.margo.org/v1alpha1 +kind: ApplicationDeployment +metadata: + annotations: + applicationId: com-northstartida-digitron-orchestrator + # id is not a valid UUID + id: this-is-definitively-not-a-uuid + name: com-northstartida-digitron-orchestrator-deployment + namespace: margo-poc +spec: + deploymentProfile: + type: helm.v3 + components: + - name: database-services + properties: + repository: oci://quay.io/charts/realtime-database-services + revision: 2.3.7 + timeout: 8m30s + wait: true + - name: digitron-orchestrator + properties: + repository: oci://northstarida.azurecr.io/charts/northstarida-digitron-orchestrator + revision: 1.0.9 + wait: true + parameters: + adminName: + value: Some One + targets: + - pointer: administrator.name + components: + - digitron-orchestrator + adminPrincipalName: + value: someone@somewhere.com + targets: + - pointer: administrator.userPrincipalName + components: + - digitron-orchestrator + cpuLimit: + value: "4" + targets: + - pointer: settings.limits.cpu + components: + - digitron-orchestrator + idpClientId: + value: 123-ABC + targets: + - pointer: idp.clientId + components: + - digitron-orchestrator + idpName: + value: Azure AD + targets: + - pointer: idp.name + components: + - digitron-orchestrator + idpProvider: + value: aad + targets: + - pointer: idp.provider + components: + - digitron-orchestrator + idpUrl: + value: https://123-abc.com + targets: + - pointer: idp.providerUrl + components: + - digitron-orchestrator + - pointer: idp.providerMetadata + components: + - digitron-orchestrator + memoryLimit: + value: "16384" + targets: + - pointer: settings.limits.memory + components: + - digitron-orchestrator + pollFrequency: + value: "120" + targets: + - pointer: settings.pollFrequency + components: + - digitron-orchestrator + - database-services + siteId: + value: SID-123-ABC + targets: + - pointer: settings.siteId + components: + - digitron-orchestrator + - database-services diff --git a/data-model/resources/examples/invalid/ApplicationDescription-001.yaml b/data-model/resources/examples/invalid/ApplicationDescription-001.yaml new file mode 100644 index 00000000..02c3ae6d --- /dev/null +++ b/data-model/resources/examples/invalid/ApplicationDescription-001.yaml @@ -0,0 +1,59 @@ +apiVersion: margo.org/v1-alpha1 +kind: ApplicationSpecification +metadata: + id: com-northstartida-hello-world + name: Hello World + description: A basic hello world application + version: "1.0" + catalog: + application: + icon: ./resources/hw-logo.png + tagline: Northstar Industrial Application's hello world application. + descriptionFile: ./resources/description.md + releaseNotes: ./resources/release-notes.md + licenseFile: ./resources/license.pdf + site: http://www.northstar-ida.com + tags: ["monitoring"] + author: + - name: Roger Wilkershank + email: rpwilkershank@northstar-ida.com + organization: + - name: Northstar Industrial Applications + site: http://northstar-ida.com +deploymentProfiles: + - type: helm.v3 + id: com-northstartida-hello-world-helm.v3-a + components: + - name: hello-world + properties: + repository: oci://northstarida.azurecr.io/charts/hello-world + revision: 1.0.1 + wait: true +parameters: + greeting: + value: Hello + targets: + - pointer: global.config.appGreeting + components: ["hello-world"] + greetingAddressee: + value: World + targets: + - pointer: global.config.appGreetingAddressee + components: ["hello-world"] +configuration: + sections: + - name: General Settings + settings: + - parameter: greeting + name: Greeting + description: The greeting to use. + schema: requireText + - parameter: greetingAddressee + name: Greeting Addressee + description: The person, or group, the greeting addresses. + schema: requireText + schema: + - name: requireText + dataType: string + maxLength: 45 + allowEmpty: false diff --git a/data-model/resources/examples/invalid/DeploymentStatusManifest-001.json b/data-model/resources/examples/invalid/DeploymentStatusManifest-001.json new file mode 100644 index 00000000..92dcd322 --- /dev/null +++ b/data-model/resources/examples/invalid/DeploymentStatusManifest-001.json @@ -0,0 +1,14 @@ +{ + "apiVersion": "v1", + "kind": "WrongKind", + "deploymentId": "a3e2f5dc-912e-494f-8395-52cf3769bc06", + "status": { + "state": "installed" + }, + "components": [ + { + "name": "frontend", + "state": "installed" + } + ] +} diff --git a/data-model/resources/examples/invalid/DeploymentStatusManifest-002.json b/data-model/resources/examples/invalid/DeploymentStatusManifest-002.json new file mode 100644 index 00000000..031d997f --- /dev/null +++ b/data-model/resources/examples/invalid/DeploymentStatusManifest-002.json @@ -0,0 +1,14 @@ +{ + "apiVersion": "v1", + "kind": "DeploymentStatusManifest", + "deploymentId": "a3e2f5dc-912e-494f-8395-52cf3769bc06", + "status": { + "state": "running" + }, + "components": [ + { + "name": "frontend", + "state": "installed" + } + ] +} diff --git a/data-model/resources/examples/invalid/DeploymentStatusManifest-003.json b/data-model/resources/examples/invalid/DeploymentStatusManifest-003.json new file mode 100644 index 00000000..672f3fc6 --- /dev/null +++ b/data-model/resources/examples/invalid/DeploymentStatusManifest-003.json @@ -0,0 +1,13 @@ +{ + "apiVersion": "v1", + "kind": "DeploymentStatusManifest", + "status": { + "state": "installed" + }, + "components": [ + { + "name": "frontend", + "state": "installed" + } + ] +} diff --git a/data-model/resources/examples/invalid/DesiredStateManifest-001.json b/data-model/resources/examples/invalid/DesiredStateManifest-001.json new file mode 100644 index 00000000..c0488575 --- /dev/null +++ b/data-model/resources/examples/invalid/DesiredStateManifest-001.json @@ -0,0 +1,15 @@ +{ + "manifestVersion": 0, + "bundle": { + "mediaType": "application/vnd.margo.bundle.v1+tar+gzip", + "digest": "sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "url": "/api/v1/clients/1234/bundles/sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b" + }, + "deployments": [ + { + "deploymentId": "a3e2f5dc-912e-494f-8395-52cf3769bc06", + "digest": "sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "url": "/api/v1/clients/1234/deployments/a3e2f5dc-912e-494f-8395-52cf3769bc06/sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b" + } + ] +} diff --git a/data-model/resources/examples/invalid/DesiredStateManifest-002.json b/data-model/resources/examples/invalid/DesiredStateManifest-002.json new file mode 100644 index 00000000..431dd775 --- /dev/null +++ b/data-model/resources/examples/invalid/DesiredStateManifest-002.json @@ -0,0 +1,15 @@ +{ + "manifestVersion": 101, + "bundle": { + "mediaType": "application/json", + "digest": "sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "url": "/api/v1/clients/1234/bundles/sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b" + }, + "deployments": [ + { + "deploymentId": "a3e2f5dc-912e-494f-8395-52cf3769bc06", + "digest": "sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "url": "/api/v1/clients/1234/deployments/a3e2f5dc-912e-494f-8395-52cf3769bc06/sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b" + } + ] +} diff --git a/data-model/resources/examples/invalid/DesiredStateManifest-003.json b/data-model/resources/examples/invalid/DesiredStateManifest-003.json new file mode 100644 index 00000000..16bac6aa --- /dev/null +++ b/data-model/resources/examples/invalid/DesiredStateManifest-003.json @@ -0,0 +1,15 @@ +{ + "manifestVersion": 101, + "bundle": { + "mediaType": "application/vnd.margo.bundle.v1+tar+gzip", + "digest": "invalid-digest", + "url": "/api/v1/clients/1234/bundles/invalid-digest" + }, + "deployments": [ + { + "deploymentId": "a3e2f5dc-912e-494f-8395-52cf3769bc06", + "digest": "sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "url": "/api/v1/clients/1234/deployments/a3e2f5dc-912e-494f-8395-52cf3769bc06/sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b" + } + ] +} diff --git a/data-model/resources/examples/invalid/DesiredStateManifest-004.json b/data-model/resources/examples/invalid/DesiredStateManifest-004.json new file mode 100644 index 00000000..a53980ac --- /dev/null +++ b/data-model/resources/examples/invalid/DesiredStateManifest-004.json @@ -0,0 +1,10 @@ +{ + "manifestVersion": 101, + "deployments": [ + { + "deploymentId": "a3e2f5dc-912e-494f-8395-52cf3769bc06", + "digest": "sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "url": "/api/v1/clients/1234/deployments/a3e2f5dc-912e-494f-8395-52cf3769bc06/sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b" + } + ] +} diff --git a/data-model/resources/examples/invalid/DeviceCapabilitiesManifest-001.json b/data-model/resources/examples/invalid/DeviceCapabilitiesManifest-001.json new file mode 100644 index 00000000..0388d106 --- /dev/null +++ b/data-model/resources/examples/invalid/DeviceCapabilitiesManifest-001.json @@ -0,0 +1,37 @@ +{ + "apiVersion": "device.margo.org/v1alpha1", + "kind": "DeviceCapabilitiesManifest", + "properties": { + "id": "northstarida.xtapro.k8s.edge", + "vendor": "Northstar Industrial devices", + "modelNumber": "332ANZE1-N1", + "serialNumber": "PF45343-AA", + "roles": [ + "Non existing role" + ], + "resources": { + "cpu": { + "cores": 24, + "architectures": [ + "x86_64" + ] + }, + "memory": "59Gi", + "storage": "1862Gi", + "peripherals": [ + { + "type": "gpu", + "manufacturer": "NVIDIA" + } + ], + "interfaces": [ + { + "type": "ethernet" + }, + { + "type": "wifi" + } + ] + } + } +} diff --git a/data-model/resources/examples/invalid/DeviceCapabilitiesManifest-002.json b/data-model/resources/examples/invalid/DeviceCapabilitiesManifest-002.json new file mode 100644 index 00000000..4c7afc02 --- /dev/null +++ b/data-model/resources/examples/invalid/DeviceCapabilitiesManifest-002.json @@ -0,0 +1,36 @@ +{ + "apiVersion": "device.margo.org/v1alpha1", + "kind": "DeviceCapabilitiesManifest", + "properties": { + "id": "northstarida.xtapro.k8s.edge", + "modelNumber": "332ANZE1-N1", + "serialNumber": "PF45343-AA", + "roles": [ + "Standalone Device" + ], + "resources": { + "cpu": { + "cores": 24, + "architectures": [ + "x86_64" + ] + }, + "memory": "59Gi", + "storage": "1862Gi", + "peripherals": [ + { + "type": "gpu", + "manufacturer": "NVIDIA" + } + ], + "interfaces": [ + { + "type": "ethernet" + }, + { + "type": "wifi" + } + ] + } + } +} diff --git a/data-model/resources/examples/invalid/DeviceCapabilitiesManifest-003.json b/data-model/resources/examples/invalid/DeviceCapabilitiesManifest-003.json new file mode 100644 index 00000000..f0a16de2 --- /dev/null +++ b/data-model/resources/examples/invalid/DeviceCapabilitiesManifest-003.json @@ -0,0 +1,37 @@ +{ + "apiVersion": "device.margo.org/v1alpha1", + "kind": "DeviceCapabilitiesManifest", + "properties": { + "id": "northstarida.xtapro.k8s.edge", + "vendor": "Northstar Industrial devices", + "modelNumber": "332ANZE1-N1", + "serialNumber": "PF45343-AA", + "roles": [ + "Standalone Cluster" + ], + "resources": { + "cpu": { + "cores": 24, + "architectures": [ + "riscv" + ] + }, + "memory": "59Gi", + "storage": "1862Gi", + "peripherals": [ + { + "type": "gpu", + "manufacturer": "NVIDIA" + } + ], + "interfaces": [ + { + "type": "ethernet" + }, + { + "type": "wifi" + } + ] + } + } +} diff --git a/data-model/resources/examples/valid/ApplicationDeployment-compose.yaml b/data-model/resources/examples/valid/ApplicationDeployment-compose.yaml new file mode 100644 index 00000000..e48606ec --- /dev/null +++ b/data-model/resources/examples/valid/ApplicationDeployment-compose.yaml @@ -0,0 +1,65 @@ +apiVersion: application.margo.org/v1alpha1 +kind: ApplicationDeployment +metadata: + annotations: + applicationId: com-northstartida-digitron-orchestrator + id: ad9b614e-8912-45f4-a523-372358765def + name: com-northstartida-digitron-orchestrator-deployment + namespace: margo-poc +spec: + deploymentProfile: + type: compose + components: + - name: digitron-orchestrator-docker + properties: + keyLocation: https://northsitarida.com/digitron/docker/public-key.asc + packageLocation: https://northsitarida.com/digitron/docker/digitron-orchestrator.tar.gz + parameters: + adminName: + value: Some One + targets: + - pointer: ENV.ADMIN_NAME + components: + - digitron-orchestrator-docker + adminPrincipalName: + value: someone@somewhere.com + targets: + - pointer: ENV.ADMIN_PRINCIPALNAME + components: + - digitron-orchestrator-docker + idpClientId: + value: 123-ABC + targets: + - pointer: ENV.IDP_CLIENT_ID + components: + - digitron-orchestrator-docker + idpName: + value: Azure AD + targets: + - pointer: ENV.IDP_NAME + components: + - digitron-orchestrator-docker + idpProvider: + value: aad + targets: + - pointer: ENV.IDP_PROVIDER + components: + - digitron-orchestrator-docker + idpUrl: + value: https://123-abc.com + targets: + - pointer: ENV.IDP_URL + components: + - digitron-orchestrator-docker + pollFrequency: + value: "120" + targets: + - pointer: ENV.POLL_FREQUENCY + components: + - digitron-orchestrator-docker + siteId: + value: SID-123-ABC + targets: + - pointer: ENV.SITE_ID + components: + - digitron-orchestrator-docker diff --git a/data-model/resources/examples/valid/ApplicationDeployment-helm.yaml b/data-model/resources/examples/valid/ApplicationDeployment-helm.yaml new file mode 100644 index 00000000..9baa6032 --- /dev/null +++ b/data-model/resources/examples/valid/ApplicationDeployment-helm.yaml @@ -0,0 +1,89 @@ +apiVersion: application.margo.org/v1alpha1 +kind: ApplicationDeployment +metadata: + annotations: + applicationId: com-northstartida-digitron-orchestrator + id: a3e2f5dc-912e-494f-8395-52cf3769bc06 + name: com-northstartida-digitron-orchestrator-deployment + namespace: margo-poc +spec: + deploymentProfile: + type: helm.v3 + components: + - name: database-services + properties: + repository: oci://quay.io/charts/realtime-database-services + revision: 2.3.7 + timeout: 8m30s + wait: true + - name: digitron-orchestrator + properties: + repository: oci://northstarida.azurecr.io/charts/northstarida-digitron-orchestrator + revision: 1.0.9 + wait: true + parameters: + adminName: + value: Some One + targets: + - pointer: administrator.name + components: + - digitron-orchestrator + adminPrincipalName: + value: someone@somewhere.com + targets: + - pointer: administrator.userPrincipalName + components: + - digitron-orchestrator + cpuLimit: + value: "4" + targets: + - pointer: settings.limits.cpu + components: + - digitron-orchestrator + idpClientId: + value: 123-ABC + targets: + - pointer: idp.clientId + components: + - digitron-orchestrator + idpName: + value: Azure AD + targets: + - pointer: idp.name + components: + - digitron-orchestrator + idpProvider: + value: aad + targets: + - pointer: idp.provider + components: + - digitron-orchestrator + idpUrl: + value: https://123-abc.com + targets: + - pointer: idp.providerUrl + components: + - digitron-orchestrator + - pointer: idp.providerMetadata + components: + - digitron-orchestrator + memoryLimit: + value: "16384" + targets: + - pointer: settings.limits.memory + components: + - digitron-orchestrator + pollFrequency: + value: "120" + targets: + - pointer: settings.pollFrequency + components: + - digitron-orchestrator + - database-services + siteId: + value: SID-123-ABC + targets: + - pointer: settings.siteId + components: + - digitron-orchestrator + - database-services diff --git a/data-model/resources/examples/valid/ApplicationDescription-helm_and_compose.yaml b/data-model/resources/examples/valid/ApplicationDescription-helm_and_compose.yaml new file mode 100644 index 00000000..2d76d63d --- /dev/null +++ b/data-model/resources/examples/valid/ApplicationDescription-helm_and_compose.yaml @@ -0,0 +1,208 @@ +apiVersion: margo.org/v1-alpha1 +kind: ApplicationDescription +metadata: + id: com-northstartida-digitron-orchestrator + name: Digitron orchestrator + description: The Digitron orchestrator application + version: 1.2.1 + catalog: + application: + icon: ./resources/ndo-logo.png + tagline: Northstar Industrial Application's next-gen, AI driven, Digitron instrument orchestrator. + descriptionFile: ./resources/description.md + releaseNotes: ./resources/release-notes.md + licenseFile: ./resources/license.pdf + site: http://www.northstar-ida.com + tags: ["optimization", "instrumentation"] + author: + - name: Roger Wilkershank + email: rpwilkershank@northstar-ida.com + organization: + - name: Northstar Industrial Applications + site: http://northstar-ida.com +deploymentProfiles: + - type: helm.v3 + id: com-northstartida-digitron-orchestrator-helm.v3-a + description: This allows to install / run the application as a Helm chart deployment. + The device where this application is installed needs to have a screen and a keyboard (as indicated in the required peripherals). + components: + - name: database-services + properties: + repository: oci://quay.io/charts/realtime-database-services + revision: 2.3.7 + wait: true + timeout: 8m30s + - name: digitron-orchestrator + properties: + repository: oci://northstarida.azurecr.io/charts/northstarida-digitron-orchestrator + revision: 1.0.9 + wait: true + requiredResources: + cpu: + cores: 1.5 + architectures: + - amd64 + - x86_64 + memory: 1024Mi + storage: 10Gi + peripherals: + - type: gpu + manufacturer: NVIDIA + - type: display + interfaces: + - type: ethernet + - type: bluetooth + - type: compose + id: com-northstartida-digitron-orchestrator-compose-a + components: + - name: digitron-orchestrator-docker + properties: + packageLocation: https://northsitarida.com/digitron/docker/digitron-orchestrator.tar.gz + keyLocation: https://northsitarida.com/digitron/docker/public-key.asc +parameters: + idpName: + targets: + - pointer: idp.name + components: ["digitron-orchestrator"] + - pointer: ENV.IDP_NAME + components: ["digitron-orchestrator-docker"] + idpProvider: + targets: + - pointer: idp.provider + components: ["digitron-orchestrator"] + - pointer: ENV.IDP_PROVIDER + components: ["digitron-orchestrator-docker"] + idpClientId: + targets: + - pointer: idp.clientId + components: ["digitron-orchestrator"] + - pointer: ENV.IDP_CLIENT_ID + components: ["digitron-orchestrator-docker"] + idpUrl: + targets: + - pointer: idp.providerUrl + components: ["digitron-orchestrator"] + - pointer: idp.providerMetadata + components: ["digitron-orchestrator"] + - pointer: ENV.IDP_URL + components: ["digitron-orchestrator-docker"] + adminName: + targets: + - pointer: administrator.name + components: ["digitron-orchestrator"] + - pointer: ENV.ADMIN_NAME + components: ["digitron-orchestrator-docker"] + adminPrincipalName: + targets: + - pointer: administrator.userPrincipalName + components: ["digitron-orchestrator"] + - pointer: ENV.ADMIN_PRINCIPALNAME + components: ["digitron-orchestrator-docker"] + pollFrequency: + value: 30 + targets: + - pointer: settings.pollFrequency + components: ["digitron-orchestrator", "database-services"] + - pointer: ENV.POLL_FREQUENCY + components: ["digitron-orchestrator-docker"] + siteId: + targets: + - pointer: settings.siteId + components: ["digitron-orchestrator", "database-services"] + - pointer: ENV.SITE_ID + components: ["digitron-orchestrator-docker"] + cpuLimit: + value: 1 + targets: + - pointer: settings.limits.cpu + components: ["digitron-orchestrator"] + memoryLimit: + value: 16384 + targets: + - pointer: settings.limits.memory + components: ["digitron-orchestrator"] +configuration: + sections: + - name: General + settings: + - parameter: pollFrequency + name: Poll Frequency + description: How often the service polls for updated data in seconds + schema: pollRange + - parameter: siteId + name: Site Id + description: Special identifier for the site (optional) + schema: optionalText + - name: Identity Provider + settings: + - parameter: idpName + name: Name + description: The name of the Identity Provider to use + immutable: true + schema: requiredText + - parameter: idpProvider + name: Provider + description: Provider something something + immutable: true + schema: requiredText + - parameter: idpClientId + name: Client ID + description: The client id + immutable: true + schema: requiredText + - parameter: idpUrl + name: Provider URL + description: The url of the Identity Provider + immutable: true + schema: url + - name: Administrator + settings: + - parameter: adminName + name: Presentation Name + description: The presentation name of the administrator + schema: requiredText + - parameter: adminPrincipalName + name: Principal Name + description: The principal name of the administrator + schema: email + - name: Resource Limits + settings: + - parameter: cpuLimit + name: CPU Limit + description: Maximum number of CPU cores to allow the application to consume + schema: cpuRange + - parameter: memoryLimit + name: Memory Limit + description: Maximum number of memory to allow the application to consume + schema: memoryRange + schema: + - name: requiredText + dataType: string + maxLength: 45 + allowEmpty: false + - name: email + dataType: string + allowEmpty: false + regexMatch: .*@[a-z0-9.-]* + - name: url + dataType: string + allowEmpty: false + regexMatch: ^(http(s):\/\/.)[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)$ + - name: pollRange + dataType: integer + minValue: 30 + maxValue: 360 + allowEmpty: false + - name: optionalText + dataType: string + minLength: 5 + allowEmpty: true + - name: cpuRange + dataType: double + minValue: 0.5 + maxPrecision: 1 + allowEmpty: false + - name: memoryRange + dataType: integer + minValue: 16384 + allowEmpty: false diff --git a/data-model/resources/examples/valid/ApplicationDescription-helm_only.yaml b/data-model/resources/examples/valid/ApplicationDescription-helm_only.yaml new file mode 100644 index 00000000..158abb88 --- /dev/null +++ b/data-model/resources/examples/valid/ApplicationDescription-helm_only.yaml @@ -0,0 +1,59 @@ +apiVersion: margo.org/v1-alpha1 +kind: ApplicationDescription +metadata: + id: com-northstartida-hello-world + name: Hello World + description: A basic hello world application + version: "1.0" + catalog: + application: + icon: ./resources/hw-logo.png + tagline: Northstar Industrial Application's hello world application. + descriptionFile: ./resources/description.md + releaseNotes: ./resources/release-notes.md + licenseFile: ./resources/license.pdf + site: http://www.northstar-ida.com + tags: ["monitoring"] + author: + - name: Roger Wilkershank + email: rpwilkershank@northstar-ida.com + organization: + - name: Northstar Industrial Applications + site: http://northstar-ida.com +deploymentProfiles: + - type: helm.v3 + id: com-northstartida-hello-world-helm.v3-a + components: + - name: hello-world + properties: + repository: oci://northstarida.azurecr.io/charts/hello-world + revision: 1.0.1 + wait: true +parameters: + greeting: + value: Hello + targets: + - pointer: global.config.appGreeting + components: ["hello-world"] + greetingAddressee: + value: World + targets: + - pointer: global.config.appGreetingAddressee + components: ["hello-world"] +configuration: + sections: + - name: General Settings + settings: + - parameter: greeting + name: Greeting + description: The greeting to use. + schema: requireText + - parameter: greetingAddressee + name: Greeting Addressee + description: The person, or group, the greeting addresses. + schema: requireText + schema: + - name: requireText + dataType: string + maxLength: 45 + allowEmpty: false diff --git a/data-model/resources/examples/valid/DeploymentStatusManifest-001.json b/data-model/resources/examples/valid/DeploymentStatusManifest-001.json new file mode 100644 index 00000000..01153e65 --- /dev/null +++ b/data-model/resources/examples/valid/DeploymentStatusManifest-001.json @@ -0,0 +1,22 @@ +{ + "apiVersion": "v1", + "kind": "DeploymentStatusManifest", + "deploymentId": "a3e2f5dc-912e-494f-8395-52cf3769bc06", + "status": { + "state": "installed" + }, + "components": [ + { + "name": "frontend", + "state": "installed" + }, + { + "name": "backend", + "state": "failed", + "error": { + "code": "ERR_IMAGE_PULL", + "message": "Failed to pull image: access denied" + } + } + ] +} diff --git a/data-model/resources/examples/valid/DesiredStateManifest-001.json b/data-model/resources/examples/valid/DesiredStateManifest-001.json new file mode 100644 index 00000000..3fb1b073 --- /dev/null +++ b/data-model/resources/examples/valid/DesiredStateManifest-001.json @@ -0,0 +1,15 @@ +{ + "manifestVersion": 101, + "bundle": { + "mediaType": "application/vnd.margo.bundle.v1+tar+gzip", + "digest": "sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "url": "/api/v1/clients/1234/bundles/sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b" + }, + "deployments": [ + { + "deploymentId": "a3e2f5dc-912e-494f-8395-52cf3769bc06", + "digest": "sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "url": "/api/v1/clients/1234/deployments/a3e2f5dc-912e-494f-8395-52cf3769bc06/sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b" + } + ] +} diff --git a/data-model/resources/examples/valid/DeviceCapabilitiesManifest-001.json b/data-model/resources/examples/valid/DeviceCapabilitiesManifest-001.json new file mode 100644 index 00000000..502bd828 --- /dev/null +++ b/data-model/resources/examples/valid/DeviceCapabilitiesManifest-001.json @@ -0,0 +1,37 @@ +{ + "apiVersion": "device.margo.org/v1alpha1", + "kind": "DeviceCapabilitiesManifest", + "properties": { + "id": "northstarida.xtapro.k8s.edge", + "vendor": "Northstar Industrial devices", + "modelNumber": "332ANZE1-N1", + "serialNumber": "PF45343-AA", + "roles": [ + "Standalone Cluster" + ], + "resources": { + "cpu": { + "cores": 24, + "architectures": [ + "x86_64" + ] + }, + "memory": "59Gi", + "storage": "1862Gi", + "peripherals": [ + { + "type": "gpu", + "manufacturer": "NVIDIA" + } + ], + "interfaces": [ + { + "type": "ethernet" + }, + { + "type": "wifi" + } + ] + } + } +} From 278ac57dda7cca8c3798f38df08eb0cbd4f1b35d Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Fri, 13 Mar 2026 09:27:28 +0100 Subject: [PATCH 05/24] tools: generate artifacts from data-model Signed-off-by: Silvano Cirujano Cuesta --- .gitignore | 2 + .../markdown-templates/class.md.jinja2 | 288 ++++++++++ .../class_diagram.md.jinja2 | 76 +++ .../common_metadata.md.jinja2 | 144 +++++ .../markdown-templates/enum.md.jinja2 | 139 +++++ .../markdown-templates/index.md.jinja2 | 94 +++ .../markdown-templates/slot.md.jinja2 | 454 +++++++++++++++ .../markdown-templates/subset.md.jinja2 | 108 ++++ .../markdown-templates/type.md.jinja2 | 134 +++++ .../class.md.jinja2 | 0 .../index.md.jinja2 | 66 +++ data-model/tools/check-examples.bash | 130 +++++ .../application-deployment.json | 6 + .../application-description.json | 6 + .../configurations/deployment-status.json | 6 + .../desired-state-manifest.json | 6 + .../configurations/device-capabilities.json | 6 + data-model/tools/generate-all.bash | 16 + data-model/tools/generate-class-diagram.bash | 108 ++++ data-model/tools/generate-docs.bash | 97 ++++ data-model/tools/generate-json-schemas.bash | 26 + data-model/tools/generate-openapi.bash | 46 ++ mkdocs.yml | 23 +- system-design/assets/svg-pan-zoom-init.js | 56 ++ system-design/assets/svg-pan-zoom.min.js | 3 + system-design/css/margo.css | 22 + .../deployment-status-api.md | 36 ++ .../desired-state.md | 534 ++++++++++++++++++ .../device-capabilities-api.md | 35 ++ 29 files changed, 2662 insertions(+), 5 deletions(-) create mode 100644 data-model/resources/markdown-templates/class.md.jinja2 create mode 100644 data-model/resources/markdown-templates/class_diagram.md.jinja2 create mode 100644 data-model/resources/markdown-templates/common_metadata.md.jinja2 create mode 100644 data-model/resources/markdown-templates/enum.md.jinja2 create mode 100644 data-model/resources/markdown-templates/index.md.jinja2 create mode 100644 data-model/resources/markdown-templates/slot.md.jinja2 create mode 100644 data-model/resources/markdown-templates/subset.md.jinja2 create mode 100644 data-model/resources/markdown-templates/type.md.jinja2 create mode 100644 data-model/resources/markdown-templates_main-classes/class.md.jinja2 create mode 100644 data-model/resources/markdown-templates_main-classes/index.md.jinja2 create mode 100755 data-model/tools/check-examples.bash create mode 100644 data-model/tools/configurations/application-deployment.json create mode 100644 data-model/tools/configurations/application-description.json create mode 100644 data-model/tools/configurations/deployment-status.json create mode 100644 data-model/tools/configurations/desired-state-manifest.json create mode 100644 data-model/tools/configurations/device-capabilities.json create mode 100755 data-model/tools/generate-all.bash create mode 100755 data-model/tools/generate-class-diagram.bash create mode 100755 data-model/tools/generate-docs.bash create mode 100755 data-model/tools/generate-json-schemas.bash create mode 100755 data-model/tools/generate-openapi.bash create mode 100644 system-design/assets/svg-pan-zoom-init.js create mode 100644 system-design/assets/svg-pan-zoom.min.js create mode 100644 system-design/specification/margo-management-interface/deployment-status-api.md create mode 100644 system-design/specification/margo-management-interface/desired-state.md create mode 100644 system-design/specification/margo-management-interface/device-capabilities-api.md diff --git a/.gitignore b/.gitignore index d687d211..bdd9a5fc 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,5 @@ system-design/specification/applications/application-description.md src/specification/applications/docs src/specification/margo-management-interface/docs *.code-workspace +generated +merged diff --git a/data-model/resources/markdown-templates/class.md.jinja2 b/data-model/resources/markdown-templates/class.md.jinja2 new file mode 100644 index 00000000..ce23fbc6 --- /dev/null +++ b/data-model/resources/markdown-templates/class.md.jinja2 @@ -0,0 +1,288 @@ +{%- if element.title %} + {%- set title = element.title ~ ' (' ~ element.name ~ ')' -%} +{%- else %} + {%- if gen.use_class_uris -%} + {%- set title = element.name -%} + {%- else -%} + {%- set title = gen.name(element) -%} + {%- endif -%} +{%- endif -%} + +{% macro compute_range(slot) -%} + {%- if slot.any_of or slot.exactly_one_of -%} + {%- for subslot_range in schemaview.slot_range_as_union(slot) -%} + {{ gen.link(subslot_range) }} + {%- if not loop.last -%} +  or 
+ {%- endif -%} + {%- endfor -%} + {%- else -%} + {{ gen.link(slot.range) }} + {%- endif -%} +{% endmacro %} + +# Class: {{ title }} {% if element.deprecated %} (DEPRECATED) {% endif %} + +{%- if header -%} +{{ header }} +{%- endif -%} + +{% if element.description %} +{% set element_description_lines = element.description.split('\n') %} +{% for element_description_line in element_description_lines %} +_{{ element_description_line }}_ +{% endfor %} +{% endif %} + +{% if element.abstract %} +* __NOTE__: this is an abstract class and should not be instantiated directly +{% endif %} + +{# +URI: {{ gen.uri_link(element) }} +#} + +{% if diagram_type == "er_diagram" %} +```{{ gen.mermaid_directive() }} +{{ gen.mermaid_diagram([element.name]) }} +``` +{% elif diagram_type == "plantuml_class_diagram" %} +```puml +{{ gen.mermaid_diagram([element.name]) }} +``` +{% else %} +{% include "class_diagram.md.jinja2" %} +{% endif %} + +{% if schemaview.class_parents(element.name) or schemaview.class_children(element.name, mixins=False) %} + +## Inheritance +{{ gen.inheritance_tree(element, mixins=True) }} +{% else %} + +{% endif %} + +{%- set has_class_props = element.class_uri or element.tree_root or element.mixin + or element.subclass_of or element.union_of or element.disjoint_with + or element.slot_names_unique or element.represents_relationship + or element.children_are_mutually_disjoint %} + +{%- if has_class_props %} +## Class Properties + +| Property | Value | +| --- | --- | +{%- if element.class_uri %} +| Class URI | {{ gen.uri_link(element.class_uri) }} | +{%- endif %} +{%- if element.mixin %} +| Mixin | Yes | +{%- endif %} +{%- if element.tree_root %} +| Tree Root | Yes | +{%- endif %} +{%- if element.slot_names_unique %} +| Slot Names Unique | Yes | +{%- endif %} +{%- if element.represents_relationship %} +| Represents Relationship | Yes | +{%- endif %} +{%- if element.subclass_of %} +| Subclass Of | {{ gen.links(element.subclass_of) | join(', ') }} | +{%- endif %} +{%- if element.union_of %} +| Union Of | {{ gen.links(element.union_of) | join(', ') }} | +{%- endif %} +{%- if element.disjoint_with %} +| Disjoint With | {{ gen.links(element.disjoint_with) | join(', ') }} | +{%- endif %} +{%- if element.children_are_mutually_disjoint %} +| Children Are Mutually Disjoint | Yes | +{%- endif %} + +{% endif %} +## Attributes + +| Name | Cardinality and Range | Description | Inheritance | +| --- | --- | --- | --- | +{% if gen.get_direct_slots(element)|length > 0 %} +{%- for slot in gen.get_direct_slots(element) -%} +| {{ gen.link(slot) }} | {{ gen.cardinality(slot) }}
{{ compute_range(slot) }} | {{ slot.description|enshorten }} | direct | +{% endfor -%} +{% endif -%} +{% if gen.get_indirect_slots(element)|length > 0 %} +{%- for slot in gen.get_indirect_slots(element) -%} +| {{ gen.link(slot) }} | {{ gen.cardinality(slot) }}
{{ compute_range(slot) }} | {{ slot.description|enshorten }} | {{ gen.links(gen.get_slot_inherited_from(element.name, slot.name))|join(', ') }} | +{% endfor -%} +{% endif %} + +{%- if element.unique_keys %} +## Unique Keys + +{% for uk in element.unique_keys.values() %} +### {{ uk.unique_key_name }} + +**Unique key slots:** {{ uk.unique_key_slots | join(', ') }} +{%- if uk.consider_nulls_inequal %} + +Considers null values as inequal +{%- endif %} +{% endfor %} +{% endif %} + +{%- if element.defining_slots %} +## Defining Slots + +This class is defined by the following slots: + +{% for slot_name in element.defining_slots %} +* {{ gen.link(slot_name) }} +{%- endfor %} +{% endif %} + +{%- set has_expressions = element.any_of or element.all_of or element.exactly_one_of + or element.none_of or element.slot_conditions %} + +{%- if has_expressions %} +
+Expressions & Logic + +{%- if element.any_of %} +#### Any Of + +The class must satisfy at least one of: + +{%- for expr in element.any_of %} +- {{ expr }} +{%- endfor %} +{%- endif %} + +{%- if element.all_of %} +#### All Of + +The class must satisfy all of: + +{%- for expr in element.all_of %} +- {{ expr }} +{%- endfor %} +{%- endif %} + +{%- if element.exactly_one_of %} +#### Exactly One Of + +The class must satisfy exactly one of: + +{%- for expr in element.exactly_one_of %} +- {{ expr }} +{%- endfor %} +{%- endif %} + +{%- if element.none_of %} +#### None Of + +The class must not satisfy any of: + +{%- for expr in element.none_of %} +- {{ expr }} +{%- endfor %} +{%- endif %} + +{%- if element.slot_conditions %} +#### Slot Conditions + +{%- for slot_name, conditions in element.slot_conditions.items() %} +- **{{ gen.link(slot_name) }}**: {{ conditions }} +{%- endfor %} +{%- endif %} + +
+{% endif %} + +{% if schemaview.is_mixin(element.name) %} +## Mixin Usage + +| mixed into | description | +| --- | --- | +{% for c in schemaview.class_children(element.name, is_a=False) -%} +| {{ gen.link(c) }} | {{ schemaview.get_class(c).description|enshorten }} | +{% endfor %} +{% endif %} + +{% if schemaview.usage_index().get(element.name) %} +## Usages + +| used by | used in | type | used | +| --- | --- | --- | --- | +{% for usage in schemaview.usage_index().get(element.name) -%} +| {{ gen.link(usage.used_by) }} | {{ gen.link(usage.slot) }} | {{ usage.metaslot }} | {{ gen.link(usage.used) }} | +{% endfor %} +{% endif %} + +{% if element.rules %} +## Rules + +{% for rule in gen.classrule_to_dict_view(element) %} +### {{ rule.title }} + +| Rule Applied | Preconditions | Postconditions | Elseconditions | +|--------------|---------------|----------------|----------------| +{% for key in rule.preconditions -%} +| {{ key }} | +{%- if rule.preconditions[key] is defined -%} +```{{ rule.preconditions[key] }}``` +{%- else -%} +{% endif %} | +{%- if rule.postconditions and rule.postconditions[key] is defined -%} +```{{ rule.postconditions[key] }}``` +{%- else -%} +{% endif %} | +{%- if rule.elseconditions and rule.elseconditions[key] is defined -%} +```{{ rule.elseconditions[key] }}``` +{%- else -%} +{% endif %} | +{% endfor %} + +{% endfor %} +{% endif %} + +{% include "common_metadata.md.jinja2" %} + +{% if gen.example_object_blobs(element.name) -%} +## Examples + +Following examples have been automatically validated against the schema of this class. + +{% for name, blob in gen.example_object_blobs(element.name) -%} +??? example "{{ name }}" + + ```yaml + {{ blob | indent(4) }} + ``` +{% endfor %} +{% endif %} + +--- + +??? note "This section is only relevant for contributors of the specification" + + ## LinkML Source + + + + ### Direct + + ??? note "Details" + ```yaml +{{ gen.yaml(element) | indent(8, first=True) }} + ``` + + ### Induced + + ??? note "Details" + ```yaml +{{ gen.yaml(element, inferred=True) | indent(8, first=True) }} + ``` + +{%- if footer -%} +{{ footer }} +{%- endif -%} diff --git a/data-model/resources/markdown-templates/class_diagram.md.jinja2 b/data-model/resources/markdown-templates/class_diagram.md.jinja2 new file mode 100644 index 00000000..95c2e980 --- /dev/null +++ b/data-model/resources/markdown-templates/class_diagram.md.jinja2 @@ -0,0 +1,76 @@ +{% macro slot_relationship(element, slot) %} + {% if slot.range is not none %} + {% set range_element = gen.name(schemaview.get_element(slot.range)) %} + {% set relation_label = gen.name(slot) %} + {{ gen.name(element) }} --> "{{ gen.cardinality(slot) }}" {{ range_element }} : {{ relation_label }} + click {{ range_element }} href "{{ gen.link_mermaid(schemaview.get_element(slot.range)) }}" + {% endif %} +{% endmacro %} + +{% if schemaview.class_parents(element.name) and schemaview.class_children(element.name) %} +```{{ gen.mermaid_directive() }} + classDiagram + class {{ gen.name(element) }} + click {{ gen.name(element) }} href "{{ gen.link_mermaid(element) }}" + {% for s in schemaview.class_parents(element.name)|sort(attribute='name') -%} + {{ gen.name(schemaview.get_element(s)) }} <|-- {{ gen.name(element) }} + click {{ gen.name(schemaview.get_element(s)) }} href "{{ gen.link_mermaid(schemaview.get_element(s)) }}" + {% endfor %} + + {% for s in schemaview.class_children(element.name)|sort(attribute='name') -%} + {{ gen.name(element) }} <|-- {{ gen.name(schemaview.get_element(s)) }} + click {{ gen.name(schemaview.get_element(s)) }} href "{{ gen.link_mermaid(schemaview.get_element(s)) }}" + {% endfor %} + + {% for s in schemaview.class_induced_slots(element.name)|sort(attribute='name') -%} + {{ gen.name(element) }} : {{ gen.name(s) }} + {% if s.range is not none and s.range not in gen.all_type_object_names() %} + {{ slot_relationship(element, s) }} + {% endif %} + {% endfor %} +``` +{% elif schemaview.class_parents(element.name) %} +```{{ gen.mermaid_directive() }} + classDiagram + class {{ gen.name(element) }} + click {{ gen.name(element) }} href "{{ gen.link_mermaid(element) }}" + {% for s in schemaview.class_parents(element.name)|sort(attribute='name') -%} + {{ gen.name(schemaview.get_element(s)) }} <|-- {{ gen.name(element) }} + click {{ gen.name(schemaview.get_element(s)) }} href "{{ gen.link_mermaid(schemaview.get_element(s)) }}" + {% endfor %} + {% for s in schemaview.class_induced_slots(element.name)|sort(attribute='name') -%} + {{ gen.name(element) }} : {{ gen.name(s) }} + {% if s.range is not none and s.range not in gen.all_type_object_names() %} + {{ slot_relationship(element, s) }} + {% endif %} + {% endfor %} +``` +{% elif schemaview.class_children(element.name) %} +```{{ gen.mermaid_directive() }} + classDiagram + class {{ gen.name(element) }} + click {{ gen.name(element) }} href "{{ gen.link_mermaid(element) }}" + {% for s in schemaview.class_children(element.name)|sort(attribute='name') -%} + {{ gen.name(element) }} <|-- {{ gen.name(schemaview.get_element(s)) }} + click {{ gen.name(schemaview.get_element(s)) }} href "{{ gen.link_mermaid(schemaview.get_element(s)) }}" + {% endfor %} + {% for s in schemaview.class_induced_slots(element.name)|sort(attribute='name') -%} + {{ gen.name(element) }} : {{ gen.name(s) }} + {% if s.range is not none and s.range not in gen.all_type_object_names() %} + {{ slot_relationship(element, s) }} + {% endif %} + {% endfor %} +``` +{% else %} +```{{ gen.mermaid_directive() }} + classDiagram + class {{ gen.name(element) }} + click {{ gen.name(element) }} href "{{ gen.link_mermaid(element) }}" + {% for s in schemaview.class_induced_slots(element.name)|sort(attribute='name') -%} + {{ gen.name(element) }} : {{ gen.name(s) }} + {% if s.range is not none and s.range not in gen.all_type_object_names() %} + {{ slot_relationship(element, s) }} + {% endif %} + {% endfor %} +``` +{% endif %} diff --git a/data-model/resources/markdown-templates/common_metadata.md.jinja2 b/data-model/resources/markdown-templates/common_metadata.md.jinja2 new file mode 100644 index 00000000..9fb2c181 --- /dev/null +++ b/data-model/resources/markdown-templates/common_metadata.md.jinja2 @@ -0,0 +1,144 @@ +{% if element.categories %} +## Categories + +{% for cat in element.categories %} +* {{ cat }} +{%- endfor %} + +{% endif %} +{% if element.keywords %} +## Keywords + +{% for kw in element.keywords %} +* {{ kw }} +{%- endfor %} + +{% endif %} +{% if element.in_subset %} +## In Subsets + +{% for subset in element.in_subset %} +* {{ gen.link(subset) }} +{%- endfor %} + +{% endif %} +{% if element.aliases %} +## Aliases + +{% for alias in element.aliases %} +* {{ alias }} +{%- endfor %} +{% endif %} + +{% if element.examples %} +## Examples + +| Value | +| --- | +{% for x in element.examples -%} +| {{ x.value }} | +{% endfor %} +{% endif -%} + +{% if element.comments -%} +## Comments + +{% for x in element.comments -%} +* {{ x }} +{% endfor %} +{% endif -%} + +{% if element.todos -%} +## TODOs + +{% for x in element.todos -%} +* {{ x }} +{% endfor %} +{% endif -%} + +{% if element.see_also -%} +## See Also + +{% for x in element.see_also -%} +* {{ gen.uri_link(x) }} +{% endfor %} +{% endif -%} + +{% if element.notes -%} +## Notes + +{% for note in element.notes -%} +* {{ note }} +{% endfor %} +{% endif -%} + +{% if element.alt_descriptions %} +## Alternative Descriptions + +{% for source, alt_desc in element.alt_descriptions.items() %} +* **{{ source }}**: {{ alt_desc.description }} +{%- endfor %} +{% endif %} + +{# +## Identifier and Mapping Information + +{%- set has_admin_metadata = element.status or (element.rank is not none and element.rank != 1000) %} + +{%- if has_admin_metadata %} +### Administrative Metadata + +{% if element.status -%} +**Status:** {{ element.status }} +{% endif -%} +{% if element.rank is not none and element.rank != 1000 -%} +**Rank:** {{ element.rank }} +{% endif -%} + +{% endif %} +{% if element.id_prefixes %} +### Valid ID Prefixes + +Instances of this class *should* have identifiers with one of the following prefixes: +{% for p in element.id_prefixes %} +* {{ p }} +{% endfor %} + +{% endif %} + +{% if element.annotations %} +### Annotations + +| property | value | +| --- | --- | +{% for a in element.annotations -%} +{%- if a|string|first != '_' -%} +| {{ a }} | {{ element.annotations[a].value }} | +{% endif -%} +{% endfor %} +{% endif %} + +{% if element.from_schema or element.imported_from %} +### Schema Source + +{% if element.from_schema %} +* from schema: {{ element.from_schema }} +{% endif %} +{% if element.imported_from %} +* imported from: {{ element.imported_from }} +{% endif %} +{% endif %} + +{% if schemaview.get_mappings(element.name).items() -%} +## Mappings + +| Mapping Type | Mapped Value | +| --- | --- | +{% for m, mt in schemaview.get_mappings(element.name).items() -%} +{% if mt|length > 0 -%} +| {{ m }} | {{ mt|join(', ') }} | +{% endif -%} +{% endfor %} + +{% endif -%} +#} diff --git a/data-model/resources/markdown-templates/enum.md.jinja2 b/data-model/resources/markdown-templates/enum.md.jinja2 new file mode 100644 index 00000000..e840fae2 --- /dev/null +++ b/data-model/resources/markdown-templates/enum.md.jinja2 @@ -0,0 +1,139 @@ +{%- if element.title and element.title != element.name %} + {%- set title = element.title ~ ' (' ~ element.name ~ ')' -%} +{%- else %} + {%- set title = gen.name(element) -%} +{%- endif -%} + +# Enum: {{ title }} {% if element.deprecated %} (DEPRECATED) {% endif %} + +{% if element.description %} +{% set element_description_lines = element.description.split('\n') %} +{% for element_description_line in element_description_lines %} +_{{ element_description_line }}_ +{% endfor %} +{% endif %} + +URI: {{ gen.uri_link(element) }} + +{%- if element.enum_uri %} + +**Enum URI:** {{ gen.uri_link(element.enum_uri) }} +{% endif %} + +{%- set has_enum_source = element.code_set or element.pv_formula or element.reachable_from + or element.matches or element.concepts %} + +{%- if has_enum_source %} +## Enumeration Source + +{%- if element.code_set %} +**Code Set:** {{ gen.uri_link(element.code_set) }} + +{%- if element.code_set_tag %} +- **Tag:** {{ element.code_set_tag }} +{%- endif %} +{%- if element.code_set_version %} +- **Version:** {{ element.code_set_version }} +{%- endif %} +{%- endif %} + +{%- if element.pv_formula %} +**Permissible Value Formula:** {{ element.pv_formula }} +{%- endif %} + +{%- if element.reachable_from %} +**Reachable From:** + +{%- if element.reachable_from.source_ontology %} +- **Source:** {{ gen.link(element.reachable_from.source_ontology) }} +{%- endif %} +{%- if element.reachable_from.source_nodes %} +- **Nodes:** {{ element.reachable_from.source_nodes | join(', ') }} +{%- endif %} +{%- if element.reachable_from.relationship_types %} +- **Via:** {{ element.reachable_from.relationship_types | join(', ') }} +{%- endif %} +{%- endif %} + +{%- if element.matches %} +**Matches:** + +- **Expression:** `{{ element.matches.string_expression }}` +{%- endif %} + +{%- if element.concepts %} +**Concepts:** {{ gen.uri_links(element.concepts) | join(', ') }} +{%- endif %} + +{% endif %} + +{% if element.permissible_values -%} +{%- set has_pv_extras = namespace(found=false) -%} +{%- for pv in element.permissible_values.values() -%} + {%- if pv.title or pv.is_a or pv.mixins or pv.deprecated -%} + {%- set has_pv_extras.found = true -%} + {%- endif -%} +{%- endfor -%} +## Permissible Values + +{%- if has_pv_extras.found %} +| Value | Meaning | Description | Additional Info | +| --- | --- | --- | --- | +{% for pv in element.permissible_values.values() -%} +| {{ pv.text }} | {{ pv.meaning }} | {{ pv.description|enshorten }} | +{%- if pv.title %} Title: {{ pv.title }}
{% endif -%} +{%- if pv.is_a %} Is-A: {{ gen.link(pv.is_a) }}
{% endif -%} +{%- if pv.mixins %} Mixins: {{ gen.links(pv.mixins) | join(', ') }}
{% endif -%} +{%- if pv.deprecated %} **DEPRECATED**{% if pv.deprecated_element_has_exact_replacement %} (use {{ gen.link(pv.deprecated_element_has_exact_replacement) }}){% endif %}{% endif -%} + | +{% endfor %} +{%- else %} +| Value | Meaning | Description | +| --- | --- | --- | +{% for pv in element.permissible_values.values() -%} +| {{ pv.text }} | {{ pv.meaning }} | {{ pv.description|enshorten }} | +{% endfor %} +{%- endif %} +{% else %} +_This is a dynamic enum_ +{% endif %} + +{%- set has_enum_ops = element.inherits or element.include or element.minus %} + +{%- if has_enum_ops %} +## Enumeration Operations + +{%- if element.inherits %} +**Inherits From:** {{ gen.links(element.inherits) | join(', ') }} +{%- endif %} + +{%- if element.include %} +**Includes:** {{ gen.links(element.include) | join(', ') }} +{%- endif %} + +{%- if element.minus %} +**Excludes:** {{ gen.links(element.minus) | join(', ') }} +{%- endif %} + +{% endif %} + +{% set slots_for_enum = schemaview.get_slots_by_enum(element.name) %} +{% if slots_for_enum is defined and slots_for_enum|length > 0 -%} +## Slots + +| Name | Description | +| --- | --- | +{% for s in schemaview.get_slots_by_enum(element.name) -%} +| {{ gen.link(s) }} | {{ s.description|enshorten }} | +{% endfor %} +{% endif %} + +{% include "common_metadata.md.jinja2" %} + +## LinkML Source + +
+```yaml +{{ gen.yaml(element) }} +``` +
diff --git a/data-model/resources/markdown-templates/index.md.jinja2 b/data-model/resources/markdown-templates/index.md.jinja2 new file mode 100644 index 00000000..d02bed2b --- /dev/null +++ b/data-model/resources/markdown-templates/index.md.jinja2 @@ -0,0 +1,94 @@ + +# {% if schema.title %}{{ schema.title }}{% else %}{{ schema.name }}{% endif %} + +{% if schema.description %}{{ schema.description }}{% endif %} + +{# +URI: {{ schema.id }} + +Name: {{ schema.name }} +#} + +{% if include_top_level_diagram %} + +## Schema Diagram + +```{{ gen.mermaid_directive() }} +{{ gen.mermaid_diagram() }} +``` +{% endif %} + +## Interfacing Classes + +These are the classes directly participating in Margo interfaces (e.g. APIs): + +| Class | Description | +| --- | --- | +{% for cn in ["ApplicationDescription", "ApplicationDeployment", "DeviceCapabilitiesManifest", "DesiredStateManifest", "DeploymentStatusManifest"] -%} +| {{ gen.link(schemaview.get_class(cn), True) }} | {{ schemaview.get_class(cn).description|enshorten }} | +{% endfor %} + +??? note "Complete Margo data model" + + ## Detailed Class Diagram + + This is a class diagram showing all the classes involved in the Margo data model. + Use the mouse wheel to zoom and click-drag to pan. The controls in the bottom-right corner allow zooming in, resetting, and zooming out. + +
+
Scroll to zoom · Drag to pan · Use controls at bottom-right to zoom in/out/reset
+ + ## All Classes + + These are all the classes involved in the Margo data model: + + | Class | Description | + | --- | --- | + {% if gen.hierarchical_class_view -%} + {% for u, v in gen.class_hierarchy_as_tuples() -%} + | {{ " "|safe*u*8 }}{{ gen.link(schemaview.get_class(v), True) }} | {{ schemaview.get_class(v).description|enshorten }} | + {% endfor %} + {% else -%} + {% for c in gen.all_class_objects()|sort(attribute=sort_by) -%} + | {{ gen.link(c, True) }} | {{ c.description|enshorten }} | + {% endfor %} + {% endif %} + +{# +## Slots + +| Slot | Description | +| --- | --- | +{% for s in gen.all_slot_objects()|sort(attribute=sort_by) -%} +| {{ gen.link(s, True) }} | {{ s.description|enshorten }} | +{% endfor %} + +## Enumerations + +| Enumeration | Description | +| --- | --- | +{% for e in gen.all_enum_objects()|sort(attribute=sort_by) -%} +| {{ gen.link(e, True) }} | {{ e.description|enshorten }} | +{% endfor %} + +## Types + +| Type | Description | +| --- | --- | +{% for t in gen.all_type_objects()|sort(attribute=sort_by) -%} +| {{ gen.link(t, True) }} | {{ t.description|enshorten }} | +{% endfor %} + +## Subsets + +| Subset | Description | +| --- | --- | +{% for ss in schemaview.all_subsets().values()|sort(attribute='name') -%} +| {{ gen.link(ss, True) }} | {{ ss.description|enshorten }} | +{% endfor %} +#} diff --git a/data-model/resources/markdown-templates/slot.md.jinja2 b/data-model/resources/markdown-templates/slot.md.jinja2 new file mode 100644 index 00000000..75344cf5 --- /dev/null +++ b/data-model/resources/markdown-templates/slot.md.jinja2 @@ -0,0 +1,454 @@ +{%- if element.title %} + {%- set title = element.title ~ ' (' ~ element.name ~ ')' -%} +{%- else %} + {%- if gen.use_slot_uris -%} + {%- set title = element.name -%} + {%- else -%} + {%- set title = gen.name(element) -%} + {%- endif -%} +{%- endif -%} + +{% macro compute_range(slot) -%} + {%- if slot.any_of or slot.exactly_one_of -%} + {%- for subslot_range in schemaview.slot_range_as_union(slot) -%} + {{ gen.link(subslot_range) }} + {%- if not loop.last -%} +  or 
+ {%- endif -%} + {%- endfor -%} + {%- else -%} + {{ gen.link(slot.range) }} + {%- endif -%} +{% endmacro %} + +# Slot: {{ title }} {% if element.deprecated %} (DEPRECATED) {% endif %} + +{%- if header -%} +{{ header }} +{%- endif -%} + +{% if element.description %} +{% set element_description_lines = element.description.split('\n') %} +{% for element_description_line in element_description_lines %} +_{{ element_description_line }}_ +{% endfor %} +{% endif %} + +{% if element.abstract %} +* __NOTE__: this is an abstract slot and should not be populated directly +{% endif %} + +URI: {{ gen.uri_link(element) }} + +{%- if element.alias %} +Alias: {{ element.alias }} +{% endif -%} + +{% if schemaview.slot_parents(element.name) or schemaview.slot_children(element.name, mixins=False) %} + +## Inheritance + +{{ gen.inheritance_tree(element, mixins=True) }} +{% else %} + +{% endif %} + +{% set classes_by_slot = schemaview.get_classes_by_slot(element, include_induced=True) %} +{% if classes_by_slot %} + +## Applicable Classes + +| Name | Description | Modifies Slot | +| --- | --- | --- | +{% for c in classes_by_slot -%} +| {{ gen.link(c) }} | {{ schemaview.get_class(c).description|enshorten }} | {% if c in schemaview.get_classes_modifying_slot(element) %} yes {% else %} no {% endif %} | +{% endfor %} + +{% endif %} + +{% if schemaview.is_mixin(element.name) %} +## Mixin Usage + +| mixed into | description | range | domain | +| --- | --- | --- | --- | +{% for s in schemaview.slot_children(element.name, is_a=False) -%} +| {{ gen.link(s) }} | {{ schemaview.get_slot(s).description|enshorten }} | {{ schemaview.get_slot(s).range }} | {{ schemaview.get_classes_by_slot(schemaview.get_slot(s))|join(', ') }} | +{% endfor %} +{% endif %} + +## Properties + +### Type and Range + +| Property | Value | +| --- | --- | +| Range | {{ compute_range(element) }} | +{%- if element.domain %} +| Domain | {{ gen.link(element.domain) }} | +{%- endif %} +{%- if element.domain_of %} +| Domain Of | {{ gen.links(element.domain_of) | join(', ') }} | +{%- endif %} +{%- if element.slot_uri %} +| Slot URI | {{ gen.uri_link(element.slot_uri) }} | +{%- endif %} +{%- if element.slot_group %} +| Slot Group | {{ gen.link(element.slot_group) }} | +{%- endif %} +{%- if element.is_grouping_slot %} +| Is Grouping Slot | Yes | +{%- endif %} + +### Cardinality and Requirements + +| Property | Value | +| --- | --- | +{%- if element.required %} +| Required | Yes | +{%- elif element.recommended %} +| Recommended | Yes | +{%- endif %} +{%- if element.multivalued %} +| Multivalued | Yes | +{%- endif %} +{%- if element.minimum_cardinality is not none %} +| Minimum Cardinality | {{ element.minimum_cardinality }} | +{%- endif %} +{%- if element.maximum_cardinality is not none %} +| Maximum Cardinality | {{ element.maximum_cardinality }} | +{%- endif %} +{%- if element.exact_cardinality is not none %} +| Exact Cardinality | {{ element.exact_cardinality }} | +{%- endif %} + +{%- if element.multivalued and (element.list_elements_unique is not none or element.list_elements_ordered is not none) %} +### List/Collection Properties + +| Property | Value | +| --- | --- | +{%- if element.list_elements_unique is not none %} +| Elements Must Be Unique | {% if element.list_elements_unique %}Yes{% else %}No{% endif %} | +{%- endif %} +{%- if element.list_elements_ordered is not none %} +| Elements Are Ordered | {% if element.list_elements_ordered %}Yes{% else %}No{% endif %} | +{%- endif %} + +{% endif %} +{%- set has_slot_chars = element.key or element.identifier or element.designates_type + or element.inherited or element.readonly or element.ifabsent or element.owner + or element.shared or element.is_class_field or element.is_usage_slot + or element.usage_slot_name or element.singular_name or schemaview.is_mixin(element.name) %} + +{%- if has_slot_chars %} +### Slot Characteristics + +| Property | Value | +| --- | --- | +{%- if element.singular_name %} +| Singular Name | {{ element.singular_name }} | +{%- endif %} +{%- if element.key %} +| Key | Yes | +{%- endif %} +{%- if element.identifier %} +| Identifier | Yes | +{%- endif %} +{%- if element.designates_type %} +| Designates Type | Yes | +{%- endif %} +{%- if element.inherited %} +| Inherited | Yes | +{%- endif %} +{%- if element.readonly %} +| Readonly | Yes | +{%- endif %} +{%- if element.ifabsent %} +| If Absent | `{{ element.ifabsent }}` | +{%- endif %} +{%- if element.owner %} +| Owner | {{ gen.link(element.owner) }} | +{%- endif %} +{%- if element.shared %} +| Shared | Yes | +{%- endif %} +{%- if element.is_class_field %} +| Is Class Field | Yes | +{%- endif %} +{%- if element.is_usage_slot %} +| Is Usage Slot | Yes | +{%- endif %} +{%- if element.usage_slot_name %} +| Usage Slot Name | {{ element.usage_slot_name }} | +{%- endif %} +{%- if schemaview.is_mixin(element.name) %} +| Mixin | Yes | +{%- endif %} + +{% endif %} +{%- set has_basic_constraints = element.minimum_value is not none or element.maximum_value is not none or element.pattern %} + +{%- if has_basic_constraints %} +### Value Constraints + +| Property | Value | +| --- | --- | +{%- if element.minimum_value is not none %} +| Minimum Value | {{ element.minimum_value|int }} | +{%- endif %} +{%- if element.maximum_value is not none %} +| Maximum Value | {{ element.maximum_value|int }} | +{%- endif %} +{%- if element.pattern %} +| Regex Pattern | `{{ element.pattern }}` | +{%- endif %} + +{% endif %} +{%- set has_advanced_constraints = element.structured_pattern or element.equals_string + or element.equals_string_in or element.equals_number or element.enum_range + or element.unit or element.implicit_prefix %} + +{%- if has_advanced_constraints %} +
+Additional Constraints + +{%- if element.structured_pattern %} +**Structured Pattern:** + +- **Syntax:** `{{ element.structured_pattern.syntax }}` +- **Interpolated:** {{ element.structured_pattern.interpolated }} +{%- if element.structured_pattern.partial_match %} +- **Partial Match:** Yes +{%- endif %} +{%- endif %} + +{%- if element.equals_string %} +**Must Equal:** `{{ element.equals_string }}` +{%- endif %} + +{%- if element.equals_string_in %} +**Must Be One Of:** {{ element.equals_string_in | join(', ') }} +{%- endif %} + +{%- if element.equals_number %} +**Must Equal:** {{ element.equals_number }} +{%- endif %} + +{%- if element.enum_range %} +**Enumeration Range:** {{ gen.link(element.enum_range) }} +{%- endif %} + +{%- if element.unit %} +**Unit:** {{ gen.uri_link(element.unit) }} +{%- endif %} + +{%- if element.implicit_prefix %} +**Implicit Prefix:** {{ element.implicit_prefix }} +{%- endif %} + +
+{% endif %} + +{%- set has_rel_props = element.symmetric or element.asymmetric or element.reflexive + or element.locally_reflexive or element.irreflexive or element.transitive + or element.inverse or element.transitive_form_of or element.reflexive_transitive_form_of + or element.role or element.relational_role %} + +{%- if has_rel_props %} +
+Relationship Properties + +| Property | Value | +| --- | --- | +{%- if element.symmetric %} +| Symmetric | Yes | +{%- endif %} +{%- if element.asymmetric %} +| Asymmetric | Yes | +{%- endif %} +{%- if element.reflexive %} +| Reflexive | Yes | +{%- endif %} +{%- if element.locally_reflexive %} +| Locally Reflexive | Yes | +{%- endif %} +{%- if element.irreflexive %} +| Irreflexive | Yes | +{%- endif %} +{%- if element.transitive %} +| Transitive | Yes | +{%- endif %} +{%- if element.inverse %} +| Inverse | {{ gen.link(element.inverse) }} | +{%- endif %} +{%- if element.transitive_form_of %} +| Transitive Form Of | {{ gen.link(element.transitive_form_of) }} | +{%- endif %} +{%- if element.reflexive_transitive_form_of %} +| Reflexive Transitive Form Of | {{ gen.link(element.reflexive_transitive_form_of) }} | +{%- endif %} +{%- if element.role %} +| Role | {{ element.role }} | +{%- endif %} +{%- if element.relational_role %} +| Relational Role | {{ element.relational_role }} | +{%- endif %} + +
+{% endif %} + +{%- set has_advanced = element.path_rule or element.disjoint_with + or element.children_are_mutually_disjoint or element.subproperty_of + or element.array or element.bindings or element.type_mappings + or element.value_presence or element.range_expression %} + +{%- if has_advanced %} +
+Advanced Properties + +{%- if element.subproperty_of %} +**Subproperty Of:** {{ gen.link(element.subproperty_of) }} +{%- endif %} + +{%- if element.path_rule %} +**Path Rule:** + +``` +{{ element.path_rule }} +``` +{%- endif %} + +{%- if element.disjoint_with %} +**Disjoint With:** {{ gen.links(element.disjoint_with) | join(', ') }} +{%- endif %} + +{%- if element.children_are_mutually_disjoint %} +**Children Are Mutually Disjoint:** Yes +{%- endif %} + +{%- if element.array %} +**Array Configuration:** + +- **Dimensions:** {{ element.array.dimensions | join(' x ') }} +{%- if element.array.exact_number_dimensions %} +- **Exact Dimensions Required:** Yes +{%- endif %} +{%- endif %} + +{%- if element.range_expression %} +**Range Expression:** {{ element.range_expression }} +{%- endif %} + +{%- if element.value_presence %} +**Value Presence:** {{ element.value_presence }} +{%- endif %} + +{%- if element.bindings %} +**Term Bindings:** + +{%- for binding in element.bindings %} +- {{ binding }} +{%- endfor %} +{%- endif %} + +{%- if element.type_mappings %} +**Type Mappings:** + +{%- for tm in element.type_mappings %} +- **Framework:** {{ tm.framework }}, **Mapping:** {{ tm.mapping }} +{%- endfor %} +{%- endif %} + +
+{% endif %} + +{%- set has_expressions = element.any_of or element.all_of or element.exactly_one_of + or element.none_of or element.equals_expression or element.has_member or element.all_members %} + +{%- if has_expressions %} +
+Expressions & Logic + +{%- if element.any_of %} +#### Any Of + +Value must satisfy at least one of: + +{%- for expr in element.any_of %} +- {{ expr }} +{%- endfor %} +{%- endif %} + +{%- if element.all_of %} +#### All Of + +Value must satisfy all of: + +{%- for expr in element.all_of %} +- {{ expr }} +{%- endfor %} +{%- endif %} + +{%- if element.exactly_one_of %} +#### Exactly One Of + +Value must satisfy exactly one of: + +{%- for expr in element.exactly_one_of %} +- {{ expr }} +{%- endfor %} +{%- endif %} + +{%- if element.none_of %} +#### None Of + +Value must not satisfy any of: + +{%- for expr in element.none_of %} +- {{ expr }} +{%- endfor %} +{%- endif %} + +{%- if element.equals_expression %} +#### Equals Expression + +`{{ element.equals_expression }}` +{%- endif %} + +{%- if element.has_member %} +#### Has Member + +{{ element.has_member }} +{%- endif %} + +{%- if element.all_members %} +#### All Members + +{{ element.all_members }} +{%- endif %} + +
+{% endif %} + +{% if schemaview.usage_index().get(element.name) %} +## Usages + +| used by | used in | type | used | +| --- | --- | --- | --- | +{% for usage in schemaview.usage_index().get(element.name) -%} +| {{ gen.link(usage.used_by) }} | {{ gen.link(usage.slot) }} | {{ usage.metaslot }} | {{ gen.link(usage.used) }} | +{% endfor %} +{% endif %} + +{% include "common_metadata.md.jinja2" %} + +## LinkML Source + +
+```yaml +{{ gen.yaml(element) }} +``` +
+ +{%- if footer -%} +{{ footer }} +{%- endif -%} diff --git a/data-model/resources/markdown-templates/subset.md.jinja2 b/data-model/resources/markdown-templates/subset.md.jinja2 new file mode 100644 index 00000000..91e75e2b --- /dev/null +++ b/data-model/resources/markdown-templates/subset.md.jinja2 @@ -0,0 +1,108 @@ +{# +# Subset: {{ gen.name(element) }} {% if element.deprecated %} (DEPRECATED) {% endif %} +#} +# Subset: {{ element.title }} {% if element.deprecated %} (DEPRECATED) {% endif %} + +{%- if header -%} +{{ header }} +{%- endif -%} + +{% if element.description %} +{% set element_description_lines = element.description.split('\n') %} +{% for element_description_line in element_description_lines %} +_{{ element_description_line }}_ +{% endfor %} +{% endif %} + +{# +URI: {{ gen.link(element) }} +#} + +{% include "common_metadata.md.jinja2" %} + +{% set classes_in_subset = [] %} +{% set slots_in_subset = [] %} +{% set enums_in_subset = [] %} + +{# Collect classes, slots, and enumerations in subset #} +{% for c in gen.all_class_objects()|sort(attribute=sort_by) %} + {%- if element.name in c.in_subset %} + {% set _ = classes_in_subset.append(c) %} + {%- endif %} +{% endfor %} + +{% for s in gen.all_slot_objects()|sort(attribute=sort_by) %} + {%- if element.name in s.in_subset %} + {% set _ = slots_in_subset.append(s) %} + {%- endif %} +{% endfor %} + +{% for e in schemaview.all_enums().values() %} + {%- if element.name in e.in_subset %} + {% set _ = enums_in_subset.append(e) %} + {%- endif %} +{% endfor %} + +{% if classes_in_subset %} +## Classes in subset + +| Class | Description | +| --- | --- | +{% for c in classes_in_subset -%} +{%- if element.name in c.in_subset -%} +| {{ gen.link(c) }} | {{ c.description|enshorten }} | +{% endif -%} +{% endfor %} + +{% for c in classes_in_subset -%} +{%- if element.name in c.in_subset -%} + +{% set induced_slots = gen.class_induced_slots(c.name)|sort(attribute=sort_by) %} + +{%- set filtered_slots = [] -%} +{%- for s in induced_slots|sort(attribute=sort_by) -%} + {%- if element.name in s.in_subset or element.name in schemaview.get_slot(s.name).in_subset -%} + {% set _ = filtered_slots.append(s) %} + {%- endif -%} +{%- endfor %} + +{%- if filtered_slots|length > 0 -%} +### Slots from {{ gen.link(c) }} also in _{{ element.name }}_ + +| Name | Cardinality and Range | Description | +| --- | --- | --- | +{% for s in filtered_slots -%} +| {{ gen.link(s) }} | {{ gen.cardinality(s) }}
{{ gen.link(s.range) }} | {{ s.description|enshorten }} {% if s.identifier %}**identifier**{% endif %} | +{% endfor %} +{%- endif %} + +{%- endif %} +{% endfor %} + +{%- endif %} + +{% if slots_in_subset %} +## Slots in subset + +| Slot | Description | +| --- | --- | +{% for s in slots_in_subset|sort(attribute=sort_by) -%} +{%- if element.name in s.in_subset -%} +| {{ gen.link(s) }} | {{ s.description|enshorten }} | +{%- endif %} +{% endfor %} + +{%- endif %} + +{% if enums_in_subset %} +## Enumerations in subset + +| Enumeration | Description | +| --- | --- | +{% for e in enums_in_subset|sort(attribute='name') -%} +{% if element.name in e.in_subset -%} +| {{ gen.link(e) }} | {{ e.description|enshorten }} | +{%- endif %} +{% endfor %} + +{%- endif %} diff --git a/data-model/resources/markdown-templates/type.md.jinja2 b/data-model/resources/markdown-templates/type.md.jinja2 new file mode 100644 index 00000000..e109b47a --- /dev/null +++ b/data-model/resources/markdown-templates/type.md.jinja2 @@ -0,0 +1,134 @@ +{%- if element.title and element.title != element.name %} + {%- set title = element.title ~ ' (' ~ element.name ~ ')' -%} +{%- else %} + {%- set title = gen.name(element) -%} +{%- endif -%} + +# Type: {{ title }} {% if element.deprecated %} (DEPRECATED) {% endif %} + +{% if element.description %} +{% set element_description_lines = element.description.split('\n') %} +{% for element_description_line in element_description_lines %} +_{{ element_description_line }}_ +{% endfor %} +{% endif %} + +URI: {{ gen.uri_link(element) }} + +## Type Properties + +| Property | Value | +| --- | --- | +{%- if element.typeof %} +| Type Of | {{ gen.link(element.typeof) }} | +{%- endif %} +{%- if element.base %} +| Base | `{{ element.base }}` | +{%- endif %} +{%- if element.uri %} +| Type URI | {{ gen.uri_link(element.uri) }} | +{%- endif %} +{%- if element.repr %} +| Representation | `{{ element.repr }}` | +{%- endif %} +{%- if element.union_of %} +| Union Of | {{ gen.links(element.union_of) | join(', ') }} | +{%- endif %} + +{%- set has_basic_constraints = element.minimum_value is not none or element.maximum_value is not none or element.pattern %} + +{%- if has_basic_constraints %} +## Value Constraints + +| Property | Value | +| --- | --- | +{%- if element.minimum_value is not none or element.maximum_value is not none %} +| Numeric Range | {{ gen.number_value_range(element) }} | +{%- endif %} +{%- if element.pattern %} +| Regex Pattern | `{{ element.pattern }}` | +{%- endif %} + +{% endif %} +{%- set has_advanced_constraints = element.structured_pattern or element.equals_string + or element.equals_string_in or element.equals_number or element.unit or element.implicit_prefix %} + +{%- if has_advanced_constraints %} +
+Additional Constraints + +{%- if element.structured_pattern %} +**Structured Pattern:** + +- **Syntax:** `{{ element.structured_pattern.syntax }}` +- **Interpolated:** {{ element.structured_pattern.interpolated }} +{%- if element.structured_pattern.partial_match %} +- **Partial Match:** Yes +{%- endif %} +{%- endif %} + +{%- if element.equals_string %} +**Must Equal:** `{{ element.equals_string }}` +{%- endif %} + +{%- if element.equals_string_in %} +**Must Be One Of:** {{ element.equals_string_in | join(', ') }} +{%- endif %} + +{%- if element.equals_number %} +**Must Equal:** {{ element.equals_number }} +{%- endif %} + +{%- if element.unit %} +**Unit:** {{ gen.uri_link(element.unit) }} +{%- endif %} + +{%- if element.implicit_prefix %} +**Implicit Prefix:** {{ element.implicit_prefix }} +{%- endif %} + +
+{% endif %} + +{%- set has_expressions = element.any_of or element.all_of or element.exactly_one_of or element.none_of %} + +{%- if has_expressions %} +
+Type Expressions + +{%- if element.any_of %} +**Any Of:** Value must satisfy at least one of these expressions + +{%- for expr in element.any_of %} +- {{ expr }} +{%- endfor %} +{%- endif %} + +{%- if element.all_of %} +**All Of:** Value must satisfy all of these expressions + +{%- for expr in element.all_of %} +- {{ expr }} +{%- endfor %} +{%- endif %} + +{%- if element.exactly_one_of %} +**Exactly One Of:** Value must satisfy exactly one of these expressions + +{%- for expr in element.exactly_one_of %} +- {{ expr }} +{%- endfor %} +{%- endif %} + +{%- if element.none_of %} +**None Of:** Value must not satisfy any of these expressions + +{%- for expr in element.none_of %} +- {{ expr }} +{%- endfor %} +{%- endif %} + +
+{% endif %} + +{% include "common_metadata.md.jinja2" %} diff --git a/data-model/resources/markdown-templates_main-classes/class.md.jinja2 b/data-model/resources/markdown-templates_main-classes/class.md.jinja2 new file mode 100644 index 00000000..e69de29b diff --git a/data-model/resources/markdown-templates_main-classes/index.md.jinja2 b/data-model/resources/markdown-templates_main-classes/index.md.jinja2 new file mode 100644 index 00000000..5ab9f8f9 --- /dev/null +++ b/data-model/resources/markdown-templates_main-classes/index.md.jinja2 @@ -0,0 +1,66 @@ + +{%- macro format_range(slot) -%} + {%- if slot.multivalued -%} + {%- if slot.inlined -%} + {%- if slot.inlined_as_list -%} + []{{ slot.range }} + {%- else -%} + {%- if slot.name == "properties" -%} + map[string][string] + {%- else -%} + map[string][{{ slot.range }}] + {%- endif -%} + {%- endif -%} + {%- else -%} + []string + {%- endif -%} + {%- else -%} + {{ slot.range }} + {%- endif -%} +{%- endmacro -%} + +{%- set schema_basename = schema.source_file.split('/')[-1].replace('.linkml.yaml', '') -%} + +# {%- if schema.title %}{{ schema.title }}{% else %}{{ schema.name }}{% endif %} + +{% if schema.description %}{{ schema.description }}{% endif %} + +## Object structure + +{% for cls in schemaview.all_classes() -%} +{%- if not cls.startswith("ComponentProperties") and not cls.startswith("Helm") and not cls.startswith("Compose") +%} +### {{ cls }} Attributes + +| Attribute | Type | Required? | Description | +| --- | --- | --- | --- | +{% for slot in schemaview.class_slots(cls)|sort(attribute='rank') -%} +| {{ slot }} | {{ format_range(schemaview.get_slot(slot)) }} | {% if schemaview.get_slot(slot).required == True %} Y {% else %} N {% endif %} | {{ schemaview.get_slot(slot).description }}| +{% endfor %} + +Detailed class view: [{{ cls }}](../../data-model/{{ cls }}.md) +{% endif -%} +{%- endfor -%} + +{% if gen.example_object_blobs(schema.name) -%} +## Examples + +Following examples have been automatically validated against the schema of this class. + +{% for name, blob in gen.example_object_blobs(schema.name) -%} +??? example "{{ name }}" + + ```yaml + {{ blob | indent(4) }} + ``` +{% endfor %} +{% endif %} + +## JSON Schema + +

View JSON Schema in new tab or download

+ diff --git a/data-model/tools/check-examples.bash b/data-model/tools/check-examples.bash new file mode 100755 index 00000000..443defd6 --- /dev/null +++ b/data-model/tools/check-examples.bash @@ -0,0 +1,130 @@ +#!/usr/bin/env bash + +set -eu + +THIS_SCRIPT="$(readlink -f "${0}")" +THIS_DIR="$(dirname "${THIS_SCRIPT}")" +DOCS_GEN="${THIS_DIR}" +CONFIGS="${DOCS_GEN}/configurations" + +ROOT_DIR="$(dirname "$(dirname "${THIS_DIR}")")" + +VERBOSITY="${1:-info}" + +debug() { + if [[ "$VERBOSITY" == "debug" ]]; then + echo "$1" + fi +} + +trace() { + if [[ "$VERBOSITY" == "debug" ]] || + [[ "$VERBOSITY" == "trace" ]]; then + echo "$1" + fi +} + +info() { + if [[ "$VERBOSITY" == "debug" ]] || + [[ "$VERBOSITY" == "trace" ]] || + [[ "$VERBOSITY" == "info" ]]; then + echo "$1" + fi +} + +if command -v poetry 2>&1 >/dev/null; then + RUN="poetry run" +else + if ! command -v linkml 2>&1 >/dev/null; then + echo "The command 'linkml' is missing" + exit 1 + fi + if ! command -v mkdocs 2>&1 >/dev/null; then + echo "The command 'mkdocs' is missing" + exit 1 + fi + RUN="" +fi + +check_spec() { + trace "********************************" + SPEC_ROOT="${ROOT_DIR}/$(jq -r '.root' "${CONFIGS}/$1")" + trace "Spec root folder: ${SPEC_ROOT}" + + if [[ ! -d "${SPEC_ROOT}" ]]; then + echo "🚨 Spec root folder does not exist: ${SPEC_ROOT}" + return 1 + fi + + TARGET_CLASS="$(jq -r '.targetclass' "${CONFIGS}/$1")" + info "Target class: ${TARGET_CLASS}" + + SCHEMA_FILE="$(jq -r '.schemafile' "${CONFIGS}/$1")" + trace "Schema file: ${SCHEMA_FILE}" + + EXAMPLES_DIR="${SPEC_ROOT}/resources/examples/valid" + trace "Examples folder: ${EXAMPLES_DIR}" + FOUND_VALID=0 + for EXAMPLE in $(ls "${EXAMPLES_DIR}"/${TARGET_CLASS}-*.{yaml,json} 2>/dev/null); do + FOUND_VALID=1 + if result=$(${RUN} linkml validate \ + --schema "${SPEC_ROOT}/${SCHEMA_FILE}" \ + --target-class "${TARGET_CLASS}" \ + "${EXAMPLE}") && + [[ "${result}" == "No issues found" ]]; then + echo "✅ Valid example (${EXAMPLE})" + else + echo "🚨 Not valid example expected to be valid! (${EXAMPLE})" + echo " ERROR: $result" + return 1 + fi + done + + if [[ "${FOUND_VALID}" -eq 0 ]]; then + echo "⚠️ No valid examples found for ${TARGET_CLASS} in ${EXAMPLES_DIR}" + return 1 + fi + + COUNTEREXAMPLES_DIR="${SPEC_ROOT}/resources/examples/invalid" + FOUND_INVALID=0 + for COUNTEREXAMPLE in $(ls "${COUNTEREXAMPLES_DIR}"/${TARGET_CLASS}-*.{yaml,json} 2>/dev/null); do + FOUND_INVALID=1 + if ! result=$(${RUN} linkml validate \ + --schema "${SPEC_ROOT}/${SCHEMA_FILE}" \ + --target-class "${TARGET_CLASS}" \ + "${COUNTEREXAMPLE}"); then + echo "✅ Validation of invalid example failed, as expected (${COUNTEREXAMPLE})" + debug "${result}" + else + echo "🚨 Validation of invalid example '${COUNTEREXAMPLE}' was expected to fail, but has succeeded." + echo "${result}" + return 1 + fi + done + + if [[ "${FOUND_INVALID}" -eq 0 ]]; then + echo "⚠️ No invalid examples found for ${TARGET_CLASS} in ${COUNTEREXAMPLES_DIR}" + return 1 + fi + + if false; then + # does not work due to following LinkML bugs: + # https://github.com/linkml/linkml/issues/2423 + # https://github.com/linkml/linkml/issues/2425 + ${RUN} linkml examples \ + --schema "${SPEC_ROOT}/application-description.linkml.yaml" \ + --input-directory "${SPEC_ROOT}/resources/examples/valid" \ + --counter-example-input-directory "${SPEC_ROOT}/resources/examples/invalid" \ + --output-directory "${SPEC_ROOT}/output" + fi +} + +OVERALL_RESULT=0 + +for spec in $(ls "${CONFIGS}"); do + if ! check_spec "${spec}"; then + OVERALL_RESULT=1 + fi +done + +exit "${OVERALL_RESULT}" diff --git a/data-model/tools/configurations/application-deployment.json b/data-model/tools/configurations/application-deployment.json new file mode 100644 index 00000000..fdf209d6 --- /dev/null +++ b/data-model/tools/configurations/application-deployment.json @@ -0,0 +1,6 @@ +{ + "root": "data-model", + "targetclass": "ApplicationDeployment", + "schemafile": "application-deployment.linkml.yaml", + "markdowndoc": "application-deployment.md" +} diff --git a/data-model/tools/configurations/application-description.json b/data-model/tools/configurations/application-description.json new file mode 100644 index 00000000..02517e29 --- /dev/null +++ b/data-model/tools/configurations/application-description.json @@ -0,0 +1,6 @@ +{ + "root": "data-model", + "targetclass": "ApplicationDescription", + "schemafile": "application-description.linkml.yaml", + "markdowndoc": "application-description.md" +} diff --git a/data-model/tools/configurations/deployment-status.json b/data-model/tools/configurations/deployment-status.json new file mode 100644 index 00000000..723601b3 --- /dev/null +++ b/data-model/tools/configurations/deployment-status.json @@ -0,0 +1,6 @@ +{ + "root": "data-model", + "targetclass": "DeploymentStatusManifest", + "schemafile": "deployment-status.linkml.yaml", + "markdowndoc": "deployment-status.md" +} diff --git a/data-model/tools/configurations/desired-state-manifest.json b/data-model/tools/configurations/desired-state-manifest.json new file mode 100644 index 00000000..82d68b74 --- /dev/null +++ b/data-model/tools/configurations/desired-state-manifest.json @@ -0,0 +1,6 @@ +{ + "root": "data-model", + "targetclass": "DesiredStateManifest", + "schemafile": "desired-state-manifest.linkml.yaml", + "markdowndoc": "desired-state-manifest.md" +} diff --git a/data-model/tools/configurations/device-capabilities.json b/data-model/tools/configurations/device-capabilities.json new file mode 100644 index 00000000..6e074251 --- /dev/null +++ b/data-model/tools/configurations/device-capabilities.json @@ -0,0 +1,6 @@ +{ + "root": "data-model", + "targetclass": "DeviceCapabilitiesManifest", + "schemafile": "device-capabilities.linkml.yaml", + "markdowndoc": "device-capabilities.md" +} diff --git a/data-model/tools/generate-all.bash b/data-model/tools/generate-all.bash new file mode 100755 index 00000000..8caec966 --- /dev/null +++ b/data-model/tools/generate-all.bash @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +set -eu + +THIS_SCRIPT="$(readlink -f "${0}")" +THIS_DIR="$(dirname "${THIS_SCRIPT}")" + +echo "Generate Class Diagrams" +"${THIS_DIR}/generate-class-diagram.bash" +echo "Generate JSON Schemas" +"${THIS_DIR}/generate-json-schemas.bash" +echo "Generate OpenAPI specification" +"${THIS_DIR}/generate-openapi.bash" +echo "Generate Documentation" +"${THIS_DIR}/generate-docs.bash" +echo "Done" diff --git a/data-model/tools/generate-class-diagram.bash b/data-model/tools/generate-class-diagram.bash new file mode 100755 index 00000000..d17801d1 --- /dev/null +++ b/data-model/tools/generate-class-diagram.bash @@ -0,0 +1,108 @@ +#!/usr/bin/env bash + +TMP_PLANTUML_FILE=$(mktemp) + +cleanup() { + rm "${TMP_PLANTUML_FILE}" +} + +trap cleanup EXIT + +set -eu + +THIS_SCRIPT="$(readlink -f "${0}")" +THIS_DIR="$(dirname "${THIS_SCRIPT}")" + +ROOT_DIR="$(dirname "$(dirname "${THIS_DIR}")")" + +TGT_DIR="${ROOT_DIR}/generated/diagrams" + +if command -v poetry &>/dev/null; then + RUN="poetry run" +else + if ! command -v linkml &>/dev/null; then + echo "The command 'linkml' is missing" + exit 1 + fi + if ! command -v curl &>/dev/null; then + echo "The command 'curl' is missing" + exit 1 + fi + RUN="" +fi + +mkdir -p "${TGT_DIR}" + +# Holistic class diagram +${RUN} linkml generate plantuml "${ROOT_DIR}/data-model/margo-data-model.linkml.yaml" | + sed "s/@enduml/DeploymentAnnotations ..> ApplicationDescription\n@enduml/" | + sed "s/@enduml/DeploymentStatusManifest ..> ApplicationDeployment\n@enduml/" | + sed "s/@enduml/DesiredStateManifest ..> ApplicationDeployment\n@enduml/" >"${TMP_PLANTUML_FILE}" + +curl -H "Content-Type: test/plain" --silent --data-binary @"${TMP_PLANTUML_FILE}" https://kroki.io/plantuml/svg -o "${TGT_DIR}/DataModel-ClassDiagram.svg" +curl -H "Content-Type: test/plain" --silent --data-binary @"${TMP_PLANTUML_FILE}" https://kroki.io/plantuml/png -o "${TGT_DIR}/DataModel-ClassDiagram.png" + +if [ "$#" -lt 1 ]; then + exit +fi + +# Class diagram focused on ApplicationDescription +${RUN} linkml generate plantuml \ + --classes ApplicationDescription \ + --classes ApplicationMetadata \ + --classes Parameter \ + --classes Configuration \ + --classes DeploymentProfileDescription \ + "${ROOT_DIR}/data-model/application-description.linkml.yaml" | + sed "/Component.*{$/,/}/d" \ + >"${TMP_PLANTUML_FILE}" + +curl -H "Content-Type: test/plain" --silent --data-binary @"${TMP_PLANTUML_FILE}" https://kroki.io/plantuml/svg -o "${TGT_DIR}/ApplicationDescription-ClassDiagram.svg" + +# Class diagram focused on DeploymentStatusManifest +${RUN} linkml generate plantuml \ + --classes DeploymentStatusManifest \ + --classes ApplicationDeployment \ + --classes DeploymentProfile \ + "${ROOT_DIR}/data-model/margo-data-model.linkml.yaml" | + sed "s/@enduml/DeploymentStatusManifest ..> ApplicationDeployment\n@enduml/" | + sed "s/@enduml/ComponentStatus ..> Component\n@enduml/" \ + >"${TMP_PLANTUML_FILE}" + +curl -H "Content-Type: test/plain" --silent --data-binary @"${TMP_PLANTUML_FILE}" https://kroki.io/plantuml/svg -o "${TGT_DIR}/DeploymentStatusManifest-ClassDiagram.svg" + +# Class diagram focused on DesiredStateManifest +${RUN} linkml generate plantuml \ + --classes DesiredStateManifest \ + "${ROOT_DIR}/data-model/margo-data-model.linkml.yaml" | + sed "s/@enduml/DesiredStateManifest ..> ApplicationDeployment\n@enduml/" \ + >"${TMP_PLANTUML_FILE}" + +curl -H "Content-Type: test/plain" --silent --data-binary @"${TMP_PLANTUML_FILE}" https://kroki.io/plantuml/svg -o "${TGT_DIR}/DesiredStateManifest-ClassDiagram.svg" + +# Class diagram focused on DeviceCapabilities +${RUN} linkml generate plantuml \ + --classes DeviceCapabilitiesManifest \ + --classes Properties \ + --classes Resources \ + "${ROOT_DIR}/data-model/margo-data-model.linkml.yaml" \ + >"${TMP_PLANTUML_FILE}" + +curl -H "Content-Type: test/plain" --silent --data-binary @"${TMP_PLANTUML_FILE}" https://kroki.io/plantuml/svg -o "${TGT_DIR}/DeviceCapabilities-ClassDiagram.svg" + +# Class diagram focused on ApplicationDeployment +${RUN} linkml generate plantuml \ + --classes ApplicationDeployment \ + --classes DeploymentMetadata \ + --classes DeploymentAnnotations \ + --classes Spec \ + --classes Parameter \ + --classes DeploymentProfile \ + --classes ComposeDeploymentProfile \ + --classes HelmDeploymentProfile \ + --classes Component \ + "${ROOT_DIR}/data-model/application-deployment.linkml.yaml" | + sed "s/@enduml/DeploymentAnnotations ..> ApplicationDescription\n@enduml/" \ + >"${TMP_PLANTUML_FILE}" + +curl -H "Content-Type: test/plain" --silent --data-binary @"${TMP_PLANTUML_FILE}" https://kroki.io/plantuml/svg -o "${TGT_DIR}/ApplicationDeployment-ClassDiagram.svg" diff --git a/data-model/tools/generate-docs.bash b/data-model/tools/generate-docs.bash new file mode 100755 index 00000000..714b7844 --- /dev/null +++ b/data-model/tools/generate-docs.bash @@ -0,0 +1,97 @@ +#!/usr/bin/env bash + +set -eu + +THIS_SCRIPT="$(readlink -f "${0}")" +THIS_DIR="$(dirname "${THIS_SCRIPT}")" + +ROOT_DIR="$(dirname "$(dirname "${THIS_DIR}")")" + +TMP_DIR="$(mktemp -d)" + +cleanup() { + rm -r "${TMP_DIR}" +} + +trap cleanup EXIT + +if command -v poetry &>/dev/null; then + RUN="poetry run" +else + if ! command -v linkml &>/dev/null; then + echo "The command 'linkml' is missing" + exit 1 + fi + if ! command -v mkdocs &>/dev/null; then + echo "The command 'mkdocs' is missing" + exit 1 + fi + RUN="" +fi + +TGT_DIR="${ROOT_DIR}/generated/markdown_main-classes" +MERGED_DIR="${ROOT_DIR}/merged" + +mkdir -p "${TGT_DIR}" "${MERGED_DIR}" + +cp -R -H "${ROOT_DIR}/system-design/"* "${MERGED_DIR}/" + +# Main classes + +for schema_name in "application-description" "application-deployment" "deployment-status" "desired-state-manifest" "device-capabilities"; do + ${RUN} linkml generate doc \ + --directory="${TMP_DIR}" \ + --template-directory="${ROOT_DIR}/data-model/resources/markdown-templates_main-classes" \ + --preserve-names \ + --stacktrace \ + --example-directory="${ROOT_DIR}/data-model/resources/examples/valid" \ + "${ROOT_DIR}/data-model/${schema_name}.linkml.yaml" >/dev/null + + mv "${TMP_DIR}/index.md" "${TGT_DIR}/${schema_name}.md" + rm -rf "${TMP_DIR:?}/*" +done + +mv "${TGT_DIR}/deployment-status.md" "${MERGED_DIR}/specification/margo-management-interface/" +mv "${TGT_DIR}/device-capabilities.md" "${MERGED_DIR}/specification/margo-management-interface/" +mv "${TGT_DIR}/application-description.md" "${MERGED_DIR}/specification/applications/" + +# Whole Data Model + +TGT_DIR="${ROOT_DIR}/generated/markdown" + +mkdir -p "${TGT_DIR}" + +${RUN} linkml generate doc \ + --directory="${TGT_DIR}" \ + --template-directory="${ROOT_DIR}/data-model/resources/markdown-templates" \ + --preserve-names \ + --stacktrace \ + --example-directory="${ROOT_DIR}/data-model/resources/examples/valid" \ + "${ROOT_DIR}/data-model/margo-data-model.linkml.yaml" >/dev/null + +mkdir -p system-design/data-model +mv generated/markdown/* "${MERGED_DIR}/data-model/" + +"${THIS_DIR}/generate-class-diagram.bash" + +cp "${ROOT_DIR}/generated/diagrams/DataModel-ClassDiagram.svg" "${MERGED_DIR}/figures/" +cp "${ROOT_DIR}/generated/diagrams/DataModel-ClassDiagram.png" "${MERGED_DIR}/figures/" + +"${THIS_DIR}/generate-openapi.bash" +# generate-openapi.bash writes to both generated/openapi/ and system-design/. +# Since system-design/ was already copied into merged/ above, copy the spec +# into merged/ now so mkdocs build can find it. +cp "${ROOT_DIR}/generated/openapi/workload-management-api-1.0.0.openapi.yaml" \ + "${MERGED_DIR}/specification/margo-management-interface/workload-management-api-1.0.0.yaml" + +# JSON Schemas: copy for download +JSON_SCHEMA_DIR="${ROOT_DIR}/generated/json-schemas" +MERGED_JSON_SCHEMA_DIR="${MERGED_DIR}/json-schemas" + +mkdir -p "${MERGED_JSON_SCHEMA_DIR}" + +for schema_file in "${JSON_SCHEMA_DIR}"/*.schema.json; do + if [ -f "${schema_file}" ]; then + cp "${schema_file}" "${MERGED_JSON_SCHEMA_DIR}/" + fi +done diff --git a/data-model/tools/generate-json-schemas.bash b/data-model/tools/generate-json-schemas.bash new file mode 100755 index 00000000..c2e93c54 --- /dev/null +++ b/data-model/tools/generate-json-schemas.bash @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +set -eu + +THIS_SCRIPT="$(readlink -f "${0}")" +THIS_DIR="$(dirname "${THIS_SCRIPT}")" + +ROOT_DIR="$(dirname "$(dirname "${THIS_DIR}")")" + +TGT_DIR="${ROOT_DIR}/generated/json-schemas" + +if command -v poetry &>/dev/null; then + RUN="poetry run" +else + if ! command -v linkml &>/dev/null; then + echo "The command 'linkml' is missing" + exit 1 + fi + RUN="" +fi + +mkdir -p "${TGT_DIR}" + +for schema in "application-deployment" "application-description" "deployment-status" "desired-state-manifest" "device-capabilities"; do + ${RUN} linkml generate json-schema "${ROOT_DIR}/data-model/${schema}.linkml.yaml" >"${TGT_DIR}/${schema}.schema.json" +done diff --git a/data-model/tools/generate-openapi.bash b/data-model/tools/generate-openapi.bash new file mode 100755 index 00000000..4ce9204d --- /dev/null +++ b/data-model/tools/generate-openapi.bash @@ -0,0 +1,46 @@ +#!/usr/bin/env bash + +set -eu + +THIS_SCRIPT="$(readlink -f "${0}")" +THIS_DIR="$(dirname "${THIS_SCRIPT}")" + +ROOT_DIR="$(dirname "$(dirname "${THIS_DIR}")")" + +TGT_DIR="${ROOT_DIR}/generated/openapi" +TGT_FILE="${TGT_DIR}/workload-management-api-1.0.0.openapi.yaml" + +# Tracked location in system-design/ — this is what mkdocs and the repo use +SYSTEM_DESIGN_FILE="${ROOT_DIR}/system-design/specification/margo-management-interface/workload-management-api-1.0.0.yaml" + +if command -v poetry &>/dev/null; then + RUN="poetry run" +else + if ! command -v linkml &>/dev/null; then + echo "The command 'linkml' is missing" + exit 1 + fi + RUN="" +fi + +mkdir -p "${TGT_DIR}" + +# TODO: remove following block after LinkML release >v1.11.1 +( + cd data-model/tools + poetry run python openapigen.py --keep-unreferenced --inline-enums -t workload-management-api-1.0.0.openapi.yaml ../margo-data-model.linkml.yaml \ + >"${TGT_FILE}" + cp "${TGT_FILE}" "${SYSTEM_DESIGN_FILE}" +) +exit + +${RUN} linkml generate openapi \ + --template "${THIS_DIR}/workload-management-api-1.0.0.openapi.yaml" \ + --inline-enums \ + --keep-unreferenced \ + "${ROOT_DIR}/data-model/margo-data-model.linkml.yaml" \ + >"${TGT_FILE}" + +# Copy to the tracked location in system-design/ so it is picked up by +# generate-docs.bash (which copies system-design/ → merged/) and by git +cp "${TGT_FILE}" "${SYSTEM_DESIGN_FILE}" diff --git a/mkdocs.yml b/mkdocs.yml index a4b87e29..97cdf4e4 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,5 +1,5 @@ site_name: Specification (pre-draft) -docs_dir: system-design +docs_dir: merged nav: - What is Margo?: index.md @@ -15,9 +15,11 @@ nav: - specification/identity/trust-bundle-api-swagger.md - Margo Management Interface: - specification/margo-management-interface/api-requirements-and-security.md - - specification/margo-management-interface/device-capabilities.md + - specification/margo-management-interface/device-capabilities-api.md + - Device Capabilities: specification/margo-management-interface/device-capabilities.md - specification/margo-management-interface/desired-state.md - - specification/margo-management-interface/deployment-status.md + - specification/margo-management-interface/deployment-status-api.md + - Deployment Status: specification/margo-management-interface/deployment-status.md - specification/margo-management-interface/management-interface-swagger.md - Applications: - specification/applications/application-description.md @@ -28,8 +30,15 @@ nav: - specification/observability/publishing-workload-observability-data.md - specification/observability/collecting-workload-observability-data.md - specification/observability/consuming-workload-observability-data.md - - Problem Types: - - specification/problem-types.md + - Data Model: + - Overview: data-model/index.md + - ApplicationDescription: data-model/ApplicationDescription.md + - ApplicationDeployment: data-model/ApplicationDeployment.md + - DeviceCapabilitiesManifest: data-model/DeviceCapabilitiesManifest.md + - DesiredStateManifest: data-model/DesiredStateManifest.md + - DeploymentStatusManifest: data-model/DeploymentStatusManifest.md + - Problem Types: + - specification/problem-types.md - Specification Version Management: - specification/specification-version-management.md theme: @@ -59,6 +68,8 @@ theme: markdown_extensions: - toc: toc_depth: 2 + - admonition + - pymdownx.details - pymdownx.superfences: custom_fences: - name: mermaid @@ -72,6 +83,8 @@ extra_css: extra_javascript: - assets/swagger-ui-bundle.js - assets/swagger-ui-standalone-preset.js + - assets/svg-pan-zoom.min.js + - assets/svg-pan-zoom-init.js extra: # https://squidfunk.github.io/mkdocs-material/setup/setting-up-the-footer/#generator-notice diff --git a/system-design/assets/svg-pan-zoom-init.js b/system-design/assets/svg-pan-zoom-init.js new file mode 100644 index 00000000..86e5737b --- /dev/null +++ b/system-design/assets/svg-pan-zoom-init.js @@ -0,0 +1,56 @@ +/** + * Initialize svg-pan-zoom on containers marked with data-svg-pan-zoom. + * Each container should have a data-svg-src attribute pointing to the SVG file. + * The SVG is fetched, inlined into the DOM, and then svg-pan-zoom is attached. + */ +document.addEventListener("DOMContentLoaded", function () { + var containers = document.querySelectorAll("[data-svg-pan-zoom]"); + containers.forEach(function (container) { + var svgSrc = container.getAttribute("data-svg-src"); + if (!svgSrc) return; + + fetch(svgSrc) + .then(function (response) { return response.text(); }) + .then(function (svgText) { + // Parse the SVG and insert it into the container + var parser = new DOMParser(); + var svgDoc = parser.parseFromString(svgText, "image/svg+xml"); + var svgEl = svgDoc.documentElement; + + // Make the SVG fill the container + svgEl.setAttribute("width", "100%"); + svgEl.setAttribute("height", "100%"); + svgEl.style.width = "100%"; + svgEl.style.height = "100%"; + + container.appendChild(svgEl); + + // Initialize svg-pan-zoom + var panZoomInstance = svgPanZoom(svgEl, { + zoomEnabled: true, + controlIconsEnabled: true, + fit: true, + center: true, + minZoom: 0.25, + maxZoom: 20, + zoomScaleSensitivity: 0.3 + }); + + // Handle resize + window.addEventListener("resize", function () { + panZoomInstance.resize(); + panZoomInstance.fit(); + panZoomInstance.center(); + }); + }) + .catch(function (err) { + console.error("Failed to load SVG for pan-zoom:", err); + // Fallback: show as a regular image + var img = document.createElement("img"); + img.src = svgSrc; + img.alt = container.getAttribute("data-svg-alt") || "SVG diagram"; + img.style.width = "100%"; + container.appendChild(img); + }); + }); +}); diff --git a/system-design/assets/svg-pan-zoom.min.js b/system-design/assets/svg-pan-zoom.min.js new file mode 100644 index 00000000..4904d12d --- /dev/null +++ b/system-design/assets/svg-pan-zoom.min.js @@ -0,0 +1,3 @@ +// svg-pan-zoom v3.6.1 +// https://github.com/ariutta/svg-pan-zoom +!function s(r,a,l){function u(e,t){if(!a[e]){if(!r[e]){var o="function"==typeof require&&require;if(!t&&o)return o(e,!0);if(h)return h(e,!0);var n=new Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}var i=a[e]={exports:{}};r[e][0].call(i.exports,function(t){return u(r[e][1][t]||t)},i,i.exports,s,r,a,l)}return a[e].exports}for(var h="function"==typeof require&&require,t=0;tthis.options.maxZoom*n.zoom&&(t=this.options.maxZoom*n.zoom/this.getZoom());var i=this.viewport.getCTM(),s=e.matrixTransform(i.inverse()),r=this.svg.createSVGMatrix().translate(s.x,s.y).scale(t).translate(-s.x,-s.y),a=i.multiply(r);a.a!==i.a&&this.viewport.setCTM(a)},i.prototype.zoom=function(t,e){this.zoomAtPoint(t,a.getSvgCenterPoint(this.svg,this.width,this.height),e)},i.prototype.publicZoom=function(t,e){e&&(t=this.computeFromRelativeZoom(t)),this.zoom(t,e)},i.prototype.publicZoomAtPoint=function(t,e,o){if(o&&(t=this.computeFromRelativeZoom(t)),"SVGPoint"!==r.getType(e)){if(!("x"in e&&"y"in e))throw new Error("Given point is invalid");e=a.createSVGPoint(this.svg,e.x,e.y)}this.zoomAtPoint(t,e,o)},i.prototype.getZoom=function(){return this.viewport.getZoom()},i.prototype.getRelativeZoom=function(){return this.viewport.getRelativeZoom()},i.prototype.computeFromRelativeZoom=function(t){return t*this.viewport.getOriginalState().zoom},i.prototype.resetZoom=function(){var t=this.viewport.getOriginalState();this.zoom(t.zoom,!0)},i.prototype.resetPan=function(){this.pan(this.viewport.getOriginalState())},i.prototype.reset=function(){this.resetZoom(),this.resetPan()},i.prototype.handleDblClick=function(t){var e;if((this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),this.options.controlIconsEnabled)&&-1<(t.target.getAttribute("class")||"").indexOf("svg-pan-zoom-control"))return!1;e=t.shiftKey?1/(2*(1+this.options.zoomScaleSensitivity)):2*(1+this.options.zoomScaleSensitivity);var o=a.getEventPoint(t,this.svg).matrixTransform(this.svg.getScreenCTM().inverse());this.zoomAtPoint(e,o)},i.prototype.handleMouseDown=function(t,e){this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),r.mouseAndTouchNormalize(t,this.svg),this.options.dblClickZoomEnabled&&r.isDblClick(t,e)?this.handleDblClick(t):(this.state="pan",this.firstEventCTM=this.viewport.getCTM(),this.stateOrigin=a.getEventPoint(t,this.svg).matrixTransform(this.firstEventCTM.inverse()))},i.prototype.handleMouseMove=function(t){if(this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),"pan"===this.state&&this.options.panEnabled){var e=a.getEventPoint(t,this.svg).matrixTransform(this.firstEventCTM.inverse()),o=this.firstEventCTM.translate(e.x-this.stateOrigin.x,e.y-this.stateOrigin.y);this.viewport.setCTM(o)}},i.prototype.handleMouseUp=function(t){this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),"pan"===this.state&&(this.state="none")},i.prototype.fit=function(){var t=this.viewport.getViewBox(),e=Math.min(this.width/t.width,this.height/t.height);this.zoom(e,!0)},i.prototype.contain=function(){var t=this.viewport.getViewBox(),e=Math.max(this.width/t.width,this.height/t.height);this.zoom(e,!0)},i.prototype.center=function(){var t=this.viewport.getViewBox(),e=.5*(this.width-(t.width+2*t.x)*this.getZoom()),o=.5*(this.height-(t.height+2*t.y)*this.getZoom());this.getPublicInstance().pan({x:e,y:o})},i.prototype.updateBBox=function(){this.viewport.simpleViewBoxCache()},i.prototype.pan=function(t){var e=this.viewport.getCTM();e.e=t.x,e.f=t.y,this.viewport.setCTM(e)},i.prototype.panBy=function(t){var e=this.viewport.getCTM();e.e+=t.x,e.f+=t.y,this.viewport.setCTM(e)},i.prototype.getPan=function(){var t=this.viewport.getState();return{x:t.x,y:t.y}},i.prototype.resize=function(){var t=a.getBoundingClientRectNormalized(this.svg);this.width=t.width,this.height=t.height;var e=this.viewport;e.options.width=this.width,e.options.height=this.height,e.processCTM(),this.options.controlIconsEnabled&&(this.getPublicInstance().disableControlIcons(),this.getPublicInstance().enableControlIcons())},i.prototype.destroy=function(){var e=this;for(var t in this.beforeZoom=null,this.onZoom=null,this.beforePan=null,this.onPan=null,(this.onUpdatedCTM=null)!=this.options.customEventsHandler&&this.options.customEventsHandler.destroy({svgElement:this.svg,eventsListenerElement:this.options.eventsListenerElement,instance:this.getPublicInstance()}),this.eventListeners)(this.options.eventsListenerElement||this.svg).removeEventListener(t,this.eventListeners[t],!this.options.preventMouseEventsDefault&&h);this.disableMouseWheelZoom(),this.getPublicInstance().disableControlIcons(),this.reset(),c=c.filter(function(t){return t.svg!==e.svg}),delete this.options,delete this.viewport,delete this.publicInstance,delete this.pi,this.getPublicInstance=function(){return null}},i.prototype.getPublicInstance=function(){var o=this;return this.publicInstance||(this.publicInstance=this.pi={enablePan:function(){return o.options.panEnabled=!0,o.pi},disablePan:function(){return o.options.panEnabled=!1,o.pi},isPanEnabled:function(){return!!o.options.panEnabled},pan:function(t){return o.pan(t),o.pi},panBy:function(t){return o.panBy(t),o.pi},getPan:function(){return o.getPan()},setBeforePan:function(t){return o.options.beforePan=null===t?null:r.proxy(t,o.publicInstance),o.pi},setOnPan:function(t){return o.options.onPan=null===t?null:r.proxy(t,o.publicInstance),o.pi},enableZoom:function(){return o.options.zoomEnabled=!0,o.pi},disableZoom:function(){return o.options.zoomEnabled=!1,o.pi},isZoomEnabled:function(){return!!o.options.zoomEnabled},enableControlIcons:function(){return o.options.controlIconsEnabled||(o.options.controlIconsEnabled=!0,s.enable(o)),o.pi},disableControlIcons:function(){return o.options.controlIconsEnabled&&(o.options.controlIconsEnabled=!1,s.disable(o)),o.pi},isControlIconsEnabled:function(){return!!o.options.controlIconsEnabled},enableDblClickZoom:function(){return o.options.dblClickZoomEnabled=!0,o.pi},disableDblClickZoom:function(){return o.options.dblClickZoomEnabled=!1,o.pi},isDblClickZoomEnabled:function(){return!!o.options.dblClickZoomEnabled},enableMouseWheelZoom:function(){return o.enableMouseWheelZoom(),o.pi},disableMouseWheelZoom:function(){return o.disableMouseWheelZoom(),o.pi},isMouseWheelZoomEnabled:function(){return!!o.options.mouseWheelZoomEnabled},setZoomScaleSensitivity:function(t){return o.options.zoomScaleSensitivity=t,o.pi},setMinZoom:function(t){return o.options.minZoom=t,o.pi},setMaxZoom:function(t){return o.options.maxZoom=t,o.pi},setBeforeZoom:function(t){return o.options.beforeZoom=null===t?null:r.proxy(t,o.publicInstance),o.pi},setOnZoom:function(t){return o.options.onZoom=null===t?null:r.proxy(t,o.publicInstance),o.pi},zoom:function(t){return o.publicZoom(t,!0),o.pi},zoomBy:function(t){return o.publicZoom(t,!1),o.pi},zoomAtPoint:function(t,e){return o.publicZoomAtPoint(t,e,!0),o.pi},zoomAtPointBy:function(t,e){return o.publicZoomAtPoint(t,e,!1),o.pi},zoomIn:function(){return this.zoomBy(1+o.options.zoomScaleSensitivity),o.pi},zoomOut:function(){return this.zoomBy(1/(1+o.options.zoomScaleSensitivity)),o.pi},getZoom:function(){return o.getRelativeZoom()},setOnUpdatedCTM:function(t){return o.options.onUpdatedCTM=null===t?null:r.proxy(t,o.publicInstance),o.pi},resetZoom:function(){return o.resetZoom(),o.pi},resetPan:function(){return o.resetPan(),o.pi},reset:function(){return o.reset(),o.pi},fit:function(){return o.fit(),o.pi},contain:function(){return o.contain(),o.pi},center:function(){return o.center(),o.pi},updateBBox:function(){return o.updateBBox(),o.pi},resize:function(){return o.resize(),o.pi},getSizes:function(){return{width:o.width,height:o.height,realZoom:o.getZoom(),viewBox:o.viewport.getViewBox()}},destroy:function(){return o.destroy(),o.pi}}),this.publicInstance};var c=[];e.exports=function(t,e){var o=r.getSvg(t);if(null===o)return null;for(var n=c.length-1;0<=n;n--)if(c[n].svg===o)return c[n].instance.getPublicInstance();return c.push({svg:o,instance:new i(o,e)}),c[c.length-1].instance.getPublicInstance()}},{"./control-icons":1,"./shadow-viewport":2,"./svg-utilities":5,"./uniwheel":6,"./utilities":7}],5:[function(t,e,o){var l=t("./utilities"),s="unknown";document.documentMode&&(s="ie"),e.exports={svgNS:"http://www.w3.org/2000/svg",xmlNS:"http://www.w3.org/XML/1998/namespace",xmlnsNS:"http://www.w3.org/2000/xmlns/",xlinkNS:"http://www.w3.org/1999/xlink",evNS:"http://www.w3.org/2001/xml-events",getBoundingClientRectNormalized:function(t){if(t.clientWidth&&t.clientHeight)return{width:t.clientWidth,height:t.clientHeight};if(t.getBoundingClientRect())return t.getBoundingClientRect();throw new Error("Cannot get BoundingClientRect for SVG.")},getOrCreateViewport:function(t,e){var o=null;if(!(o=l.isElement(e)?e:t.querySelector(e))){var n=Array.prototype.slice.call(t.childNodes||t.children).filter(function(t){return"defs"!==t.nodeName&&"#text"!==t.nodeName});1===n.length&&"g"===n[0].nodeName&&null===n[0].getAttribute("transform")&&(o=n[0])}if(!o){var i="viewport-"+(new Date).toISOString().replace(/\D/g,"");(o=document.createElementNS(this.svgNS,"g")).setAttribute("id",i);var s=t.childNodes||t.children;if(s&&0 Note: This assumes consistent connection to the WFM, we will address intermittent or extended disconnection scenarios in the future. + +## Route and HTTP Methods + +```https +POST /api/v1/clients/{clientId}/deployments/{deploymentId}/status +``` + +### Route Parameters + +|Parameter | Type | Required? | Description| +|----------|------|-----------|------------| +| {clientId} | string | Y | The unique identifier of the (device) client registered with the WFM during onboarding. | +| {deploymentId} | string | Y | The UUID of the `ApplicationDeployment` YAML being reported. + +### Response Codes + +| Code | Description | +|------|-------------| +| 200 OK | The deployment status was added, or updated, successfully. | +| 400 Bad Request | Missing or invalid content-digest header. Ensure the SHA256 hash of the base64-encoded payload is included. | +| 401 Unauthorized | Signature verification failed. Ensure you are signing with the correct X.509 private key. | +| 403 Forbidden | Client certificate is not trusted or has been revoked. | +| 422 Unprocessable Content | Request body includes a semantic error. | + + +## Request Body + +[DeploymentStatus](./deployment status.md) document describing the status of an application deployment. + diff --git a/system-design/specification/margo-management-interface/desired-state.md b/system-design/specification/margo-management-interface/desired-state.md new file mode 100644 index 00000000..5e3781ef --- /dev/null +++ b/system-design/specification/margo-management-interface/desired-state.md @@ -0,0 +1,534 @@ +# Desired State + +In order for the Workload Fleet Manager (WFM) to manage workloads on an Edge Compute Device, the device's Workload Fleet Management Client must periodically retrieve its desired workload configuration - referred to as the Desired State - from the WFM. + +The Desired State defines *what* workloads (applications) should run on the device and *how* they should be configured. +It is distributed using a lightweight, pull-based HTTP API that allows devices to stay synchronized with the WFM. + +At the center of this process is the State Manifest, a JSON document that lists all workloads assigned to the device. Each workload is represented by an [`ApplicationDeployment`](#applicationdeployment-yaml-definition) YAML - a self-contained object defining configuration, components, and parameters for that workload. + +The manifest includes two complementary ways for the client to obtain the same `ApplicationDeployment` YAMLs: + +- Individual YAMLs - each `ApplicationDeployment` YAML fetched separately using its own URL. +- A bundle archive - a single compressed archive containing multiple `ApplicationDeployment` YAMLs. + +Both references describe the same content. The bundle is simply a packaging optimization. +This design allows the Workload Fleet Management Client to choose the optimal retrieval strategy depending on network conditions or update size. + +| Retrieval Method | Typical Use | Advantages | +| ---------------- | ----------- | ---------- | +| Bundle | Initial onboarding, large updates, high-latency or high-round-trip networks | Single request with minimal overhead | +| Individual YAMLs | Incremental updates, bandwidth-limited or metered links | Only changed workloads are downloaded | + +The Workload Fleet Management Client compares the manifest with its current state and reconciles any differences by deploying, updating, or removing workloads. +For every change in deployment state - including installation, updates, removals, and failures - the client MUST report the corresponding status to the WFM using the [Deployment Status API](../../specification/margo-management-interface/deployment-status.md). + +## Endpoints - State Manifest + +This section defines the API endpoint used by a client to retrieve the State Manifest from the Workload Fleet Manager, representing the complete desired workload configuration assigned to the device. + +### Route and HTTP Methods + +```https +GET /api/v1/clients/{clientId}/deployments +``` + +### Route Parameters + +| Parameter | Type | Required? | Description | +| --------- | ---- | --------- | ----------- | +| `{clientId}` | string | Y | The unique identifier of the (device) client registered with the WFM during onboarding. | + +### Request Headers + +| Header | Description | +| ------ | ------------| +| `If-None-Match` *(optional)* | The `ETag` value from the last successfully retrieved manifest. | +| `Accept` *(optional)* | The client SHOULD request the manifest in the `application/vnd.margo.manifest.v1+json` format. If the `Accept` header lists only unsupported types, the server MUST return `406 Not Acceptable`. If omitted, the server MUST return this format by default. | + +### Response Codes + +| Code | Description | +| ----- | ---------- | +| 200 OK | The response body contains the manifest. The server MUST include a valid `ETag` and `Content-Type: application/vnd.margo.manifest.v1+json`. | +| 304 Not Modified | The response body is empty. Returned if the `If-None-Match` `ETag` matches, i.e. the cached response body has not changed since the last retrieved version. | +| 406 Not Acceptable | The server cannot return a representation matching the `Accept` header. | + +### Example State Manifest Response + +```json +{ + "manifestVersion": 101, + "bundle": { + "mediaType": "application/vnd.margo.bundle.v1+tar+gzip", + "digest": "sha256:b5c6d7e8f9...", + "url": "/api/v1/clients/1234/bundles/sha256:b5c6d7e8f9..." + }, + "deployments": [ + { + "deploymentId": "a3e2f5dc-912e-494f-8395-52cf3769bc06", + "digest": "sha256:a4e01b2c3d...", + "url": "/api/v1/clients/1234/deployments/a3e2f5dc-912e-494f-8395-52cf3769bc06/sha256:a4e01b2c3d..." + } + ] +} +``` + +### Response Body Attributes + +| Field | Type | Required? | Description | +| ----- | ---- | --------- | ----------- | +| `manifestVersion` | number | Y | Monotonically increasing unsigned 64-bit integer in the inclusive range `[1, 2^64-1]`. Each new manifest for the same (device) client MUST have a strictly greater value than the previous. The first manifest for a given client MUST use the value 1. | +| `bundle` | object | Y | Describes an archive containing all referenced `ApplicationDeployment` YAMLs. If there are zero deployments (i.e., the `deployments` array is empty), this field MUST be present with the value `null`. An empty archive MUST NOT be served. | +| `bundle.mediaType` | string | Y | MUST be `application/vnd.margo.bundle.v1+tar+gzip`, which denotes a gzip-compressed tar archive (commonly delivered as a .tar.gz) whose root contains one or more `ApplicationDeployment` YAML files. Servers MUST set the HTTP `Content-Type` to this media type. The archive MUST contain exactly the set of YAML files referenced by `deployments`. | +| `bundle.digest` | string | Y | Digest of the bundle archive. MUST equal the digest computed over the exact sequence of bytes in the [bundle endpoint's](#endpoints-deployment-bundle) HTTP `200 OK` response body. See [Protocol - Digest](#protocol-digest) for further details. | +| `bundle.sizeBytes` | number | N | Optional unsigned 64-bit advisory estimate of the decoded payload length in bytes for the bundle archive. Provided for bandwidth estimation and update planning. MUST NOT be used for integrity verification. | +| `bundle.url` | string | Y | Content-addressable retrieval endpoint for the bundle of the form `/api/v1/clients/{clientId}/bundles/{digest}` where `{digest}` equals `bundle.digest`. | +| `deployments` | array | Y | List of deployment objects describing each workload. | +| `deployments[].deploymentId` | string | Y | The UUID of the deployment. MUST equal [`metadata.annotations.id`](#annotations-attributes) in the `ApplicationDeployment`. | +| `deployments[].digest` | string | Y | Digest of the corresponding `ApplicationDeployment` YAML file. MUST equal the digest computed over the exact sequence of bytes in the [individual deployment endpoint's](#endpoints-individual-deployment-yaml) HTTP `200 OK` response body. See [Protocol - Digest](#protocol-digest) for further details. | +| `deployments[].sizeBytes` | number | N | Optional unsigned 64-bit advisory estimate of the decoded payload length in bytes for the `ApplicationDeployment` YAML. Provided for bandwidth estimation and update planning. MUST NOT be used for integrity verification. | +| `deployments[].url` | string | Y | Content-addressable retrieval endpoint for the `ApplicationDeployment` YAML of the form `/api/v1/clients/{clientId}/deployments/{deploymentId}/{digest}` where `{digest}` equals `deployments[].digest`. | + +> **Note:** The `ETag` returned from this endpoint is a digest of the entire JSON response body (after serialization). It is independent of `bundle.digest` and individual deployment digests (`deployments[].digest`). See [ETag and Caching](#protocol-etag-and-caching) for details. + +### Client Validation Rules + +- The client MUST verify the digest of every fetched artifact before use. +- If any digest validation fails, the client MUST abort the update and retain the previous state. +- The client MUST persist both the last accepted `manifestVersion` and `ETag` to prevent rollback across restarts. + +## Endpoints - Individual Deployment YAML + +This section defines the API endpoint used by a client to retrieve a single `ApplicationDeployment` YAML for incremental synchronization and targeted updates. + +### Route and HTTP Methods + +```https +GET /api/v1/clients/{clientId}/deployments/{deploymentId}/{digest} +``` + +### Route Parameters + +| Parameter | Type | Required? | Description | +| --------- | ---- | --------- | ----------- | +| `{clientId}` | string | Y | The unique identifier of the (device) client registered with the WFM during onboarding. | +| `{deploymentId}` | string | Y | The UUID of the served `ApplicationDeployment` YAML. This MUST equal to `metadata.annotations.id`. | +| `{digest}` | string | Y | Content-addressable digest of the served `ApplicationDeployment` YAML. See [Protocol - Digest](#protocol-digest) for further details. | + +### Response Codes + +| Code | Description | +| ---- | ----------- | +| 200 OK | The response body contains the raw `ApplicationDeployment` YAML (`Content-Type: application/yaml`). Server MUST set `ETag` to the quoted digest and SHOULD return `Cache-Control: public, max-age=31536000, immutable`. | +| 404 Not Found | The referenced digest does not exist on the server. `404 Not Found` indicates only that this specific digest is unavailable. It MUST NOT be interpreted as a deletion signal by a client; deletion of workloads is determined solely by absence from the state manifest. | + +> **Note:** Servers MAY apply HTTP `Content-Encoding` (e.g., gzip, br). The client advertises support via `Accept-Encoding`. Digests and ETags always refer to the decoded representation (i.e., the exact bytes of the response body after decompressing any HTTP `Content-Encoding` such as gzip). Servers SHOULD include `Vary: Accept-Encoding` if compression is used. + +## Endpoints - Deployment Bundle + +This section defines the API endpoint used by a client to retrieve a compressed bundle containing all `ApplicationDeployment` YAMLs for efficient bulk synchronization. + +### Route and HTTP Methods + +```https +GET /api/v1/clients/{clientId}/bundles/{digest} +``` + +### Route Parameters + +| Parameter | Type | Required? | Description | +| --------- | ---- | --------- | ----------- | +| `{clientId}` | string | Y | The unique identifier of the (device) client registered with the WFM during onboarding. | +| `{digest}` | string | Y | Content-addressable digest of the served bundle archive. See [Protocol - Digest](#protocol-digest) for further details. | + +### Response Codes + +| Code | Description | +| ---- | ----------- | +| 200 OK | The bundle was successfully retrieved. The server MUST set `Content-Type` to the manifest-declared `bundle.mediaType`, `ETag` to the quoted digest, and SHOULD return `Cache-Control: public, max-age=31536000, immutable`. | +| 404 Not Found | The referenced digest does not exist on the server. `404 Not Found` indicates only that this specific digest is unavailable. It MUST NOT be interpreted as a deletion signal by a client; deletion of workloads is determined solely by absence from the state manifest. | + +> **Note:** Servers MAY apply `Content-Encoding` (e.g., gzip, br) and SHOULD include `Vary: Accept-Encoding` if they do. + +## Protocol - Digest + +All Desired State artifacts - including the manifest, bundle archives, and individual `ApplicationDeployment` YAMLs - use a canonical digest to ensure content integrity and consistency across client and server implementations. + +A digest has the form `algorithm:encoded`, where both parts are lowercase. Clients and servers MUST NOT add prefixes, suffixes, or whitespace. The required algorithm is `sha256`, and the encoded portion is a 64-character lowercase hexadecimal string. + +- The digest MUST be computed over the exact bytes of the decoded HTTP response body - that is, after decompressing any HTTP `Content-Encoding` (for example, gzip or br). +- No reformatting, re-serialization, or newline normalization is permitted during digest computation. + +The resulting digest value is used consistently across all API representations: + +- In JSON responses: `"digest": "sha256:a4e01b2c3d..."` +- In URLs: `/api/v1/clients/{clientId}/deployments/{deploymentId}/sha256:a4e01b2c3d...` +- In HTTP headers: `ETag: "sha256:a4e01b2c3d..."` + +Clients MUST verify that the digest they compute for every retrieved artifact matches the value provided in the manifest. Any mismatch MUST cause the client to abort the update and preserve the previous state. +If a manifest references a digest using an unsupported algorithm, the client MUST treat the manifest as invalid and abort processing. + +**Example:** + +```text +sha256:a1b2c3d4e5f67890123456789abcdef0123456789abcdef0123456789abcdef +``` + +> **Note:** +> This API defines the digest format `sha256:` (lowercase) for JSON fields, URLs, and ETags. +> This digest represents content identity, ensuring that each artifact (manifest, bundle, or `ApplicationDeployment` YAML) can be uniquely verified and referenced within the Desired State API. +> +> By contrast, the mechanism described in the [API Requirements and Security Details](../../specification/margo-management-interface/api-requirements-and-security.md) document - which follows [RFC 9421](https://datatracker.ietf.org/doc/html/rfc9421) - provides HTTP message-level integrity through signed payloads. +> While both rely on the SHA-256 algorithm, they operate at different layers of the protocol: +> +> - The digest in this API defines immutable content identity for artifacts. +> - The RFC 9421 mechanism ensures end-to-end message integrity and authenticity during HTTP transport. + +## Protocol - ETag and Caching + +All Desired State endpoints implement standard HTTP caching semantics to optimize synchronization between the Workload Fleet Manager (WFM) and the Workload Fleet Management Client. ETags are used to detect content changes and avoid redundant data transfers. Two caching models are defined: one for the mutable State Manifest, and one for immutable, content-addressable resources such as individual deployments and bundles. + +### State Manifest Endpoint + +For the [State Manifest](#endpoints-state-manifest) endpoint, servers use strong ETags as defined in [RFC 9110 § 8.8.3](https://datatracker.ietf.org/doc/html/rfc9110#section-8.8.3). + +- The `ETag` MUST be a strong validator computed as a digest of the exact serialized JSON response body. + The format MUST follow the digest grammar defined in [Protocol – Digest](#protocol-digest): + `":"`, for example: + `"sha256:a4e01b2c3d..."`. +- Servers SHOULD serialize JSON deterministically (for example, per [RFC 8785](https://datatracker.ietf.org/doc/html/rfc8785)) so that logically identical manifests yield identical bytes and therefore identical ETags. +- Manifest responses MUST NOT be marked immutable (e.g., by applying `Cache-Control: immutable` or excessively long `max-age` values). Freshness is controlled through periodic polling using `If-None-Match` revalidation requests. +- When a client presents an `ETag` that matches the current manifest, the server MUST respond with `304 Not Modified`, omitting the response body. + +### Content-Addressable Endpoints + +For [Individual Deployment YAML](#endpoints-individual-deployment-yaml) and [Deployment Bundle](#endpoints-deployment-bundle) endpoints, the resources are immutable and uniquely identified by their digest. + +- The `ETag` MUST equal the quoted digest embedded in the resource’s URL (e.g., `ETag: "sha256:a4e01b2c3d..."`). + This constitutes a strong validator per [RFC 9110 § 8.8.3](https://datatracker.ietf.org/doc/html/rfc9110#section-8.8.3). +- Servers SHOULD include `Cache-Control: public, max-age=31536000, immutable` to enable long-term caching of immutable artifacts. +- If compression is applied, servers SHOULD include `Vary: Accept-Encoding` to ensure cache correctness across encodings. +- Clients MAY send `If-None-Match` when revalidating cached resources; servers MAY return `304 Not Modified` if the artifact has not changed. + +## Deployment Workflow + +This section defines the end-to-end workflow followed by a client to retrieve, validate, and reconcile its Desired State with the Workload Fleet Manager. + +- The client polls the WFM for the latest manifest using the last known `ETag` (if any): + + ```https + GET /api/v1/clients/{clientId}/deployments + ``` + + - If the manifest is unchanged, the WFM responds with `304 Not Modified`. + - If the manifest has changed (`200 OK`), the client: + - Verifies the `manifestVersion` is strictly greater than the stored version. If not, the update MUST be rejected and SHOULD be logged as a security event. The specific requirements for logging security events are not currently defined and will be addressed in a future version of the specification. + - Parses the manifest and decides whether to fetch the bundle or individual deployments. + - Downloads and verifies digests for all referenced `ApplicationDeployment` YAMLs. + - The client reconciles its local workloads: + - Adds or updates workloads that appear in the new manifest. + - Removes workloads no longer present in the new manifest. + - For each change in workload state, the client reports progress and results to the WFM using the [Deployment Status API](../../specification/margo-management-interface/deployment-status.md). + - Once reconciliation succeeds, the client MUST durably persist the new `manifestVersion` and associated `ETag` for use in the next poll cycle. + +### Sequence Diagram + +```mermaid +sequenceDiagram + autonumber + participant Client as Workload Fleet
Management Client + participant WFM as Workload Fleet
Manager + + loop Poll for updates + Client->>+WFM: GET /api/v1/clients/{clientId}/deployments
Header: If-None-Match: "sha256:abc..." + alt State unchanged + WFM-->>-Client: 304 Not Modified + else State updated + WFM-->>Client: 200 OK
Header: ETag: "sha256:xyz..."
Body: Manifest JSON + Client->>Client: Compare manifestVersion and current state + + alt Initial sync or major update + Client->>WFM: GET (bundle URL) + WFM-->>Client: 200 OK
Body: Bundle archive + else Incremental update + Client->>WFM: GET (deployment URLs) + WFM-->>Client: 200 OK
Body: YAMLs + end + + Client->>Client: Verify digests and reconcile workloads + Client->>WFM: POST /api/v1/clients/{clientId}/deployment/{deploymentId}/status
Report progress + end + end +``` + +## ApplicationDeployment YAML Definition + +This section defines the structure and YAML schema of an `ApplicationDeployment`, providing a normative reference for Desired State configuration objects. + +Each workload is represented as an `ApplicationDeployment` YAML file that specifies its components, configuration, and parameters. This resource is delivered via the Desired State API and referenced by `id` in the Deployment Status API. + +```yaml +apiVersion: application.margo.org/v1alpha1 +kind: ApplicationDeployment +metadata: + annotations: + id: + applicationId: + name: + namespace: +spec: + deploymentProfile: + type: + components: + - name: + properties: + parameters: + param: + value: + targets: + - pointer: + components:[] +``` + +| Attribute | Type | Required? | Description | +| --- | --- | --- | --- | +| apiVersion | string | Y | Identifier of the version of the API the object definition follows.| +| kind | string | Y | Must be `ApplicationDeployment`.| +| metadata | Metadata | Y | Metadata element specifying characteristics about the application deployment. See the [Metadata Attributes](#metadata-attributes) section below.| +| spec | Spec | Y | Spec element that defines deployment profile and parameters associated with the application deployment. See the [Spec Attributes](#spec-attributes) section below.| + + +#### Metadata Attributes + +| Attribute | Type | Required? | Description | +| --- | --- | --- | --- | +| annotations | Annotations | Y | Defines the application ID and unique identifier associated to the deployment specification. Needs to be assigned by the Workload Orchestration Software. See the [Annotation Attributes](#annotations-attributes) section below.| +| name | string | Y | When deploying to Kubernetes, the manifests name. The name is chosen by the workload orchestration vendor and is not displayed anywhere.| +| namespace | string | Y | When deploying to Kubernetes, the namespace the manifest is added under. The namespace is chosen by the workload orchestration solution vendor.| + + +#### Annotations Attributes + +| Attribute | Type | Required? | Description | +| --- | --- | --- | --- | +| applicationId | string | Y | An identifier for the application. The id is used to help create unique identifiers where required, such as namespaces. The id must be lower case letters and numbers and MAY contain dashes. Uppercase letters, underscores and periods MUST NOT be used. The id MUST NOT be more than 200 characters. The applicationId MUST match the associated application package Metadata "id" attribute.| +| id | string | Y | The unique identifier UUID of the deployment specification. Needs to be assigned by the Workload Orchestration Software.| + + +#### Spec Attributes + +| Attribute | Type | Required? | Description | +| --- | --- | --- | --- | +| deploymentProfile | DeploymentProfile | Y | Section that defines deployment details including type and components.| +| parameters | map[string][Parameter] | Y | Describes the configured parameters applied via the end-user.| + + +#### DeploymentProfile Attributes + +| Attribute | Type | Required? | Description | +| --- | --- | --- | --- | +| type | string | Y | The type of deployment profile (e.g., helm.v3, compose).| +| components | Component | Y | Components of the application| + + +#### ComposeDeploymentProfile Attributes + +| Attribute | Type | Required? | Description | +| --- | --- | --- | --- | + + +#### Component Attributes + +| Attribute | Type | Required? | Description | +| --- | --- | --- | --- | +| name | string | Y | The name of the component.| +| properties | map[string][string] | Y | Properties associated with the component.| + + +#### ComposeComponent Attributes + +| Attribute | Type | Required? | Description | +| --- | --- | --- | --- | + + +#### Parameter Attributes + +| Attribute | Type | Required? | Description | +| --- | --- | --- | --- | +| name | string | Y | None| +| value | string | Y | The value of the parameter.| +| targets | Target | Y | The targets associated with the parameter.| + + +#### Target Attributes + +| Attribute | Type | Required? | Description | +| --- | --- | --- | --- | +| pointer | string | Y | The pointer indicating the location of the target.| +| components | string | Y | The components associated with the target.| + + +### Example: Cluster Enabled Application Deployment Specification + +```yaml +apiVersion: application.margo.org/v1alpha1 +kind: ApplicationDeployment +metadata: + annotations: + applicationId: com-northstartida-digitron-orchestrator + id: a3e2f5dc-912e-494f-8395-52cf3769bc06 + name: com-northstartida-digitron-orchestrator-deployment + namespace: margo-poc +spec: + deploymentProfile: + type: helm.v3 + components: + - name: database-services + properties: + repository: oci://quay.io/charts/realtime-database-services + revision: 2.3.7 + timeout: 8m30s + wait: "true" + - name: digitron-orchestrator + properties: + repository: oci://northstarida.azurecr.io/charts/northstarida-digitron-orchestrator + revision: 1.0.9 + wait: "true" + parameters: + adminName: + value: Some One + targets: + - pointer: administrator.name + components: + - digitron-orchestrator + adminPrincipalName: + value: someone@somewhere.com + targets: + - pointer: administrator.userPrincipalName + components: + - digitron-orchestrator + cpuLimit: + value: "4" + targets: + - pointer: settings.limits.cpu + components: + - digitron-orchestrator + idpClientId: + value: 123-ABC + targets: + - pointer: idp.clientId + components: + - digitron-orchestrator + idpName: + value: Azure AD + targets: + - pointer: idp.name + components: + - digitron-orchestrator + idpProvider: + value: aad + targets: + - pointer: idp.provider + components: + - digitron-orchestrator + idpUrl: + value: https://123-abc.com + targets: + - pointer: idp.providerUrl + components: + - digitron-orchestrator + - pointer: idp.providerMetadata + components: + - digitron-orchestrator + memoryLimit: + value: "16384" + targets: + - pointer: settings.limits.memory + components: + - digitron-orchestrator + pollFrequency: + value: "120" + targets: + - pointer: settings.pollFrequency + components: + - digitron-orchestrator + - database-services + siteId: + value: SID-123-ABC + targets: + - pointer: settings.siteId + components: + - digitron-orchestrator + - database-services +``` + +### Example: Standalone Device Application Deployment Specification + +```yaml +apiVersion: application.margo.org/v1alpha1 +kind: ApplicationDeployment +metadata: + annotations: + applicationId: com-northstartida-digitron-orchestrator + id: ad9b614e-8912-45f4-a523-372358765def + name: com-northstartida-digitron-orchestrator-deployment + namespace: margo-poc +spec: + deploymentProfile: + type: compose + components: + - name: digitron-orchestrator-docker + properties: + keyLocation: https://northsitarida.com/digitron/docker/public-key.asc + packageLocation: https://northsitarida.com/digitron/docker/digitron-orchestrator.tar.gz + parameters: + adminName: + value: Some One + targets: + - pointer: ENV.ADMIN_NAME + components: + - digitron-orchestrator-docker + adminPrincipalName: + value: someone@somewhere.com + targets: + - pointer: ENV.ADMIN_PRINCIPALNAME + components: + - digitron-orchestrator-docker + idpClientId: + value: 123-ABC + targets: + - pointer: ENV.IDP_CLIENT_ID + components: + - digitron-orchestrator-docker + idpName: + value: Azure AD + targets: + - pointer: ENV.IDP_NAME + components: + - digitron-orchestrator-docker + idpProvider: + value: aad + targets: + - pointer: ENV.IDP_PROVIDER + components: + - digitron-orchestrator-docker + idpUrl: + value: https://123-abc.com + targets: + - pointer: ENV.IDP_URL + components: + - digitron-orchestrator-docker + pollFrequency: + value: "120" + targets: + - pointer: ENV.POLL_FREQUENCY + components: + - digitron-orchestrator-docker + siteId: + value: SID-123-ABC + targets: + - pointer: ENV.SITE_ID + components: + - digitron-orchestrator-docker +``` \ No newline at end of file diff --git a/system-design/specification/margo-management-interface/device-capabilities-api.md b/system-design/specification/margo-management-interface/device-capabilities-api.md new file mode 100644 index 00000000..ff4f52e0 --- /dev/null +++ b/system-design/specification/margo-management-interface/device-capabilities-api.md @@ -0,0 +1,35 @@ +# Device Capabilities API + +Devices MUST provide the Workload Fleet Management service with its capabilities and characteristics. This is done by calling the Device API's `device capabilities` endpoint. Reporting the device capabilities is the final step in the onboarding of the device's client. + +To ensure the WFM is kept up to date, the device's client MUST send updated capabilities information if any changes occur to the information originally provided (i.e., additional memory is added to the device). + +- Requests to this endpoint MUST be authenticated using the HTTP Message Signature method as defined in the [Payload Security](../margo-management-interface/api-requirements-and-security.md#payload-security-method) section. + +## Route and HTTP Methods + +```https +POST /api/v1/clients/{clientId}/capabilities +PUT /api/v1/clients/{clientId}/capabilities +``` + +### Route Parameters + +|Parameter | Type | Required? | Description| +|----------|------|-----------|------------| +| {clientId} | string | Y | The unique identifier of the (device) client registered with the WFM during onboarding. | + +### Response Codes + +| Code | Description | +|------|-------------| +| 201 OK | The device capabilities document was added, or updated, successfully | +| 400 Bad Request | Missing or invalid content-digest header. Ensure the SHA256 hash of the base64-encoded payload is included. | +| 401 Unauthorized | Signature verification failed. Ensure you are signing with the correct X.509 private key. | +| 403 Forbidden | Client certificate is not trusted or has been revoked. | +| 422 Unprocessable Content | Request body includes a semantic error. | + +## Request Body + +[DeviceCapabilitiesManifest](./device-capabilities.md) document describing a device's capabilities and characteristics. + From 1eb8eae89580f33bdc0af81c69244ede959e8dab Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Fri, 17 Jul 2026 12:02:16 +0200 Subject: [PATCH 06/24] docs: diffs pre data-model Signed-off-by: Silvano Cirujano Cuesta --- data-model/generation-gap.md | 149 +++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 data-model/generation-gap.md diff --git a/data-model/generation-gap.md b/data-model/generation-gap.md new file mode 100644 index 00000000..56d0ecf7 --- /dev/null +++ b/data-model/generation-gap.md @@ -0,0 +1,149 @@ +# Generation Gap: pre-draft vs generated OpenAPI spec + + + +- [Generation Gap: pre-draft vs generated OpenAPI spec](#generation-gap-pre-draft-vs-generated-openapi-spec) + - [Summary](#summary) + - [Name renames (x-linkml-source)](#name-renames-x-linkml-source) + - [Schemas not generated as separate entries (INLINED)](#schemas-not-generated-as-separate-entries-inlined) + - [Schemas detected as inlined (INFERRED INLINED)](#schemas-detected-as-inlined-inferred-inlined) + - [Schemas with no pre-draft equivalent (EXTRA)](#schemas-with-no-pre-draft-equivalent-extra) + - [Enum inlining](#enum-inlining) + - [Schemas with structural differences (CHANGED)](#schemas-with-structural-differences-changed) + - [ComponentStatus](#componentstatus) + - [DeploymentBundleRef](#deploymentbundleref) + - [DeploymentManifestRef](#deploymentmanifestref) + - [Other changed schemas (14 more)](#other-changed-schemas-14-more) + + + +This document describes the differences between the hand-maintained OpenAPI spec +(on the `pre-draft` branch) and the spec generated by `data-model/tools/openapigen.py` +from the LinkML data model. +It is both human-readable and structured for AI consumption. + +Validation is run via: + +```bash +data-model/tools/validate-openapi.py +``` + +Generation (with enums inlined to match pre-draft style): + +```bash +data-model/tools/generate-openapi.bash +``` + +Requires `--keep-unreferenced` (`-k`) and `--inline-enums` (`-e`) flags. + +## Summary + +| Metric | Value | +| --------------------------------------------------------------------------------- | ----------------- | +| Pre-draft schemas | 20 | +| Generated schemas | 26 (with `-k -e`) | +| [x-linkml-source renames](#name-renames-x-linkml-source) | 13 | +| [INLINED (explicit comments)](#schemas-not-generated-as-separate-entries-inlined) | 2 | +| [INFERRED INLINED](#schemas-detected-as-inlined-inferred-inlined) | 3 | +| [EXTRA](#schemas-with-no-pre-draft-equivalent-extra) | 5 | +| Pre-draft paths | 7 | +| Path changes | 0 (identical) | + +## Name renames (x-linkml-source) + +These schemas are renamed between the LinkML class name and the OpenAPI schema +name via the template. +The left column is the OpenAPI name in the generated +output. + +| OpenAPI name | LinkML class | +| ---------------------------------------------- | ------------------------------------------------------------ | +| `UnsignedAppStateManifest` | `DesiredStateManifest` | +| `DeviceId` | `FlatDeviceId` | +| `DeviceId_with_asterisk` | `HierarchicalDeviceId` | +| `appDeploymentManifest` | `ApplicationDeployment` | +| `appDeploymentMetadata` | `DeploymentMetadata` | +| `appDeploymentProfile` | `DeploymentProfile` | +| `appDeploymentSpec` | `Spec` | +| `appParameterTarget` | `Target` | +| `appParameterValue` | `Parameter.identifier` (dotted path → synthetic `$defs` key) | +| `DeploymentBundleRef` | `Bundle` | +| `DeploymentManifestRef` | `Deployment` | +| `helmApplicationDeploymentProfileComponent` | `HelmComponent` | +| `composeApplicationDeploymentProfileComponent` | `ComposeComponent` | + +## Schemas not generated as separate entries (INLINED) + +These schemas exist in the pre-draft but are intentionally absent from the +generated output because their content is embedded inside another schema. +Declared via `INLINED` comments in the OpenAPI template +(`data-model/tools/workload-management-api-1.0.0.openapi.yaml`). + +| Schema | Inlined into (OpenAPI) | Inlined into (LinkML) | +| --------------------- | -------------------------- | ---------------------- | +| `ManifestVersion` | `UnsignedAppStateManifest` | `DesiredStateManifest` | +| `appDeploymentParams` | `appDeploymentSpec` | `Spec` | + +## Schemas detected as inlined (INFERRED INLINED) + +These schemas are generated as separate entries by LinkML but the pre-draft +defines them inline within a parent schema. +Detected automatically by `validate-openapi.py` via structural comparison. + +| Generated schema | Inlined in pre-draft at | Score | +| ---------------- | -------------------------------------------------- | ----- | +| `Status` | `DeploymentStatusManifest.properties.status` | 1.0 | +| `Error` | `ComponentStatus.properties.error` | 1.0 | +| `Properties` | `DeviceCapabilitiesManifest.properties.properties` | 0.95 | + +## Schemas with no pre-draft equivalent (EXTRA) + +These schemas are generated by LinkML as transitive dependencies but have no +corresponding schema -- separate or inlined -- in the pre-draft spec. +They are pure data model abstractions. + +| Schema | Kind | Origin | +| ----------------------- | ----- | --------------------------------------------------- | +| `CPU` | class | transitive dep of `DeviceResources` | +| `Component` | class | abstract base of `HelmComponent`/`ComposeComponent` | +| `ComponentProperties` | class | combined Helm+Compose properties | +| `DeploymentAnnotations` | class | transitive dep of `DeploymentMetadata` | +| `Resources` | class | transitive dep of `ComponentProperties` | + +## Enum inlining + +With the `--inline-enums` (`-e`) flag, the generator inlines enum type schemas +(`CpuArchitectureType`, `CommunicationInterfaceType`, `DeviceRole`, +`PeripheralType`, `State`) into their parent schemas instead of generating +separate `components/schemas` entries. +This matches the pre-draft style where enums are always embedded. + +Without `-e`, these 5 enum schemas appear as extra entries. +This might become the default in the future. + +## Schemas with structural differences (CHANGED) + +These schemas exist in both outputs but differ in content beyond descriptions. + +### ComponentStatus + +- Generated has `additionalProperties` (not in pre-draft) +- `error` property: pre-draft has inline object with `properties`/`type`; generated uses `$ref: Error` +- `state` property: generated adds `description` + +### DeploymentBundleRef + +- Generated lacks `nullable: true` (present in pre-draft) +- Generated adds `additionalProperties` and `required` +- Descriptions differ (generated includes pre-data-model references) +- Generated adds `pattern` on `digest` property + +### DeploymentManifestRef + +- Generated adds `additionalProperties` +- Descriptions differ significantly +- Generated adds `pattern` on `digest` property + +### Other changed schemas (14 more) + +Run `data-model/tools/validate-openapi.py` for the complete list. From 9e44e7e1f709548b1465e41869cbfc3fe224a4e8 Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Wed, 13 May 2026 21:42:06 +0200 Subject: [PATCH 07/24] docs: add ai agents help Signed-off-by: Silvano Cirujano Cuesta --- AGENTS.md | 319 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 319 insertions(+) create mode 100644 AGENTS.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000..45a880fc --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,319 @@ +# AGENTS.md — Margo Specification Contributor Guide + +## Project Overview + +The Margo Specification defines open standards for workload fleet management on edge compute devices. This repository contains the normative specification documents, some authored manually in MarkDown and others generated from a [LinkML](https://linkml.io/) data model using Jinja2 templates. + +The final HTML documentation is built with [MkDocs](https://www.mkdocs.org/) using the [Material theme](https://squidfunk.github.io/mkdocs-material/). + +## Repository Layout + +``` +. +├── src/specification/ # Legacy per-resource LinkML schemas + Jinja2 templates + examples +│ ├── applications/ +│ │ ├── application-description.linkml.yaml +│ │ └── resources/ +│ │ ├── class.md.jinja2 +│ │ ├── index.md.jinja2 +│ │ └── examples/{valid,invalid}/ +│ └── margo-management-interface/ +│ ├── desired-state.linkml.yaml +│ └── resources/ +│ ├── index.md.jinja2 +│ └── examples/{valid,invalid}/ +├── data-model/ # Aggregate data model (current source of truth) +│ ├── margo-data-model.linkml.yaml # Top-level schema aggregating all sub-schemas +│ ├── application-description.linkml.yaml +│ ├── application-deployment.linkml.yaml +│ ├── desired-state-manifest.linkml.yaml +│ ├── device-capabilities.linkml.yaml +│ ├── deployment-status.linkml.yaml +│ ├── margo-resources.linkml.yaml +│ ├── margo-deployments.linkml.yaml +│ ├── tools/ # Generation & validation scripts +│ │ ├── generate-all.bash # Runs all generators in sequence +│ │ ├── generate-docs.bash # Generates MarkDown from LinkML +│ │ ├── generate-json-schemas.bash # Generates JSON-Schema artifacts +│ │ ├── generate-openapi.bash # Generates OpenAPI spec +│ │ ├── generate-class-diagram.bash # Generates PlantUML class diagrams +│ │ ├── check-examples.bash # Validates schemas and examples +│ │ └── configurations/ # Per-spec JSON configs +│ │ ├── application-deployment.json +│ │ ├── application-description.json +│ │ ├── deployment-status.json +│ │ ├── desired-state-manifest.json +│ │ └── device-capabilities.json +│ ├── generation-gap.md # Differences between pre-draft and generated OpenAPI spec +│ └── resources/ +│ ├── examples/{valid,invalid}/ # Valid and invalid example files +│ ├── markdown-templates/ # Templates for the aggregate data-model docs +│ └── markdown-templates_main-classes/ # Templates for per-resource docs +├── doc-generation/ # Legacy scripts (superseded by data-model/tools/) +├── system-design/ # Manually-authored + generated MarkDown (copied into merged/ by generate-docs.bash) +│ └── specification/ # ← generated .md files land here +├── generated/ # Additional generated artifacts (diagrams, OpenAPI, JSON-Schema, etc.) +├── merged/ # Merged MarkDown tree used by mkdocs build +├── mkdocs.yml # MkDocs configuration +└── pyproject.toml # Python dependencies (linkml>=1.11.0, mkdocs, etc.) +``` + +## Setup + +### Option A: Development Container + +The repository includes a dev-container with all dependencies pre-installed. Open the repo in VS Code and accept the dev-container prompt. + +### Option B: Poetry (recommended for local development) + +```bash +poetry install +``` + +### Option C: pip + +```bash +pip install ./pyproject.toml +``` + +## Key Commands + +### Validate LinkML schemas and examples + +```bash +data-model/tools/check-examples.bash +``` + +This script: +- Reads each config from `data-model/tools/configurations/*.json` +- Validates the corresponding LinkML schema +- Validates valid examples in `data-model/resources/examples/valid/` against the schema +- Validates that invalid examples in `data-model/resources/examples/invalid/` are correctly rejected +- Exits non-zero if any check fails + +### Generate all artifacts + +```bash +data-model/tools/generate-all.bash +``` + +This runs all generators in sequence: class diagrams, JSON-Schemas, OpenAPI, and MarkDown docs. + +### Generate MarkDown from LinkML + +```bash +data-model/tools/generate-docs.bash +``` + +This script: +- Generates per-resource MarkDown using `data-model/resources/markdown-templates_main-classes/` +- Generates the full data model MarkDown using `data-model/resources/markdown-templates/` +- Copies generated diagrams and OpenAPI spec into the merged tree +- Copies everything from `system-design/` and `generated/` into `merged/` (which is what `mkdocs build` reads) + +### Generate JSON-Schemas + +```bash +data-model/tools/generate-json-schemas.bash +``` + +Generates one `.schema.json` file per resource schema into `generated/json-schemas/`. + +### Generate OpenAPI spec + +```bash +data-model/tools/generate-openapi.bash +``` + +Generates `workload-management-api-1.0.0.openapi.yaml` into `generated/openapi/`. + +### Generate class diagrams + +```bash +data-model/tools/generate-class-diagram.bash +``` + +Generates SVG/PNG class diagrams via PlantUML into `generated/diagrams/`. + +### Build HTML documentation + +```bash +mkdocs build # one-time build +mkdocs serve # live-reloading local server +``` + +## Generation Pipeline + +Understanding how artifacts flow through the pipeline is essential when modifying schemas or templates. + +### Artifact flow + +``` +data-model/*.linkml.yaml (source of truth — LinkML schemas) + │ + ├──► data-model/tools/check-examples.bash + │ uses: data-model/tools/configurations/*.json + │ validates: data-model/resources/examples/{valid,invalid}/ + │ + ├──► data-model/tools/generate-docs.bash (orchestrator) + │ │ + │ ├──► linkml generate doc (per-resource, using markdown-templates_main-classes/) + │ │ → generated/markdown_main-classes/.md + │ │ → moved into merged/specification/{applications,margo-management-interface}/ + │ │ + │ ├──► linkml generate doc (aggregate, using markdown-templates/) + │ │ → generated/markdown/* + │ │ → moved into merged/data-model/ + │ │ + │ ├──► generate-class-diagram.bash + │ │ → generated/diagrams/DataModel-ClassDiagram.{svg,png} + │ │ → copied into merged/figures/ + │ │ + │ ├──► generate-openapi.bash + │ │ → generated/openapi/workload-management-api-1.0.0.openapi.yaml + │ │ → moved into merged/specification/margo-management-interface/ + │ │ + │ └──► JSON schemas copied into merged/json-schemas/ + │ + └──► data-model/tools/generate-json-schemas.bash (standalone) + → generated/json-schemas/*.schema.json + +mkdocs build reads from merged/ → site/ +``` + +Key points: +- `mkdocs build` reads from `merged/`, not directly from `system-design/` or `generated/`. The `generate-docs.bash` script copies everything into `merged/` first. +- The per-resource Markdown generation and the aggregate data-model generation use **different template directories** and produce output in **different locations**. +- `check-examples.bash` reads the list of schemas from `data-model/tools/configurations/*.json`, but `generate-docs.bash` and `generate-json-schemas.bash` have **hardcoded** schema lists. When adding a new resource, you must update all three. + +### OpenAPI generation + +The OpenAPI spec is generated by `data-model/tools/openapigen.py`, which: +- Reads an OpenAPI template (`data-model/tools/workload-management-api-1.0.0.openapi.yaml`) that defines endpoints, security schemes, and request/response structure. +- Fills in `components/schemas` from the LinkML model using the JSON-Schema generator. +- Only classes referenced by the endpoints in the template are included in the output. + +When adding a new resource to the API, you must update both the LinkML schema **and** the OpenAPI template (add new endpoints that reference the new class). The template follows standard OpenAPI 3.0.3 structure — add a new entry under `paths` with request/response schemas that use `$ref: "#/components/schemas/"`. + +## Legacy Code + +The `src/specification/` directory contains the original per-resource LinkML schemas, templates, and examples. These are **legacy** and no longer the source of truth. The current source of truth is `data-model/`. Do not modify files under `src/specification/` unless specifically instructed. + +The `doc-generation/` directory contains the original generation and validation scripts. These have been superseded by `data-model/tools/`. Do not use the old scripts. + +## How to Modify the LinkML Data Model + +### Step 1: Edit the schema + +The **source of truth** for LinkML-specified resources lives under `data-model/`. Each resource has its own `.linkml.yaml` file. The aggregate schema `data-model/margo-data-model.linkml.yaml` imports all sub-schemas. + +When making changes: + +1. Edit the relevant `.linkml.yaml` file to add/modify classes, attributes, enums, slots, or types. +2. Add or update valid examples in `data-model/resources/examples/valid/` to cover the new or changed model elements. +3. Add invalid counter-examples in `data-model/resources/examples/invalid/` if new validation rules are introduced. +4. If the change affects rendering, update the Jinja2 templates: + - `data-model/resources/markdown-templates_main-classes/` — for per-resource specification pages (attribute tables, examples, JSON-Schema links). + - `data-model/resources/markdown-templates/` — for the aggregate data-model documentation (class hierarchy, diagrams). +5. If the change adds new API endpoints, update the OpenAPI template `data-model/tools/workload-management-api-1.0.0.openapi.yaml`. + +### Step 2: Validate + +```bash +data-model/tools/check-examples.bash +``` + +Fix any validation errors before proceeding. + +### Step 3: Regenerate artifacts + +```bash +data-model/tools/generate-all.bash +``` + +This runs all generators in sequence. Alternatively, run individual generators if you only need to update one artifact type. + +The generated `.md` files land under `system-design/specification/` and `system-design/data-model/`. Generated JSON-Schemas, OpenAPI specs, and diagrams land under `generated/`. Verify the output looks correct. + +### Step 4: Preview the site + +```bash +mkdocs serve +``` + +Open http://127.0.0.1:8000 and navigate to the relevant specification page to visually verify. + +### Step 5: Commit + +Include the modified LinkML schema, updated examples, and all regenerated artifacts (`system-design/`, `generated/`) in your commit. These directories are tracked in git and must reflect the generated output. + +## Adding a New LinkML-Specified Resource + +1. Add the LinkML schema: `data-model/.linkml.yaml`. +2. Add valid examples: `data-model/resources/examples/valid/-NNN.{yaml,json}`. +3. Add invalid counter-examples: `data-model/resources/examples/invalid/-NNN.{yaml,json}`. +4. Add a configuration file in `data-model/tools/configurations/.json` with: + ```json + { + "root": "data-model", + "targetclass": "", + "schemafile": ".linkml.yaml", + "markdowndoc": ".md" + } + ``` +5. Add an import in `data-model/margo-data-model.linkml.yaml`. +6. Add the new MarkDown file to `mkdocs.yml` under the `nav` section. +7. Add the schema name to the hardcoded lists in `generate-docs.bash` (line 41) and `generate-json-schemas.bash` (line 24). +8. Run validation and generation as described above. + +## Jinja2 Templates + +The generation uses `linkml generate doc`, which provides the following variables and objects in the template context: + +- `schema` — the parsed LinkML schema object +- `schemaview` — a `SchemaView` instance for querying classes, slots, enums, etc. +- `gen` — the generator instance with helper methods like `all_class_objects()`, `get_direct_slots()`, `link()`, `mermaid_diagram()` + +Common patterns in existing templates: + +- Iterate over class slots: `{% for slot in schemaview.class_slots("ClassName")|sort(attribute='rank') %}` +- Get slot details: `schemaview.get_slot(slot_name).range`, `.required`, `.description` +- Include example files: `{% include 'examples/valid/FileName.yaml' %}` +- Format ranges with inline macros for multivalued/inlined slots (see `index.md.jinja2` in each template directory) + +There are two separate sets of templates that serve different purposes: + +| Template directory | Used by | Produces | Output location | +| --- | --- | --- | --- | +| `data-model/resources/markdown-templates_main-classes/` | `generate-docs.bash` (per-resource loop) | One `.md` per schema with attribute tables, examples, JSON-Schema links | `merged/specification/{applications,margo-management-interface}/` | +| `data-model/resources/markdown-templates/` | `generate-docs.bash` (aggregate step) | Full data model overview with class hierarchy, diagrams, all-class listing | `merged/data-model/` | + +Each directory contains an `index.md.jinja2` (the main page) and may contain `class.md.jinja2` (individual class detail pages). When modifying rendering, determine which template directory to edit based on the table above. + +**When do templates need updating?** Most schema changes (adding/removing attributes, changing types, adding enums) do **not** require template changes — the templates iterate dynamically over class slots. Templates need updating only when: +- Changing the **structure** of the rendered page (e.g., adding a new section, changing table columns) +- Changing how **multivalued/inlined ranges** are displayed (the `format_range` macro in `index.md.jinja2`) +- Adding support for a **new example format** (e.g., rendering `.json` examples alongside `.yaml`) + +## CI + +The GitHub Actions pipeline (`.github/workflows/pages.yml`) runs: + +1. **Quality checks** — validates `pyproject.toml` and `poetry.lock` consistency +2. **Validation** — runs `data-model/tools/check-examples.bash` +3. **Document generation** — runs `data-model/tools/generate-docs.bash` +4. **Pages build & deploy** — deploys to GitHub Pages on the `pre-draft` branch + +PR checks (`.github/workflows/pr-checks.yml`) verify that commits are signed off. + +## Conventions + +- Sign off all commits (`git commit -s`) +- All contributions require CLA compliance (EasyCLA) +- One logical change per commit; the tree must build and work after each commit +- Base PRs on the `pre-draft` branch +- Example files follow the naming convention `-NNN.{yaml,json}` (e.g., `ApplicationDescription-001.yaml`, `DeploymentStatusManifest-001.json`) +- LinkML schemas use the `.linkml.yaml` extension +- The YAML language server schema annotation `# yaml-language-server: $schema=...` should be kept at the top of each schema file for IDE support +- Do **not** add `default_range: string` to schemas that define slots using `any_of` — it causes the JSON-Schema generator to emit `type: string` at the top level, overriding the `anyOf` union. See [linkml/linkml#1483](https://github.com/linkml/linkml/issues/1483) +- Omit explicit `required: false` on optional attributes — the LinkML default is already `false` From 5f6f7b2f1a7d3f2afa462fc695ec741d3a570736 Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Fri, 17 Jul 2026 20:51:33 +0200 Subject: [PATCH 08/24] deps: add and update Signed-off-by: Silvano Cirujano Cuesta --- poetry.lock | 7 +++---- pyproject.toml | 5 +++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index 5ab77488..69123460 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.4.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.4.1 and should not be changed by hand. [[package]] name = "alabaster" @@ -89,7 +89,6 @@ description = "Backport of compression.zstd" optional = false python-versions = "<3.14,>=3.10" groups = ["main"] -markers = "python_full_version < \"3.14.0\"" files = [ {file = "backports_zstd-1.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2c4f557bd8579d38316344c205b2a540e84b1014fb3721205eb6c3eb5322e9d9"}, {file = "backports_zstd-1.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:68ee21f0efa3f06d3d3cbb5f291c177497fc550ebef732b0a38599de8db1ee32"}, @@ -2952,5 +2951,5 @@ dev = ["pytest", "setuptools"] [metadata] lock-version = "2.1" -python-versions = ">=3.12,<4.0" -content-hash = "3dd6f696e2b5e783de5d3565b12f5094a88948453ef6ed1383b7088474b9492b" +python-versions = ">=3.12,<3.14" +content-hash = "225549dc0caa5793a4ed3b8ddafdf49131ac84e1a490c178a7b339f9dddc3c86" diff --git a/pyproject.toml b/pyproject.toml index 0dff1473..afc1c015 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,13 +10,14 @@ description = "Margo Specification" authors = [] license = "Open Web Foundation - CLA Copyright Grant 0.9" readme = "README.md" -requires-python = ">=3.12,<4.0" +requires-python = ">=3.12,<3.14" dependencies = [ 'mkdocs>=1.6.1', 'mkdocs-markdownextradata-plugin>=0.2.6', 'mkdocs-material>=9.5.44', 'linkml @ git+https://github.com/linkml/linkml.git#subdirectory=packages/linkml', - 'linkml-runtime @ git+https://github.com/linkml/linkml.git#subdirectory=packages/linkml_runtime' + 'linkml-runtime @ git+https://github.com/linkml/linkml.git#subdirectory=packages/linkml_runtime', + "openapi-spec-validator (>=0.9.0,<0.10.0)", ] [tool.poetry] From f07d57ec6f3cc23edd9619a709e991fad1b1ff8f Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Wed, 13 May 2026 15:33:43 +0200 Subject: [PATCH 09/24] ci: update workflows Signed-off-by: Silvano Cirujano Cuesta --- .githooks/pre-push | 58 +++++++++++++++++-------------------- .github/workflows/pages.yml | 19 +++++++----- 2 files changed, 39 insertions(+), 38 deletions(-) diff --git a/.githooks/pre-push b/.githooks/pre-push index d3e78ec3..fef01be8 100755 --- a/.githooks/pre-push +++ b/.githooks/pre-push @@ -24,37 +24,33 @@ url="$2" zero=$(git hash-object --stdin &2 "Found WIP commit in $local_ref, not pushing" - exit 1 - fi - - # Check test examples - set -e - doc-generation/check-examples.bash - doc-generation/check-openapi.bash - set +e - - fi +while read local_ref local_oid remote_ref remote_oid; do + if test "$local_oid" = "$zero"; then + # Handle delete + : + else + if test "$remote_oid" = "$zero"; then + # New branch, examine all commits + range="$local_oid" + else + # Update to existing branch, examine new commits + range="$remote_oid..$local_oid" + fi + + # Check for WIP commit + commit=$(git rev-list -n 1 --grep '^WIP' "$range") + if test -n "$commit"; then + echo >&2 "Found WIP commit in $local_ref, not pushing" + exit 1 + fi + + # Check test examples + set -e + data-model/tools/check-examples.bash + doc-generation/check-openapi.bash + set +e + + fi done exit 0 diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index 025c7ad4..5aef4e8b 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -60,7 +60,7 @@ jobs: - name: Run tests run: | - doc-generation/check-examples.bash + data-model/tools/check-examples.bash - name: Check OpenAPI documents run: | @@ -94,17 +94,18 @@ jobs: - name: Install dependencies run: poetry install --no-interaction --all-extras - - name: Generate MarkDown documentation + - name: Generate all artifacts run: | - doc-generation/generate-documentation.bash + data-model/tools/generate-all.bash - - name: Share generated documentation with later jobs + - name: Share generated artifacts with later jobs uses: actions/upload-artifact@v4 with: - name: generated-documentation + name: generated-artifacts path: | system-design/specification/applications/application-description.md system-design/specification/margo-management-interface/desired-state.md + system-design/specification/margo-management-interface/workload-management-api-1.0.0.yaml pages: needs: @@ -139,12 +140,16 @@ jobs: - name: Install the project dependencies run: poetry install - - name: Get generated documentation from previous jobs + - name: Get generated artifacts from previous jobs uses: actions/download-artifact@v4 with: - name: generated-documentation + name: generated-artifacts path: system-design/specification + - name: Generate merged documentation tree + run: | + data-model/tools/generate-docs.bash + - name: Build Pages run: poetry run -- mkdocs build From 4eae01d9601ad541ffcd1c7121590bd2111b527e Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Mon, 20 Jul 2026 16:34:28 +0200 Subject: [PATCH 10/24] validation tool - improve output Signed-off-by: Silvano Cirujano Cuesta --- data-model/tools/validate-openapi.py | 93 ++++++++++++++++------------ 1 file changed, 53 insertions(+), 40 deletions(-) diff --git a/data-model/tools/validate-openapi.py b/data-model/tools/validate-openapi.py index d012beaa..419063ff 100644 --- a/data-model/tools/validate-openapi.py +++ b/data-model/tools/validate-openapi.py @@ -12,6 +12,21 @@ import yaml +# ── Color support ────────────────────────────────────────────── +_USE_COLOR = sys.stdout.isatty() + +def _c(code: str, text: str) -> str: + return f"\033[{code}m{text}\033[0m" if _USE_COLOR else text + +def bold(text: str) -> str: return _c("1", text) +def green(text: str) -> str: return _c("32", text) +def red(text: str) -> str: return _c("31", text) +def yellow(text: str) -> str: return _c("33", text) +def cyan(text: str) -> str: return _c("36", text) +def dim(text: str) -> str: return _c("2", text) +# ─────────────────────────────────────────────────────────────── + + ROOT = Path(__file__).resolve().parent.parent.parent PRE_DRAFT_FILE = "system-design/specification/margo-management-interface/workload-management-api-1.0.0.yaml" GENERATED_FILE = "generated/openapi/workload-management-api-1.0.0.openapi.yaml" @@ -89,11 +104,11 @@ def compare_section(label: str, ref: dict, gen: dict, path: str, errors: list) - """Compare a top-level section.""" section_errors = deep_diff(label, ref.get(path, {}), gen.get(path, {}), path) if section_errors: - print(f"\n {label} ({len(section_errors)} diff(s)):") + print(f"\n {label} ({red(str(len(section_errors)))} diff(s)):") for e in section_errors: - print(f" - {e}") + print(f" - {dim(e)}") else: - print(f" {label}: ✓ IDENTICAL") + print(f" {label}: {green('✓ IDENTICAL')}") MARKER_LINE = " # Schemas removed because they are neither direct nor transitive requirements:" @@ -311,15 +326,15 @@ def find_inlined_candidates( def main(): - print("=" * 60) - print("OpenAPI Spec Validation: pre-draft vs generated") - print("=" * 60) + print(cyan("=" * 60)) + print(cyan("OpenAPI Spec Validation: pre-draft vs generated")) + print(cyan("=" * 60)) ref = get_pre_draft_spec() gen = get_generated_spec() # 1. Info - print("\n--- Top-level ---") + print(f"\n{cyan('--- Top-level ---')}") for key in ["openapi", "info"]: compare_section(key, ref, gen, key, []) @@ -330,7 +345,7 @@ def main(): compare_section("security", ref, gen, "security", []) # 4. Paths - print(f"\n--- Paths ---") + print(f"\n{cyan('--- Paths ---')}") ref_paths = ref.get("paths", {}) gen_paths = gen.get("paths", {}) ref_pkeys = set(ref_paths.keys()) @@ -340,9 +355,9 @@ def main(): common_p = ref_pkeys & gen_pkeys if only_ref_p: - print(f" MISSING IN GENERATED ({len(only_ref_p)}): {sorted(only_ref_p)}") + print(f" {red('MISSING IN GENERATED')} ({len(only_ref_p)}): {sorted(only_ref_p)}") if only_gen_p: - print(f" EXTRA IN GENERATED ({len(only_gen_p)}): {sorted(only_gen_p)}") + print(f" {yellow('EXTRA IN GENERATED')} ({len(only_gen_p)}): {sorted(only_gen_p)}") for path in sorted(common_p): ref_methods = ref_paths[path] @@ -353,21 +368,21 @@ def main(): only_gen_m = gen_mkeys - ref_mkeys if only_ref_m or only_gen_m: - print(f" {path}: METHOD DIFF — ref={sorted(ref_mkeys)} gen={sorted(gen_mkeys)}") + print(f" {yellow(path)}: METHOD DIFF — ref={sorted(ref_mkeys)} gen={sorted(gen_mkeys)}") else: all_method_ok = True for method in sorted(ref_mkeys): errs = deep_diff(path, ref_methods[method], gen_methods[method], f"{path}.{method}") if errs: all_method_ok = False - print(f" {path}.{method}: {len(errs)} diff(s)") - for e in errs[:3]: - print(f" - {e}") + print(f" {path}.{method}: {red(str(len(errs)))} diff(s)") + for e in errs: + print(f" - {dim(e)}") if all_method_ok: - print(f" {path}: ✓ IDENTICAL") + print(f" {path}: {green('✓ IDENTICAL')}") # 5. Components (excluding schemas — handled separately) - print(f"\n--- Components (non-schemas) ---") + print(f"\n{cyan('--- Components (non-schemas) ---')}") ref_comp = ref.get("components", {}) gen_comp = gen.get("components", {}) comp_keys = set(ref_comp.keys()) | set(gen_comp.keys()) @@ -377,7 +392,7 @@ def main(): compare_section(f"components.{ck}", ref_comp, gen_comp, ck, []) # 6. Schemas (detailed) - print(f"\n--- components/schemas ---") + print(f"\n{cyan('--- components/schemas ---')}") ref_schemas = ref_comp.get("schemas", {}) gen_schemas = gen_comp.get("schemas", {}) not_needed = get_not_needed_schemas() @@ -408,10 +423,10 @@ def main(): explained_extra.add(gen_name) unexplained_extra = only_gen - explained_extra - print(f"\n Schemas ({len(ref_keys)} ref, {len(gen_keys)} gen, {len(not_needed)} NOT-NEEDED, {len(inlined)} INLINED):") + print(f"\n Schemas ({bold(str(len(ref_keys)))} ref, {bold(str(len(gen_keys)))} gen, {bold(str(len(not_needed)))} NOT-NEEDED, {bold(str(len(inlined)))} INLINED):") if xlinkml_renames: - print(f" x-linkml-source RENAMES ({len(xlinkml_renames)}):") + print(f" {dim('x-linkml-source RENAMES')} ({len(xlinkml_renames)}):") for openapi_name, linkml_name in sorted(xlinkml_renames.items()): print(f" {openapi_name} ← {linkml_name}") @@ -419,55 +434,53 @@ def main(): not_needed_only = intentionally_omitted & not_needed inlined_only = intentionally_omitted & inlined if not_needed_only: - print(f" NOT-NEEDED ({len(not_needed_only)}): {sorted(not_needed_only)}") + print(f" {dim('NOT-NEEDED')} ({len(not_needed_only)}): {sorted(not_needed_only)}") if inlined_only: - print(f" INLINED SUBSCHEMAS ({len(inlined_only)}): {sorted(inlined_only)}") + print(f" {dim('INLINED SUBSCHEMAS')} ({len(inlined_only)}): {sorted(inlined_only)}") if truly_missing: - print(f" MISSING IN GENERATED ({len(truly_missing)}): {sorted(truly_missing)}") + print(f" {red('MISSING IN GENERATED')} ({len(truly_missing)}): {sorted(truly_missing)}") if high_scoring_inlined: - print(f" INFERRED INLINED ({len(high_scoring_inlined)}):") + print(f" {yellow('INFERRED INLINED')} ({len(high_scoring_inlined)}):") for gen_name, prop_path, score in sorted(high_scoring_inlined, key=lambda x: -x[2]): print(f" {gen_name} inlined into {prop_path} (score {score})") if unexplained_extra: - print(f" EXTRA IN GENERATED ({len(unexplained_extra)}): {sorted(unexplained_extra)}") + print(f" {yellow('EXTRA IN GENERATED')} ({len(unexplained_extra)}): {sorted(unexplained_extra)}") if rename_candidates: - print(f" RENAME CANDIDATES (missing → extra, by structural similarity):") + print(f" {dim('RENAME CANDIDATES')} (missing → extra, by structural similarity):") shown = 0 for ref_name, gen_name, score in rename_candidates: if ref_name in truly_missing and gen_name in unexplained_extra: print(f" {ref_name} ↔ {gen_name} (score {score})") shown += 1 if shown >= 5: + print(f" ... ({len(rename_candidates) - 5} more)") break if common: - changed = 0 + changed_names: list[str] = [] for name in sorted(common): ref_s = ref_schemas[name] gen_s = gen_schemas[name] s_errors = deep_diff("", ref_s, gen_s, name) if s_errors: - changed += 1 - if changed <= 3: - print(f" {name}: CHANGED ({len(s_errors)} diff(s))") - for e in s_errors[:5]: - print(f" - {e}") - unchanged = len(common) - changed - print(f" Common schemas: {unchanged} identical, {changed} changed") - if changed > 3: - print(f" (only first 3 changed shown; {changed} total)") - - print("\n" + "=" * 60) + changed_names.append(name) + print(f" {name}: {red(str(len(s_errors)))} diff(s)") + for e in s_errors: + print(f" - {dim(e)}") + unchanged = len(common) - len(changed_names) + print(f" {dim('Common schemas:')} {green(str(unchanged))} identical, {yellow(str(len(changed_names)))} changed") + + print(f"\n{cyan('=' * 60)}") total_errors = len(deep_diff("", ref, gen, "")) if total_errors == 0: - print("RESULT: FULLY IDENTICAL ✓") + print(f"{green('RESULT: FULLY IDENTICAL ✓')}") else: - print(f"RESULT: {total_errors} difference(s) found") - print("=" * 60) + print(f"{red(f'RESULT: {total_errors} difference(s) found')}") + print(cyan("=" * 60)) if __name__ == "__main__": From abb6d4f43845c9647350457d2a23088fd8de825d Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Mon, 20 Jul 2026 18:06:39 +0200 Subject: [PATCH 11/24] validation tool - add option to show single schema Signed-off-by: Silvano Cirujano Cuesta --- data-model/tools/validate-openapi.py | 269 ++++++++++++++++++++++++++- 1 file changed, 263 insertions(+), 6 deletions(-) diff --git a/data-model/tools/validate-openapi.py b/data-model/tools/validate-openapi.py index 419063ff..8433dd05 100644 --- a/data-model/tools/validate-openapi.py +++ b/data-model/tools/validate-openapi.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 """Compare the pre-draft OpenAPI spec with the generated one at object level.""" +import argparse import json import os import re @@ -100,6 +101,31 @@ def deep_diff(label: str, ref, gen, path: str = "", errors: list | None = None) return errors +def _is_desc_only(err: str) -> bool: + """True if the error is a description-only string mismatch.""" + return re.match(r".*\.description: STRING MISMATCH", err) is not None + + +def _is_aprop(err: str) -> bool: + """True if the error is about additionalProperties.""" + return "additionalPropert" in err + + +def _categorize_errors(errors: list[str]) -> dict[str, list[str]]: + """Split errors into description-only, additionalProperties, and structural.""" + desc: list[str] = [] + aprop: list[str] = [] + struct: list[str] = [] + for e in errors: + if _is_desc_only(e): + desc.append(e) + elif _is_aprop(e): + aprop.append(e) + else: + struct.append(e) + return {"desc": desc, "aprop": aprop, "struct": struct} + + def compare_section(label: str, ref: dict, gen: dict, path: str, errors: list) -> None: """Compare a top-level section.""" section_errors = deep_diff(label, ref.get(path, {}), gen.get(path, {}), path) @@ -325,7 +351,219 @@ def find_inlined_candidates( return candidates +def _resolve_schema_name( + raw: str, gen_schemas: dict, xlinkml_renames: dict +) -> str | None: + """Resolve an OpenAPI or LinkML name to the generated schema name.""" + if raw in gen_schemas: + return raw + # Check if it's a LinkML name → find the OpenAPI name via renames + for openapi_name, linkml_name in xlinkml_renames.items(): + if linkml_name == raw or linkml_name.split(".")[0] == raw: + return openapi_name + # Check dotted path: Class.slot → synthetic key + for openapi_name, linkml_name in xlinkml_renames.items(): + if linkml_name == raw: + return openapi_name + return None + + +def _collect_refs(obj, results: set[str], prefix: str = "#/components/schemas/"): + """Recursively collect all $ref target names from a schema definition.""" + if isinstance(obj, dict): + if "$ref" in obj and isinstance(obj["$ref"], str) and obj["$ref"].startswith(prefix): + results.add(obj["$ref"].replace(prefix, "")) + for v in obj.values(): + _collect_refs(v, results, prefix) + elif isinstance(obj, list): + for item in obj: + _collect_refs(item, results, prefix) + + +def _find_referers( + schema_name: str, gen_schemas: dict, gen_paths: dict +) -> tuple[list[str], list[str]]: + """Find all paths and schemas that reference the given schema.""" + path_refs: list[str] = [] + schema_refs: list[str] = [] + target = f"#/components/schemas/{schema_name}" + + # Check paths + for path, methods in gen_paths.items(): + for method, spec in methods.items(): + def _check(obj): + if isinstance(obj, dict): + if "$ref" in obj and obj["$ref"] == target: + path_refs.append(f"{method.upper()} {path}") + return + for v in obj.values(): + _check(v) + elif isinstance(obj, list): + for item in obj: + _check(item) + _check(spec) + + # Check schemas + for name, schema in gen_schemas.items(): + if name == schema_name: + continue + found: set[str] = set() + _collect_refs(schema, found) + if schema_name in found: + schema_refs.append(name) + + # Deduplicate and sort + return sorted(set(path_refs)), sorted(set(schema_refs)) + + +def _show_schema_detail(raw_name: str) -> None: + """Show detailed information about a single schema.""" + ref = get_pre_draft_spec() + gen = get_generated_spec() + xlinkml_renames = get_xlinkml_renames() + gen_schemas = gen.get("components", {}).get("schemas", {}) + ref_schemas = ref.get("components", {}).get("schemas", {}) + gen_paths = gen.get("paths", {}) + ref_comp = ref.get("components", {}) + gen_comp = gen.get("components", {}) + + ref_keys = set(ref_schemas.keys()) + gen_keys = set(gen_schemas.keys()) + only_ref = ref_keys - gen_keys + only_gen = gen_keys - ref_keys + common = ref_keys & gen_keys + + schema_name = _resolve_schema_name(raw_name, gen_schemas, xlinkml_renames) + if schema_name is None: + print(f"{red('Schema not found:')} {raw_name}") + print(f" {dim('Try an OpenAPI schema name or a LinkML class/type name.')}") + print(f" {dim('OpenAPI names:')} {', '.join(sorted(gen_schemas.keys()))}") + return + + linkml_src = None + for on, ln in xlinkml_renames.items(): + if on == schema_name: + linkml_src = ln + break + + print(f"\n{bold(schema_name)}") + if linkml_src: + print(f" LinkML source: {dim(linkml_src)}") + + if schema_name in gen_schemas: + gen_s = gen_schemas[schema_name] + refs_from: set[str] = set() + _collect_refs(gen_s, refs_from) + path_refs, schema_refs = _find_referers(schema_name, gen_schemas, gen_paths) + + # Status + if schema_name in common: + s_errors = deep_diff("", ref_schemas[schema_name], gen_s, schema_name) + cats = _categorize_errors(s_errors) + status = f"{red(str(len(s_errors)))} diff(s)" if s_errors else green("identical") + print(f" Status: {status}") + if cats["desc"]: + print(f" {dim('Description-only')} ({len(cats['desc'])}):") + for e in cats["desc"]: + print(f" - {dim(e)}") + if cats["aprop"]: + print(f" {yellow('additionalProperties')} ({len(cats['aprop'])}):") + for e in cats["aprop"]: + print(f" - {yellow(e)}") + if cats["struct"]: + print(f" {red('Structural')} ({len(cats['struct'])}):") + for e in cats["struct"]: + print(f" - {red(e)}") + elif schema_name in only_gen: + print(f" Status: {yellow('EXTRA — not in pre-draft')}") + elif schema_name in only_ref: + print(f" Status: {red('MISSING — not in generated output')}") + else: + print(f" Status: {green('not in comparison')}") + + # Referers (paths) + if path_refs: + print(f" {dim('Referenced by endpoints')} ({len(path_refs)}):") + for pr in path_refs: + print(f" {green(pr)}") + else: + print(f" {dim('Referenced by endpoints:')} {dim('none')}") + + # Referers (schemas) + if schema_refs: + print(f" {dim('Referenced by schemas')} ({len(schema_refs)}):") + for sr in schema_refs: + print(f" {sr}") + else: + print(f" {dim('Referenced by schemas:')} {dim('none')}") + + # References from this schema + if refs_from: + print(f" {dim('References to other schemas')} ({len(refs_from)}):") + for rf in sorted(refs_from): + print(f" {rf}") + else: + print(f" {dim('References to other schemas:')} {dim('none')}") + + # Inline / extra context + if schema_name in only_gen: + candidates = find_inlined_candidates(ref_schemas, {schema_name: gen_s}, {schema_name}) + if candidates: + best = max(candidates, key=lambda x: x[2]) + print(f" {yellow('Inferred inlined')} in pre-draft at {best[1]} (score {best[2]})") + elif schema_name in common: + pre_s = ref_schemas.get(schema_name, {}) + props = pre_s.get("properties", {}) + if isinstance(props, dict): + inlined_props = [k for k, v in props.items() if isinstance(v, dict) and "$ref" not in v and "properties" in v] + if inlined_props: + print(f" {dim('Pre-draft inlined properties:')} {', '.join(inlined_props)}") + + # Property-level comparison + if schema_name in common: + pre_s = ref_schemas[schema_name] + gen_props = gen_s.get("properties", {}) + pre_props = pre_s.get("properties", {}) + if isinstance(gen_props, dict) and isinstance(pre_props, dict): + gen_keys_set = set(gen_props.keys()) + pre_keys_set = set(pre_props.keys()) + only_pre = pre_keys_set - gen_keys_set + only_gen_p = gen_keys_set - pre_keys_set + if only_pre: + print(f" {red('Properties only in pre-draft:')} {sorted(only_pre)}") + if only_gen_p: + print(f" {yellow('Properties only in generated:')} {sorted(only_gen_p)}") + + else: + if schema_name in only_ref: + print(f"\n {bold(schema_name)}") + print(f" Status: {red('MISSING — in pre-draft but not generated')}") + pre_s = ref_schemas.get(schema_name, {}) + if pre_s: + print(f" {dim('Pre-draft definition:')}") + print(f" type: {pre_s.get('type', 'N/A')}") + props = pre_s.get("properties", {}) + if isinstance(props, dict): + for pk, pv in props.items(): + ref_type = pv.get("type", "object") if isinstance(pv, dict) else "N/A" + print(f" {pk}: {ref_type}") + + def main(): + parser = argparse.ArgumentParser( + description="Compare pre-draft vs generated OpenAPI spec" + ) + parser.add_argument( + "--schema", "-s", + help="Show verbose details for a single schema only (name in generated output)", + ) + args = parser.parse_args() + + # Single-schema mode: skip everything and show only the schema detail + if args.schema: + _show_schema_detail(args.schema) + return + print(cyan("=" * 60)) print(cyan("OpenAPI Spec Validation: pre-draft vs generated")) print(cyan("=" * 60)) @@ -460,19 +698,38 @@ def main(): print(f" ... ({len(rename_candidates) - 5} more)") break - if common: + elif common: + # ── Full summary with categorization ──────────────────── + all_aprop_schemas: set[str] = set() changed_names: list[str] = [] for name in sorted(common): ref_s = ref_schemas[name] gen_s = gen_schemas[name] s_errors = deep_diff("", ref_s, gen_s, name) - if s_errors: - changed_names.append(name) - print(f" {name}: {red(str(len(s_errors)))} diff(s)") - for e in s_errors: - print(f" - {dim(e)}") + if not s_errors: + continue + changed_names.append(name) + cats = _categorize_errors(s_errors) + if cats["aprop"]: + all_aprop_schemas.add(name) + # Only show this schema in detail if it has structural changes + if cats["struct"] or (cats["desc"] and not cats["aprop"] and not cats["struct"]): + non_desc = len(s_errors) - len(cats["desc"]) + if non_desc: + print(f" {name}: {red(str(non_desc))} non-description diff(s)") + else: + print(f" {name}: {dim('description-only')} ({len(cats['desc'])} diff(s))") + + # Grouped additionalProperties report + if all_aprop_schemas: + print(f" {yellow('additionalProperties:')} present in {len(all_aprop_schemas)} schema(s)") + print(f" {dim('added by LinkML JSON Schema generator (additionalProperties: false)')}") + print(f" {dim('affected:')} {', '.join(sorted(all_aprop_schemas))}") + unchanged = len(common) - len(changed_names) print(f" {dim('Common schemas:')} {green(str(unchanged))} identical, {yellow(str(len(changed_names)))} changed") + else: + print(f" {green('No common schemas')}") print(f"\n{cyan('=' * 60)}") total_errors = len(deep_diff("", ref, gen, "")) From 561dc142409bf684acc5ae083ff40c9650ec90c2 Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Mon, 20 Jul 2026 18:34:27 +0200 Subject: [PATCH 12/24] validation tool - add option to dump compared yaml Signed-off-by: Silvano Cirujano Cuesta --- data-model/tools/validate-openapi.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/data-model/tools/validate-openapi.py b/data-model/tools/validate-openapi.py index 8433dd05..97644bd9 100644 --- a/data-model/tools/validate-openapi.py +++ b/data-model/tools/validate-openapi.py @@ -416,7 +416,7 @@ def _check(obj): return sorted(set(path_refs)), sorted(set(schema_refs)) -def _show_schema_detail(raw_name: str) -> None: +def _show_schema_detail(raw_name: str, show_yaml: bool = False) -> None: """Show detailed information about a single schema.""" ref = get_pre_draft_spec() gen = get_generated_spec() @@ -534,6 +534,18 @@ def _show_schema_detail(raw_name: str) -> None: if only_gen_p: print(f" {yellow('Properties only in generated:')} {sorted(only_gen_p)}") + # YAML dump + if show_yaml: + print(f"\n{dim('─' * 40)}") + pre_s = ref_schemas.get(schema_name, ref_schemas.get(raw_name)) if schema_name in common else None + gen_s = gen_schemas.get(schema_name) + if pre_s: + print(f"\n{bold('Pre-draft')} ({schema_name}):") + print(yaml.dump(pre_s, default_flow_style=False, sort_keys=False, allow_unicode=True).rstrip()) + if gen_s: + print(f"\n{bold('Generated')} ({schema_name}):") + print(yaml.dump(gen_s, default_flow_style=False, sort_keys=False, allow_unicode=True).rstrip()) + else: if schema_name in only_ref: print(f"\n {bold(schema_name)}") @@ -557,11 +569,16 @@ def main(): "--schema", "-s", help="Show verbose details for a single schema only (name in generated output)", ) + parser.add_argument( + "--yaml", "-y", + action="store_true", + help="Show YAML of both pre-draft and generated schemas (use with -s)", + ) args = parser.parse_args() # Single-schema mode: skip everything and show only the schema detail if args.schema: - _show_schema_detail(args.schema) + _show_schema_detail(args.schema, args.yaml) return print(cyan("=" * 60)) From a8f05f8c7c58ef9a487dde93a7ddf4ffa86b0cc2 Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Mon, 20 Jul 2026 18:34:42 +0200 Subject: [PATCH 13/24] style: openapigen format Signed-off-by: Silvano Cirujano Cuesta --- data-model/tools/openapigen.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/data-model/tools/openapigen.py b/data-model/tools/openapigen.py index df5f604b..1c8f1df8 100644 --- a/data-model/tools/openapigen.py +++ b/data-model/tools/openapigen.py @@ -255,7 +255,9 @@ def _inline_enum_schemas(self, data_schemas: dict) -> dict: enum_schemas = { name: schema for name, schema in data_schemas.items() - if isinstance(schema, dict) and "enum" in schema and "properties" not in schema + if isinstance(schema, dict) + and "enum" in schema + and "properties" not in schema } if not enum_schemas: return data_schemas @@ -271,7 +273,11 @@ def _replace_refs(obj): return [_replace_refs(item) for item in obj] return obj - return {k: _replace_refs(v) for k, v in data_schemas.items() if k not in enum_schemas} + return { + k: _replace_refs(v) + for k, v in data_schemas.items() + if k not in enum_schemas + } def _find_schemas_line(self, template_text: str) -> int: """Return the 0-indexed line number of the ``schemas`` key under ``components``.""" @@ -519,7 +525,10 @@ def cli(yamlfile, template, keep_unreferenced, inline_enums, **args): return print( OpenApiGenerator( - yamlfile, keep_unreferenced=keep_unreferenced, inline_enums=inline_enums, **args + yamlfile, + keep_unreferenced=keep_unreferenced, + inline_enums=inline_enums, + **args, ).serialize(template_file=template, **args), end="", ) From b56a473b96abed1c2dac02ab97a7df26af2ff220 Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Mon, 20 Jul 2026 18:34:56 +0200 Subject: [PATCH 14/24] openapigen: accept further properties Signed-off-by: Silvano Cirujano Cuesta --- data-model/tools/openapigen.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/data-model/tools/openapigen.py b/data-model/tools/openapigen.py index 1c8f1df8..2e0e4abf 100644 --- a/data-model/tools/openapigen.py +++ b/data-model/tools/openapigen.py @@ -370,6 +370,7 @@ def serialize(self, template_file: str = "", **kwargs) -> str: continue json_schema = JsonSchemaGenerator( self.schemaview.schema, + not_closed=True, include_null=False, top_class=linkml_element_name, ).generate() @@ -403,6 +404,7 @@ def serialize(self, template_file: str = "", **kwargs) -> str: continue json_schema = JsonSchemaGenerator( self.schemaview.schema, + not_closed=True, include_null=False, top_class=linkml_element_name, ).generate() From 5f49a56977e0db7a2d1a1275c771a30c3e4360dc Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Tue, 21 Jul 2026 09:45:41 +0200 Subject: [PATCH 15/24] openapigen: workaround linkml issue 3611 Signed-off-by: Silvano Cirujano Cuesta --- data-model/tools/openapigen.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/data-model/tools/openapigen.py b/data-model/tools/openapigen.py index 2e0e4abf..fb35ca22 100644 --- a/data-model/tools/openapigen.py +++ b/data-model/tools/openapigen.py @@ -298,6 +298,27 @@ def _find_schemas_line(self, template_text: str) -> int: "OpenAPI template is missing 'schemas' section under 'components'" ) + def _strip_additional_properties(self, data_schemas: dict) -> dict: + """Remove ``additionalProperties`` from all generated schemas. + + Workaround for LinkML bug: ``not_closed=True`` only affects the top-level + schema, not individual class schemas (``handle_class`` hardcodes + ``additional_properties = False``). Remove when + `https://github.com/linkml/linkml/issues/3611` is fixed upstream. + """ + + def _walk(obj): + if isinstance(obj, dict): + obj.pop("additionalProperties", None) + for v in obj.values(): + _walk(v) + elif isinstance(obj, list): + for item in obj: + _walk(item) + + _walk(data_schemas) + return data_schemas + def serialize(self, template_file: str = "", **kwargs) -> str: """Generate an OpenAPI v3.0.3 spec from ``template_file`` and the loaded LinkML schema.""" if not template_file: @@ -424,6 +445,7 @@ def serialize(self, template_file: str = "", **kwargs) -> str: for data_schema in sanitized_data_schemas.values(): data_schema.pop("title", None) sanitized_data_schemas = self._fix_openapi_spec(sanitized_data_schemas) + sanitized_data_schemas = self._strip_additional_properties(sanitized_data_schemas) if self._renaming: sanitized_data_schemas = self._rename(sanitized_data_schemas) if self.inline_enums: From 710d5c77b5e872591502a0c6904db50e4280d412 Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Tue, 21 Jul 2026 09:46:05 +0200 Subject: [PATCH 16/24] data-model: remove references specification pages Signed-off-by: Silvano Cirujano Cuesta --- data-model/application-deployment.linkml.yaml | 20 --------------- .../application-description.linkml.yaml | 5 ---- data-model/deployment-status.linkml.yaml | 20 --------------- data-model/desired-state-manifest.linkml.yaml | 24 ------------------ data-model/device-capabilities.linkml.yaml | 25 ------------------- data-model/margo-data-model.linkml.yaml | 2 -- data-model/margo-deployments.linkml.yaml | 20 --------------- data-model/margo-resources.linkml.yaml | 22 ---------------- 8 files changed, 138 deletions(-) diff --git a/data-model/application-deployment.linkml.yaml b/data-model/application-deployment.linkml.yaml index 6262f5c1..bd6fbf03 100644 --- a/data-model/application-deployment.linkml.yaml +++ b/data-model/application-deployment.linkml.yaml @@ -4,8 +4,6 @@ name: ApplicationDeployment description: >- Each workload is represented as an `ApplicationDeployment` YAML file that specifies its components, configuration, and parameters. This resource is delivered via the Desired State API and referenced by `id` in the Deployment Status API. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#applicationdeployment-yaml-definition version: 1.0.0 #Arne: update later prefixes: linkml: https://w3id.org/linkml/ @@ -21,8 +19,6 @@ classes: ApplicationDeployment: description: >- A class representing the desired state of an entity. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#applicationdeployment-yaml-definition attributes: apiVersion: description: Identifier of the version of the API the object definition follows. @@ -38,32 +34,24 @@ classes: description: >- Metadata element specifying characteristics about the application deployment. See the [Metadata Attributes](#metadata-attributes) section below. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#metadata-attributes range: DeploymentMetadata required: true spec: description: >- Spec element that defines deployment profile and parameters associated with the application deployment. See the [Spec Attributes](#spec-attributes) section below. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#spec-attributes range: Spec required: true DeploymentMetadata: description: >- Metadata associated with the desired state. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#metadata-attributes attributes: annotations: description: >- Defines the application ID and unique identifier associated to the deployment specification. Needs to be assigned by the Workload Orchestration Software. See the [Annotation Attributes](#annotations-attributes) section below. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#annotations-attributes range: DeploymentAnnotations required: true name: @@ -83,8 +71,6 @@ classes: DeploymentAnnotations: description: >- A class representing annotations. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#annotations-attributes attributes: applicationId: description: >- @@ -108,21 +94,15 @@ classes: Spec: description: >- Specification details of the desired state. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#spec-attributes attributes: deploymentProfile: description: >- Section that defines deployment details including type and components. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#deploymentprofile-attributes range: DeploymentProfile required: true parameters: description: >- Describes the configured parameters applied via the end-user. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#parameter-attributes range: Parameter required: true multivalued: true diff --git a/data-model/application-description.linkml.yaml b/data-model/application-description.linkml.yaml index a7c0a9fa..7c783277 100644 --- a/data-model/application-description.linkml.yaml +++ b/data-model/application-description.linkml.yaml @@ -11,9 +11,6 @@ description: >- The structure of the ApplicationDescription object to be provided in the YAML document specified in this page. Some examples are provided also [at the bottom of this page](#examples). - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/applications/application-registry.md - for the application registry specification. version: 1.0.0 prefixes: linkml: https://w3id.org/linkml/ @@ -26,7 +23,6 @@ imports: default_prefix: margo # default_range: string # https://github.com/linkml/linkml/issues/1483 - # Class Definitions classes: ApplicationDescription: @@ -384,4 +380,3 @@ classes: range: string multivalued: true required: true - diff --git a/data-model/deployment-status.linkml.yaml b/data-model/deployment-status.linkml.yaml index 4f2c478b..899fa202 100644 --- a/data-model/deployment-status.linkml.yaml +++ b/data-model/deployment-status.linkml.yaml @@ -3,8 +3,6 @@ id: https://specification.margo.org/deployment-status name: DeploymentStatus description: >- Schema for reporting the deployment status of workloads from a device to the WFM. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/deployment-status.md version: 1.0.0 prefixes: linkml: https://w3id.org/linkml/ @@ -19,8 +17,6 @@ classes: DeploymentStatusManifest: description: >- Manifest sent by the device client to report the deployment status of a workload. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/deployment-status.md#request-body-attributes attributes: apiVersion: range: string @@ -43,15 +39,11 @@ classes: status: description: >- Overall status of the deployment. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/deployment-status.md#status-attributes range: Status required: true components: description: >- Per-component status list. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/deployment-status.md#component-attributes range: ComponentStatus required: true multivalued: true @@ -59,8 +51,6 @@ classes: Status: description: >- Overall deployment state and optional error details. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/deployment-status.md#status-attributes slots: - state - error @@ -68,8 +58,6 @@ classes: Error: description: >- Error details associated with a failed deployment state. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/deployment-status.md#error-attributes attributes: code: range: string @@ -86,8 +74,6 @@ classes: is_a: Status description: >- Status of a component deployment. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/deployment-status.md#component-attributes attributes: name: range: string @@ -97,24 +83,18 @@ slots: state: description: >- Current deployment state. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/deployment-status.md#status-attributes range: State required: true error: description: >- Optional error details when the state is `failed`. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/deployment-status.md#error-attributes range: Error enums: State: description: >- Permissible deployment states. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/deployment-status.md#status-attributes permissible_values: pending: installing: diff --git a/data-model/desired-state-manifest.linkml.yaml b/data-model/desired-state-manifest.linkml.yaml index 3cbe6d61..4d77eec9 100644 --- a/data-model/desired-state-manifest.linkml.yaml +++ b/data-model/desired-state-manifest.linkml.yaml @@ -3,8 +3,6 @@ id: https://specification.margo.org/desired-state-manifest-schema name: DesiredStateManifest description: >- Each workload is represented as an `ApplicationDeployment` YAML file that specifies its components, configuration, and parameters. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md version: 1.0.0 prefixes: linkml: https://w3id.org/linkml/ @@ -19,28 +17,20 @@ classes: DesiredStateManifest: description: >- Manifest from the Workload Fleet Manager, representing the complete desired workload configuration assigned to the device. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#endpoints---state-manifest attributes: manifestVersion: description: >- Monotonically increasing unsigned 64-bit integer in the inclusive range [1, 2^64-1]. Prevents rollback attacks. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#response-body-attributes range: ManifestVersion required: true bundle: description: >- Package optimization containing multiple ApplicationDeployment YAMLs. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#response-body-attributes range: Bundle required: true deployments: description: >- List of deployment objects describing each workload. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#response-body-attributes multivalued: true inlined: true inlined_as_list: true @@ -52,8 +42,6 @@ classes: Describes an archive containing all referenced ApplicationDeployment YAMLs. If there are zero deployments (i.e., the deployments array is empty), this field MUST be present with the value null. An empty archive MUST NOT be served. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#endpoints---deployment-bundle attributes: mediaType: description: >- @@ -69,8 +57,6 @@ classes: Digest of the bundle archive. MUST equal the digest computed over the exact sequence of bytes in the bundle endpoint's HTTP 200 OK response body. See Protocol - Digest for further details. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#protocol---digest range: DigestType required: true sizeBytes: @@ -82,16 +68,12 @@ classes: url: description: >- Content-addressable retrieval endpoint for the bundle of the form /api/v1/clients/{clientId}/bundles/{digest} where {digest} equals bundle.digest. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#endpoints---deployment-bundle range: UrlType required: true Deployment: description: >- Reference to an individual ApplicationDeployment within the desired state manifest. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#response-body-attributes attributes: deploymentId: description: >- @@ -104,8 +86,6 @@ classes: Digest of the corresponding ApplicationDeployment YAML file. MUST equal the digest computed over the exact sequence of bytes in the individual deployment endpoint's HTTP 200 OK response body. See Protocol - Digest for further details. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#protocol---digest range: DigestType required: true sizeBytes: @@ -117,8 +97,6 @@ classes: url: description: >- Content-addressable retrieval endpoint for the ApplicationDeployment YAML of the form /api/v1/clients/{clientId}/deployments/{deploymentId}/{digest} where {digest} equals deployments[].digest. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#endpoints---individual-deployment-yaml range: UrlType required: true @@ -128,8 +106,6 @@ types: Hash that identifies an element by its content. Digests have to follow the pattern: ":". For example: "sha256:8a9b07...". - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#protocol---digest uri: xsd:string base: string repr: str diff --git a/data-model/device-capabilities.linkml.yaml b/data-model/device-capabilities.linkml.yaml index d68f44d4..9eb69669 100644 --- a/data-model/device-capabilities.linkml.yaml +++ b/data-model/device-capabilities.linkml.yaml @@ -5,8 +5,6 @@ title: Device Capabilities description: >- Schema for defining device capabilities. The purpose of the Device Capabilities is that WFMs can match application deployments with the capabilities of the target devices. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md version: 1.0.0 prefixes: linkml: https://w3id.org/linkml/ @@ -18,14 +16,11 @@ imports: default_prefix: margo # default_range: string # https://github.com/linkml/linkml/issues/1483 - # Class Definitions classes: DeviceCapabilitiesManifest: description: >- Capabilities of a device on which applications can be deployed. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#request-body-attributes attributes: apiVersion: description: Identifier of the version the API resource follows. @@ -41,16 +36,12 @@ classes: description: >- Element that defines characteristics about the device. See the [Properties Attributes](#properties-attributes) section below. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#properties-attributes required: true range: Properties Properties: description: >- Device properties reported to the WFM. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#properties-attributes attributes: id: description: Unique deviceID assigned to the device via the Device Owner. @@ -72,8 +63,6 @@ classes: description: >- Element that defines the device role it can provide to the Margo environment. MUST be one of the following: Standalone Cluster, Cluster Leader, Standalone Device, or Gateway. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#enumerations required: true multivalued: true inlined: false @@ -82,8 +71,6 @@ classes: description: >- Element that defines the device's resources available to the application deployed on the device. See the [Resources Attributes](#resources-attributes) section below. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#resources-attributes required: true range: Resources @@ -109,38 +96,26 @@ classes: interfaces: required: true - # Enumeration Definitions enums: DeviceRole: description: >- Role a device can provide to the Margo environment. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#enumerations permissible_values: Standalone Cluster: description: >- Select this role to run Helm applications. See [Edge compute devices](../../concepts/edge-compute-devices/devices#standalone-cluster-role-details) for more information. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/concepts/edge-compute-devices/devices.md#standalone-cluster-role-details Standalone Device: description: >- Select this role to run Compose applications. See [Edge compute devices](../../concepts/edge-compute-devices/devices#standalone-device-role-details) for more information. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/concepts/edge-compute-devices/devices.md#standalone-device-role-details Cluster Leader: description: >- Select this role for the leader node of a multi-node Helm cluster. See [Edge compute devices](../../concepts/edge-compute-devices/devices#cluster-leader-role-details) for more information. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/concepts/edge-compute-devices/devices.md#cluster-leader-role-details Gateway: description: >- Select this role for a see-thru gateway that connects one or more child-devices to the WFM, exposing each child-device individually with its own capabilities. See [Gateways](../../concepts/gateways/gateways.md) for more information. - - Pre-data-model reference https://github.com/margo/specification/blob/cea236c3a1cf96cb613a84cda464e638b7769dd9/system-design/specification/margo-management-interface/device-capabilities.md#see-thru-gateways - diff --git a/data-model/margo-data-model.linkml.yaml b/data-model/margo-data-model.linkml.yaml index 472425bf..ec2e4ada 100644 --- a/data-model/margo-data-model.linkml.yaml +++ b/data-model/margo-data-model.linkml.yaml @@ -55,8 +55,6 @@ types: Format: "{id}[/{id}[/{id}...]]". The top-level id is required and must include only unreserved characters as specified in RFC3986. Subsequent ids indicate child devices in a gateway hierarchy and must also use only unreserved characters. - - Pre-data-model reference https://github.com/margo/specification/blob/cea236c3a1cf96cb613a84cda464e638b7769dd9/system-design/specification/margo-management-interface/device-capabilities.md#route-parameters uri: xsd:string base: str pattern: '^[A-Za-z0-9._~-]+(\/[A-Za-z0-9._~-]+)*$' diff --git a/data-model/margo-deployments.linkml.yaml b/data-model/margo-deployments.linkml.yaml index 44cd01c0..328f2ac6 100644 --- a/data-model/margo-deployments.linkml.yaml +++ b/data-model/margo-deployments.linkml.yaml @@ -4,8 +4,6 @@ name: Deployments description: >- Shared deployment profile, component, parameter, and target types used by both ApplicationDescription and ApplicationDeployment schemas. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#deploymentprofile-attributes version: 1.0.0 prefixes: linkml: https://w3id.org/linkml/ @@ -20,8 +18,6 @@ classes: DeploymentProfile: description: >- Represents a deployment configuration for the application. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#deploymentprofile-attributes slots: - type - components @@ -45,8 +41,6 @@ classes: Component: description: >- A class representing a component of a deployment profile. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#component-attributes attributes: name: description: >- @@ -59,8 +53,6 @@ classes: description: >- A dictionary element specifying the component packages's deployment details. See the [Component Properties](#componentproperties-attributes) section below. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#component-attributes range: ComponentProperties required: true @@ -73,8 +65,6 @@ classes: ComponentProperties: description: >- Properties dictionary for component deployment details. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#component-attributes attributes: repository: description: Repository location for the component. @@ -98,8 +88,6 @@ classes: Parameter: description: >- Defines a configurable parameter for the application. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#parameter-attributes attributes: name: description: Name of the parameter. @@ -119,8 +107,6 @@ classes: description: >- Used to indicate which component the value should be applied to when installing, or updating, the application. See the [Target](#target-attributes) section below. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#target-attributes range: Target required: true multivalued: true @@ -130,8 +116,6 @@ classes: Target: description: >- Specifies where the parameter applies in the deployment. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#target-attributes attributes: pointer: description: >- @@ -159,8 +143,6 @@ slots: When installing the application on a device supporting Compose, all `compose` components, and only `compose` components, will be provided to the device in the same order they are listed in the application description file. The device will install the components in the same order they are listed in the application description file. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#deploymentprofile-attributes range: string required: true pattern: ^(helm\.v3|compose)$ @@ -169,8 +151,6 @@ slots: description: >- Component element indicating the components to deploy when installing the application. See the [Component](#component-attributes) section below. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/desired-state.md#component-attributes range: Component multivalued: true required: true diff --git a/data-model/margo-resources.linkml.yaml b/data-model/margo-resources.linkml.yaml index c59e949c..2451021f 100644 --- a/data-model/margo-resources.linkml.yaml +++ b/data-model/margo-resources.linkml.yaml @@ -4,8 +4,6 @@ name: DeviceResources description: >- Shared resource types used by both device capabilities and application descriptions to describe hardware resources (CPU, memory, storage, peripherals, communication interfaces). - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#resources-attributes version: 1.0.0 prefixes: linkml: https://w3id.org/linkml/ @@ -20,8 +18,6 @@ classes: Resources: description: >- Required resources element specifying the resources required to install the application. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#resources-attributes slots: - cpu - memory @@ -32,8 +28,6 @@ classes: CPU: description: >- CPU element specifying the CPU requirements for the application. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#cpu-attributes attributes: cores: description: @@ -57,8 +51,6 @@ classes: DevicePeripheral: description: >- Peripheral hardware of a device. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#peripheral-attributes attributes: type: description: @@ -79,8 +71,6 @@ classes: DeviceCommunicationInterface: description: >- Communication interface of a device. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#communicationinterface-attributes attributes: type: description: @@ -95,8 +85,6 @@ slots: description: >- CPU element specifying the CPU requirements for the application. See the [CPU](#cpu-attributes) section below. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#cpu-attributes range: CPU memory: @@ -120,8 +108,6 @@ slots: description: >- Peripherals element specifying the peripherals required to run the application. See the [Peripheral](#peripheral-attributes) section below. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#peripheral-attributes range: DevicePeripheral multivalued: true inlined: true @@ -131,8 +117,6 @@ slots: description: >- Interfaces element specifying the communication interfaces required to run the application. See the [Communication Interfaces](#communicationinterface-attributes) section below. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#communicationinterface-attributes range: DeviceCommunicationInterface multivalued: true inlined: true @@ -142,8 +126,6 @@ enums: CpuArchitectureType: description: >- Permissible CPU architecture values. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#cpuarchitecturetype permissible_values: amd64: description: AMD 64-bit architecture. @@ -162,8 +144,6 @@ enums: CommunicationInterfaceType: description: >- Permissible communication interface types. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#communicationinterfacetype permissible_values: ethernet: description: This type stands for an Ethernet interface. @@ -185,8 +165,6 @@ enums: PeripheralType: description: >- Permissible peripheral types. - - Pre-data-model reference https://github.com/margo/specification/blob/3519aa7be4b565b2e2395134b99778fdc0379ace/system-design/specification/margo-management-interface/device-capabilities.md#peripheraltype permissible_values: gpu: description: This type stands for a Graphics Processing Unit (GPU) peripheral. From 7d23661c996f95e41363fe5b746275f1b73b63b4 Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Mon, 27 Jul 2026 21:02:34 +0200 Subject: [PATCH 17/24] refactor: new folder structure Signed-off-by: Silvano Cirujano Cuesta --- .github/workflows/pages.yml | 12 +- .gitignore | 9 +- AGENTS.md | 188 ++-- CONTRIBUTING.md | 10 +- doc-generation/check-openapi.bash | 38 - doc-generation/check_openapi.py | 76 -- {system-design => docs}/CNAME | 0 {system-design => docs}/assets/favicon.ico | Bin .../assets/margo_white.svg | 0 .../assets/svg-pan-zoom-init.js | 0 .../assets/svg-pan-zoom.min.js | 0 .../assets/swagger-ui-bundle.js | 0 .../assets/swagger-ui-standalone-preset.js | 0 {system-design => docs}/assets/swagger-ui.css | 0 {system-design => docs}/css/margo.css | 0 {system-design => docs}/index.md | 0 .../specification/applications/.gitkeep | 0 .../applications/application-registry.md | 0 .../margo-devices/device-requirements.md | 0 .../api-requirements-and-security.md | 0 .../deployment-status-api.md | 0 .../deployment-status.md | 0 .../desired-state.md | 0 .../device-capabilities-api.md | 0 .../device-capabilities.md | 0 .../management-interface-swagger.md | 0 .../workload-management-api-1.0.0.yaml | 995 ++++++++++++++++++ .../collecting-workload-observability-data.md | 0 .../consuming-workload-observability-data.md | 0 .../publishing-workload-observability-data.md | 0 .../doc-generation}/check-examples.bash | 0 .../application-package-api.json | 0 .../configurations/desired-state-api.json | 0 .../generate-documentation.bash | 0 .../application-description.linkml.yaml | 0 .../applications/resources}/class.md.jinja2 | 0 .../invalid/ApplicationDescription-001.yaml | 0 .../valid/ApplicationDescription-001.yaml | 0 .../valid/ApplicationDescription-002.yaml | 0 .../applications/resources/index.md.jinja2 | 0 .../desired-state.linkml.yaml | 0 .../examples/invalid/DesiredState-001.yaml | 0 .../examples/invalid/DesiredState-002.yaml | 0 .../examples/invalid/DesiredState-003.yaml | 0 .../examples/valid/DesiredState-001.yaml | 0 .../examples/valid/DesiredState-002.yaml | 0 .../examples/valid/gateway-autonomous.yaml | 0 .../examples/valid/gateway-directed.yaml | 0 .../resources/index.md.jinja2 | 0 .../tools => legacy}/validate-openapi.py | 220 +++- mkdocs.yml | 2 +- .../application-deployment.linkml.yaml | 0 .../application-description.linkml.yaml | 0 .../deployment-status.linkml.yaml | 0 .../desired-state-manifest.linkml.yaml | 2 +- .../device-capabilities.linkml.yaml | 0 .../invalid/ApplicationDeployment-001.yaml | 0 .../invalid/ApplicationDeployment-002.yaml | 0 .../invalid/ApplicationDeployment-003.yaml | 0 .../invalid/ApplicationDeployment-004.yaml | 0 .../invalid/ApplicationDescription-001.yaml | 0 .../invalid/DeploymentStatusManifest-001.json | 0 .../invalid/DeploymentStatusManifest-002.json | 0 .../invalid/DeploymentStatusManifest-003.json | 0 .../invalid/DesiredStateManifest-001.json | 0 .../invalid/DesiredStateManifest-002.json | 0 .../invalid/DesiredStateManifest-003.json | 0 .../invalid/DesiredStateManifest-004.json | 0 .../DeviceCapabilitiesManifest-001.json | 0 .../DeviceCapabilitiesManifest-002.json | 0 .../DeviceCapabilitiesManifest-003.json | 0 .../valid/ApplicationDeployment-compose.yaml | 0 .../valid/ApplicationDeployment-helm.yaml | 0 ...plicationDescription-helm_and_compose.yaml | 0 .../ApplicationDescription-helm_only.yaml | 0 .../valid/DeploymentStatusManifest-001.json | 0 .../valid/DesiredStateManifest-001.json | 0 .../valid/DeviceCapabilitiesManifest-001.json | 0 {data-model => model}/generation-gap.md | 10 +- .../margo-data-model.linkml.yaml | 0 .../margo-deployments.linkml.yaml | 0 .../margo-resources.linkml.yaml | 0 .../specification/applications/meta.json | 7 - .../specification/margo-devices/meta.json | 6 - .../specification/observability/meta.json | 8 - .../tools => tools}/check-examples.bash | 10 +- .../application-deployment.json | 2 +- .../application-description.json | 2 +- .../configurations/deployment-status.json | 2 +- .../desired-state-manifest.json | 2 +- .../configurations/device-capabilities.json | 2 +- {data-model/tools => tools}/generate-all.bash | 0 .../generate-class-diagram.bash | 16 +- .../tools => tools}/generate-docs.bash | 39 +- .../generate-json-schemas.bash | 6 +- .../tools => tools}/generate-openapi.bash | 17 +- {data-model/tools => tools}/openapigen.py | 0 .../templates/main-classes}/class.md.jinja2 | 0 .../templates/main-classes}/index.md.jinja2 | 2 +- .../templates/model}/class.md.jinja2 | 0 .../templates/model}/class_diagram.md.jinja2 | 0 .../model}/common_metadata.md.jinja2 | 0 .../templates/model}/enum.md.jinja2 | 0 .../templates/model}/index.md.jinja2 | 2 +- .../templates/model}/slot.md.jinja2 | 0 .../templates/model}/subset.md.jinja2 | 0 .../templates/model}/type.md.jinja2 | 0 ...workload-management-api-1.0.0.openapi.yaml | 0 108 files changed, 1329 insertions(+), 356 deletions(-) delete mode 100755 doc-generation/check-openapi.bash delete mode 100644 doc-generation/check_openapi.py rename {system-design => docs}/CNAME (100%) rename {system-design => docs}/assets/favicon.ico (100%) rename {system-design => docs}/assets/margo_white.svg (100%) rename {system-design => docs}/assets/svg-pan-zoom-init.js (100%) rename {system-design => docs}/assets/svg-pan-zoom.min.js (100%) rename {system-design => docs}/assets/swagger-ui-bundle.js (100%) rename {system-design => docs}/assets/swagger-ui-standalone-preset.js (100%) rename {system-design => docs}/assets/swagger-ui.css (100%) rename {system-design => docs}/css/margo.css (100%) rename {system-design => docs}/index.md (100%) rename {system-design => docs}/specification/applications/.gitkeep (100%) rename {system-design => docs}/specification/applications/application-registry.md (100%) rename {system-design => docs}/specification/margo-devices/device-requirements.md (100%) rename {system-design => docs}/specification/margo-management-interface/api-requirements-and-security.md (100%) rename {system-design => docs}/specification/margo-management-interface/deployment-status-api.md (100%) rename {system-design => docs}/specification/margo-management-interface/deployment-status.md (100%) rename {system-design => docs}/specification/margo-management-interface/desired-state.md (100%) rename {system-design => docs}/specification/margo-management-interface/device-capabilities-api.md (100%) rename {system-design => docs}/specification/margo-management-interface/device-capabilities.md (100%) rename {system-design => docs}/specification/margo-management-interface/management-interface-swagger.md (100%) create mode 100644 docs/specification/margo-management-interface/workload-management-api-1.0.0.yaml rename {system-design => docs}/specification/observability/collecting-workload-observability-data.md (100%) rename {system-design => docs}/specification/observability/consuming-workload-observability-data.md (100%) rename {system-design => docs}/specification/observability/publishing-workload-observability-data.md (100%) rename {doc-generation => legacy/doc-generation}/check-examples.bash (100%) rename {doc-generation => legacy/doc-generation}/configurations/application-package-api.json (100%) rename {doc-generation => legacy/doc-generation}/configurations/desired-state-api.json (100%) rename {doc-generation => legacy/doc-generation}/generate-documentation.bash (100%) rename {src/specification => legacy/src-specification}/applications/application-description.linkml.yaml (100%) rename {data-model/resources/markdown-templates_main-classes => legacy/src-specification/applications/resources}/class.md.jinja2 (100%) rename {src/specification => legacy/src-specification}/applications/resources/examples/invalid/ApplicationDescription-001.yaml (100%) rename {src/specification => legacy/src-specification}/applications/resources/examples/valid/ApplicationDescription-001.yaml (100%) rename {src/specification => legacy/src-specification}/applications/resources/examples/valid/ApplicationDescription-002.yaml (100%) rename {src/specification => legacy/src-specification}/applications/resources/index.md.jinja2 (100%) rename {src/specification => legacy/src-specification}/margo-management-interface/desired-state.linkml.yaml (100%) rename {src/specification => legacy/src-specification}/margo-management-interface/resources/examples/invalid/DesiredState-001.yaml (100%) rename {src/specification => legacy/src-specification}/margo-management-interface/resources/examples/invalid/DesiredState-002.yaml (100%) rename {src/specification => legacy/src-specification}/margo-management-interface/resources/examples/invalid/DesiredState-003.yaml (100%) rename {src/specification => legacy/src-specification}/margo-management-interface/resources/examples/valid/DesiredState-001.yaml (100%) rename {src/specification => legacy/src-specification}/margo-management-interface/resources/examples/valid/DesiredState-002.yaml (100%) rename {src/specification => legacy/src-specification}/margo-management-interface/resources/examples/valid/gateway-autonomous.yaml (100%) rename {src/specification => legacy/src-specification}/margo-management-interface/resources/examples/valid/gateway-directed.yaml (100%) rename {src/specification => legacy/src-specification}/margo-management-interface/resources/index.md.jinja2 (100%) rename {data-model/tools => legacy}/validate-openapi.py (81%) rename {data-model => model}/application-deployment.linkml.yaml (100%) rename {data-model => model}/application-description.linkml.yaml (100%) rename {data-model => model}/deployment-status.linkml.yaml (100%) rename {data-model => model}/desired-state-manifest.linkml.yaml (99%) rename {data-model => model}/device-capabilities.linkml.yaml (100%) rename {data-model/resources => model}/examples/invalid/ApplicationDeployment-001.yaml (100%) rename {data-model/resources => model}/examples/invalid/ApplicationDeployment-002.yaml (100%) rename {data-model/resources => model}/examples/invalid/ApplicationDeployment-003.yaml (100%) rename {data-model/resources => model}/examples/invalid/ApplicationDeployment-004.yaml (100%) rename {data-model/resources => model}/examples/invalid/ApplicationDescription-001.yaml (100%) rename {data-model/resources => model}/examples/invalid/DeploymentStatusManifest-001.json (100%) rename {data-model/resources => model}/examples/invalid/DeploymentStatusManifest-002.json (100%) rename {data-model/resources => model}/examples/invalid/DeploymentStatusManifest-003.json (100%) rename {data-model/resources => model}/examples/invalid/DesiredStateManifest-001.json (100%) rename {data-model/resources => model}/examples/invalid/DesiredStateManifest-002.json (100%) rename {data-model/resources => model}/examples/invalid/DesiredStateManifest-003.json (100%) rename {data-model/resources => model}/examples/invalid/DesiredStateManifest-004.json (100%) rename {data-model/resources => model}/examples/invalid/DeviceCapabilitiesManifest-001.json (100%) rename {data-model/resources => model}/examples/invalid/DeviceCapabilitiesManifest-002.json (100%) rename {data-model/resources => model}/examples/invalid/DeviceCapabilitiesManifest-003.json (100%) rename {data-model/resources => model}/examples/valid/ApplicationDeployment-compose.yaml (100%) rename {data-model/resources => model}/examples/valid/ApplicationDeployment-helm.yaml (100%) rename {data-model/resources => model}/examples/valid/ApplicationDescription-helm_and_compose.yaml (100%) rename {data-model/resources => model}/examples/valid/ApplicationDescription-helm_only.yaml (100%) rename {data-model/resources => model}/examples/valid/DeploymentStatusManifest-001.json (100%) rename {data-model/resources => model}/examples/valid/DesiredStateManifest-001.json (100%) rename {data-model/resources => model}/examples/valid/DeviceCapabilitiesManifest-001.json (100%) rename {data-model => model}/generation-gap.md (96%) rename {data-model => model}/margo-data-model.linkml.yaml (100%) rename {data-model => model}/margo-deployments.linkml.yaml (100%) rename {data-model => model}/margo-resources.linkml.yaml (100%) delete mode 100644 system-design/specification/applications/meta.json delete mode 100644 system-design/specification/margo-devices/meta.json delete mode 100644 system-design/specification/observability/meta.json rename {data-model/tools => tools}/check-examples.bash (90%) rename {data-model/tools => tools}/configurations/application-deployment.json (85%) rename {data-model/tools => tools}/configurations/application-description.json (85%) rename {data-model/tools => tools}/configurations/deployment-status.json (84%) rename {data-model/tools => tools}/configurations/desired-state-manifest.json (85%) rename {data-model/tools => tools}/configurations/device-capabilities.json (85%) rename {data-model/tools => tools}/generate-all.bash (100%) rename {data-model/tools => tools}/generate-class-diagram.bash (88%) rename {data-model/tools => tools}/generate-docs.bash (59%) rename {data-model/tools => tools}/generate-json-schemas.bash (67%) rename {data-model/tools => tools}/generate-openapi.bash (57%) rename {data-model/tools => tools}/openapigen.py (100%) rename {src/specification/applications/resources => tools/templates/main-classes}/class.md.jinja2 (100%) rename {data-model/resources/markdown-templates_main-classes => tools/templates/main-classes}/index.md.jinja2 (95%) rename {data-model/resources/markdown-templates => tools/templates/model}/class.md.jinja2 (100%) rename {data-model/resources/markdown-templates => tools/templates/model}/class_diagram.md.jinja2 (100%) rename {data-model/resources/markdown-templates => tools/templates/model}/common_metadata.md.jinja2 (100%) rename {data-model/resources/markdown-templates => tools/templates/model}/enum.md.jinja2 (100%) rename {data-model/resources/markdown-templates => tools/templates/model}/index.md.jinja2 (96%) rename {data-model/resources/markdown-templates => tools/templates/model}/slot.md.jinja2 (100%) rename {data-model/resources/markdown-templates => tools/templates/model}/subset.md.jinja2 (100%) rename {data-model/resources/markdown-templates => tools/templates/model}/type.md.jinja2 (100%) rename {data-model/tools => tools/templates/openapi}/workload-management-api-1.0.0.openapi.yaml (100%) diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index 5aef4e8b..8945a3ff 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -60,7 +60,7 @@ jobs: - name: Run tests run: | - data-model/tools/check-examples.bash + tools/check-examples.bash - name: Check OpenAPI documents run: | @@ -96,15 +96,15 @@ jobs: - name: Generate all artifacts run: | - data-model/tools/generate-all.bash + tools/generate-all.bash - name: Share generated artifacts with later jobs uses: actions/upload-artifact@v4 with: name: generated-artifacts path: | - system-design/specification/applications/application-description.md - system-design/specification/margo-management-interface/desired-state.md + docs/specification/applications/application-description.md + docs/specification/margo-management-interface/desired-state.md system-design/specification/margo-management-interface/workload-management-api-1.0.0.yaml pages: @@ -144,11 +144,11 @@ jobs: uses: actions/download-artifact@v4 with: name: generated-artifacts - path: system-design/specification + path: docs/specification - name: Generate merged documentation tree run: | - data-model/tools/generate-docs.bash + tools/generate-docs.bash - name: Build Pages run: poetry run -- mkdocs build diff --git a/.gitignore b/.gitignore index bdd9a5fc..c509d16a 100644 --- a/.gitignore +++ b/.gitignore @@ -5,10 +5,7 @@ myenv .python-version # Ignore the generated files: -system-design/specification/margo-management-interface/desired-state.md -system-design/specification/applications/application-description.md -src/specification/applications/docs -src/specification/margo-management-interface/docs +build +docs/specification/margo-management-interface/desired-state.md +docs/specification/applications/application-description.md *.code-workspace -generated -merged diff --git a/AGENTS.md b/AGENTS.md index 45a880fc..b70c7d68 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -10,19 +10,7 @@ The final HTML documentation is built with [MkDocs](https://www.mkdocs.org/) usi ``` . -├── src/specification/ # Legacy per-resource LinkML schemas + Jinja2 templates + examples -│ ├── applications/ -│ │ ├── application-description.linkml.yaml -│ │ └── resources/ -│ │ ├── class.md.jinja2 -│ │ ├── index.md.jinja2 -│ │ └── examples/{valid,invalid}/ -│ └── margo-management-interface/ -│ ├── desired-state.linkml.yaml -│ └── resources/ -│ ├── index.md.jinja2 -│ └── examples/{valid,invalid}/ -├── data-model/ # Aggregate data model (current source of truth) +├── model/ # Aggregate data model (current source of truth) │ ├── margo-data-model.linkml.yaml # Top-level schema aggregating all sub-schemas │ ├── application-description.linkml.yaml │ ├── application-deployment.linkml.yaml @@ -31,29 +19,37 @@ The final HTML documentation is built with [MkDocs](https://www.mkdocs.org/) usi │ ├── deployment-status.linkml.yaml │ ├── margo-resources.linkml.yaml │ ├── margo-deployments.linkml.yaml -│ ├── tools/ # Generation & validation scripts -│ │ ├── generate-all.bash # Runs all generators in sequence -│ │ ├── generate-docs.bash # Generates MarkDown from LinkML -│ │ ├── generate-json-schemas.bash # Generates JSON-Schema artifacts -│ │ ├── generate-openapi.bash # Generates OpenAPI spec -│ │ ├── generate-class-diagram.bash # Generates PlantUML class diagrams -│ │ ├── check-examples.bash # Validates schemas and examples -│ │ └── configurations/ # Per-spec JSON configs -│ │ ├── application-deployment.json -│ │ ├── application-description.json -│ │ ├── deployment-status.json -│ │ ├── desired-state-manifest.json -│ │ └── device-capabilities.json -│ ├── generation-gap.md # Differences between pre-draft and generated OpenAPI spec -│ └── resources/ -│ ├── examples/{valid,invalid}/ # Valid and invalid example files -│ ├── markdown-templates/ # Templates for the aggregate data-model docs -│ └── markdown-templates_main-classes/ # Templates for per-resource docs -├── doc-generation/ # Legacy scripts (superseded by data-model/tools/) -├── system-design/ # Manually-authored + generated MarkDown (copied into merged/ by generate-docs.bash) +│ ├── generation-gap.md # Differences between pre-draft and generated OpenAPI spec +│ ├── examples/{valid,invalid}/ # Valid and invalid example files +│ └── diagrams/ # Static PNG diagrams +├── tools/ # Generation & validation scripts +│ ├── generate-all.bash # Runs all generators in sequence +│ ├── generate-docs.bash # Generates MarkDown from LinkML +│ ├── generate-json-schemas.bash # Generates JSON-Schema artifacts +│ ├── generate-openapi.bash # Generates OpenAPI spec +│ ├── generate-class-diagram.bash # Generates PlantUML class diagrams +│ ├── check-examples.bash # Validates schemas and examples +│ ├── openapigen.py # Custom OpenAPI generator +│ ├── configurations/ # Per-spec JSON configs +│ │ ├── application-deployment.json +│ │ ├── application-description.json +│ │ ├── deployment-status.json +│ │ ├── desired-state-manifest.json +│ │ └── device-capabilities.json +│ └── templates/ +│ ├── model/ # Templates for the aggregate data-model docs +│ ├── main-classes/ # Templates for per-resource docs +│ └── openapi/ +│ └── workload-management-api-1.0.0.openapi.yaml # OpenAPI template +├── docs/ # Manually-authored + generated MarkDown (copied into build/site/ by generate-docs.bash) │ └── specification/ # ← generated .md files land here -├── generated/ # Additional generated artifacts (diagrams, OpenAPI, JSON-Schema, etc.) -├── merged/ # Merged MarkDown tree used by mkdocs build +├── build/ # Generated artifacts (tracked in git) +│ ├── artifacts/ # diagrams, OpenAPI, JSON-Schema, intermediate markdown +│ └── site/ # Merged MarkDown tree used by mkdocs build +├── legacy/ # Archived superseded trees +│ ├── doc-generation/ # Legacy scripts (superseded by tools/) +│ ├── src-specification/ # Legacy per-resource schemas + templates + examples +│ └── validate-openapi.py # One-shot migration aid: compares generated spec vs pre-draft branch ├── mkdocs.yml # MkDocs configuration └── pyproject.toml # Python dependencies (linkml>=1.11.0, mkdocs, etc.) ``` @@ -81,20 +77,20 @@ pip install ./pyproject.toml ### Validate LinkML schemas and examples ```bash -data-model/tools/check-examples.bash +tools/check-examples.bash ``` This script: -- Reads each config from `data-model/tools/configurations/*.json` +- Reads each config from `tools/configurations/*.json` - Validates the corresponding LinkML schema -- Validates valid examples in `data-model/resources/examples/valid/` against the schema -- Validates that invalid examples in `data-model/resources/examples/invalid/` are correctly rejected +- Validates valid examples in `model/examples/valid/` against the schema +- Validates that invalid examples in `model/examples/invalid/` are correctly rejected - Exits non-zero if any check fails ### Generate all artifacts ```bash -data-model/tools/generate-all.bash +tools/generate-all.bash ``` This runs all generators in sequence: class diagrams, JSON-Schemas, OpenAPI, and MarkDown docs. @@ -102,38 +98,38 @@ This runs all generators in sequence: class diagrams, JSON-Schemas, OpenAPI, and ### Generate MarkDown from LinkML ```bash -data-model/tools/generate-docs.bash +tools/generate-docs.bash ``` This script: -- Generates per-resource MarkDown using `data-model/resources/markdown-templates_main-classes/` -- Generates the full data model MarkDown using `data-model/resources/markdown-templates/` +- Generates per-resource MarkDown using `tools/templates/main-classes/` +- Generates the full data model MarkDown using `tools/templates/model/` - Copies generated diagrams and OpenAPI spec into the merged tree -- Copies everything from `system-design/` and `generated/` into `merged/` (which is what `mkdocs build` reads) +- Copies everything from `docs/` and `build/artifacts/` into `build/site/` (which is what `mkdocs build` reads) ### Generate JSON-Schemas ```bash -data-model/tools/generate-json-schemas.bash +tools/generate-json-schemas.bash ``` -Generates one `.schema.json` file per resource schema into `generated/json-schemas/`. +Generates one `.schema.json` file per resource schema into `build/artifacts/json-schemas/`. ### Generate OpenAPI spec ```bash -data-model/tools/generate-openapi.bash +tools/generate-openapi.bash ``` -Generates `workload-management-api-1.0.0.openapi.yaml` into `generated/openapi/`. +Generates `workload-management-api-1.0.0.openapi.yaml` into `build/artifacts/openapi/`. ### Generate class diagrams ```bash -data-model/tools/generate-class-diagram.bash +tools/generate-class-diagram.bash ``` -Generates SVG/PNG class diagrams via PlantUML into `generated/diagrams/`. +Generates SVG/PNG class diagrams via PlantUML into `build/artifacts/diagrams/`. ### Build HTML documentation @@ -149,47 +145,47 @@ Understanding how artifacts flow through the pipeline is essential when modifyin ### Artifact flow ``` -data-model/*.linkml.yaml (source of truth — LinkML schemas) +model/*.linkml.yaml (source of truth — LinkML schemas) │ - ├──► data-model/tools/check-examples.bash - │ uses: data-model/tools/configurations/*.json - │ validates: data-model/resources/examples/{valid,invalid}/ + ├──► tools/check-examples.bash + │ uses: tools/configurations/*.json + │ validates: model/examples/{valid,invalid}/ │ - ├──► data-model/tools/generate-docs.bash (orchestrator) + ├──► tools/generate-docs.bash (orchestrator) │ │ - │ ├──► linkml generate doc (per-resource, using markdown-templates_main-classes/) - │ │ → generated/markdown_main-classes/.md - │ │ → moved into merged/specification/{applications,margo-management-interface}/ + │ ├──► linkml generate doc (per-resource, using templates/main-classes/) + │ │ → build/artifacts/main-classes/.md + │ │ → moved into build/site/specification/{applications,margo-management-interface}/ │ │ - │ ├──► linkml generate doc (aggregate, using markdown-templates/) - │ │ → generated/markdown/* - │ │ → moved into merged/data-model/ + │ ├──► linkml generate doc (aggregate, using templates/model/) + │ │ → build/artifacts/markdown/* + │ │ → moved into build/site/data-model/ │ │ │ ├──► generate-class-diagram.bash - │ │ → generated/diagrams/DataModel-ClassDiagram.{svg,png} - │ │ → copied into merged/figures/ + │ │ → build/artifacts/diagrams/DataModel-ClassDiagram.{svg,png} + │ │ → copied into build/site/figures/ │ │ │ ├──► generate-openapi.bash - │ │ → generated/openapi/workload-management-api-1.0.0.openapi.yaml - │ │ → moved into merged/specification/margo-management-interface/ + │ │ → build/artifacts/openapi/workload-management-api-1.0.0.openapi.yaml + │ │ → moved into build/site/specification/margo-management-interface/ │ │ - │ └──► JSON schemas copied into merged/json-schemas/ + │ └──► JSON schemas copied into build/site/json-schemas/ │ - └──► data-model/tools/generate-json-schemas.bash (standalone) - → generated/json-schemas/*.schema.json + └──► tools/generate-json-schemas.bash (standalone) + → build/artifacts/json-schemas/*.schema.json -mkdocs build reads from merged/ → site/ +mkdocs build reads from build/site/ → site/ ``` Key points: -- `mkdocs build` reads from `merged/`, not directly from `system-design/` or `generated/`. The `generate-docs.bash` script copies everything into `merged/` first. +- `mkdocs build` reads from `build/site/`, not directly from `docs/` or `build/artifacts/`. The `generate-docs.bash` script copies everything into `build/site/` first. - The per-resource Markdown generation and the aggregate data-model generation use **different template directories** and produce output in **different locations**. -- `check-examples.bash` reads the list of schemas from `data-model/tools/configurations/*.json`, but `generate-docs.bash` and `generate-json-schemas.bash` have **hardcoded** schema lists. When adding a new resource, you must update all three. +- `check-examples.bash` reads the list of schemas from `tools/configurations/*.json`, but `generate-docs.bash` and `generate-json-schemas.bash` have **hardcoded** schema lists. When adding a new resource, you must update all three. ### OpenAPI generation -The OpenAPI spec is generated by `data-model/tools/openapigen.py`, which: -- Reads an OpenAPI template (`data-model/tools/workload-management-api-1.0.0.openapi.yaml`) that defines endpoints, security schemes, and request/response structure. +The OpenAPI spec is generated by `tools/openapigen.py`, which: +- Reads an OpenAPI template (`tools/templates/openapi/workload-management-api-1.0.0.openapi.yaml`) that defines endpoints, security schemes, and request/response structure. - Fills in `components/schemas` from the LinkML model using the JSON-Schema generator. - Only classes referenced by the endpoints in the template are included in the output. @@ -197,30 +193,32 @@ When adding a new resource to the API, you must update both the LinkML schema ** ## Legacy Code -The `src/specification/` directory contains the original per-resource LinkML schemas, templates, and examples. These are **legacy** and no longer the source of truth. The current source of truth is `data-model/`. Do not modify files under `src/specification/` unless specifically instructed. +The `legacy/src-specification/` directory contains the original per-resource LinkML schemas, templates, and examples. These are **legacy** and no longer the source of truth. The current source of truth is `model/`. Do not modify files under `legacy/src-specification/` unless specifically instructed. -The `doc-generation/` directory contains the original generation and validation scripts. These have been superseded by `data-model/tools/`. Do not use the old scripts. +The `legacy/doc-generation/` directory contains the original generation and validation scripts. These have been superseded by `tools/`. Do not use the old scripts. + +The `legacy/validate-openapi.py` script is a one-shot migration aid that compares the generated OpenAPI spec against the hand-written spec on the `pre-draft` branch. It becomes obsolete once `pre-draft` is fully replaced by the generated spec, at which point it should be deleted. ## How to Modify the LinkML Data Model ### Step 1: Edit the schema -The **source of truth** for LinkML-specified resources lives under `data-model/`. Each resource has its own `.linkml.yaml` file. The aggregate schema `data-model/margo-data-model.linkml.yaml` imports all sub-schemas. +The **source of truth** for LinkML-specified resources lives under `model/`. Each resource has its own `.linkml.yaml` file. The aggregate schema `model/margo-data-model.linkml.yaml` imports all sub-schemas. When making changes: 1. Edit the relevant `.linkml.yaml` file to add/modify classes, attributes, enums, slots, or types. -2. Add or update valid examples in `data-model/resources/examples/valid/` to cover the new or changed model elements. -3. Add invalid counter-examples in `data-model/resources/examples/invalid/` if new validation rules are introduced. +2. Add or update valid examples in `model/examples/valid/` to cover the new or changed model elements. +3. Add invalid counter-examples in `model/examples/invalid/` if new validation rules are introduced. 4. If the change affects rendering, update the Jinja2 templates: - - `data-model/resources/markdown-templates_main-classes/` — for per-resource specification pages (attribute tables, examples, JSON-Schema links). - - `data-model/resources/markdown-templates/` — for the aggregate data-model documentation (class hierarchy, diagrams). -5. If the change adds new API endpoints, update the OpenAPI template `data-model/tools/workload-management-api-1.0.0.openapi.yaml`. + - `tools/templates/main-classes/` — for per-resource specification pages (attribute tables, examples, JSON-Schema links). + - `tools/templates/model/` — for the aggregate data-model documentation (class hierarchy, diagrams). +5. If the change adds new API endpoints, update the OpenAPI template `tools/templates/openapi/workload-management-api-1.0.0.openapi.yaml`. ### Step 2: Validate ```bash -data-model/tools/check-examples.bash +tools/check-examples.bash ``` Fix any validation errors before proceeding. @@ -228,12 +226,12 @@ Fix any validation errors before proceeding. ### Step 3: Regenerate artifacts ```bash -data-model/tools/generate-all.bash +tools/generate-all.bash ``` This runs all generators in sequence. Alternatively, run individual generators if you only need to update one artifact type. -The generated `.md` files land under `system-design/specification/` and `system-design/data-model/`. Generated JSON-Schemas, OpenAPI specs, and diagrams land under `generated/`. Verify the output looks correct. +The generated `.md` files land under `docs/specification/` and `docs/data-model/`. Generated JSON-Schemas, OpenAPI specs, and diagrams land under `build/artifacts/`. Verify the output looks correct. ### Step 4: Preview the site @@ -245,23 +243,23 @@ Open http://127.0.0.1:8000 and navigate to the relevant specification page to vi ### Step 5: Commit -Include the modified LinkML schema, updated examples, and all regenerated artifacts (`system-design/`, `generated/`) in your commit. These directories are tracked in git and must reflect the generated output. +Include the modified LinkML schema, updated examples, and all regenerated artifacts (`docs/`, `build/`) in your commit. These directories are tracked in git and must reflect the generated output. ## Adding a New LinkML-Specified Resource -1. Add the LinkML schema: `data-model/.linkml.yaml`. -2. Add valid examples: `data-model/resources/examples/valid/-NNN.{yaml,json}`. -3. Add invalid counter-examples: `data-model/resources/examples/invalid/-NNN.{yaml,json}`. -4. Add a configuration file in `data-model/tools/configurations/.json` with: +1. Add the LinkML schema: `model/.linkml.yaml`. +2. Add valid examples: `model/examples/valid/-NNN.{yaml,json}`. +3. Add invalid counter-examples: `model/examples/invalid/-NNN.{yaml,json}`. +4. Add a configuration file in `tools/configurations/.json` with: ```json { - "root": "data-model", + "root": "model", "targetclass": "", "schemafile": ".linkml.yaml", "markdowndoc": ".md" } ``` -5. Add an import in `data-model/margo-data-model.linkml.yaml`. +5. Add an import in `model/margo-data-model.linkml.yaml`. 6. Add the new MarkDown file to `mkdocs.yml` under the `nav` section. 7. Add the schema name to the hardcoded lists in `generate-docs.bash` (line 41) and `generate-json-schemas.bash` (line 24). 8. Run validation and generation as described above. @@ -285,8 +283,8 @@ There are two separate sets of templates that serve different purposes: | Template directory | Used by | Produces | Output location | | --- | --- | --- | --- | -| `data-model/resources/markdown-templates_main-classes/` | `generate-docs.bash` (per-resource loop) | One `.md` per schema with attribute tables, examples, JSON-Schema links | `merged/specification/{applications,margo-management-interface}/` | -| `data-model/resources/markdown-templates/` | `generate-docs.bash` (aggregate step) | Full data model overview with class hierarchy, diagrams, all-class listing | `merged/data-model/` | +| `tools/templates/main-classes/` | `generate-docs.bash` (per-resource loop) | One `.md` per schema with attribute tables, examples, JSON-Schema links | `build/site/specification/{applications,margo-management-interface}/` | +| `tools/templates/model/` | `generate-docs.bash` (aggregate step) | Full data model overview with class hierarchy, diagrams, all-class listing | `build/site/data-model/` | Each directory contains an `index.md.jinja2` (the main page) and may contain `class.md.jinja2` (individual class detail pages). When modifying rendering, determine which template directory to edit based on the table above. @@ -300,8 +298,8 @@ Each directory contains an `index.md.jinja2` (the main page) and may contain `cl The GitHub Actions pipeline (`.github/workflows/pages.yml`) runs: 1. **Quality checks** — validates `pyproject.toml` and `poetry.lock` consistency -2. **Validation** — runs `data-model/tools/check-examples.bash` -3. **Document generation** — runs `data-model/tools/generate-docs.bash` +2. **Validation** — runs `tools/check-examples.bash` +3. **Document generation** — runs `tools/generate-docs.bash` 4. **Pages build & deploy** — deploys to GitHub Pages on the `pre-draft` branch PR checks (`.github/workflows/pr-checks.yml`) verify that commits are signed off. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2ca5d283..67889e18 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -138,13 +138,13 @@ Once the required tools have been installed as documented in the [Preparation](# As mentioned in a previous section, as of now only some of the resources are being specified in LinkML and are being used to generate the MarkDown documents. Steps 1. and 2. only apply to those documents. -Currently two Bash scripts are being provided the directory `doc-generation` to simplify steps 1. and 2. +Currently several Bash scripts are being provided in the directory `tools` to simplify steps 1. and 2. -The input for the generation of the MarkDown documents is provided in the directory `[src](./src/)`. +The input for the generation of the MarkDown documents is provided in the directory [model](./model/). #### Validate input for MarkDown Generation -The script [check-examples.bash](./doc-generation/check-examples.bash) checks: +The script [check-examples.bash](./tools/check-examples.bash) checks: - the validity of the LinkML resource definitions (AKA schemas), and - the validity of provided examples and counter-examples according the resource definitions @@ -153,9 +153,9 @@ The script [check-examples.bash](./doc-generation/check-examples.bash) checks: #### Generate MarkDown Documents -The script [generate-documentation.bash](./doc-generation/generate-documentation.bash) generates MarkDown documents for the resources specified in LinkML format. +The script [generate-docs.bash](./tools/generate-docs.bash) generates MarkDown documents for the resources specified in LinkML format. -The LinkML specification documents can be found in the directory [src](./src/) and the resulting MarkDown documents are integrated with the other MarkDown documents in the directory [system-design](./system-design/). +The LinkML specification documents can be found in the directory [model](./model/) and the resulting MarkDown documents are integrated with the other MarkDown documents in the directory [docs](./docs/). #### Generate HTML Documents diff --git a/doc-generation/check-openapi.bash b/doc-generation/check-openapi.bash deleted file mode 100755 index 248a97c2..00000000 --- a/doc-generation/check-openapi.bash +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env bash - -set -eu - -THIS_SCRIPT="$(readlink -f "${0}")" -THIS_DIR="$(dirname "${THIS_SCRIPT}")" -ROOT_DIR="$(dirname "${THIS_DIR}")" -DOCS_GEN="${THIS_DIR}" -SPEC_DIR="${SPEC_DIR:-${ROOT_DIR}/system-design/specification}" - -if command -v poetry >/dev/null 2>&1 ; then - RUN="poetry run" -else - if ! python3 -c 'import openapi_spec_validator' >/dev/null 2>&1 ; then - echo "The Python module 'openapi_spec_validator' is missing" - exit 1 - fi - RUN="" -fi - -echo "Specification folder: ${SPEC_DIR}" - -DOCUMENTS=() -while IFS= read -r DOCUMENT ; do - echo "OpenAPI document: ${DOCUMENT}" - DOCUMENTS+=("${DOCUMENT}") -done < <(find "${SPEC_DIR}" -type f \ - \( -name '*-api-*.yaml' -o -name '*-api-*.yml' \) | sort) - -# A document with a damaged first line has no readable 'openapi' key. Discovery -# by file name therefore finds it, and discovery by content does not. -if [ "${#DOCUMENTS[@]}" -eq 0 ] ; then - echo "ERROR: no OpenAPI document was found under '${SPEC_DIR}'." - echo "ERROR: check the name pattern in this script." - exit 1 -fi - -${RUN} python3 "${DOCS_GEN}/check_openapi.py" "${DOCUMENTS[@]}" diff --git a/doc-generation/check_openapi.py b/doc-generation/check_openapi.py deleted file mode 100644 index 5b12d067..00000000 --- a/doc-generation/check_openapi.py +++ /dev/null @@ -1,76 +0,0 @@ -"""Validate the OpenAPI documents of the Margo specification.""" - -import sys - -from openapi_spec_validator import ( - OpenAPIV30SpecValidator, - OpenAPIV31SpecValidator, - OpenAPIV32SpecValidator, -) -from openapi_spec_validator.readers import read_from_filename - -VALIDATORS = { - "3.0": OpenAPIV30SpecValidator, - "3.1": OpenAPIV31SpecValidator, - "3.2": OpenAPIV32SpecValidator, -} - - -def check_document(path): - """Validate one document. Return True if the document is valid.""" - try: - spec, base_uri = read_from_filename(path) - except Exception as error: - print(f"ERROR: {path}: the file is not readable: {error}") - return False - - if not isinstance(spec, dict): - print(f"ERROR: {path}: the document is not a YAML mapping.") - return False - - declared = spec.get("openapi") - if declared is None: - # A damaged first line hides the key. Print the keys with ascii() so - # that an invisible character becomes visible. - keys = ", ".join(ascii(key) for key in spec) - print(f"ERROR: {path}: the top-level 'openapi' version field is absent.") - print(f"ERROR: {path}: the top-level keys are: {keys}") - return False - - if not isinstance(declared, str): - # An unquoted value such as "openapi: 3.1" parses as a number. - print(f"ERROR: {path}: the 'openapi' version must be a string.") - print(f"ERROR: {path}: the value {declared!r} is not a string.") - return False - - version = declared[:3] - if version not in VALIDATORS: - supported = ", ".join(sorted(VALIDATORS)) - print(f"ERROR: {path}: the 'openapi' version {declared!r} is not supported.") - print(f"ERROR: {path}: this check supports {supported}.") - return False - - validator = VALIDATORS[version](spec, base_uri=base_uri) - errors = list(validator.iter_errors()) - if not errors: - print(f"ok: {path} is a valid OpenAPI {version} document") - return True - - for error in errors: - where = "/".join(str(part) for part in error.absolute_path) - print(f"ERROR: {path}: {where or '(document root)'}: {error.message}") - return False - - -def main(paths): - if not paths: - print("ERROR: no OpenAPI document was given") - return 1 - results = [check_document(path) for path in paths] - if all(results): - return 0 - return 1 - - -if __name__ == "__main__": - sys.exit(main(sys.argv[1:])) diff --git a/system-design/CNAME b/docs/CNAME similarity index 100% rename from system-design/CNAME rename to docs/CNAME diff --git a/system-design/assets/favicon.ico b/docs/assets/favicon.ico similarity index 100% rename from system-design/assets/favicon.ico rename to docs/assets/favicon.ico diff --git a/system-design/assets/margo_white.svg b/docs/assets/margo_white.svg similarity index 100% rename from system-design/assets/margo_white.svg rename to docs/assets/margo_white.svg diff --git a/system-design/assets/svg-pan-zoom-init.js b/docs/assets/svg-pan-zoom-init.js similarity index 100% rename from system-design/assets/svg-pan-zoom-init.js rename to docs/assets/svg-pan-zoom-init.js diff --git a/system-design/assets/svg-pan-zoom.min.js b/docs/assets/svg-pan-zoom.min.js similarity index 100% rename from system-design/assets/svg-pan-zoom.min.js rename to docs/assets/svg-pan-zoom.min.js diff --git a/system-design/assets/swagger-ui-bundle.js b/docs/assets/swagger-ui-bundle.js similarity index 100% rename from system-design/assets/swagger-ui-bundle.js rename to docs/assets/swagger-ui-bundle.js diff --git a/system-design/assets/swagger-ui-standalone-preset.js b/docs/assets/swagger-ui-standalone-preset.js similarity index 100% rename from system-design/assets/swagger-ui-standalone-preset.js rename to docs/assets/swagger-ui-standalone-preset.js diff --git a/system-design/assets/swagger-ui.css b/docs/assets/swagger-ui.css similarity index 100% rename from system-design/assets/swagger-ui.css rename to docs/assets/swagger-ui.css diff --git a/system-design/css/margo.css b/docs/css/margo.css similarity index 100% rename from system-design/css/margo.css rename to docs/css/margo.css diff --git a/system-design/index.md b/docs/index.md similarity index 100% rename from system-design/index.md rename to docs/index.md diff --git a/system-design/specification/applications/.gitkeep b/docs/specification/applications/.gitkeep similarity index 100% rename from system-design/specification/applications/.gitkeep rename to docs/specification/applications/.gitkeep diff --git a/system-design/specification/applications/application-registry.md b/docs/specification/applications/application-registry.md similarity index 100% rename from system-design/specification/applications/application-registry.md rename to docs/specification/applications/application-registry.md diff --git a/system-design/specification/margo-devices/device-requirements.md b/docs/specification/margo-devices/device-requirements.md similarity index 100% rename from system-design/specification/margo-devices/device-requirements.md rename to docs/specification/margo-devices/device-requirements.md diff --git a/system-design/specification/margo-management-interface/api-requirements-and-security.md b/docs/specification/margo-management-interface/api-requirements-and-security.md similarity index 100% rename from system-design/specification/margo-management-interface/api-requirements-and-security.md rename to docs/specification/margo-management-interface/api-requirements-and-security.md diff --git a/system-design/specification/margo-management-interface/deployment-status-api.md b/docs/specification/margo-management-interface/deployment-status-api.md similarity index 100% rename from system-design/specification/margo-management-interface/deployment-status-api.md rename to docs/specification/margo-management-interface/deployment-status-api.md diff --git a/system-design/specification/margo-management-interface/deployment-status.md b/docs/specification/margo-management-interface/deployment-status.md similarity index 100% rename from system-design/specification/margo-management-interface/deployment-status.md rename to docs/specification/margo-management-interface/deployment-status.md diff --git a/system-design/specification/margo-management-interface/desired-state.md b/docs/specification/margo-management-interface/desired-state.md similarity index 100% rename from system-design/specification/margo-management-interface/desired-state.md rename to docs/specification/margo-management-interface/desired-state.md diff --git a/system-design/specification/margo-management-interface/device-capabilities-api.md b/docs/specification/margo-management-interface/device-capabilities-api.md similarity index 100% rename from system-design/specification/margo-management-interface/device-capabilities-api.md rename to docs/specification/margo-management-interface/device-capabilities-api.md diff --git a/system-design/specification/margo-management-interface/device-capabilities.md b/docs/specification/margo-management-interface/device-capabilities.md similarity index 100% rename from system-design/specification/margo-management-interface/device-capabilities.md rename to docs/specification/margo-management-interface/device-capabilities.md diff --git a/system-design/specification/margo-management-interface/management-interface-swagger.md b/docs/specification/margo-management-interface/management-interface-swagger.md similarity index 100% rename from system-design/specification/margo-management-interface/management-interface-swagger.md rename to docs/specification/margo-management-interface/management-interface-swagger.md diff --git a/docs/specification/margo-management-interface/workload-management-api-1.0.0.yaml b/docs/specification/margo-management-interface/workload-management-api-1.0.0.yaml new file mode 100644 index 00000000..f47a1d29 --- /dev/null +++ b/docs/specification/margo-management-interface/workload-management-api-1.0.0.yaml @@ -0,0 +1,995 @@ +openapi: 3.0.3 +info: + title: Margo Workload Management API + version: 1.0.0 + description: + API for managing workloads on Margo-compliant edge devices. + Includes the APIs for exchanging desired state and current state. + Communication is secured using server-side TLS (TLS 1.3 preferred), + and payloads are signed using X.509 certificates. + +servers: + - url: https://wfm.margo.org/ + description: Workload Fleet Manager API + +security: + - PayloadSignature: [] + +paths: + /api/v1/onboarding/certificate: + get: + summary: Download Root CA certificate + security: [] + responses: + '200': + description: Root CA certificate + content: + application/json: + schema: + type: object + properties: + certificate: + type: string + description: Base64-encoded certificate text + /api/v1/onboarding: + post: + requestBody: + content: + application/json: + schema: + type: object + required: [apiVersion, kind, certificate] + properties: + apiVersion: + type: string + description: API version identifier + kind: + type: string + enum: [OnboardingRequest] + description: Resource kind + certificate: + description: Base64-encoded client certificate + type: string + required: true + responses: + '201': + content: + application/json: + schema: + properties: + clientId: + type: string + type: object + description: New client onboarded successfully. + '400': + content: + application/json: + schema: + properties: + error: + example: Invalid certificate + type: string + type: object + description: Invalid certificate format or structure. + '403': + content: + application/json: + schema: + properties: + error: + example: Client rejected + type: string + type: object + description: Client certificate not trusted or client rejected. + security: + - PayloadSignature: [] + summary: Complete onboarding with client certificate + + /api/v1/clients/{clientId}/capabilities/{deviceId}: + post: + summary: Report device capabilities + security: + - PayloadSignature: [] + parameters: + - name: clientId + in: path + required: true + schema: + type: string + - name: deviceId + in: path + required: true + schema: + $ref: '#/components/schemas/DeviceId' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/DeviceCapabilitiesManifest' + responses: + '201': + description: Capabilities reported successfully + '400': + description: Missing or invalid content-digest header. Ensure the SHA256 hash of the payload is included. + '401': + description: Signature verification failed. Ensure you are signing with the correct X.509 private key. + '403': + description: Client certificate is not trusted or has been revoked. + '404': + description: No client with the given `clientID` was found. + '422': + description: Request body includes a semantic error. + put: + summary: Update device capabilities (Update) + security: + - PayloadSignature: [] + parameters: + - name: clientId + in: path + required: true + schema: + type: string + - name: deviceId + in: path + required: true + schema: + $ref: '#/components/schemas/DeviceId' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/DeviceCapabilitiesManifest' + responses: + '201': + description: Capabilities reported successfully + '400': + description: Missing or invalid content-digest header. Ensure the SHA256 hash of the payload is included. + '401': + description: Signature verification failed. Ensure you are signing with the correct X.509 private key. + '403': + description: Client certificate is not trusted or has been revoked. + '404': + description: No client with the given `clientID` was found. + '422': + description: Request body includes a semantic error. + delete: + summary: Remove device (Unregister) + security: + - PayloadSignature: [] + parameters: + - name: clientId + in: path + required: true + schema: + type: string + - name: deviceId + in: path + required: true + schema: + $ref: '#/components/schemas/DeviceId' + responses: + '204': + description: Device capabilities removed successfully + '400': + description: Missing or invalid content-digest header. Ensure the SHA256 hash of the payload is included. + '401': + description: Signature verification failed. Ensure you are signing with the correct X.509 private key. + '403': + description: Client certificate is not trusted or has been revoked. + '404': + description: Client or device not found. + /api/v1/clients/{clientId}/bundles/{digest}: + get: + summary: Retrieve bundle information for a specific device and digest + security: + - PayloadSignature: [] + parameters: + - name: clientId + in: path + required: true + schema: + type: string + description: Unique identifier of the device-client + - name: digest + in: path + required: true + schema: + type: string + description: Content-addressable digest of the bundle archive. MUST conform to the 'digest' attribute in the Digest Specification and MUST equal the digest computed over the exact sequence of bytes (per Exact Bytes Rule) in the HTTP 200 OK response body. If the server cannot produce content whose digest matches this value it MUST return 404 Not Found. + - in: header + name: If-None-Match + required: false + schema: + type: string + description: Quoted ETag (same as digest) previously returned for this bundle. + responses: + '200': + description: Bundle archive (immutable) + headers: + ETag: + schema: + type: string + description: New ETag for the returned manifest + Cache-Control: + schema: + type: string + description: public, max-age=31536000, immutable + content: + application/vnd.margo.bundle.v1+tar+gzip: + schema: + type: string + format: binary + description: Gzip-compressed tar containing one YAML file per deployment. + '304': + description: Representation not modified + '404': + description: Bundle not found for the given digest + '400': + description: Invalid request. + # TBD + # '500': + # $ref: '#/components/responses/ErrorResponse' + + /api/v1/clients/{clientId}/deployments: + get: + summary: Retrieve the complete desired state for all workloads assigned to a device + security: + - PayloadSignature: [] + parameters: + - name: clientId + in: path + required: true + schema: + type: string + description: The unique identifier of the Edge Compute Device making the request + - name: If-None-Match + in: header + required: false + schema: + type: string + description: > + ETag value of the last successfully synced manifest. The ETag is returned to the client from the /deployments endpoint, it is the digest of the state manifest. + - name: Accept + in: header + required: false + schema: + type: string + description: > + Indicates which manifest formats the client supports. + Supported values: application/vnd.margo.manifest.v1+json. + responses: + '200': + description: Manifest returned in the negotiated format + headers: + Content-Type: + schema: + type: string + description: Format of the returned manifest + ETag: + schema: + type: string + description: New ETag for the returned manifest + content: + application/vnd.margo.manifest.v1+json: + schema: + $ref: '#/components/schemas/UnsignedAppStateManifest' + '304': + description: Not Modified - Manifest has not changed + '406': + description: Not Acceptable - Server cannot generate a response matching the Accept header + + + /api/v1/clients/{clientId}/deployments/{deploymentId}/{digest}: + get: + summary: Retrieve an individual ApplicationDeployment YAML file + security: + - PayloadSignature: [] + description: > + This endpoint is used by the client to fetch the YAML for a single ApplicationDeployment after it has processed a new State Manifest and identified a small number of new or updated deployments. This allows for highly efficient, incremental updates without needing to download the full bundle. + To make individual workload retrievals race-free and cache-friendly, this endpoint is content-addressable: the digest of the expected YAML is part of the URL. This guarantees immutability of the fetched resource and prevents a time-of-check / time-of-use race where a deployment changes between manifest retrieval and content fetch. + parameters: + - name: clientId + in: path + required: true + schema: + type: string + description: Unique identifier of the Edge Compute Device + - name: deploymentId + in: path + required: true + schema: + type: string + description: Unique identifier for the application deployment + - name: digest + in: path + required: true + schema: + type: string + description: > + Content-addressable digest of the ApplicationDeployment YAML file. MUST conform to the Digest Specification and MUST equal the digest computed over the exact sequence of bytes (per Exact Bytes Rule) in the HTTP 200 OK response body. If the server cannot produce content whose digest matches this value it MUST return 404 Not Found. + - name: If-None-Match + in: header + required: false + schema: + type: string + description: > + Optional ETag for caching. The ETag is returned to the client from the /deployments endpoint, it is the digest of the state manifest. + - name: Accept-Encoding + in: header + required: false + schema: + type: string + description: Indicates supported compression formats (e.g., gzip, br) + responses: + '200': + description: > + The response body is the raw ApplicationDeployment YAML file (Content-Type: application/yaml). The content MUST match the {digest} path segment; the server MUST return 404 if it does not have the exact digest referenced. + headers: + Content-Type: + schema: + type: string + description: application/yaml + ETag: + schema: + type: string + description: > + The ETag is returned to the client from the /deployments endpoint, it is the digest of the state manifest. + Cache-Control: + schema: + type: string + description: public, max-age=31536000, immutable + Vary: + schema: + type: string + description: Accept-Encoding + content: + application/yaml: + schema: + type: string + description: Raw YAML content of the ApplicationDeployment + '404': + description: Deployment not found for the given digest + + /api/v1/clients/{clientId}/deployments/{deploymentId}/status: + post: + summary: Report deployment status + security: + - PayloadSignature: [] + parameters: + - name: clientId + in: path + required: true + schema: + type: string + - name: deploymentId + in: path + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/DeploymentStatusManifest' + responses: + '200': + description: The deployment status was added, or updated, successfully. + '400': + description: Missing or invalid content-digest header. Ensure the SHA256 hash of the base64-encoded payload is included. + '401': + description: Signature verification failed. Ensure you are signing with the correct X.509 private key. + '403': + description: Client certificate is not trusted or has been revoked. + '422': + description: Request body includes a semantic error. + +components: + securitySchemes: + # TODO: fix this as we are following RFC 9421, instead of a custom signature header field + PayloadSignature: + type: apiKey + in: header + name: X-Payload-Signature + description: > + Base64-encoded payload signature using SHA-256 and device certificate. + Format: public_key;digital_signature + + # Modifications compared to pre-data-model stage: + # - ManifestVersion INLINED into UnsignedAppStateManifest(OpenAPI)/DesiredStateManifest(LinkML) + # - appDeploymentParams INLINED into appDeploymentSpec(OpenAPI)/Spec(LinkML) + schemas: + appDeploymentProfile: + type: object + description: Represents a deployment configuration for the application. + properties: + type: + type: string + description: Defines the type of this deployment configuration for the application. The + allowed values are `helm.v3`, to indicate the deployment profile's format + is Helm version 3, and `compose` to indicate the deployment profile's format + is a Compose file. When installing the application on a device supporting + the Kubernetes platform, all `helm.v3` components, and only `helm.v3` components, + will be provided to the device in same order they are listed in the application + description file. When installing the application on a device supporting + Compose, all `compose` components, and only `compose` components, will be + provided to the device in the same order they are listed in the application + description file. The device will install the components in the same order + they are listed in the application description file. + pattern: ^(helm\.v3|compose)$ + components: + type: array + items: + $ref: '#/components/schemas/Component' + description: Component element indicating the components to deploy when installing + the application. See the [Component](#component-attributes) section below. + required: + - type + - components + Component: + type: object + description: A class representing a component of a deployment profile. + properties: + name: + type: string + description: A unique name used to identify the component package. For helm + installations the name will be used as the chart name. The name must be lower + case letters and numbers and MAY contain dashes. Uppercase letters, underscores + and periods MUST NOT be used. + properties: + $ref: '#/components/schemas/ComponentProperties' + description: A dictionary element specifying the component packages's deployment + details. See the [Component Properties](#componentproperties-attributes) + section below. + required: + - name + - properties + helmApplicationDeploymentProfileComponent: + type: object + description: '' + properties: + name: + type: string + description: A unique name used to identify the component package. For helm + installations the name will be used as the chart name. The name must be lower + case letters and numbers and MAY contain dashes. Uppercase letters, underscores + and periods MUST NOT be used. + properties: + $ref: '#/components/schemas/ComponentProperties' + description: A dictionary element specifying the component packages's deployment + details. See the [Component Properties](#componentproperties-attributes) + section below. + required: + - name + - properties + composeApplicationDeploymentProfileComponent: + type: object + description: '' + properties: + name: + type: string + description: A unique name used to identify the component package. For helm + installations the name will be used as the chart name. The name must be lower + case letters and numbers and MAY contain dashes. Uppercase letters, underscores + and periods MUST NOT be used. + properties: + $ref: '#/components/schemas/ComponentProperties' + description: A dictionary element specifying the component packages's deployment + details. See the [Component Properties](#componentproperties-attributes) + section below. + required: + - name + - properties + ComponentProperties: + type: object + description: Properties dictionary for component deployment details. + properties: + repository: + type: string + description: Repository location for the component. + revision: + type: string + description: Revision version for the component. + wait: + type: boolean + description: If True, indicates the device waits for the component installation + to complete. + timeout: + type: string + description: Time to wait for component installation to complete, formatted + as "##m##s". + packageLocation: + type: string + description: URL indicating the Compose package's location. + keyLocation: + type: string + description: URL for the public key used to validate a digitally signed package. + appParameterTarget: + type: object + description: Specifies where the parameter applies in the deployment. + properties: + pointer: + type: string + description: The name of the parameter in the deployment configuration. For + Helm deployments, this is the dot notation for the matching element in the + `values.yaml` file. This follows the same naming convention you would use + with the `--set` command line argument with the `helm install` command. For + compose deployments, this is the name of the environment variable to set. + components: + type: array + items: + type: string + description: Indicates which deployment profile [component](#component-attributes + the parameter target applies to. The component name specified here MUST match + a component name in the [deployment profiles](#deploymentprofile-attributes) + section. + required: + - pointer + - components + appDeploymentManifest: + type: object + description: A class representing the desired state of an entity. + properties: + apiVersion: + type: string + description: Identifier of the version of the API the object definition follows. + kind: + type: string + description: Must be `ApplicationDeployment`. + enum: + - ApplicationDeployment + metadata: + $ref: '#/components/schemas/appDeploymentMetadata' + description: Metadata element specifying characteristics about the application + deployment. See the [Metadata Attributes](#metadata-attributes) section below. + spec: + $ref: '#/components/schemas/appDeploymentSpec' + description: Spec element that defines deployment profile and parameters associated + with the application deployment. See the [Spec Attributes](#spec-attributes) + section below. + required: + - apiVersion + - kind + - metadata + - spec + appDeploymentMetadata: + type: object + description: Metadata associated with the desired state. + properties: + annotations: + $ref: '#/components/schemas/DeploymentAnnotations' + description: Defines the application ID and unique identifier associated to + the deployment specification. Needs to be assigned by the Workload Orchestration + Software. See the [Annotation Attributes](#annotations-attributes) section + below. + name: + type: string + description: When deploying to Kubernetes, the manifests name. The name is chosen + by the workload orchestration vendor and is not displayed anywhere. + namespace: + type: string + description: When deploying to Kubernetes, the namespace the manifest is added + under. The namespace is chosen by the workload orchestration solution vendor. + deviceId: + type: string + pattern: ^[A-Za-z0-9._~-]+(\/[A-Za-z0-9._~-]+)*(\/\*)?$ + required: + - annotations + - name + - namespace + - deviceId + DeploymentAnnotations: + type: object + description: A class representing annotations. + properties: + applicationId: + type: string + description: An identifier for the application. The id is used to help create + unique identifiers where required, such as namespaces. The id must be lower + case letters and numbers and MAY contain dashes. Uppercase letters, underscores + and periods MUST NOT be used. The id MUST NOT be more than 200 characters. + The applicationId MUST match the associated application package Metadata "id" + attribute. + pattern: ^[-a-z0-9]{1,200}$ + id: + type: string + description: The unique identifier UUID of the deployment specification. Needs + to be assigned by the Workload Orchestration Software. + pattern: ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$ + required: + - applicationId + - id + appParameterValue: + type: object + description: Defines a configurable parameter for the application. + properties: + name: + type: string + description: Name of the parameter. + value: + description: The parameter's default value. Accepted data types are string, + integer, double, boolean, array[string], array[integer], array[double], array[boolean]. + anyOf: + - type: boolean + - type: integer + - type: number + - type: string + targets: + type: array + items: + $ref: '#/components/schemas/appParameterTarget' + description: Used to indicate which component the value should be applied to + when installing, or updating, the application. See the [Target](#target-attributes) + section below. + required: + - targets + appDeploymentSpec: + type: object + description: Specification details of the desired state. + properties: + deploymentProfile: + $ref: '#/components/schemas/appDeploymentProfile' + description: Section that defines deployment details including type and components. + parameters: + type: object + description: Describes the configured parameters applied via the end-user. + required: + - deploymentProfile + - parameters + Resources: + type: object + description: Required resources element specifying the resources required to install + the application. + properties: + cpu: + $ref: '#/components/schemas/CPU' + description: CPU element specifying the CPU requirements for the application. + See the [CPU](#cpu-attributes) section below. + memory: + type: string + description: The minimum amount of memory required. The value is given in binary + units (`Ki` = Kibibytes, `Mi` = Mebibytes, `Gi` = Gibibytes). This is defined + by the application developer. After deployment of the application, the device + MUST provide this amount of memory for the application. + pattern: ^[0-9]+(Mi|Gi|Ki)$ + storage: + type: string + description: The amount of storage required for the application to run. This + encompasses the installed application and the data it needs to store. The + value is given in binary units (`Ki` = Kibibytes, `Mi` = Mebibytes, `Gi` = + Gibibytes, `Ti` Tebibytes, `Pi` = Pebibytes, `Ei` = Exbibytes). This is defined + by the application developer. After deployment of the application, the device + MUST provide this amount of storage for the application + pattern: ^[0-9]+(Mi|Gi|Ki|Ti|Pi|Ei)$ + peripherals: + type: array + items: + $ref: '#/components/schemas/DevicePeripheral' + description: Peripherals element specifying the peripherals required to run + the application. See the [Peripheral](#peripheral-attributes) section below. + interfaces: + type: array + items: + $ref: '#/components/schemas/DeviceCommunicationInterface' + description: Interfaces element specifying the communication interfaces required + to run the application. See the [Communication Interfaces](#communicationinterface-attributes) + section below. + CPU: + type: object + description: CPU element specifying the CPU requirements for the application. + properties: + cores: + type: number + description: The required amount of CPU cores the application must use to run + in its full functionality. Specified as decimal units of CPU cores (e.g., + `0.5` is half a core). This is defined by the application developer. After + deployment of the application, the device MUST provide this number of CPU + cores for the application. + architectures: + type: array + items: + type: string + description: Permissible CPU architecture values. + enum: + - amd64 + - x86_64 + - arm64 + - arm + - riscv64 + - other + description: The CPU architectures supported by the application. This can be + e.g. amd64, x86_64, arm64, arm. See the [CpuArchitectureType](#cpuarchitecturetype) + definition for all permissible values. Multiple arcitecture types can be specified, + as the deployment profile may support multiple CPU architectures. + required: + - cores + DevicePeripheral: + type: object + description: Peripheral hardware of a device. + properties: + type: + type: string + description: Permissible peripheral types. + enum: + - gpu + - display + - camera + - microphone + - speaker + - other + manufacturer: + type: string + description: The name of the manufacturer. If `manufacturer` is specified as + a requirement here, it may be difficult to find devices that can host the application. + Please use these requirements with caution. + model: + type: string + description: The model of the peripheral. If `model` is specified as a requirement + here, it may be difficult to find devices that can host the application. Please + use these requirements with caution. + required: + - type + DeviceCommunicationInterface: + type: object + description: Communication interface of a device. + properties: + type: + type: string + description: Permissible communication interface types. + enum: + - ethernet + - wifi + - cellular + - bluetooth + - usb + - canbus + - rs232 + - other + required: + - type + UnsignedAppStateManifest: + type: object + description: Manifest from the Workload Fleet Manager, representing the complete + desired workload configuration assigned to the device. + properties: + manifestVersion: + type: integer + description: Monotonically increasing unsigned 64-bit integer in the inclusive + range [1, 2^64-1]. Prevents rollback attacks. + minimum: 1 + maximum: 18446744073709551615 + bundle: + $ref: '#/components/schemas/DeploymentBundleRef' + description: Package optimization containing multiple ApplicationDeployment + YAMLs. + deployments: + type: array + items: + $ref: '#/components/schemas/DeploymentManifestRef' + description: List of deployment objects describing each workload. + required: + - manifestVersion + - bundle + - deployments + DeploymentBundleRef: + type: object + description: Describes an archive containing all referenced ApplicationDeployment + YAMLs. If there are zero deployments (i.e., the deployments array is empty), this + field MUST be present with the value null. An empty archive MUST NOT be served. + properties: + mediaType: + type: string + description: MUST be application/vnd.margo.bundle.v1+tar+gzip, which denotes + a gzip-compressed tar archive (commonly delivered as a .tar.gz) whose root + contains one or more ApplicationDeployment YAML files. Servers MUST set the + HTTP Content-Type to this media type. The archive MUST contain exactly the + set of YAML files referenced by deployments. + enum: + - application/vnd.margo.bundle.v1+tar+gzip + digest: + type: string + description: Digest of the bundle archive. MUST equal the digest computed over + the exact sequence of bytes in the bundle endpoint's HTTP 200 OK response + body. See Protocol - Digest for further details. + pattern: ^[a-zA-Z0-9_-]+:[0-9a-fA-F]+$ + sizeBytes: + type: integer + description: Optional unsigned 64-bit advisory estimate of the decoded payload + length in bytes for the bundle archive. Provided for bandwidth estimation + and update planning. MUST NOT be used for integrity verification. + minimum: 0 + url: + type: string + format: uri + description: Content-addressable retrieval endpoint for the bundle of the form + /api/v1/clients/{clientId}/bundles/{digest} where {digest} equals bundle.digest. + pattern: ^/[a-zA-Z0-9-._~:/?#\[\]@!$&'()*+,;=]+$ + required: + - mediaType + - digest + - url + DeploymentManifestRef: + type: object + description: Reference to an individual ApplicationDeployment within the desired + state manifest. + properties: + deploymentId: + type: string + description: The UUID of the deployment. MUST equal metadata.annotations.id + in the ApplicationDeployment. + digest: + type: string + description: "Digest of the corresponding ApplicationDeployment YAML file.\n\ + \ MUST equal the digest computed over the exact sequence of bytes in the individual\ + \ deployment endpoint's HTTP 200 OK response body.\n See Protocol - Digest\ + \ for further details." + pattern: ^[a-zA-Z0-9_-]+:[0-9a-fA-F]+$ + sizeBytes: + type: integer + description: Optional unsigned 64-bit advisory estimate of the decoded payload + length in bytes for the ApplicationDeployment YAML. Provided for bandwidth + estimation and update planning. MUST NOT be used for integrity verification. + minimum: 0 + url: + type: string + format: uri + description: Content-addressable retrieval endpoint for the ApplicationDeployment + YAML of the form /api/v1/clients/{clientId}/deployments/{deploymentId}/{digest} + where {digest} equals deployments[].digest. + pattern: ^/[a-zA-Z0-9-._~:/?#\[\]@!$&'()*+,;=]+$ + required: + - deploymentId + - digest + - url + DeviceCapabilitiesManifest: + type: object + description: Capabilities of a device on which applications can be deployed. + properties: + apiVersion: + type: string + description: Identifier of the version the API resource follows. + kind: + type: string + description: Must be `DeviceCapabilitiesManifest`. + enum: + - DeviceCapabilitiesManifest + properties: + $ref: '#/components/schemas/Properties' + description: Element that defines characteristics about the device. See the + [Properties Attributes](#properties-attributes) section below. + required: + - apiVersion + - kind + - properties + Properties: + type: object + description: Device properties reported to the WFM. + properties: + id: + type: string + description: Unique deviceID assigned to the device via the Device Owner. + vendor: + type: string + description: Defines the device vendor. + modelNumber: + type: string + description: Defines the model number of the device. + serialNumber: + type: string + description: Defines the serial number of the device. + roles: + type: array + items: + type: string + description: Role a device can provide to the Margo environment. + enum: + - Standalone Cluster + - Standalone Device + - Cluster Leader + - Gateway + description: 'Element that defines the device role it can provide to the Margo + environment. MUST be one of the following: Standalone Cluster, Cluster Leader, + Standalone Device, or Gateway.' + resources: + $ref: '#/components/schemas/Resources' + description: Element that defines the device's resources available to the application + deployed on the device. See the [Resources Attributes](#resources-attributes) + section below. + required: + - id + - vendor + - modelNumber + - serialNumber + - roles + - resources + DeploymentStatusManifest: + type: object + description: Manifest sent by the device client to report the deployment status + of a workload. + properties: + apiVersion: + type: string + kind: + type: string + enum: + - DeploymentStatusManifest + deploymentId: + type: string + description: The unique identifier of the deployment whose status is being reported. + deviceId: + type: string + description: Id of the device hosting the deployment. Includes the full device + hierarchy if applicable. This attribute is required when reporting on behalf + of a child-device. + pattern: ^[A-Za-z0-9._~-]+(\/[A-Za-z0-9._~-]+)*(\/\*)?$ + status: + $ref: '#/components/schemas/Status' + description: Overall status of the deployment. + components: + type: array + items: + $ref: '#/components/schemas/ComponentStatus' + description: Per-component status list. + required: + - apiVersion + - kind + - deploymentId + - status + - components + Status: + type: object + description: Overall deployment state and optional error details. + properties: + state: &id001 + type: string + description: Permissible deployment states. + enum: + - pending + - installing + - installed + - failed + - removing + - removed + error: + $ref: '#/components/schemas/Error' + description: Optional error details when the state is `failed`. + required: + - state + Error: + type: object + description: Error details associated with a failed deployment state. + properties: + code: + type: string + source: + type: string + description: Identifies the source of the error. It is set to the device id, + with its full hierarchy if applicable, of the device generating the error, + or to the component name of the component generating the error. + message: + type: string + ComponentStatus: + type: object + description: Status of a component deployment. + properties: + name: + type: string + state: *id001 + error: + $ref: '#/components/schemas/Error' + description: Optional error details when the state is `failed`. + required: + - name + - state + DeviceId: + type: string + pattern: ^[A-Za-z0-9._~-]+(\/[A-Za-z0-9._~-]+)*$ + description: 'Unique identifier of a device or device hierarchy. Format: "{id}[/{id}[/{id}...]]". + The top-level id is required and must include only unreserved characters as specified + in RFC3986. Subsequent ids indicate child devices in a gateway hierarchy and must + also use only unreserved characters.' + DeviceId_with_asterisk: + type: string + pattern: ^[A-Za-z0-9._~-]+(\/[A-Za-z0-9._~-]+)*(\/\*)?$ diff --git a/system-design/specification/observability/collecting-workload-observability-data.md b/docs/specification/observability/collecting-workload-observability-data.md similarity index 100% rename from system-design/specification/observability/collecting-workload-observability-data.md rename to docs/specification/observability/collecting-workload-observability-data.md diff --git a/system-design/specification/observability/consuming-workload-observability-data.md b/docs/specification/observability/consuming-workload-observability-data.md similarity index 100% rename from system-design/specification/observability/consuming-workload-observability-data.md rename to docs/specification/observability/consuming-workload-observability-data.md diff --git a/system-design/specification/observability/publishing-workload-observability-data.md b/docs/specification/observability/publishing-workload-observability-data.md similarity index 100% rename from system-design/specification/observability/publishing-workload-observability-data.md rename to docs/specification/observability/publishing-workload-observability-data.md diff --git a/doc-generation/check-examples.bash b/legacy/doc-generation/check-examples.bash similarity index 100% rename from doc-generation/check-examples.bash rename to legacy/doc-generation/check-examples.bash diff --git a/doc-generation/configurations/application-package-api.json b/legacy/doc-generation/configurations/application-package-api.json similarity index 100% rename from doc-generation/configurations/application-package-api.json rename to legacy/doc-generation/configurations/application-package-api.json diff --git a/doc-generation/configurations/desired-state-api.json b/legacy/doc-generation/configurations/desired-state-api.json similarity index 100% rename from doc-generation/configurations/desired-state-api.json rename to legacy/doc-generation/configurations/desired-state-api.json diff --git a/doc-generation/generate-documentation.bash b/legacy/doc-generation/generate-documentation.bash similarity index 100% rename from doc-generation/generate-documentation.bash rename to legacy/doc-generation/generate-documentation.bash diff --git a/src/specification/applications/application-description.linkml.yaml b/legacy/src-specification/applications/application-description.linkml.yaml similarity index 100% rename from src/specification/applications/application-description.linkml.yaml rename to legacy/src-specification/applications/application-description.linkml.yaml diff --git a/data-model/resources/markdown-templates_main-classes/class.md.jinja2 b/legacy/src-specification/applications/resources/class.md.jinja2 similarity index 100% rename from data-model/resources/markdown-templates_main-classes/class.md.jinja2 rename to legacy/src-specification/applications/resources/class.md.jinja2 diff --git a/src/specification/applications/resources/examples/invalid/ApplicationDescription-001.yaml b/legacy/src-specification/applications/resources/examples/invalid/ApplicationDescription-001.yaml similarity index 100% rename from src/specification/applications/resources/examples/invalid/ApplicationDescription-001.yaml rename to legacy/src-specification/applications/resources/examples/invalid/ApplicationDescription-001.yaml diff --git a/src/specification/applications/resources/examples/valid/ApplicationDescription-001.yaml b/legacy/src-specification/applications/resources/examples/valid/ApplicationDescription-001.yaml similarity index 100% rename from src/specification/applications/resources/examples/valid/ApplicationDescription-001.yaml rename to legacy/src-specification/applications/resources/examples/valid/ApplicationDescription-001.yaml diff --git a/src/specification/applications/resources/examples/valid/ApplicationDescription-002.yaml b/legacy/src-specification/applications/resources/examples/valid/ApplicationDescription-002.yaml similarity index 100% rename from src/specification/applications/resources/examples/valid/ApplicationDescription-002.yaml rename to legacy/src-specification/applications/resources/examples/valid/ApplicationDescription-002.yaml diff --git a/src/specification/applications/resources/index.md.jinja2 b/legacy/src-specification/applications/resources/index.md.jinja2 similarity index 100% rename from src/specification/applications/resources/index.md.jinja2 rename to legacy/src-specification/applications/resources/index.md.jinja2 diff --git a/src/specification/margo-management-interface/desired-state.linkml.yaml b/legacy/src-specification/margo-management-interface/desired-state.linkml.yaml similarity index 100% rename from src/specification/margo-management-interface/desired-state.linkml.yaml rename to legacy/src-specification/margo-management-interface/desired-state.linkml.yaml diff --git a/src/specification/margo-management-interface/resources/examples/invalid/DesiredState-001.yaml b/legacy/src-specification/margo-management-interface/resources/examples/invalid/DesiredState-001.yaml similarity index 100% rename from src/specification/margo-management-interface/resources/examples/invalid/DesiredState-001.yaml rename to legacy/src-specification/margo-management-interface/resources/examples/invalid/DesiredState-001.yaml diff --git a/src/specification/margo-management-interface/resources/examples/invalid/DesiredState-002.yaml b/legacy/src-specification/margo-management-interface/resources/examples/invalid/DesiredState-002.yaml similarity index 100% rename from src/specification/margo-management-interface/resources/examples/invalid/DesiredState-002.yaml rename to legacy/src-specification/margo-management-interface/resources/examples/invalid/DesiredState-002.yaml diff --git a/src/specification/margo-management-interface/resources/examples/invalid/DesiredState-003.yaml b/legacy/src-specification/margo-management-interface/resources/examples/invalid/DesiredState-003.yaml similarity index 100% rename from src/specification/margo-management-interface/resources/examples/invalid/DesiredState-003.yaml rename to legacy/src-specification/margo-management-interface/resources/examples/invalid/DesiredState-003.yaml diff --git a/src/specification/margo-management-interface/resources/examples/valid/DesiredState-001.yaml b/legacy/src-specification/margo-management-interface/resources/examples/valid/DesiredState-001.yaml similarity index 100% rename from src/specification/margo-management-interface/resources/examples/valid/DesiredState-001.yaml rename to legacy/src-specification/margo-management-interface/resources/examples/valid/DesiredState-001.yaml diff --git a/src/specification/margo-management-interface/resources/examples/valid/DesiredState-002.yaml b/legacy/src-specification/margo-management-interface/resources/examples/valid/DesiredState-002.yaml similarity index 100% rename from src/specification/margo-management-interface/resources/examples/valid/DesiredState-002.yaml rename to legacy/src-specification/margo-management-interface/resources/examples/valid/DesiredState-002.yaml diff --git a/src/specification/margo-management-interface/resources/examples/valid/gateway-autonomous.yaml b/legacy/src-specification/margo-management-interface/resources/examples/valid/gateway-autonomous.yaml similarity index 100% rename from src/specification/margo-management-interface/resources/examples/valid/gateway-autonomous.yaml rename to legacy/src-specification/margo-management-interface/resources/examples/valid/gateway-autonomous.yaml diff --git a/src/specification/margo-management-interface/resources/examples/valid/gateway-directed.yaml b/legacy/src-specification/margo-management-interface/resources/examples/valid/gateway-directed.yaml similarity index 100% rename from src/specification/margo-management-interface/resources/examples/valid/gateway-directed.yaml rename to legacy/src-specification/margo-management-interface/resources/examples/valid/gateway-directed.yaml diff --git a/src/specification/margo-management-interface/resources/index.md.jinja2 b/legacy/src-specification/margo-management-interface/resources/index.md.jinja2 similarity index 100% rename from src/specification/margo-management-interface/resources/index.md.jinja2 rename to legacy/src-specification/margo-management-interface/resources/index.md.jinja2 diff --git a/data-model/tools/validate-openapi.py b/legacy/validate-openapi.py similarity index 81% rename from data-model/tools/validate-openapi.py rename to legacy/validate-openapi.py index 97644bd9..eab8692e 100644 --- a/data-model/tools/validate-openapi.py +++ b/legacy/validate-openapi.py @@ -16,33 +16,56 @@ # ── Color support ────────────────────────────────────────────── _USE_COLOR = sys.stdout.isatty() + def _c(code: str, text: str) -> str: return f"\033[{code}m{text}\033[0m" if _USE_COLOR else text -def bold(text: str) -> str: return _c("1", text) -def green(text: str) -> str: return _c("32", text) -def red(text: str) -> str: return _c("31", text) -def yellow(text: str) -> str: return _c("33", text) -def cyan(text: str) -> str: return _c("36", text) -def dim(text: str) -> str: return _c("2", text) + +def bold(text: str) -> str: + return _c("1", text) + + +def green(text: str) -> str: + return _c("32", text) + + +def red(text: str) -> str: + return _c("31", text) + + +def yellow(text: str) -> str: + return _c("33", text) + + +def cyan(text: str) -> str: + return _c("36", text) + + +def dim(text: str) -> str: + return _c("2", text) + + # ─────────────────────────────────────────────────────────────── -ROOT = Path(__file__).resolve().parent.parent.parent +ROOT = Path(__file__).resolve().parent.parent PRE_DRAFT_FILE = "system-design/specification/margo-management-interface/workload-management-api-1.0.0.yaml" -GENERATED_FILE = "generated/openapi/workload-management-api-1.0.0.openapi.yaml" +GENERATED_FILE = "system-design/specification/margo-management-interface/workload-management-api-1.0.0.yaml" +# GENERATED_FILE = "build/artifacts/openapi/workload-management-api-1.0.0.openapi.yaml" def get_pre_draft_spec() -> dict: """Retrieve the OpenAPI spec from the pre-draft branch.""" result = subprocess.run( ["git", "show", f"pre-draft:{PRE_DRAFT_FILE}"], - capture_output=True, text=True, cwd=ROOT, + capture_output=True, + text=True, + cwd=ROOT, ) - if result.returncode != 0: - print(f"ERROR: could not retrieve pre-draft file: {result.stderr}", file=sys.stderr) - sys.exit(1) - return yaml.safe_load(result.stdout) + if result.returncode == 0: + return yaml.safe_load(result.stdout) + print(f"ERROR: could not retrieve pre-draft file: {result.stderr}", file=sys.stderr) + sys.exit(1) def get_generated_spec() -> dict: @@ -61,7 +84,9 @@ def deep_diff(label: str, ref, gen, path: str = "", errors: list | None = None) errors = [] if type(ref) != type(gen): - errors.append(f"{path}: TYPE MISMATCH — {type(ref).__name__} vs {type(gen).__name__}") + errors.append( + f"{path}: TYPE MISMATCH — {type(ref).__name__} vs {type(gen).__name__}" + ) return errors if isinstance(ref, dict): @@ -137,12 +162,16 @@ def compare_section(label: str, ref: dict, gen: dict, path: str, errors: list) - print(f" {label}: {green('✓ IDENTICAL')}") -MARKER_LINE = " # Schemas removed because they are neither direct nor transitive requirements:" +MARKER_LINE = ( + " # Schemas removed because they are neither direct nor transitive requirements:" +) -TEMPLATE_FILE = "data-model/tools/workload-management-api-1.0.0.openapi.yaml" +TEMPLATE_FILE = "tools/templates/openapi/workload-management-api-1.0.0.openapi.yaml" # Pattern for standardized INLINED comments: INLINED into (OpenAPI)[/(LinkML)] -INLINED_PATTERN = re.compile(r"#\s*-\s*(\S+)\s+INLINED\s+into\s+\S+\(OpenAPI\)(?:/\S+\(LinkML\))?") +INLINED_PATTERN = re.compile( + r"#\s*-\s*(\S+)\s+INLINED\s+into\s+\S+\(OpenAPI\)(?:/\S+\(LinkML\))?" +) def get_inlined_schemas() -> set[str]: @@ -183,8 +212,13 @@ def find_rename_candidates( Compares property sets, required fields, and type (excluding descriptions). Returns (ref_name, gen_name, score) tuples sorted by descending score. """ + def _signature(name: str, s: dict) -> dict: - props = set(s.get("properties", {}).keys()) if isinstance(s.get("properties"), dict) else set() + props = ( + set(s.get("properties", {}).keys()) + if isinstance(s.get("properties"), dict) + else set() + ) req = set(s.get("required", [])) typ = s.get("type") return {"props": props, "req": req, "type": typ, "name": name} @@ -253,7 +287,8 @@ def _schema_signature(s: dict) -> dict: "properties": set(props.keys()) if isinstance(props, dict) else set(), "required": set(s.get("required", [])), "enum": sorted(s.get("enum", [])) if isinstance(s.get("enum"), list) else [], - "additionalProperties": isinstance(s.get("additionalProperties"), dict) or s.get("additionalProperties") is True, + "additionalProperties": isinstance(s.get("additionalProperties"), dict) + or s.get("additionalProperties") is True, } @@ -323,7 +358,9 @@ def find_inlined_candidates( Returns [(gen_name, parent.property_path, score), ...] sorted by descending score. """ inline_props = _collect_inline_properties(ref_schemas) - gen_sigs = {n: _schema_signature(s) for n, s in gen_schemas.items() if n in extra_gen} + gen_sigs = { + n: _schema_signature(s) for n, s in gen_schemas.items() if n in extra_gen + } if not gen_sigs: return [] @@ -342,7 +379,8 @@ def find_inlined_candidates( req_score = ( 1.0 if not rs["required"] and not gs["required"] - else len(rs["required"] & gs["required"]) / len(rs["required"] | gs["required"]) + else len(rs["required"] & gs["required"]) + / len(rs["required"] | gs["required"]) ) score = round(0.7 * prop_score + 0.3 * req_score, 3) candidates.append((gen_name, prop_path, score)) @@ -371,7 +409,11 @@ def _resolve_schema_name( def _collect_refs(obj, results: set[str], prefix: str = "#/components/schemas/"): """Recursively collect all $ref target names from a schema definition.""" if isinstance(obj, dict): - if "$ref" in obj and isinstance(obj["$ref"], str) and obj["$ref"].startswith(prefix): + if ( + "$ref" in obj + and isinstance(obj["$ref"], str) + and obj["$ref"].startswith(prefix) + ): results.add(obj["$ref"].replace(prefix, "")) for v in obj.values(): _collect_refs(v, results, prefix) @@ -391,6 +433,7 @@ def _find_referers( # Check paths for path, methods in gen_paths.items(): for method, spec in methods.items(): + def _check(obj): if isinstance(obj, dict): if "$ref" in obj and obj["$ref"] == target: @@ -401,6 +444,7 @@ def _check(obj): elif isinstance(obj, list): for item in obj: _check(item) + _check(spec) # Check schemas @@ -460,7 +504,9 @@ def _show_schema_detail(raw_name: str, show_yaml: bool = False) -> None: if schema_name in common: s_errors = deep_diff("", ref_schemas[schema_name], gen_s, schema_name) cats = _categorize_errors(s_errors) - status = f"{red(str(len(s_errors)))} diff(s)" if s_errors else green("identical") + status = ( + f"{red(str(len(s_errors)))} diff(s)" if s_errors else green("identical") + ) print(f" Status: {status}") if cats["desc"]: print(f" {dim('Description-only')} ({len(cats['desc'])}):") @@ -507,17 +553,27 @@ def _show_schema_detail(raw_name: str, show_yaml: bool = False) -> None: # Inline / extra context if schema_name in only_gen: - candidates = find_inlined_candidates(ref_schemas, {schema_name: gen_s}, {schema_name}) + candidates = find_inlined_candidates( + ref_schemas, {schema_name: gen_s}, {schema_name} + ) if candidates: best = max(candidates, key=lambda x: x[2]) - print(f" {yellow('Inferred inlined')} in pre-draft at {best[1]} (score {best[2]})") + print( + f" {yellow('Inferred inlined')} in pre-draft at {best[1]} (score {best[2]})" + ) elif schema_name in common: pre_s = ref_schemas.get(schema_name, {}) props = pre_s.get("properties", {}) if isinstance(props, dict): - inlined_props = [k for k, v in props.items() if isinstance(v, dict) and "$ref" not in v and "properties" in v] + inlined_props = [ + k + for k, v in props.items() + if isinstance(v, dict) and "$ref" not in v and "properties" in v + ] if inlined_props: - print(f" {dim('Pre-draft inlined properties:')} {', '.join(inlined_props)}") + print( + f" {dim('Pre-draft inlined properties:')} {', '.join(inlined_props)}" + ) # Property-level comparison if schema_name in common: @@ -530,21 +586,43 @@ def _show_schema_detail(raw_name: str, show_yaml: bool = False) -> None: only_pre = pre_keys_set - gen_keys_set only_gen_p = gen_keys_set - pre_keys_set if only_pre: - print(f" {red('Properties only in pre-draft:')} {sorted(only_pre)}") + print( + f" {red('Properties only in pre-draft:')} {sorted(only_pre)}" + ) if only_gen_p: - print(f" {yellow('Properties only in generated:')} {sorted(only_gen_p)}") + print( + f" {yellow('Properties only in generated:')} {sorted(only_gen_p)}" + ) # YAML dump if show_yaml: print(f"\n{dim('─' * 40)}") - pre_s = ref_schemas.get(schema_name, ref_schemas.get(raw_name)) if schema_name in common else None + pre_s = ( + ref_schemas.get(schema_name, ref_schemas.get(raw_name)) + if schema_name in common + else None + ) gen_s = gen_schemas.get(schema_name) if pre_s: print(f"\n{bold('Pre-draft')} ({schema_name}):") - print(yaml.dump(pre_s, default_flow_style=False, sort_keys=False, allow_unicode=True).rstrip()) + print( + yaml.dump( + pre_s, + default_flow_style=False, + sort_keys=False, + allow_unicode=True, + ).rstrip() + ) if gen_s: print(f"\n{bold('Generated')} ({schema_name}):") - print(yaml.dump(gen_s, default_flow_style=False, sort_keys=False, allow_unicode=True).rstrip()) + print( + yaml.dump( + gen_s, + default_flow_style=False, + sort_keys=False, + allow_unicode=True, + ).rstrip() + ) else: if schema_name in only_ref: @@ -557,7 +635,9 @@ def _show_schema_detail(raw_name: str, show_yaml: bool = False) -> None: props = pre_s.get("properties", {}) if isinstance(props, dict): for pk, pv in props.items(): - ref_type = pv.get("type", "object") if isinstance(pv, dict) else "N/A" + ref_type = ( + pv.get("type", "object") if isinstance(pv, dict) else "N/A" + ) print(f" {pk}: {ref_type}") @@ -566,11 +646,13 @@ def main(): description="Compare pre-draft vs generated OpenAPI spec" ) parser.add_argument( - "--schema", "-s", + "--schema", + "-s", help="Show verbose details for a single schema only (name in generated output)", ) parser.add_argument( - "--yaml", "-y", + "--yaml", + "-y", action="store_true", help="Show YAML of both pre-draft and generated schemas (use with -s)", ) @@ -610,9 +692,13 @@ def main(): common_p = ref_pkeys & gen_pkeys if only_ref_p: - print(f" {red('MISSING IN GENERATED')} ({len(only_ref_p)}): {sorted(only_ref_p)}") + print( + f" {red('MISSING IN GENERATED')} ({len(only_ref_p)}): {sorted(only_ref_p)}" + ) if only_gen_p: - print(f" {yellow('EXTRA IN GENERATED')} ({len(only_gen_p)}): {sorted(only_gen_p)}") + print( + f" {yellow('EXTRA IN GENERATED')} ({len(only_gen_p)}): {sorted(only_gen_p)}" + ) for path in sorted(common_p): ref_methods = ref_paths[path] @@ -623,11 +709,15 @@ def main(): only_gen_m = gen_mkeys - ref_mkeys if only_ref_m or only_gen_m: - print(f" {yellow(path)}: METHOD DIFF — ref={sorted(ref_mkeys)} gen={sorted(gen_mkeys)}") + print( + f" {yellow(path)}: METHOD DIFF — ref={sorted(ref_mkeys)} gen={sorted(gen_mkeys)}" + ) else: all_method_ok = True for method in sorted(ref_mkeys): - errs = deep_diff(path, ref_methods[method], gen_methods[method], f"{path}.{method}") + errs = deep_diff( + path, ref_methods[method], gen_methods[method], f"{path}.{method}" + ) if errs: all_method_ok = False print(f" {path}.{method}: {red(str(len(errs)))} diff(s)") @@ -672,13 +762,17 @@ def main(): best_per_schema[gen_name] = (prop_path, score) high_scoring_inlined = [] explained_extra: set[str] = set() - for gen_name, (prop_path, score) in sorted(best_per_schema.items(), key=lambda x: -x[1][1]): + for gen_name, (prop_path, score) in sorted( + best_per_schema.items(), key=lambda x: -x[1][1] + ): if score >= 0.9: high_scoring_inlined.append((gen_name, prop_path, score)) explained_extra.add(gen_name) unexplained_extra = only_gen - explained_extra - print(f"\n Schemas ({bold(str(len(ref_keys)))} ref, {bold(str(len(gen_keys)))} gen, {bold(str(len(not_needed)))} NOT-NEEDED, {bold(str(len(inlined)))} INLINED):") + print( + f"\n Schemas ({bold(str(len(ref_keys)))} ref, {bold(str(len(gen_keys)))} gen, {bold(str(len(not_needed)))} NOT-NEEDED, {bold(str(len(inlined)))} INLINED):" + ) if xlinkml_renames: print(f" {dim('x-linkml-source RENAMES')} ({len(xlinkml_renames)}):") @@ -689,23 +783,35 @@ def main(): not_needed_only = intentionally_omitted & not_needed inlined_only = intentionally_omitted & inlined if not_needed_only: - print(f" {dim('NOT-NEEDED')} ({len(not_needed_only)}): {sorted(not_needed_only)}") + print( + f" {dim('NOT-NEEDED')} ({len(not_needed_only)}): {sorted(not_needed_only)}" + ) if inlined_only: - print(f" {dim('INLINED SUBSCHEMAS')} ({len(inlined_only)}): {sorted(inlined_only)}") + print( + f" {dim('INLINED SUBSCHEMAS')} ({len(inlined_only)}): {sorted(inlined_only)}" + ) if truly_missing: - print(f" {red('MISSING IN GENERATED')} ({len(truly_missing)}): {sorted(truly_missing)}") + print( + f" {red('MISSING IN GENERATED')} ({len(truly_missing)}): {sorted(truly_missing)}" + ) if high_scoring_inlined: print(f" {yellow('INFERRED INLINED')} ({len(high_scoring_inlined)}):") - for gen_name, prop_path, score in sorted(high_scoring_inlined, key=lambda x: -x[2]): + for gen_name, prop_path, score in sorted( + high_scoring_inlined, key=lambda x: -x[2] + ): print(f" {gen_name} inlined into {prop_path} (score {score})") if unexplained_extra: - print(f" {yellow('EXTRA IN GENERATED')} ({len(unexplained_extra)}): {sorted(unexplained_extra)}") + print( + f" {yellow('EXTRA IN GENERATED')} ({len(unexplained_extra)}): {sorted(unexplained_extra)}" + ) if rename_candidates: - print(f" {dim('RENAME CANDIDATES')} (missing → extra, by structural similarity):") + print( + f" {dim('RENAME CANDIDATES')} (missing → extra, by structural similarity):" + ) shown = 0 for ref_name, gen_name, score in rename_candidates: if ref_name in truly_missing and gen_name in unexplained_extra: @@ -730,21 +836,31 @@ def main(): if cats["aprop"]: all_aprop_schemas.add(name) # Only show this schema in detail if it has structural changes - if cats["struct"] or (cats["desc"] and not cats["aprop"] and not cats["struct"]): + if cats["struct"] or ( + cats["desc"] and not cats["aprop"] and not cats["struct"] + ): non_desc = len(s_errors) - len(cats["desc"]) if non_desc: print(f" {name}: {red(str(non_desc))} non-description diff(s)") else: - print(f" {name}: {dim('description-only')} ({len(cats['desc'])} diff(s))") + print( + f" {name}: {dim('description-only')} ({len(cats['desc'])} diff(s))" + ) # Grouped additionalProperties report if all_aprop_schemas: - print(f" {yellow('additionalProperties:')} present in {len(all_aprop_schemas)} schema(s)") - print(f" {dim('added by LinkML JSON Schema generator (additionalProperties: false)')}") + print( + f" {yellow('additionalProperties:')} present in {len(all_aprop_schemas)} schema(s)" + ) + print( + f" {dim('added by LinkML JSON Schema generator (additionalProperties: false)')}" + ) print(f" {dim('affected:')} {', '.join(sorted(all_aprop_schemas))}") unchanged = len(common) - len(changed_names) - print(f" {dim('Common schemas:')} {green(str(unchanged))} identical, {yellow(str(len(changed_names)))} changed") + print( + f" {dim('Common schemas:')} {green(str(unchanged))} identical, {yellow(str(len(changed_names)))} changed" + ) else: print(f" {green('No common schemas')}") diff --git a/mkdocs.yml b/mkdocs.yml index 97cdf4e4..e3cfbcb8 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,5 +1,5 @@ site_name: Specification (pre-draft) -docs_dir: merged +docs_dir: build/site nav: - What is Margo?: index.md diff --git a/data-model/application-deployment.linkml.yaml b/model/application-deployment.linkml.yaml similarity index 100% rename from data-model/application-deployment.linkml.yaml rename to model/application-deployment.linkml.yaml diff --git a/data-model/application-description.linkml.yaml b/model/application-description.linkml.yaml similarity index 100% rename from data-model/application-description.linkml.yaml rename to model/application-description.linkml.yaml diff --git a/data-model/deployment-status.linkml.yaml b/model/deployment-status.linkml.yaml similarity index 100% rename from data-model/deployment-status.linkml.yaml rename to model/deployment-status.linkml.yaml diff --git a/data-model/desired-state-manifest.linkml.yaml b/model/desired-state-manifest.linkml.yaml similarity index 99% rename from data-model/desired-state-manifest.linkml.yaml rename to model/desired-state-manifest.linkml.yaml index 4d77eec9..7429357c 100644 --- a/data-model/desired-state-manifest.linkml.yaml +++ b/model/desired-state-manifest.linkml.yaml @@ -113,7 +113,7 @@ types: SizeBytesType: description: Size of an element in bytes. uri: xsd:nonNegativeInteger - base: integer + base: int minimum_value: 0 UrlType: description: Endpoint (URL without schema and domain) associated to an element. diff --git a/data-model/device-capabilities.linkml.yaml b/model/device-capabilities.linkml.yaml similarity index 100% rename from data-model/device-capabilities.linkml.yaml rename to model/device-capabilities.linkml.yaml diff --git a/data-model/resources/examples/invalid/ApplicationDeployment-001.yaml b/model/examples/invalid/ApplicationDeployment-001.yaml similarity index 100% rename from data-model/resources/examples/invalid/ApplicationDeployment-001.yaml rename to model/examples/invalid/ApplicationDeployment-001.yaml diff --git a/data-model/resources/examples/invalid/ApplicationDeployment-002.yaml b/model/examples/invalid/ApplicationDeployment-002.yaml similarity index 100% rename from data-model/resources/examples/invalid/ApplicationDeployment-002.yaml rename to model/examples/invalid/ApplicationDeployment-002.yaml diff --git a/data-model/resources/examples/invalid/ApplicationDeployment-003.yaml b/model/examples/invalid/ApplicationDeployment-003.yaml similarity index 100% rename from data-model/resources/examples/invalid/ApplicationDeployment-003.yaml rename to model/examples/invalid/ApplicationDeployment-003.yaml diff --git a/data-model/resources/examples/invalid/ApplicationDeployment-004.yaml b/model/examples/invalid/ApplicationDeployment-004.yaml similarity index 100% rename from data-model/resources/examples/invalid/ApplicationDeployment-004.yaml rename to model/examples/invalid/ApplicationDeployment-004.yaml diff --git a/data-model/resources/examples/invalid/ApplicationDescription-001.yaml b/model/examples/invalid/ApplicationDescription-001.yaml similarity index 100% rename from data-model/resources/examples/invalid/ApplicationDescription-001.yaml rename to model/examples/invalid/ApplicationDescription-001.yaml diff --git a/data-model/resources/examples/invalid/DeploymentStatusManifest-001.json b/model/examples/invalid/DeploymentStatusManifest-001.json similarity index 100% rename from data-model/resources/examples/invalid/DeploymentStatusManifest-001.json rename to model/examples/invalid/DeploymentStatusManifest-001.json diff --git a/data-model/resources/examples/invalid/DeploymentStatusManifest-002.json b/model/examples/invalid/DeploymentStatusManifest-002.json similarity index 100% rename from data-model/resources/examples/invalid/DeploymentStatusManifest-002.json rename to model/examples/invalid/DeploymentStatusManifest-002.json diff --git a/data-model/resources/examples/invalid/DeploymentStatusManifest-003.json b/model/examples/invalid/DeploymentStatusManifest-003.json similarity index 100% rename from data-model/resources/examples/invalid/DeploymentStatusManifest-003.json rename to model/examples/invalid/DeploymentStatusManifest-003.json diff --git a/data-model/resources/examples/invalid/DesiredStateManifest-001.json b/model/examples/invalid/DesiredStateManifest-001.json similarity index 100% rename from data-model/resources/examples/invalid/DesiredStateManifest-001.json rename to model/examples/invalid/DesiredStateManifest-001.json diff --git a/data-model/resources/examples/invalid/DesiredStateManifest-002.json b/model/examples/invalid/DesiredStateManifest-002.json similarity index 100% rename from data-model/resources/examples/invalid/DesiredStateManifest-002.json rename to model/examples/invalid/DesiredStateManifest-002.json diff --git a/data-model/resources/examples/invalid/DesiredStateManifest-003.json b/model/examples/invalid/DesiredStateManifest-003.json similarity index 100% rename from data-model/resources/examples/invalid/DesiredStateManifest-003.json rename to model/examples/invalid/DesiredStateManifest-003.json diff --git a/data-model/resources/examples/invalid/DesiredStateManifest-004.json b/model/examples/invalid/DesiredStateManifest-004.json similarity index 100% rename from data-model/resources/examples/invalid/DesiredStateManifest-004.json rename to model/examples/invalid/DesiredStateManifest-004.json diff --git a/data-model/resources/examples/invalid/DeviceCapabilitiesManifest-001.json b/model/examples/invalid/DeviceCapabilitiesManifest-001.json similarity index 100% rename from data-model/resources/examples/invalid/DeviceCapabilitiesManifest-001.json rename to model/examples/invalid/DeviceCapabilitiesManifest-001.json diff --git a/data-model/resources/examples/invalid/DeviceCapabilitiesManifest-002.json b/model/examples/invalid/DeviceCapabilitiesManifest-002.json similarity index 100% rename from data-model/resources/examples/invalid/DeviceCapabilitiesManifest-002.json rename to model/examples/invalid/DeviceCapabilitiesManifest-002.json diff --git a/data-model/resources/examples/invalid/DeviceCapabilitiesManifest-003.json b/model/examples/invalid/DeviceCapabilitiesManifest-003.json similarity index 100% rename from data-model/resources/examples/invalid/DeviceCapabilitiesManifest-003.json rename to model/examples/invalid/DeviceCapabilitiesManifest-003.json diff --git a/data-model/resources/examples/valid/ApplicationDeployment-compose.yaml b/model/examples/valid/ApplicationDeployment-compose.yaml similarity index 100% rename from data-model/resources/examples/valid/ApplicationDeployment-compose.yaml rename to model/examples/valid/ApplicationDeployment-compose.yaml diff --git a/data-model/resources/examples/valid/ApplicationDeployment-helm.yaml b/model/examples/valid/ApplicationDeployment-helm.yaml similarity index 100% rename from data-model/resources/examples/valid/ApplicationDeployment-helm.yaml rename to model/examples/valid/ApplicationDeployment-helm.yaml diff --git a/data-model/resources/examples/valid/ApplicationDescription-helm_and_compose.yaml b/model/examples/valid/ApplicationDescription-helm_and_compose.yaml similarity index 100% rename from data-model/resources/examples/valid/ApplicationDescription-helm_and_compose.yaml rename to model/examples/valid/ApplicationDescription-helm_and_compose.yaml diff --git a/data-model/resources/examples/valid/ApplicationDescription-helm_only.yaml b/model/examples/valid/ApplicationDescription-helm_only.yaml similarity index 100% rename from data-model/resources/examples/valid/ApplicationDescription-helm_only.yaml rename to model/examples/valid/ApplicationDescription-helm_only.yaml diff --git a/data-model/resources/examples/valid/DeploymentStatusManifest-001.json b/model/examples/valid/DeploymentStatusManifest-001.json similarity index 100% rename from data-model/resources/examples/valid/DeploymentStatusManifest-001.json rename to model/examples/valid/DeploymentStatusManifest-001.json diff --git a/data-model/resources/examples/valid/DesiredStateManifest-001.json b/model/examples/valid/DesiredStateManifest-001.json similarity index 100% rename from data-model/resources/examples/valid/DesiredStateManifest-001.json rename to model/examples/valid/DesiredStateManifest-001.json diff --git a/data-model/resources/examples/valid/DeviceCapabilitiesManifest-001.json b/model/examples/valid/DeviceCapabilitiesManifest-001.json similarity index 100% rename from data-model/resources/examples/valid/DeviceCapabilitiesManifest-001.json rename to model/examples/valid/DeviceCapabilitiesManifest-001.json diff --git a/data-model/generation-gap.md b/model/generation-gap.md similarity index 96% rename from data-model/generation-gap.md rename to model/generation-gap.md index 56d0ecf7..109aadfe 100644 --- a/data-model/generation-gap.md +++ b/model/generation-gap.md @@ -18,20 +18,20 @@ This document describes the differences between the hand-maintained OpenAPI spec -(on the `pre-draft` branch) and the spec generated by `data-model/tools/openapigen.py` +(on the `pre-draft` branch) and the spec generated by `tools/openapigen.py` from the LinkML data model. It is both human-readable and structured for AI consumption. Validation is run via: ```bash -data-model/tools/validate-openapi.py +legacy/validate-openapi.py ``` Generation (with enums inlined to match pre-draft style): ```bash -data-model/tools/generate-openapi.bash +tools/generate-openapi.bash ``` Requires `--keep-unreferenced` (`-k`) and `--inline-enums` (`-e`) flags. @@ -77,7 +77,7 @@ output. These schemas exist in the pre-draft but are intentionally absent from the generated output because their content is embedded inside another schema. Declared via `INLINED` comments in the OpenAPI template -(`data-model/tools/workload-management-api-1.0.0.openapi.yaml`). +(`tools/templates/openapi/workload-management-api-1.0.0.openapi.yaml`). | Schema | Inlined into (OpenAPI) | Inlined into (LinkML) | | --------------------- | -------------------------- | ---------------------- | @@ -146,4 +146,4 @@ These schemas exist in both outputs but differ in content beyond descriptions. ### Other changed schemas (14 more) -Run `data-model/tools/validate-openapi.py` for the complete list. +Run `legacy/validate-openapi.py` for the complete list. diff --git a/data-model/margo-data-model.linkml.yaml b/model/margo-data-model.linkml.yaml similarity index 100% rename from data-model/margo-data-model.linkml.yaml rename to model/margo-data-model.linkml.yaml diff --git a/data-model/margo-deployments.linkml.yaml b/model/margo-deployments.linkml.yaml similarity index 100% rename from data-model/margo-deployments.linkml.yaml rename to model/margo-deployments.linkml.yaml diff --git a/data-model/margo-resources.linkml.yaml b/model/margo-resources.linkml.yaml similarity index 100% rename from data-model/margo-resources.linkml.yaml rename to model/margo-resources.linkml.yaml diff --git a/system-design/specification/applications/meta.json b/system-design/specification/applications/meta.json deleted file mode 100644 index 0fd50e9a..00000000 --- a/system-design/specification/applications/meta.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "title": "Applications", - "pages": [ - "application-description", - "application-registry" - ] -} diff --git a/system-design/specification/margo-devices/meta.json b/system-design/specification/margo-devices/meta.json deleted file mode 100644 index dc73893c..00000000 --- a/system-design/specification/margo-devices/meta.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "title": "Margo Devices", - "pages": [ - "device-requirements" - ] -} diff --git a/system-design/specification/observability/meta.json b/system-design/specification/observability/meta.json deleted file mode 100644 index 289bef39..00000000 --- a/system-design/specification/observability/meta.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "title": "Observability", - "pages": [ - "publishing-workload-observability-data", - "collecting-workload-observability-data", - "consuming-workload-observability-data" - ] -} diff --git a/data-model/tools/check-examples.bash b/tools/check-examples.bash similarity index 90% rename from data-model/tools/check-examples.bash rename to tools/check-examples.bash index 443defd6..40007832 100755 --- a/data-model/tools/check-examples.bash +++ b/tools/check-examples.bash @@ -7,7 +7,7 @@ THIS_DIR="$(dirname "${THIS_SCRIPT}")" DOCS_GEN="${THIS_DIR}" CONFIGS="${DOCS_GEN}/configurations" -ROOT_DIR="$(dirname "$(dirname "${THIS_DIR}")")" +ROOT_DIR="$(dirname "${THIS_DIR}")" VERBOSITY="${1:-info}" @@ -62,7 +62,7 @@ check_spec() { SCHEMA_FILE="$(jq -r '.schemafile' "${CONFIGS}/$1")" trace "Schema file: ${SCHEMA_FILE}" - EXAMPLES_DIR="${SPEC_ROOT}/resources/examples/valid" + EXAMPLES_DIR="${SPEC_ROOT}/examples/valid" trace "Examples folder: ${EXAMPLES_DIR}" FOUND_VALID=0 for EXAMPLE in $(ls "${EXAMPLES_DIR}"/${TARGET_CLASS}-*.{yaml,json} 2>/dev/null); do @@ -85,7 +85,7 @@ check_spec() { return 1 fi - COUNTEREXAMPLES_DIR="${SPEC_ROOT}/resources/examples/invalid" + COUNTEREXAMPLES_DIR="${SPEC_ROOT}/examples/invalid" FOUND_INVALID=0 for COUNTEREXAMPLE in $(ls "${COUNTEREXAMPLES_DIR}"/${TARGET_CLASS}-*.{yaml,json} 2>/dev/null); do FOUND_INVALID=1 @@ -113,8 +113,8 @@ check_spec() { # https://github.com/linkml/linkml/issues/2425 ${RUN} linkml examples \ --schema "${SPEC_ROOT}/application-description.linkml.yaml" \ - --input-directory "${SPEC_ROOT}/resources/examples/valid" \ - --counter-example-input-directory "${SPEC_ROOT}/resources/examples/invalid" \ + --input-directory "${SPEC_ROOT}/examples/valid" \ + --counter-example-input-directory "${SPEC_ROOT}/examples/invalid" \ --output-directory "${SPEC_ROOT}/output" fi } diff --git a/data-model/tools/configurations/application-deployment.json b/tools/configurations/application-deployment.json similarity index 85% rename from data-model/tools/configurations/application-deployment.json rename to tools/configurations/application-deployment.json index fdf209d6..96602d7a 100644 --- a/data-model/tools/configurations/application-deployment.json +++ b/tools/configurations/application-deployment.json @@ -1,5 +1,5 @@ { - "root": "data-model", + "root": "model", "targetclass": "ApplicationDeployment", "schemafile": "application-deployment.linkml.yaml", "markdowndoc": "application-deployment.md" diff --git a/data-model/tools/configurations/application-description.json b/tools/configurations/application-description.json similarity index 85% rename from data-model/tools/configurations/application-description.json rename to tools/configurations/application-description.json index 02517e29..e72066b1 100644 --- a/data-model/tools/configurations/application-description.json +++ b/tools/configurations/application-description.json @@ -1,5 +1,5 @@ { - "root": "data-model", + "root": "model", "targetclass": "ApplicationDescription", "schemafile": "application-description.linkml.yaml", "markdowndoc": "application-description.md" diff --git a/data-model/tools/configurations/deployment-status.json b/tools/configurations/deployment-status.json similarity index 84% rename from data-model/tools/configurations/deployment-status.json rename to tools/configurations/deployment-status.json index 723601b3..c3cecd41 100644 --- a/data-model/tools/configurations/deployment-status.json +++ b/tools/configurations/deployment-status.json @@ -1,5 +1,5 @@ { - "root": "data-model", + "root": "model", "targetclass": "DeploymentStatusManifest", "schemafile": "deployment-status.linkml.yaml", "markdowndoc": "deployment-status.md" diff --git a/data-model/tools/configurations/desired-state-manifest.json b/tools/configurations/desired-state-manifest.json similarity index 85% rename from data-model/tools/configurations/desired-state-manifest.json rename to tools/configurations/desired-state-manifest.json index 82d68b74..a25f5c33 100644 --- a/data-model/tools/configurations/desired-state-manifest.json +++ b/tools/configurations/desired-state-manifest.json @@ -1,5 +1,5 @@ { - "root": "data-model", + "root": "model", "targetclass": "DesiredStateManifest", "schemafile": "desired-state-manifest.linkml.yaml", "markdowndoc": "desired-state-manifest.md" diff --git a/data-model/tools/configurations/device-capabilities.json b/tools/configurations/device-capabilities.json similarity index 85% rename from data-model/tools/configurations/device-capabilities.json rename to tools/configurations/device-capabilities.json index 6e074251..e1d10814 100644 --- a/data-model/tools/configurations/device-capabilities.json +++ b/tools/configurations/device-capabilities.json @@ -1,5 +1,5 @@ { - "root": "data-model", + "root": "model", "targetclass": "DeviceCapabilitiesManifest", "schemafile": "device-capabilities.linkml.yaml", "markdowndoc": "device-capabilities.md" diff --git a/data-model/tools/generate-all.bash b/tools/generate-all.bash similarity index 100% rename from data-model/tools/generate-all.bash rename to tools/generate-all.bash diff --git a/data-model/tools/generate-class-diagram.bash b/tools/generate-class-diagram.bash similarity index 88% rename from data-model/tools/generate-class-diagram.bash rename to tools/generate-class-diagram.bash index d17801d1..ed31b11b 100755 --- a/data-model/tools/generate-class-diagram.bash +++ b/tools/generate-class-diagram.bash @@ -13,9 +13,9 @@ set -eu THIS_SCRIPT="$(readlink -f "${0}")" THIS_DIR="$(dirname "${THIS_SCRIPT}")" -ROOT_DIR="$(dirname "$(dirname "${THIS_DIR}")")" +ROOT_DIR="$(dirname "${THIS_DIR}")" -TGT_DIR="${ROOT_DIR}/generated/diagrams" +TGT_DIR="${ROOT_DIR}/build/artifacts/diagrams" if command -v poetry &>/dev/null; then RUN="poetry run" @@ -34,7 +34,7 @@ fi mkdir -p "${TGT_DIR}" # Holistic class diagram -${RUN} linkml generate plantuml "${ROOT_DIR}/data-model/margo-data-model.linkml.yaml" | +${RUN} linkml generate plantuml "${ROOT_DIR}/model/margo-data-model.linkml.yaml" | sed "s/@enduml/DeploymentAnnotations ..> ApplicationDescription\n@enduml/" | sed "s/@enduml/DeploymentStatusManifest ..> ApplicationDeployment\n@enduml/" | sed "s/@enduml/DesiredStateManifest ..> ApplicationDeployment\n@enduml/" >"${TMP_PLANTUML_FILE}" @@ -53,7 +53,7 @@ ${RUN} linkml generate plantuml \ --classes Parameter \ --classes Configuration \ --classes DeploymentProfileDescription \ - "${ROOT_DIR}/data-model/application-description.linkml.yaml" | + "${ROOT_DIR}/model/application-description.linkml.yaml" | sed "/Component.*{$/,/}/d" \ >"${TMP_PLANTUML_FILE}" @@ -64,7 +64,7 @@ ${RUN} linkml generate plantuml \ --classes DeploymentStatusManifest \ --classes ApplicationDeployment \ --classes DeploymentProfile \ - "${ROOT_DIR}/data-model/margo-data-model.linkml.yaml" | + "${ROOT_DIR}/model/margo-data-model.linkml.yaml" | sed "s/@enduml/DeploymentStatusManifest ..> ApplicationDeployment\n@enduml/" | sed "s/@enduml/ComponentStatus ..> Component\n@enduml/" \ >"${TMP_PLANTUML_FILE}" @@ -74,7 +74,7 @@ curl -H "Content-Type: test/plain" --silent --data-binary @"${TMP_PLANTUML_FILE} # Class diagram focused on DesiredStateManifest ${RUN} linkml generate plantuml \ --classes DesiredStateManifest \ - "${ROOT_DIR}/data-model/margo-data-model.linkml.yaml" | + "${ROOT_DIR}/model/margo-data-model.linkml.yaml" | sed "s/@enduml/DesiredStateManifest ..> ApplicationDeployment\n@enduml/" \ >"${TMP_PLANTUML_FILE}" @@ -85,7 +85,7 @@ ${RUN} linkml generate plantuml \ --classes DeviceCapabilitiesManifest \ --classes Properties \ --classes Resources \ - "${ROOT_DIR}/data-model/margo-data-model.linkml.yaml" \ + "${ROOT_DIR}/model/margo-data-model.linkml.yaml" \ >"${TMP_PLANTUML_FILE}" curl -H "Content-Type: test/plain" --silent --data-binary @"${TMP_PLANTUML_FILE}" https://kroki.io/plantuml/svg -o "${TGT_DIR}/DeviceCapabilities-ClassDiagram.svg" @@ -101,7 +101,7 @@ ${RUN} linkml generate plantuml \ --classes ComposeDeploymentProfile \ --classes HelmDeploymentProfile \ --classes Component \ - "${ROOT_DIR}/data-model/application-deployment.linkml.yaml" | + "${ROOT_DIR}/model/application-deployment.linkml.yaml" | sed "s/@enduml/DeploymentAnnotations ..> ApplicationDescription\n@enduml/" \ >"${TMP_PLANTUML_FILE}" diff --git a/data-model/tools/generate-docs.bash b/tools/generate-docs.bash similarity index 59% rename from data-model/tools/generate-docs.bash rename to tools/generate-docs.bash index 714b7844..091661b3 100755 --- a/data-model/tools/generate-docs.bash +++ b/tools/generate-docs.bash @@ -5,7 +5,7 @@ set -eu THIS_SCRIPT="$(readlink -f "${0}")" THIS_DIR="$(dirname "${THIS_SCRIPT}")" -ROOT_DIR="$(dirname "$(dirname "${THIS_DIR}")")" +ROOT_DIR="$(dirname "${THIS_DIR}")" TMP_DIR="$(mktemp -d)" @@ -29,11 +29,12 @@ else RUN="" fi -TGT_DIR="${ROOT_DIR}/generated/markdown_main-classes" -MERGED_DIR="${ROOT_DIR}/merged" +TGT_DIR="${ROOT_DIR}/build/artifacts/main-classes" +MERGED_DIR="${ROOT_DIR}/build/site" mkdir -p "${TGT_DIR}" "${MERGED_DIR}" +cp -R -H "${ROOT_DIR}/docs/"* "${MERGED_DIR}/" cp -R -H "${ROOT_DIR}/system-design/"* "${MERGED_DIR}/" # Main classes @@ -41,11 +42,11 @@ cp -R -H "${ROOT_DIR}/system-design/"* "${MERGED_DIR}/" for schema_name in "application-description" "application-deployment" "deployment-status" "desired-state-manifest" "device-capabilities"; do ${RUN} linkml generate doc \ --directory="${TMP_DIR}" \ - --template-directory="${ROOT_DIR}/data-model/resources/markdown-templates_main-classes" \ + --template-directory="${ROOT_DIR}/tools/templates/main-classes" \ --preserve-names \ --stacktrace \ - --example-directory="${ROOT_DIR}/data-model/resources/examples/valid" \ - "${ROOT_DIR}/data-model/${schema_name}.linkml.yaml" >/dev/null + --example-directory="${ROOT_DIR}/model/examples/valid" \ + "${ROOT_DIR}/model/${schema_name}.linkml.yaml" >/dev/null mv "${TMP_DIR}/index.md" "${TGT_DIR}/${schema_name}.md" rm -rf "${TMP_DIR:?}/*" @@ -57,35 +58,35 @@ mv "${TGT_DIR}/application-description.md" "${MERGED_DIR}/specification/applicat # Whole Data Model -TGT_DIR="${ROOT_DIR}/generated/markdown" +TGT_DIR="${ROOT_DIR}/build/artifacts/markdown" mkdir -p "${TGT_DIR}" ${RUN} linkml generate doc \ --directory="${TGT_DIR}" \ - --template-directory="${ROOT_DIR}/data-model/resources/markdown-templates" \ + --template-directory="${ROOT_DIR}/tools/templates/model" \ --preserve-names \ --stacktrace \ - --example-directory="${ROOT_DIR}/data-model/resources/examples/valid" \ - "${ROOT_DIR}/data-model/margo-data-model.linkml.yaml" >/dev/null + --example-directory="${ROOT_DIR}/model/examples/valid" \ + "${ROOT_DIR}/model/margo-data-model.linkml.yaml" >/dev/null -mkdir -p system-design/data-model -mv generated/markdown/* "${MERGED_DIR}/data-model/" +mkdir -p "${MERGED_DIR}/data-model" +mv "${TGT_DIR}"/* "${MERGED_DIR}/data-model/" "${THIS_DIR}/generate-class-diagram.bash" -cp "${ROOT_DIR}/generated/diagrams/DataModel-ClassDiagram.svg" "${MERGED_DIR}/figures/" -cp "${ROOT_DIR}/generated/diagrams/DataModel-ClassDiagram.png" "${MERGED_DIR}/figures/" +mkdir -p "${MERGED_DIR}/figures" +cp "${ROOT_DIR}/build/artifacts/diagrams/DataModel-ClassDiagram.svg" "${MERGED_DIR}/figures/" +cp "${ROOT_DIR}/build/artifacts/diagrams/DataModel-ClassDiagram.png" "${MERGED_DIR}/figures/" "${THIS_DIR}/generate-openapi.bash" -# generate-openapi.bash writes to both generated/openapi/ and system-design/. -# Since system-design/ was already copied into merged/ above, copy the spec -# into merged/ now so mkdocs build can find it. -cp "${ROOT_DIR}/generated/openapi/workload-management-api-1.0.0.openapi.yaml" \ +# generate-openapi.bash writes to both build/artifacts/openapi/ and system-design/. +# Copy the spec into build/site/ so mkdocs build can find it. +cp "${ROOT_DIR}/build/artifacts/openapi/workload-management-api-1.0.0.openapi.yaml" \ "${MERGED_DIR}/specification/margo-management-interface/workload-management-api-1.0.0.yaml" # JSON Schemas: copy for download -JSON_SCHEMA_DIR="${ROOT_DIR}/generated/json-schemas" +JSON_SCHEMA_DIR="${ROOT_DIR}/build/artifacts/json-schemas" MERGED_JSON_SCHEMA_DIR="${MERGED_DIR}/json-schemas" mkdir -p "${MERGED_JSON_SCHEMA_DIR}" diff --git a/data-model/tools/generate-json-schemas.bash b/tools/generate-json-schemas.bash similarity index 67% rename from data-model/tools/generate-json-schemas.bash rename to tools/generate-json-schemas.bash index c2e93c54..14ff6e5b 100755 --- a/data-model/tools/generate-json-schemas.bash +++ b/tools/generate-json-schemas.bash @@ -5,9 +5,9 @@ set -eu THIS_SCRIPT="$(readlink -f "${0}")" THIS_DIR="$(dirname "${THIS_SCRIPT}")" -ROOT_DIR="$(dirname "$(dirname "${THIS_DIR}")")" +ROOT_DIR="$(dirname "${THIS_DIR}")" -TGT_DIR="${ROOT_DIR}/generated/json-schemas" +TGT_DIR="${ROOT_DIR}/build/artifacts/json-schemas" if command -v poetry &>/dev/null; then RUN="poetry run" @@ -22,5 +22,5 @@ fi mkdir -p "${TGT_DIR}" for schema in "application-deployment" "application-description" "deployment-status" "desired-state-manifest" "device-capabilities"; do - ${RUN} linkml generate json-schema "${ROOT_DIR}/data-model/${schema}.linkml.yaml" >"${TGT_DIR}/${schema}.schema.json" + ${RUN} linkml generate json-schema "${ROOT_DIR}/model/${schema}.linkml.yaml" >"${TGT_DIR}/${schema}.schema.json" done diff --git a/data-model/tools/generate-openapi.bash b/tools/generate-openapi.bash similarity index 57% rename from data-model/tools/generate-openapi.bash rename to tools/generate-openapi.bash index 4ce9204d..3764e3c5 100755 --- a/data-model/tools/generate-openapi.bash +++ b/tools/generate-openapi.bash @@ -5,12 +5,13 @@ set -eu THIS_SCRIPT="$(readlink -f "${0}")" THIS_DIR="$(dirname "${THIS_SCRIPT}")" -ROOT_DIR="$(dirname "$(dirname "${THIS_DIR}")")" +ROOT_DIR="$(dirname "${THIS_DIR}")" -TGT_DIR="${ROOT_DIR}/generated/openapi" +TGT_DIR="${ROOT_DIR}/build/artifacts/openapi" TGT_FILE="${TGT_DIR}/workload-management-api-1.0.0.openapi.yaml" -# Tracked location in system-design/ — this is what mkdocs and the repo use +# Tracked location in system-design/ — this is what the repo uses +# generate-docs.bash copies system-design/ into build/site/ for mkdocs SYSTEM_DESIGN_FILE="${ROOT_DIR}/system-design/specification/margo-management-interface/workload-management-api-1.0.0.yaml" if command -v poetry &>/dev/null; then @@ -27,20 +28,20 @@ mkdir -p "${TGT_DIR}" # TODO: remove following block after LinkML release >v1.11.1 ( - cd data-model/tools - poetry run python openapigen.py --keep-unreferenced --inline-enums -t workload-management-api-1.0.0.openapi.yaml ../margo-data-model.linkml.yaml \ + cd "${THIS_DIR}" + ${RUN} python openapigen.py --keep-unreferenced --inline-enums -t templates/openapi/workload-management-api-1.0.0.openapi.yaml ../model/margo-data-model.linkml.yaml \ >"${TGT_FILE}" cp "${TGT_FILE}" "${SYSTEM_DESIGN_FILE}" ) exit ${RUN} linkml generate openapi \ - --template "${THIS_DIR}/workload-management-api-1.0.0.openapi.yaml" \ + --template "${THIS_DIR}/templates/openapi/workload-management-api-1.0.0.openapi.yaml" \ --inline-enums \ --keep-unreferenced \ - "${ROOT_DIR}/data-model/margo-data-model.linkml.yaml" \ + "${ROOT_DIR}/model/margo-data-model.linkml.yaml" \ >"${TGT_FILE}" # Copy to the tracked location in system-design/ so it is picked up by -# generate-docs.bash (which copies system-design/ → merged/) and by git +# generate-docs.bash (which copies system-design/ → build/site/) and by git cp "${TGT_FILE}" "${SYSTEM_DESIGN_FILE}" diff --git a/data-model/tools/openapigen.py b/tools/openapigen.py similarity index 100% rename from data-model/tools/openapigen.py rename to tools/openapigen.py diff --git a/src/specification/applications/resources/class.md.jinja2 b/tools/templates/main-classes/class.md.jinja2 similarity index 100% rename from src/specification/applications/resources/class.md.jinja2 rename to tools/templates/main-classes/class.md.jinja2 diff --git a/data-model/resources/markdown-templates_main-classes/index.md.jinja2 b/tools/templates/main-classes/index.md.jinja2 similarity index 95% rename from data-model/resources/markdown-templates_main-classes/index.md.jinja2 rename to tools/templates/main-classes/index.md.jinja2 index 5ab9f8f9..cd033865 100644 --- a/data-model/resources/markdown-templates_main-classes/index.md.jinja2 +++ b/tools/templates/main-classes/index.md.jinja2 @@ -2,7 +2,7 @@ IMPORTANT NOTE: This MarkDown document has been generated from the Margo data model and should not be manually changed! The LinkML schema for this schema is available in https://github.com/margo/specification/tree/pre-draft/data-model/ -The MarkDown document template is available in https://github.com/margo/specification/tree/pre-draft/data-model/resources/markdown-templates_main-classes/index.md.jinja2 +The MarkDown document template is available in https://github.com/margo/specification/tree/pre-draft/tools/templates/main-classes/index.md.jinja2 --> {%- macro format_range(slot) -%} {%- if slot.multivalued -%} diff --git a/data-model/resources/markdown-templates/class.md.jinja2 b/tools/templates/model/class.md.jinja2 similarity index 100% rename from data-model/resources/markdown-templates/class.md.jinja2 rename to tools/templates/model/class.md.jinja2 diff --git a/data-model/resources/markdown-templates/class_diagram.md.jinja2 b/tools/templates/model/class_diagram.md.jinja2 similarity index 100% rename from data-model/resources/markdown-templates/class_diagram.md.jinja2 rename to tools/templates/model/class_diagram.md.jinja2 diff --git a/data-model/resources/markdown-templates/common_metadata.md.jinja2 b/tools/templates/model/common_metadata.md.jinja2 similarity index 100% rename from data-model/resources/markdown-templates/common_metadata.md.jinja2 rename to tools/templates/model/common_metadata.md.jinja2 diff --git a/data-model/resources/markdown-templates/enum.md.jinja2 b/tools/templates/model/enum.md.jinja2 similarity index 100% rename from data-model/resources/markdown-templates/enum.md.jinja2 rename to tools/templates/model/enum.md.jinja2 diff --git a/data-model/resources/markdown-templates/index.md.jinja2 b/tools/templates/model/index.md.jinja2 similarity index 96% rename from data-model/resources/markdown-templates/index.md.jinja2 rename to tools/templates/model/index.md.jinja2 index d02bed2b..a6894b19 100644 --- a/data-model/resources/markdown-templates/index.md.jinja2 +++ b/tools/templates/model/index.md.jinja2 @@ -2,7 +2,7 @@ IMPORTANT NOTE: This MarkDown document has been generated from the Margo data model and should not be manually changed! The LinkML schema for this schema is available in https://github.com/margo/specification/tree/pre-draft/data-model/ -The MarkDown document template is available in https://github.com/margo/specification/tree/pre-draft/data-model/resources/markdown-templates/index.md.jinja2 +The MarkDown document template is available in https://github.com/margo/specification/tree/pre-draft/tools/templates/model/index.md.jinja2 --> # {% if schema.title %}{{ schema.title }}{% else %}{{ schema.name }}{% endif %} diff --git a/data-model/resources/markdown-templates/slot.md.jinja2 b/tools/templates/model/slot.md.jinja2 similarity index 100% rename from data-model/resources/markdown-templates/slot.md.jinja2 rename to tools/templates/model/slot.md.jinja2 diff --git a/data-model/resources/markdown-templates/subset.md.jinja2 b/tools/templates/model/subset.md.jinja2 similarity index 100% rename from data-model/resources/markdown-templates/subset.md.jinja2 rename to tools/templates/model/subset.md.jinja2 diff --git a/data-model/resources/markdown-templates/type.md.jinja2 b/tools/templates/model/type.md.jinja2 similarity index 100% rename from data-model/resources/markdown-templates/type.md.jinja2 rename to tools/templates/model/type.md.jinja2 diff --git a/data-model/tools/workload-management-api-1.0.0.openapi.yaml b/tools/templates/openapi/workload-management-api-1.0.0.openapi.yaml similarity index 100% rename from data-model/tools/workload-management-api-1.0.0.openapi.yaml rename to tools/templates/openapi/workload-management-api-1.0.0.openapi.yaml From 82973233bf471f4b07241ed2adfd63d1626caf7a Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Tue, 28 Jul 2026 13:28:48 +0200 Subject: [PATCH 18/24] feat: support nullable required slots Signed-off-by: Silvano Cirujano Cuesta --- model/desired-state-manifest.linkml.yaml | 4 +++ tools/openapigen.py | 37 +++++++++++++++++++++--- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/model/desired-state-manifest.linkml.yaml b/model/desired-state-manifest.linkml.yaml index 7429357c..e441f63f 100644 --- a/model/desired-state-manifest.linkml.yaml +++ b/model/desired-state-manifest.linkml.yaml @@ -28,6 +28,10 @@ classes: Package optimization containing multiple ApplicationDeployment YAMLs. range: Bundle required: true + # The key must always be present, but its value MUST be null when there + # are zero deployments. UNCOMMITTED decouples "key required" from + # "value non-null", yielding a nullable sub-schema. + value_presence: UNCOMMITTED deployments: description: >- List of deployment objects describing each workload. diff --git a/tools/openapigen.py b/tools/openapigen.py index fb35ca22..be0a21f5 100644 --- a/tools/openapigen.py +++ b/tools/openapigen.py @@ -131,19 +131,41 @@ def _fix_openapi_spec(self, element: dict | list) -> dict | list | None: Transform JSON Schema constructs into OpenAPI v3.0.3 compatible forms: - ``const`` becomes ``enum`` with a single value (OpenAPI 3.0 doesn't support ``const``) - - ``type`` as a list (e.g. nullable ``["string", "null"]``) becomes ``anyOf`` + - ``type: [X, "null"]`` becomes ``{type: X, nullable: true}`` (OpenAPI 3.0 has no ``"null"`` type) + - ``anyOf: [{$ref: X}, {type: "null"}]`` records ``X`` as a nullable schema and collapses to + a plain ``$ref`` (the ``nullable: true`` is applied on the referenced schema in a later pass, + because OpenAPI 3.0 ignores keywords placed as siblings of ``$ref``) - ``$ref`` paths are rewritten from ``#/$defs/`` to ``#/components/schemas/`` """ fixed_element = None if isinstance(element, dict): + # anyOf: [{$ref}, {type: null}] → nullable reference + any_of = element.get("anyOf") + if isinstance(any_of, list) and len(any_of) == 2: + refs = [m for m in any_of if isinstance(m, dict) and set(m) == {"$ref"}] + nulls = [m for m in any_of if m == {"type": "null"}] + if len(refs) == 1 and len(nulls) == 1: + ref = refs[0]["$ref"] + schema_name = ref.split("/")[-1] + self._nullable_schemas.add(schema_name) + fixed_element = {} + for key, value in element.items(): + if key == "anyOf": + fixed_element["$ref"] = ref + else: + fixed_element[key] = value + return self._fix_openapi_spec(fixed_element) fixed_element = {} for key, value in element.items(): if key == "const": fixed_element["enum"] = [value] elif key == "type" and isinstance(value, list): - fixed_element["anyOf"] = [ - {"type": item} for item in value if item != "null" - ] + non_null = [item for item in value if item != "null"] + if "null" in value and len(non_null) == 1: + fixed_element["type"] = non_null[0] + fixed_element["nullable"] = True + else: + fixed_element["anyOf"] = [{"type": item} for item in non_null] else: if isinstance(value, dict | list): value = self._fix_openapi_spec(value) @@ -361,6 +383,7 @@ def serialize(self, template_file: str = "", **kwargs) -> str: ] # data schemas provided by the template all_req_data_schemas = {} # data schemas directly or transitively required by the API self._renaming = {} # openapi <-> linkml renaming map + self._nullable_schemas: set[str] = set() # schemas made nullable via a nullable $ref directly_required_linkml_elements: set[str] = ( set() ) # LinkML class/type names of directly-referenced schemas @@ -445,6 +468,12 @@ def serialize(self, template_file: str = "", **kwargs) -> str: for data_schema in sanitized_data_schemas.values(): data_schema.pop("title", None) sanitized_data_schemas = self._fix_openapi_spec(sanitized_data_schemas) + # Apply schema-level `nullable: true` for schemas referenced by a nullable $ref. + # Done before renaming, since `_nullable_schemas` holds pre-rename names. + for schema_name in self._nullable_schemas: + target = sanitized_data_schemas.get(schema_name) + if isinstance(target, dict): + target["nullable"] = True sanitized_data_schemas = self._strip_additional_properties(sanitized_data_schemas) if self._renaming: sanitized_data_schemas = self._rename(sanitized_data_schemas) From ffd46cefbcd4d7e698f693ccea37190dce6c35f7 Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Tue, 28 Jul 2026 15:40:09 +0200 Subject: [PATCH 19/24] docs: describe how to generate the openapi yaml Signed-off-by: Silvano Cirujano Cuesta --- CONTRIBUTING.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 67889e18..71317322 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -157,6 +157,22 @@ The script [generate-docs.bash](./tools/generate-docs.bash) generates MarkDown d The LinkML specification documents can be found in the directory [model](./model/) and the resulting MarkDown documents are integrated with the other MarkDown documents in the directory [docs](./docs/). +#### Generate OpenAPI YAML Documents + +The script [generate-openapi.bash](./tools/generate-openapi.bash) generates the OpenAPI v3.0.3 specification YAML file for the Workload Management API. + +It uses the custom generator [openapigen.py](./tools/openapigen.py) which composes a user-provided OpenAPI template (containing API header, paths/endpoints, and security schemes) with JSON Schema components generated from the LinkML data model. Only schemas referenced by the template's endpoints (and their transitive dependencies) are included. + +The generation: + +1. Reads the aggregate data model [`model/margo-data-model.linkml.yaml`](./model/margo-data-model.linkml.yaml) as the LinkML source. +2. Reads the OpenAPI template [`tools/templates/openapi/workload-management-api-1.0.0.openapi.yaml`](./tools/templates/openapi/workload-management-api-1.0.0.openapi.yaml) which defines the API endpoints, request/response structures, and security schemes. +3. Generates JSON Schema definitions for all referenced classes and injects them under `components/schemas` in the template. +4. Writes the output to `build/artifacts/openapi/workload-management-api-1.0.0.openapi.yaml`. +5. Copies the result into the tracked location `system-design/specification/margo-management-interface/workload-management-api-1.0.0.yaml` for version control. `generate-docs.bash` copies it from there into `build/site/` for MkDocs. + +When adding new API endpoints, edit the OpenAPI template to add the corresponding `paths` entries referencing the relevant `$ref: "#/components/schemas/"` schemas. + #### Generate HTML Documents The documentation gets converted into HTML for public availability using `mkdocs`. From 2fbd80807555f23e8a5500837b1161abc7c621ed Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Sat, 18 Jul 2026 21:59:59 +0200 Subject: [PATCH 20/24] generated: class diagrams Signed-off-by: Silvano Cirujano Cuesta --- model/diagrams/all-classes.png | Bin 0 -> 1386890 bytes model/diagrams/application-deployment.png | Bin 0 -> 24205 bytes model/diagrams/application-description.png | Bin 0 -> 71290 bytes model/diagrams/desired-state-manifest.png | Bin 0 -> 7230 bytes model/diagrams/device-capabilities.png | Bin 0 -> 16031 bytes model/diagrams/margo-data-model.png | Bin 0 -> 114530 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 model/diagrams/all-classes.png create mode 100644 model/diagrams/application-deployment.png create mode 100644 model/diagrams/application-description.png create mode 100644 model/diagrams/desired-state-manifest.png create mode 100644 model/diagrams/device-capabilities.png create mode 100644 model/diagrams/margo-data-model.png diff --git a/model/diagrams/all-classes.png b/model/diagrams/all-classes.png new file mode 100644 index 0000000000000000000000000000000000000000..a6db658613dfc070373bd85adfc2dd98938673fd GIT binary patch literal 1386890 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
  • B1-b+3g`?U~lQDr{#5EVoJw;R4wl(-A_U3$g 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%0Ai!D0ayxx01ax<{N1G;i2M`08L!16j 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 z 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�Lx8o-~p#XwwQYM=jwOwS_(wWG79 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Π}I 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%0AKnH4U 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

    N5KeACXLWv1%zhpD4rDgOXyQ`GF!Sr(x32wg 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[Sm}FX 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�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�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 literal 0 HcmV?d00001 diff --git a/model/diagrams/application-deployment.png b/model/diagrams/application-deployment.png new file mode 100644 index 0000000000000000000000000000000000000000..551bbb697e01544ccf8b5908bf5ab16fd13693c5 GIT binary patch literal 24205 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 literal 0 HcmV?d00001 diff --git a/model/diagrams/application-description.png b/model/diagrams/application-description.png new file mode 100644 index 0000000000000000000000000000000000000000..a13671409f6b5c5101bc6a13996643cab9ffaf98 GIT binary patch literal 71290 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 literal 0 HcmV?d00001 diff --git a/model/diagrams/desired-state-manifest.png b/model/diagrams/desired-state-manifest.png new file mode 100644 index 0000000000000000000000000000000000000000..68525a50d1a9147c0a2ef8594c57427d356da973 GIT binary patch literal 7230 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 literal 0 HcmV?d00001 From d2b7c0b6f2c221bdcff8d223bc43250ffea58273 Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Tue, 28 Jul 2026 16:57:25 +0200 Subject: [PATCH 21/24] docs: describe how to compare the openapi Signed-off-by: Silvano Cirujano Cuesta --- AGENTS.md | 35 +++++++++++++++++++++++++++-------- legacy/README.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+), 8 deletions(-) create mode 100644 legacy/README.md diff --git a/AGENTS.md b/AGENTS.md index b70c7d68..29991887 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -22,11 +22,15 @@ The final HTML documentation is built with [MkDocs](https://www.mkdocs.org/) usi │ ├── generation-gap.md # Differences between pre-draft and generated OpenAPI spec │ ├── examples/{valid,invalid}/ # Valid and invalid example files │ └── diagrams/ # Static PNG diagrams +├── system-design/ # Tracked specification content (generated + manually-authored) +│ └── specification/margo-management-interface/ +│ ├── specification-extensions.md # Manually-authored extensions +│ └── workload-management-api-1.0.0.yaml # Generated OpenAPI spec ├── tools/ # Generation & validation scripts │ ├── generate-all.bash # Runs all generators in sequence -│ ├── generate-docs.bash # Generates MarkDown from LinkML +│ ├── generate-docs.bash # Generates MarkDown from LinkML, copies system-design/ → build/site/ │ ├── generate-json-schemas.bash # Generates JSON-Schema artifacts -│ ├── generate-openapi.bash # Generates OpenAPI spec +│ ├── generate-openapi.bash # Generates OpenAPI spec (to build/artifacts/ + system-design/) │ ├── generate-class-diagram.bash # Generates PlantUML class diagrams │ ├── check-examples.bash # Validates schemas and examples │ ├── openapigen.py # Custom OpenAPI generator @@ -41,17 +45,31 @@ The final HTML documentation is built with [MkDocs](https://www.mkdocs.org/) usi │ ├── main-classes/ # Templates for per-resource docs │ └── openapi/ │ └── workload-management-api-1.0.0.openapi.yaml # OpenAPI template -├── docs/ # Manually-authored + generated MarkDown (copied into build/site/ by generate-docs.bash) -│ └── specification/ # ← generated .md files land here +├── docs/ # Manually-authored MarkDown (copied into build/site/ by generate-docs.bash) +│ ├── index.md +│ ├── CNAME +│ ├── assets/ +│ ├── css/ +│ └── specification/ +│ ├── margo-management-interface/ # Manually-authored pages (api-requirements, certificate-api, etc.) +│ ├── applications/ # application-registry.md (manually-authored) +│ ├── margo-devices/ # device-requirements.md +│ └── observability/ # 3 pages (publishing/collecting/consuming) ├── build/ # Generated artifacts (tracked in git) │ ├── artifacts/ # diagrams, OpenAPI, JSON-Schema, intermediate markdown +│ │ ├── diagrams/ +│ │ ├── json-schemas/ +│ │ ├── main-classes/ # Generated per-resource .md (intermediate) +│ │ ├── markdown/ # Generated aggregate data-model .md (intermediate) +│ │ └── openapi/ # Generated OpenAPI spec │ └── site/ # Merged MarkDown tree used by mkdocs build +├── CONTRIBUTING.md # Contribution requirements and process ├── legacy/ # Archived superseded trees │ ├── doc-generation/ # Legacy scripts (superseded by tools/) │ ├── src-specification/ # Legacy per-resource schemas + templates + examples │ └── validate-openapi.py # One-shot migration aid: compares generated spec vs pre-draft branch ├── mkdocs.yml # MkDocs configuration -└── pyproject.toml # Python dependencies (linkml>=1.11.0, mkdocs, etc.) +└── pyproject.toml # Python dependencies (linkml@git, mkdocs, mkdocs-material, openapi-spec-validator) ``` ## Setup @@ -69,7 +87,7 @@ poetry install ### Option C: pip ```bash -pip install ./pyproject.toml +pip install -e . ``` ## Key Commands @@ -105,7 +123,7 @@ This script: - Generates per-resource MarkDown using `tools/templates/main-classes/` - Generates the full data model MarkDown using `tools/templates/model/` - Copies generated diagrams and OpenAPI spec into the merged tree -- Copies everything from `docs/` and `build/artifacts/` into `build/site/` (which is what `mkdocs build` reads) +- Copies everything from `docs/` and `system-design/` into `build/site/` (which is what `mkdocs build` reads) ### Generate JSON-Schemas @@ -168,6 +186,7 @@ model/*.linkml.yaml (source of truth — LinkML schemas) │ ├──► generate-openapi.bash │ │ → build/artifacts/openapi/workload-management-api-1.0.0.openapi.yaml │ │ → moved into build/site/specification/margo-management-interface/ + │ │ → also written to system-design/specification/margo-management-interface/ (tracked) │ │ │ └──► JSON schemas copied into build/site/json-schemas/ │ @@ -197,7 +216,7 @@ The `legacy/src-specification/` directory contains the original per-resource Lin The `legacy/doc-generation/` directory contains the original generation and validation scripts. These have been superseded by `tools/`. Do not use the old scripts. -The `legacy/validate-openapi.py` script is a one-shot migration aid that compares the generated OpenAPI spec against the hand-written spec on the `pre-draft` branch. It becomes obsolete once `pre-draft` is fully replaced by the generated spec, at which point it should be deleted. +The `legacy/validate-openapi.py` script is a one-shot migration aid that compares the generated OpenAPI spec against the hand-written spec on the `pre-draft` branch. See `legacy/README.md` for usage details. It becomes obsolete once `pre-draft` is fully replaced by the generated spec, at which point it should be deleted. ## How to Modify the LinkML Data Model diff --git a/legacy/README.md b/legacy/README.md new file mode 100644 index 00000000..08b77327 --- /dev/null +++ b/legacy/README.md @@ -0,0 +1,48 @@ +# Legacy + +This directory contains artifacts from the pre-migration era that should +disappear once this branch has been merged into `pre-draft`. + +- `doc-generation/` — original generation scripts (superseded by `tools/`). +- `src-specification/` — original per-resource schemas and templates + (superseded by `model/` and `tools/templates/`). +- `validate-openapi.py` — one-shot migration aid comparing the generated + OpenAPI spec against the hand-written `pre-draft` branch. + +## Usage: `validate-openapi.py` + +Requires Poetry dependencies (`poetry install`). Run from repository root. + +### Full comparison + +``` +poetry run python legacy/validate-openapi.py +``` + +Prints a structural diff between the generated OpenAPI spec and the `pre-draft` +branch: added/removed schemas, changed properties, type mismatches. + +### Single schema detail + +``` +poetry run python legacy/validate-openapi.py --schema +poetry run python legacy/validate-openapi.py -s +``` + +> [!Tip] +> Example: `poetry run python legacy/validate-openapy.py --schema DeploymentBundleRef` + +Shows verbose details for one schema only. `` is the name as it +appears in the generated output's `components/schemas`. + +### With YAML dump + +``` +poetry run python legacy/validate-openapi.py --schema --yaml +poetry run python legacy/validate-openapi.py -s -y +``` + +Prints the pre-draft and generated YAML for the given schema. + +> [!Tip] +> Example: `poetry run python legacy/validate-openapy.py --schema DeploymentBundleRef --yaml` From 3c7f9b14966c8534338e15ab00b5b334fef8d54e Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Wed, 29 Jul 2026 11:58:39 +0200 Subject: [PATCH 22/24] fix: get openapi v3.1.0 working Pull unreleased LinkML and latest OpenApiGenerator updates to get OpenAPI v3.1.0 working. Signed-off-by: Silvano Cirujano Cuesta --- pyproject.toml | 1 + tools/openapigen.py | 606 +++++++++--------- ...workload-management-api-1.0.0.openapi.yaml | 2 +- 3 files changed, 321 insertions(+), 288 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index afc1c015..46888a38 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,6 +19,7 @@ dependencies = [ 'linkml-runtime @ git+https://github.com/linkml/linkml.git#subdirectory=packages/linkml_runtime', "openapi-spec-validator (>=0.9.0,<0.10.0)", ] +# 'linkml>=1.11.1', [tool.poetry] requires-poetry = ">=2.0" diff --git a/tools/openapigen.py b/tools/openapigen.py index be0a21f5..b05e83f0 100644 --- a/tools/openapigen.py +++ b/tools/openapigen.py @@ -1,28 +1,38 @@ -"""Generate OpenAPI v3.0.3 Specification YAML files.""" +"""Generate OpenAPI YAML files.""" import json import os import re import textwrap from dataclasses import dataclass, field +from typing import cast import click import yaml -from openapi_spec_validator import OpenAPIV30SpecValidator, validate +from openapi_spec_validator import OpenAPIV30SpecValidator, OpenAPIV31SpecValidator +from openapi_spec_validator import validate as openapi_validate +from openapi_spec_validator.validation.validators import SpecValidator as OaSpecValidator +from pydantic import BaseModel from referencing import Registry, Resource from referencing.jsonschema import DRAFT4 from yaml import MappingNode, ScalarNode from linkml._version import __version__ from linkml.generators.jsonschemagen import JsonSchemaGenerator, json_schema_types +from linkml.generators.pydanticgen import PydanticGenerator from linkml.utils.generator import Generator, shared_arguments -openapi_generic_template = """openapi: 3.0.3 +SUPPORTED_OPENAPI_VERSIONS = ["3.0.3", "3.1.0"] + +openapi_generic_template = """# TODO: remove this whole comment block after processing # This is a valid OpenAPI template to be used by the LinkML OpenAPI generator. +# Make sure to set the right OpenAPI version in the `openapi` top-level attribute. +# These are the supported OpenAPI versions: {openapi_version_list} # It adds one (random) class or type of the LinkML schema as an example. # Please adapt it to your needs. # See more information in the online documentation: # https://linkml.io/linkml/generators/openapi.html +openapi: x.y.z info: title: Generic example referring in LinkML-modelled resources version: 0.1.0 @@ -39,19 +49,24 @@ content: application/json: schema: + # TODO: remove this whole comment block after processing # any broken reference will cause template instantiation to fail # OpenAPI editors typically also report them $ref: '#/components/schemas/{data_schema}' components: + # TODO: remove this whole comment block after processing # any data schema provided here that is not used by at least # one endpoint will be eliminated from the template instantiation # OpenAPI editors typically also report them schemas: + # TODO: remove this whole comment block after processing # this resource name can differ from the name in the LinkML schema # it must only match the corresponding endpoint `$ref` references + # it creates a mapping between names in OpenAPI and LinkML {data_schema}: type: object description: Resource schema to be generated from the LinkML data model. + # TODO: remove this whole comment block after processing # schema ID mismatching with provided schema will cause template # instantiation to fail x-linkml-schema: {linkml_schema_id} @@ -62,40 +77,70 @@ @dataclass class OpenApiGenerator(Generator): """ - Generates OpenAPI v3.0.3 specification YAML from a LinkML schema. + Generates OpenAPI YAML from a LinkML schema. The generator composes a user-provided OpenAPI template (containing the API header, paths/endpoints, and security schemes) with JSON Schema components generated from the LinkML schema via :class:`.JsonSchemaGenerator`. Only data schemas referenced by the template's endpoints (and their transitive dependencies) are included in the ``components/schemas`` section. + + Currently following generation paths are supported (others might follow): + + * **v3.0.3** — uses :class:`.JsonSchemaGenerator` and applies post-processing + transforms (``const`` → ``enum``, nullable ``type`` lists → ``anyOf``, + ``$defs`` → ``components/schemas``) required by OpenAPI 3.0.3. + * **v3.1.0** — uses :class:`.PydanticGenerator` to compile a Python module, + then calls :meth:`pydantic.BaseModel.model_json_schema` on each class. + Because OpenAPI 3.1.0 is fully aligned with JSON Schema 2020-12, no + post-processing transforms are needed beyond rewriting ``$defs`` references + and stripping ``linkml_meta`` annotations. + + The OpenAPI version to be generated is obtained from the template's top-level + attribute `openapi`. """ generatorname = os.path.basename(__file__) generatorversion = "0.2.0" - valid_formats = ["openapi303"] + valid_formats = ["openapi"] file_extension = "yaml" uses_schemaloader = False _template: dict = field(default_factory=dict, init=False, repr=False) - _renaming: dict[str, str] = field(default_factory=dict, init=False, repr=False) keep_unreferenced: bool = False inline_enums: bool = False # Mapping of valid_formats entries to OpenAPI version strings. # Extend this dict when adding support for additional OpenAPI versions. - _openapi_versions: dict[str, str] = field( - default_factory=lambda: {"openapi303": "3.0.3"}, + _openapi_versions: list[str] = field( + default_factory=lambda: SUPPORTED_OPENAPI_VERSIONS, init=False, repr=False, ) # Mapping of OpenAPI version strings to validators from openapi-spec-validator. # Extend this dict when adding support for additional OpenAPI versions. - _openapi_validators: dict[str, type] = field( - default_factory=lambda: {"3.0.3": OpenAPIV30SpecValidator}, + _openapi_validators: dict[str, type[OaSpecValidator]] = field( + default_factory=lambda: {"3.0.3": OpenAPIV30SpecValidator, "3.1.0": OpenAPIV31SpecValidator}, init=False, repr=False, ) + _openapi_version = "" # OpenAPI version declared in the template + + def _validate_oa_template(self, oa_validator_class: type[OaSpecValidator], expected_version: str): + """Validate the OpenAPI template""" + # Validate the input template against the OpenAPI specification. + # This also catches dangling $ref targets in endpoints. + openapi_validate(self._template, cls=oa_validator_class) + # Validation: every template schema must declare this LinkML schema. + if "components" in self._template and "schemas" in self._template["components"]: + for name, schema in self._template["components"]["schemas"].items(): + if schema["x-linkml-schema"] != self.schemaview.schema.id: + raise ValueError( + f"Template data schema '{name}' declares " + f"x-linkml-schema '{schema['x-linkml-schema']}' " + f"but the loaded schema has id '{self.schemaview.schema.id}'" + ) + def _find_referenced_schemas(self) -> set[str]: """Return the set of resource names referenced by the template's endpoints.""" result = set() @@ -104,71 +149,77 @@ def _find_referenced_schemas(self) -> set[str]: if "requestBody" in req_spec and "content" in req_spec["requestBody"]: for content_spec in req_spec["requestBody"]["content"].values(): if "$ref" in content_spec["schema"]: - resource_name = content_spec["schema"]["$ref"].removeprefix( - "#/components/schemas/" - ) + resource_name = content_spec["schema"]["$ref"].removeprefix("#/components/schemas/") result.add(resource_name) if "parameters" in req_spec: for param_spec in req_spec["parameters"]: if "$ref" in param_spec["schema"]: - resource_name = param_spec["schema"]["$ref"].removeprefix( - "#/components/schemas/" - ) + resource_name = param_spec["schema"]["$ref"].removeprefix("#/components/schemas/") result.add(resource_name) if "responses" in req_spec: for response in req_spec["responses"].values(): if "content" in response: for content_spec in response["content"].values(): if "$ref" in content_spec["schema"]: - resource_name = content_spec["schema"][ - "$ref" - ].removeprefix("#/components/schemas/") + resource_name = content_spec["schema"]["$ref"].removeprefix("#/components/schemas/") result.add(resource_name) return result - def _fix_openapi_spec(self, element: dict | list) -> dict | list | None: + def _generate_type_schema(self, type_name: str) -> dict: + """Build an OpenAPI-compatible JSON Schema for a LinkML TypeDefinition.""" + type_def = self.schemaview.get_type(type_name) + typ, fmt = json_schema_types.get(type_def.base.lower(), ("string", None)) + schema: dict = {} + if typ: + schema["type"] = str(typ) + if fmt: + schema["format"] = str(fmt) + if type_def.pattern: + schema["pattern"] = str(type_def.pattern) + if type_def.minimum_value is not None: + schema["minimum"] = str(type_def.minimum_value) + if type_def.maximum_value is not None: + schema["maximum"] = str(type_def.maximum_value) + if type_def.equals_string is not None: + schema["const"] = str(type_def.equals_string) + if type_def.equals_number is not None: + schema["const"] = str(type_def.equals_number) + if type_def.description: + schema["description"] = str(type_def.description) + return schema + + def _find_references(self, element: dict | list, referenced_schemas: set[str]) -> set[str]: + """Recursively collect all ``$ref`` target names from ``element`` into ``referenced_data_schemas``.""" + refd_schemas = referenced_schemas.copy() + if isinstance(element, dict): + if "$ref" in element: + refd_schemas.add(element["$ref"].replace("#/$defs/", "")) + for value in element.values(): + refd_schemas = self._find_references(value, refd_schemas) + elif isinstance(element, list): + for item in element: + refd_schemas = self._find_references(item, refd_schemas) + return refd_schemas + + def _fix_openapi_spec_v303(self, element: dict | list) -> dict | list | None: """ Transform JSON Schema constructs into OpenAPI v3.0.3 compatible forms: - - ``const`` becomes ``enum`` with a single value (OpenAPI 3.0 doesn't support ``const``) - - ``type: [X, "null"]`` becomes ``{type: X, nullable: true}`` (OpenAPI 3.0 has no ``"null"`` type) - - ``anyOf: [{$ref: X}, {type: "null"}]`` records ``X`` as a nullable schema and collapses to - a plain ``$ref`` (the ``nullable: true`` is applied on the referenced schema in a later pass, - because OpenAPI 3.0 ignores keywords placed as siblings of ``$ref``) + - ``const`` becomes ``enum`` with a single value + - ``type`` as a list (e.g. nullable ``["string", "null"]``) becomes ``anyOf`` - ``$ref`` paths are rewritten from ``#/$defs/`` to ``#/components/schemas/`` """ fixed_element = None if isinstance(element, dict): - # anyOf: [{$ref}, {type: null}] → nullable reference - any_of = element.get("anyOf") - if isinstance(any_of, list) and len(any_of) == 2: - refs = [m for m in any_of if isinstance(m, dict) and set(m) == {"$ref"}] - nulls = [m for m in any_of if m == {"type": "null"}] - if len(refs) == 1 and len(nulls) == 1: - ref = refs[0]["$ref"] - schema_name = ref.split("/")[-1] - self._nullable_schemas.add(schema_name) - fixed_element = {} - for key, value in element.items(): - if key == "anyOf": - fixed_element["$ref"] = ref - else: - fixed_element[key] = value - return self._fix_openapi_spec(fixed_element) fixed_element = {} for key, value in element.items(): if key == "const": fixed_element["enum"] = [value] elif key == "type" and isinstance(value, list): - non_null = [item for item in value if item != "null"] - if "null" in value and len(non_null) == 1: - fixed_element["type"] = non_null[0] - fixed_element["nullable"] = True - else: - fixed_element["anyOf"] = [{"type": item} for item in non_null] + fixed_element["anyOf"] = [{"type": item} for item in value if item != "null"] else: if isinstance(value, dict | list): - value = self._fix_openapi_spec(value) + value = self._fix_openapi_spec_v303(value) elif isinstance(value, str) and value.startswith("#/$defs/"): value = value.replace("#/$defs/", "#/components/schemas/") fixed_element[key] = value @@ -176,110 +227,148 @@ def _fix_openapi_spec(self, element: dict | list) -> dict | list | None: fixed_element = [] for item in element: if isinstance(item, dict | list): - item = self._fix_openapi_spec(item) + item = self._fix_openapi_spec_v303(item) elif isinstance(item, str) and item.startswith("#/$defs/"): item = item.replace("#/$defs/", "#/components/schemas/") fixed_element.append(item) return fixed_element - def _rename(self, element: dict | list) -> dict | list | None: + def _rename(self, name_map: dict[str, str], element: dict | list) -> dict | list: """ If the resource names do not correspond the data schema names, then some renaming is needed so that OpenAPI resource names are properly referenced throughout the whole OpenAPI file. """ - renamed_element = None if isinstance(element, dict): - renamed_element = {} + renamed_element: dict | list = {} for key, value in element.items(): - if key in self._renaming: - key = self._renaming[key] + if key in name_map: + key = name_map[key] if isinstance(value, dict | list): - value = self._rename(value) - elif isinstance(value, str) and value.startswith( - "#/components/schemas/" - ): + value = self._rename(name_map, value) + elif isinstance(value, str) and value.startswith("#/components/schemas/"): data_schema_name = value[len("#/components/schemas/") :] - if data_schema_name in self._renaming: - value = value.replace( - data_schema_name, self._renaming[data_schema_name] - ) + if data_schema_name in name_map: + value = value.replace(data_schema_name, name_map[data_schema_name]) renamed_element[key] = value elif isinstance(element, list): - renamed_element = [] + renamed_element: dict | list = [] for item in element: if isinstance(item, dict | list): - item = self._rename(item) + item = self._rename(name_map, item) elif isinstance(item, str) and item.startswith("#/components/schemas/"): data_schema_name = item[len("#/components/schemas/") :] - if data_schema_name in self._renaming: - item = item.replace( - data_schema_name, self._renaming[data_schema_name] - ) + if data_schema_name in name_map: + item = item.replace(data_schema_name, name_map[data_schema_name]) renamed_element.append(item) + else: + raise TypeError(f"Unexpected type '{type(element)}', only 'dict' and 'list' supported.") return renamed_element - def _find_references( - self, element: dict | list, referenced_data_schemas: set[str] - ) -> None: - """Recursively collect all ``$ref`` target names from ``element`` into ``referenced_data_schemas``.""" + def _strip_linkml_meta(self, element: dict | list) -> dict | list: + """Remove ``linkml_meta`` annotations recursively from Pydantic JSON Schema output.""" if isinstance(element, dict): - if "$ref" in element: - referenced_data_schemas.add(element["$ref"].replace("#/$defs/", "")) + element.pop("linkml_meta", None) for value in element.values(): - self._find_references(value, referenced_data_schemas) + if isinstance(value, dict) or isinstance(value, list): + self._strip_linkml_meta(value) elif isinstance(element, list): for item in element: - self._find_references(item, referenced_data_schemas) - - def _sanitize_schemas( - self, data_schemas: dict, endpoint_referenced_schemas: set[str] - ) -> dict: - """Remove schemas not transitively reachable from any endpoint-referenced data schema.""" - referenced_schemas = endpoint_referenced_schemas.copy() - for data_schema in data_schemas.values(): - self._find_references(data_schema, referenced_schemas) - while set(data_schemas.keys()).difference(referenced_schemas): - data_schema_names = list(data_schemas.keys()) - for data_schema_name in data_schema_names: - if data_schema_name not in referenced_schemas: - del data_schemas[data_schema_name] - referenced_schemas = endpoint_referenced_schemas.copy() - for data_schema in data_schemas.values(): - self._find_references(data_schema, referenced_schemas) - return data_schemas + if isinstance(item, dict) or isinstance(item, list): + self._strip_linkml_meta(item) + return element - def _generate_type_schema(self, type_name: str) -> dict: - """Build an OpenAPI-compatible JSON Schema for a LinkML TypeDefinition.""" - type_def = self.schemaview.get_type(type_name) - typ, fmt = json_schema_types.get(type_def.base.lower(), ("string", None)) - schema: dict = {} - if typ: - schema["type"] = str(typ) - if fmt: - schema["format"] = str(fmt) - if type_def.pattern: - schema["pattern"] = str(type_def.pattern) - if type_def.minimum_value is not None: - schema["minimum"] = str(type_def.minimum_value) - if type_def.maximum_value is not None: - schema["maximum"] = str(type_def.maximum_value) - if type_def.equals_string is not None: - schema["const"] = str(type_def.equals_string) - if type_def.equals_number is not None: - schema["const"] = str(type_def.equals_number) - if type_def.description: - schema["description"] = str(type_def.description) - return schema + def _rewrite_defs_refs(self, element: dict | list) -> dict | list: + """ + Rewrite ``#/$defs/`` references to ``#/components/schemas/`` in-place. + + This is the only structural transformation needed for OpenAPI 3.1.0, + since it is fully aligned with JSON Schema 2020-12. + """ + if isinstance(element, dict): + keys_to_update = [] + for key, value in element.items(): + if isinstance(value, str) and value.startswith("#/$defs/"): + keys_to_update.append((key, value.replace("#/$defs/", "#/components/schemas/"))) + elif isinstance(value, dict) or isinstance(value, list): + self._rewrite_defs_refs(value) + for key, new_value in keys_to_update: + element[key] = new_value + elif isinstance(element, list): + for i, item in enumerate(element): + if isinstance(item, str) and item.startswith("#/$defs/"): + element[i] = item.replace("#/$defs/", "#/components/schemas/") + elif isinstance(item, dict) or isinstance(item, list): + self._rewrite_defs_refs(item) + return element + + def _sanitize_schemas(self, name_map: dict[str, str], openapi_schemas: dict, req_linkml_names: set[str]) -> dict: + """ + Prune unreachable schemas, remove redundant metadata, convert JSON Schema constructs + to OpenAPI 3.0.3 compat, and apply any OpenAPI<->LinkML name renames. + """ + + referenced_schemas = req_linkml_names.copy() + for openapi_schema in openapi_schemas.values(): + referenced_schemas = self._find_references(openapi_schema, referenced_schemas) + if not self.keep_unreferenced: + openapi_schema_names = list(openapi_schemas.keys()) + for openapi_schema_name in openapi_schema_names: + if openapi_schema_name not in referenced_schemas: + del openapi_schemas[openapi_schema_name] + # title always duplicates the schema dict key, so it is redundant in components/schemas + for openapi_schema in openapi_schemas.values(): + openapi_schema.pop("title", None) + if self._openapi_version == "3.0.3": + openapi_schemas = cast(dict, self._fix_openapi_spec_v303(openapi_schemas)) + elif self._openapi_version == "3.1.0": + openapi_schemas = cast(dict, self._strip_linkml_meta(openapi_schemas)) + openapi_schemas = cast(dict, self._rewrite_defs_refs(openapi_schemas)) + # OpenAPI 3.1 restricts components/schemas keys to ^[a-zA-Z0-9._-]+$ + # (no spaces). Sanitize offending schema names and rewrite every $ref. + sanitize_map = self._sanitize_schema_names(openapi_schemas, reserved=set(name_map.values())) + if sanitize_map: + openapi_schemas = cast(dict, self._rename(sanitize_map, openapi_schemas)) + else: + raise ValueError(f"OpenAPI version '{self._openapi_version}' is not supported") + if name_map: + openapi_schemas = cast(dict, self._rename(name_map, openapi_schemas)) + if self.inline_enums: + openapi_schemas = self._inline_enum_schemas(openapi_schemas) + return openapi_schemas + + # OpenAPI 3.1 schema-name pattern; keys under components/schemas must match it. + _OPENAPI_31_NAME_RE = re.compile(r"^[a-zA-Z0-9._-]+$") + + def _sanitize_schema_names(self, openapi_schemas: dict, reserved: set[str]) -> dict[str, str]: + """Return a map of schema names invalid under OpenAPI 3.1 to sanitized equivalents. + + OpenAPI 3.1 constrains ``components/schemas`` keys to ``^[a-zA-Z0-9._-]+$``, + so LinkML names containing spaces (or other disallowed characters) must be + rewritten. Any run of invalid characters collapses to a single underscore; + uniqueness is ensured against existing and already-reserved names. + """ + existing = set(openapi_schemas.keys()) | reserved + name_map: dict[str, str] = {} + for name in openapi_schemas: + if self._OPENAPI_31_NAME_RE.match(name): + continue + base = re.sub(r"[^a-zA-Z0-9._-]+", "_", name).strip("_") or "schema" + candidate = base + suffix = 1 + while candidate in existing or candidate in name_map.values(): + candidate = f"{base}_{suffix}" + suffix += 1 + name_map[name] = candidate + existing.add(candidate) + return name_map def _inline_enum_schemas(self, data_schemas: dict) -> dict: """Inline enum subschemas into their parents instead of separate entries.""" enum_schemas = { name: schema for name, schema in data_schemas.items() - if isinstance(schema, dict) - and "enum" in schema - and "properties" not in schema + if isinstance(schema, dict) and "enum" in schema and "properties" not in schema } if not enum_schemas: return data_schemas @@ -295,11 +384,7 @@ def _replace_refs(obj): return [_replace_refs(item) for item in obj] return obj - return { - k: _replace_refs(v) - for k, v in data_schemas.items() - if k not in enum_schemas - } + return {k: _replace_refs(v) for k, v in data_schemas.items() if k not in enum_schemas} def _find_schemas_line(self, template_text: str) -> int: """Return the 0-indexed line number of the ``schemas`` key under ``components``.""" @@ -316,176 +401,127 @@ def _find_schemas_line(self, template_text: str) -> int: for key, _ in components_node.value: if isinstance(key, ScalarNode) and key.value == "schemas": return key.start_mark.line - raise ValueError( - "OpenAPI template is missing 'schemas' section under 'components'" - ) - - def _strip_additional_properties(self, data_schemas: dict) -> dict: - """Remove ``additionalProperties`` from all generated schemas. + raise ValueError("OpenAPI template is missing 'schemas' section under 'components'") + + def _generate_schemas_v303(self, endpoint_ref_schema_names: set[str]) -> dict: + """Generate component schemas for OpenAPI v3.0.3 via :class:`.JsonSchemaGenerator`.""" + # JsonSchemaGenerator.generate() emits every class/enum of the LinkML schema into + # $defs. LinkML types are not part of $defs and are generated separately. + # all_req_schemas contains all directly or transitively required schemas from + # LinkML classes and types + json_schema = JsonSchemaGenerator(self.schemaview.schema, include_null=False, preserve_names=True).generate() + all_req_schemas: dict[str, dict] = json.loads(json_schema.to_json())["$defs"] + for linkml_name in endpoint_ref_schema_names: + if linkml_name in self.schemaview.all_types(): + all_req_schemas[linkml_name] = self._generate_type_schema(linkml_name) + return all_req_schemas + + def _generate_schemas_v310(self, endpoint_ref_schema_names: set[str]) -> dict: + """Generate component schemas for OpenAPI v3.1.0 via :class:`.PydanticGenerator`.""" + if not endpoint_ref_schema_names: + return {} + materialized_schema = self.schemaview.materialize_derived_schema() + module = PydanticGenerator(materialized_schema, extra_fields="allow").compile_module() + pydantic_classes = { + name: obj + for name, obj in vars(module).items() + if isinstance(obj, type) and issubclass(obj, BaseModel) and obj is not BaseModel + } + defined_types = {name: obj for name, obj in vars(module)["linkml_meta"]["types"].items()} + + all_schemas = {} + for name, cls in pydantic_classes.items(): + schema = cls.model_json_schema() + if "$defs" in schema: + all_schemas |= cls.model_json_schema()["$defs"] + if defined_types: + json_schema = JsonSchemaGenerator( + self.schemaview.schema, include_null=False, preserve_names=True + ).generate() + all_schemas |= json.loads(json_schema.to_json())["$defs"] - Workaround for LinkML bug: ``not_closed=True`` only affects the top-level - schema, not individual class schemas (``handle_class`` hardcodes - ``additional_properties = False``). Remove when - `https://github.com/linkml/linkml/issues/3611` is fixed upstream. - """ + # LinkML types are not emitted as standalone Pydantic classes nor reliably as + # JSON Schema $defs (their constraints are inlined into referencing slots). + # Endpoint-referenced types must therefore be generated explicitly, mirroring + # the v3.0.3 path. + for linkml_name in endpoint_ref_schema_names: + if linkml_name not in all_schemas and linkml_name in self.schemaview.all_types(): + all_schemas[linkml_name] = self._generate_type_schema(linkml_name) - def _walk(obj): - if isinstance(obj, dict): - obj.pop("additionalProperties", None) - for v in obj.values(): - _walk(v) - elif isinstance(obj, list): - for item in obj: - _walk(item) + return all_schemas - _walk(data_schemas) - return data_schemas + def _generate_schemas(self, endpoint_ref_schema_names: set[str]) -> dict: + if self._openapi_version == "3.1.0": + all_req_schemas = self._generate_schemas_v310(endpoint_ref_schema_names) + else: + all_req_schemas = self._generate_schemas_v303(endpoint_ref_schema_names) + return all_req_schemas def serialize(self, template_file: str = "", **kwargs) -> str: - """Generate an OpenAPI v3.0.3 spec from ``template_file`` and the loaded LinkML schema.""" + """Generate OpenAPI YAML from ``template_file`` and the loaded LinkML schema.""" + # load the template if not template_file: raise ValueError("An OpenAPI template file is required") with open(template_file) as tf: template_text = tf.read() self._template = yaml.safe_load(template_text) - # Determine the expected OpenAPI version from the active output format - format_name = ( - getattr(self, "format", self.valid_formats[0]) or self.valid_formats[0] - ) - expected_version = self._openapi_versions.get(format_name) - if expected_version is None: - raise ValueError(f"Unsupported output format '{format_name}'") - validator_class = self._openapi_validators.get(expected_version) - if validator_class is None: + # determine the OpenAPI version from the provided template + self._openapi_version = self._template["openapi"] + if self._openapi_version not in SUPPORTED_OPENAPI_VERSIONS: raise ValueError( - f"No validator available for OpenAPI version {expected_version}" + f"Unsupported OpenAPI version {self._openapi_version}. " + + f"Only supported versions are {','.join(self._openapi_versions)}" ) - # Validate that the template declares the expected OpenAPI version - declared_version = self._template.get("openapi") - if declared_version != expected_version: - raise ValueError( - f"Template OpenAPI version is '{declared_version}', " - f"but format '{format_name}' requires version '{expected_version}'" - ) - # Validate the input template against the OpenAPI specification - validate(self._template, cls=validator_class) - if not isinstance(self._template.get("paths"), dict): - raise ValueError("OpenAPI template is missing required 'paths' section") - if not isinstance(self._template.get("components"), dict): - raise ValueError( - "OpenAPI template is missing required 'components' section" - ) - endpoint_ref_schema_names = ( - self._find_referenced_schemas() - ) # schemas referenced by OpenAPI endpoint(s) - openapi_schemas = self._template["components"][ - "schemas" - ] # data schemas provided by the template - all_req_data_schemas = {} # data schemas directly or transitively required by the API - self._renaming = {} # openapi <-> linkml renaming map - self._nullable_schemas: set[str] = set() # schemas made nullable via a nullable $ref - directly_required_linkml_elements: set[str] = ( - set() - ) # LinkML class/type names of directly-referenced schemas - # get only the data schemas that are really referenced from an endpoint - for endpoint_reference_name in endpoint_ref_schema_names: - if endpoint_reference_name not in openapi_schemas: - raise KeyError( - f"data schema '{endpoint_reference_name}' referenced in one of the endpoints " - "does not have a schema declaration" - ) - data_schema = openapi_schemas[endpoint_reference_name] - # validate that linkml schema id is correct - if data_schema["x-linkml-schema"] != self.schema.id: - raise ValueError( - f"Template data schema '{endpoint_reference_name}' declares " - f"x-linkml-schema '{data_schema['x-linkml-schema']}' " - f"but the loaded schema has id '{self.schema.id}'" - ) - # if openapi schema name differs from linkml element name, add mapping - linkml_element_name = data_schema["x-linkml-source"] - if endpoint_reference_name != linkml_element_name: - self._renaming[linkml_element_name] = endpoint_reference_name - directly_required_linkml_elements.add(linkml_element_name) - if linkml_element_name in self.schemaview.all_types().keys(): - all_req_data_schemas[linkml_element_name] = self._generate_type_schema( - linkml_element_name - ) - continue - json_schema = JsonSchemaGenerator( - self.schemaview.schema, - not_closed=True, - include_null=False, - top_class=linkml_element_name, - ).generate() - json_schema_classes = json.loads(json_schema.to_json())["$defs"] - all_req_data_schemas = all_req_data_schemas | json_schema_classes - # Keep schemas listed in the template even if not endpoint-referenced + + # get the corresponding OpenAPI validator + oa_validator_class = self._openapi_validators.get(self._openapi_version) + if oa_validator_class is None: + raise ValueError(f"No validator available for OpenAPI version {self._openapi_version}") + # validate the OpenAPI template before further processing + self._validate_oa_template(oa_validator_class, self._openapi_version) + # if no schemas to instantiate, return the template itself + if ( + "components" not in self._template + or "schemas" not in self._template["components"] + or not self._template["components"]["schemas"] + ): + return template_text + + # Two namespaces exist: OpenAPI schema names (from the template's + # components/schemas keys) and LinkML element names (from the LinkML schema). + # Every schema has a name in both namespaces and the template declares the + # mapping between them in the x-linkml-schema values; they may be identical or differ. + # When they differ, name_map records the synonym (LinkML element name -> OpenAPI schema name). + endpoint_ref_openapi_names = self._find_referenced_schemas() # OpenAPI names referenced by endpoints + openapi_schemas = self._template["components"]["schemas"] # schemas provided by the OpenAPI template + # collect the LinkML names referenced by endpoints (seed for sanitizing below) if self.keep_unreferenced: - template_schema_names = set(self._template["components"]["schemas"].keys()) - template_schema_names.discard("{data_schema}") - for tpl_schema_name in template_schema_names: - raw_source = self._template["components"]["schemas"][ - tpl_schema_name - ].get("x-linkml-source", tpl_schema_name) - # Resolve dotted path (class.slot) to synthetic $defs key - linkml_element_name = raw_source - if "." in raw_source and raw_source not in all_req_data_schemas: - parts = raw_source.split(".") - if len(parts) == 2: - synthetic_key = f"{parts[0]}__{parts[1]}_optional" - if synthetic_key in all_req_data_schemas: - linkml_element_name = synthetic_key - if tpl_schema_name != linkml_element_name: - self._renaming[linkml_element_name] = tpl_schema_name - directly_required_linkml_elements.add(linkml_element_name) - if linkml_element_name in all_req_data_schemas: - continue - if linkml_element_name in self.schemaview.all_types().keys(): - all_req_data_schemas[linkml_element_name] = ( - self._generate_type_schema(linkml_element_name) - ) - continue - json_schema = JsonSchemaGenerator( - self.schemaview.schema, - not_closed=True, - include_null=False, - top_class=linkml_element_name, - ).generate() - json_defs = json.loads(json_schema.to_json())["$defs"] - actual_key = [ - k - for k in json_defs.keys() - if k.lower() == linkml_element_name.lower() - ] - effective_key = actual_key[0] if actual_key else linkml_element_name - if effective_key in json_defs: - all_req_data_schemas[effective_key] = json_defs[effective_key] - sanitized_data_schemas = self._sanitize_schemas( - all_req_data_schemas, directly_required_linkml_elements - ) - # title always duplicates the schema dict key, so it is redundant in components/schemas - for data_schema in sanitized_data_schemas.values(): - data_schema.pop("title", None) - sanitized_data_schemas = self._fix_openapi_spec(sanitized_data_schemas) - # Apply schema-level `nullable: true` for schemas referenced by a nullable $ref. - # Done before renaming, since `_nullable_schemas` holds pre-rename names. - for schema_name in self._nullable_schemas: - target = sanitized_data_schemas.get(schema_name) - if isinstance(target, dict): - target["nullable"] = True - sanitized_data_schemas = self._strip_additional_properties(sanitized_data_schemas) - if self._renaming: - sanitized_data_schemas = self._rename(sanitized_data_schemas) - if self.inline_enums: - sanitized_data_schemas = self._inline_enum_schemas(sanitized_data_schemas) - # Replace the existing schemas section in the text template with the generated schemas + req_linkml_names: set[str] = {openapi_schemas[n]["x-linkml-source"] for n in openapi_schemas.keys()} + else: + req_linkml_names: set[str] = {openapi_schemas[n]["x-linkml-source"] for n in endpoint_ref_openapi_names} + # when OpenAPI and LinkML names differ, record the synonym for later renaming. + # The template may declare a resource name (x-linkml-source mapping) for schemas + # referenced only by other schemas, not just those referenced directly by + # endpoints; every declared mapping must be honoured throughout the spec. + name_map: dict[str, str] = { + openapi_schemas[n]["x-linkml-source"]: n + for n in openapi_schemas + if n != openapi_schemas[n]["x-linkml-source"] + } + + all_req_schemas = self._generate_schemas(req_linkml_names) + + # sanitize schemas not transitively reachable from any endpoint-referenced schema + sanitized_data_schemas = self._sanitize_schemas(name_map, all_req_schemas, req_linkml_names) + + # instantiate the real OpenAPI YAML replacing the schema placeholders lines = template_text.splitlines(keepends=True) schemas_line_idx = self._find_schemas_line(template_text) text_before_schemas = "".join(lines[:schemas_line_idx]) schemas_yaml = yaml.dump(sanitized_data_schemas, sort_keys=False) indented_schemas = textwrap.indent(schemas_yaml, " ") result = text_before_schemas + " schemas:\n" + indented_schemas + # Check for dangling $ref references using the referencing library result_obj = yaml.safe_load(result) schemas = result_obj.get("components", {}).get("schemas", {}) @@ -499,11 +535,7 @@ def serialize(self, template_file: str = "", **kwargs) -> str: def _collect_refs(obj, refs): if isinstance(obj, dict): - if ( - "$ref" in obj - and isinstance(obj["$ref"], str) - and obj["$ref"].startswith("#/") - ): + if "$ref" in obj and isinstance(obj["$ref"], str) and obj["$ref"].startswith("#/"): refs.append(obj["$ref"]) for v in obj.values(): _collect_refs(v, refs) @@ -520,12 +552,10 @@ def _collect_refs(obj, refs): except Exception: dangling.append(ref) if dangling: - raise ValueError( - f"Dangling $ref in generated OpenAPI spec: {','.join(dangling)}" - ) + raise ValueError(f"Dangling $ref in generated OpenAPI spec: {','.join(dangling)}") - # Validate the generated output against the OpenAPI specification - validate(result_obj, cls=validator_class) + # validate the generated output against the OpenAPI specification before returning + openapi_validate(yaml.safe_load(result), cls=oa_validator_class) return result def printout_template(self) -> str: @@ -542,7 +572,9 @@ def printout_template(self) -> str: if re.search(r"[ :\d]", first_element): first_element = f'"{first_element}"' return openapi_generic_template.format( - linkml_schema_id=self.schema.id, data_schema=first_element + linkml_schema_id=self.schemaview.schema.id, + data_schema=first_element, + openapi_version_list=",".join(self._openapi_versions), ) @@ -551,7 +583,7 @@ def printout_template(self) -> str: @click.option( "--template", "-t", - help="OpenAPI v3.0.3 template - includes the header, the endpoints and the security schemes", + help="OpenAPI template - includes the header, the endpoints and the security schemes", ) @click.option( "--keep-unreferenced", @@ -569,7 +601,7 @@ def printout_template(self) -> str: ) @click.version_option(__version__, "-V", "--version") def cli(yamlfile, template, keep_unreferenced, inline_enums, **args): - """Generate an OpenAPI v3.0.3 spec with resources modelled with LinkML. + """Generate an OpenAPI YAML with resources modelled with LinkML. If no OpenAPI template is provided, a generic one with one exemplary class/type schema is printed out.""" # if no template provided, print out a generic one diff --git a/tools/templates/openapi/workload-management-api-1.0.0.openapi.yaml b/tools/templates/openapi/workload-management-api-1.0.0.openapi.yaml index a8bcff48..127568ec 100644 --- a/tools/templates/openapi/workload-management-api-1.0.0.openapi.yaml +++ b/tools/templates/openapi/workload-management-api-1.0.0.openapi.yaml @@ -1,4 +1,4 @@ -openapi: 3.0.3 +openapi: 3.1.0 info: title: Margo Workload Management API version: 1.0.0 From 01de675dc2ef464213e43a7f5a6dc569ec0a5eed Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Thu, 3 Sep 2026 19:14:35 +0200 Subject: [PATCH 23/24] fix: update to changes in main branch Signed-off-by: Silvano Cirujano Cuesta --- legacy/validate-openapi.py | 4 +- mkdocs.yml | 1 + model/examples/invalid/ProblemDetail-001.yaml | 3 + model/examples/valid/ProblemDetail-001.yaml | 10 + model/margo-data-model.linkml.yaml | 1 + model/problem-details.linkml.yaml | 100 +++++ tools/configurations/problem-details.json | 6 + tools/generate-docs.bash | 3 +- tools/generate-json-schemas.bash | 2 +- tools/generate-openapi.bash | 8 +- ...ad-management-api-1.0.0-rc.2.openapi.yaml} | 370 +++++++----------- 11 files changed, 278 insertions(+), 230 deletions(-) create mode 100644 model/examples/invalid/ProblemDetail-001.yaml create mode 100644 model/examples/valid/ProblemDetail-001.yaml create mode 100644 model/problem-details.linkml.yaml create mode 100644 tools/configurations/problem-details.json rename tools/templates/openapi/{workload-management-api-1.0.0.openapi.yaml => workload-management-api-1.0.0-rc.2.openapi.yaml} (56%) diff --git a/legacy/validate-openapi.py b/legacy/validate-openapi.py index eab8692e..4db61a0d 100644 --- a/legacy/validate-openapi.py +++ b/legacy/validate-openapi.py @@ -49,8 +49,8 @@ def dim(text: str) -> str: ROOT = Path(__file__).resolve().parent.parent -PRE_DRAFT_FILE = "system-design/specification/margo-management-interface/workload-management-api-1.0.0.yaml" -GENERATED_FILE = "system-design/specification/margo-management-interface/workload-management-api-1.0.0.yaml" +PRE_DRAFT_FILE = "system-design/specification/margo-management-interface/workload-management-api-1.0.0-rc.2.yaml" +GENERATED_FILE = "system-design/specification/margo-management-interface/workload-management-api-1.0.0-rc.2.yaml" # GENERATED_FILE = "build/artifacts/openapi/workload-management-api-1.0.0.openapi.yaml" diff --git a/mkdocs.yml b/mkdocs.yml index e3cfbcb8..e0e9b658 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -39,6 +39,7 @@ nav: - DeploymentStatusManifest: data-model/DeploymentStatusManifest.md - Problem Types: - specification/problem-types.md + - specification/problem-details.md - Specification Version Management: - specification/specification-version-management.md theme: diff --git a/model/examples/invalid/ProblemDetail-001.yaml b/model/examples/invalid/ProblemDetail-001.yaml new file mode 100644 index 00000000..2804869f --- /dev/null +++ b/model/examples/invalid/ProblemDetail-001.yaml @@ -0,0 +1,3 @@ +type: https://docs.margo.org/specification/problem-types#invalid-request +title: Invalid Request +detail: Malformed request body. diff --git a/model/examples/valid/ProblemDetail-001.yaml b/model/examples/valid/ProblemDetail-001.yaml new file mode 100644 index 00000000..382fcda5 --- /dev/null +++ b/model/examples/valid/ProblemDetail-001.yaml @@ -0,0 +1,10 @@ +type: https://docs.margo.org/specification/problem-types#invalid-request +title: Invalid Request +status: 400 +detail: Malformed request body. +instance: /api/v1/capabilities/device-1 +retryable: false +backoffStrategy: none +errors: + - field: properties.roles + message: must contain at least one valid role diff --git a/model/margo-data-model.linkml.yaml b/model/margo-data-model.linkml.yaml index ec2e4ada..578b3004 100644 --- a/model/margo-data-model.linkml.yaml +++ b/model/margo-data-model.linkml.yaml @@ -32,6 +32,7 @@ imports: - desired-state-manifest.linkml - device-capabilities.linkml - deployment-status.linkml + - problem-details.linkml default_prefix: margo diff --git a/model/problem-details.linkml.yaml b/model/problem-details.linkml.yaml new file mode 100644 index 00000000..266be44d --- /dev/null +++ b/model/problem-details.linkml.yaml @@ -0,0 +1,100 @@ +# yaml-language-server: $schema=https://linkml.io/linkml-model/linkml_model/jsonschema/meta.schema.json +id: https://specification.margo.org/problem-details +name: ProblemDetails +title: Problem Details +description: >- + Schema for the RFC 9457 Problem Details for HTTP APIs error responses. + Returned with Content-Type: application/problem+json. + See https://www.rfc-editor.org/rfc/rfc9457. +version: 1.0.0 +prefixes: + linkml: https://w3id.org/linkml/ + margo: https://specification.margo.org/ +imports: + - linkml:types + +default_prefix: margo + +classes: + ProblemDetail: + description: >- + RFC 9457 Problem Details for HTTP APIs. Returned with Content-Type: + application/problem+json. + See https://www.rfc-editor.org/rfc/rfc9457. + Extension members (RFC 9457 §3.2) are permitted. + Vendors MAY add custom fields alongside standard margo fields. + Vendor-specific problem types MUST use their own URI namespace. + The https://docs.margo.org/specification/problem-types namespace is reserved for Margo. + attributes: + type: + description: >- + URI reference identifying the problem type. + Implementations MUST use the registered Margo type URI for any error + condition defined in the Margo specification. + For error conditions not defined in this specification, implementations + MAY define their own type URIs under their own namespace. + Clients MUST use this field for programmatic error handling, NOT the status code or title. + Clients encountering an unknown type URI SHOULD fall back to title, detail, and status + for display and handling. + required: true + range: uri + title: + description: Short human-readable summary of the problem type. + required: true + range: string + status: + description: HTTP status code. + required: true + range: integer + detail: + description: Human-readable explanation specific to this occurrence of the problem. + range: string + instance: + description: URI reference identifying the specific occurrence of the problem. + range: string + pattern: "^[a-zA-Z0-9-._~:/?#\\[\\]@!$&'()*+,;=%]+$" + retryable: + description: >- + Whether the client MAY retry the request. If true, client SHOULD respect + the Retry-After response header when present. + range: boolean + retryAfterSeconds: + description: >- + Advisory retry delay in seconds. The authoritative value is the Retry-After + response header when present. This field is advisory only. + range: integer + backoffStrategy: + description: >- + Recommended backoff strategy for retrying. + range: BackoffStrategy + errors: + description: >- + Optional list of field-level validation errors. + SHOULD be present on 422 Unprocessable Entity responses. + range: FieldError + multivalued: true + inlined_as_list: true + + FieldError: + description: >- + A field-level validation error, as used in the `errors` member of a + ProblemDetail. + attributes: + field: + description: Field path that caused the validation error. + range: string + message: + description: Human-readable validation error message. + range: string + +enums: + BackoffStrategy: + description: >- + Recommended backoff strategy for retrying. + permissible_values: + none: + description: do not retry. + fixed: + description: retry after retryAfterSeconds. + exponential: + description: use exponential backoff starting at retryAfterSeconds. diff --git a/tools/configurations/problem-details.json b/tools/configurations/problem-details.json new file mode 100644 index 00000000..b78b7a85 --- /dev/null +++ b/tools/configurations/problem-details.json @@ -0,0 +1,6 @@ +{ + "root": "model", + "targetclass": "ProblemDetail", + "schemafile": "problem-details.linkml.yaml", + "markdowndoc": "problem-details.md" +} diff --git a/tools/generate-docs.bash b/tools/generate-docs.bash index 091661b3..63e8e1c0 100755 --- a/tools/generate-docs.bash +++ b/tools/generate-docs.bash @@ -39,7 +39,7 @@ cp -R -H "${ROOT_DIR}/system-design/"* "${MERGED_DIR}/" # Main classes -for schema_name in "application-description" "application-deployment" "deployment-status" "desired-state-manifest" "device-capabilities"; do +for schema_name in "application-description" "application-deployment" "deployment-status" "desired-state-manifest" "device-capabilities" "problem-details"; do ${RUN} linkml generate doc \ --directory="${TMP_DIR}" \ --template-directory="${ROOT_DIR}/tools/templates/main-classes" \ @@ -55,6 +55,7 @@ done mv "${TGT_DIR}/deployment-status.md" "${MERGED_DIR}/specification/margo-management-interface/" mv "${TGT_DIR}/device-capabilities.md" "${MERGED_DIR}/specification/margo-management-interface/" mv "${TGT_DIR}/application-description.md" "${MERGED_DIR}/specification/applications/" +mv "${TGT_DIR}/problem-details.md" "${MERGED_DIR}/specification/" # Whole Data Model diff --git a/tools/generate-json-schemas.bash b/tools/generate-json-schemas.bash index 14ff6e5b..5ac5b84e 100755 --- a/tools/generate-json-schemas.bash +++ b/tools/generate-json-schemas.bash @@ -21,6 +21,6 @@ fi mkdir -p "${TGT_DIR}" -for schema in "application-deployment" "application-description" "deployment-status" "desired-state-manifest" "device-capabilities"; do +for schema in "application-deployment" "application-description" "deployment-status" "desired-state-manifest" "device-capabilities" "problem-details"; do ${RUN} linkml generate json-schema "${ROOT_DIR}/model/${schema}.linkml.yaml" >"${TGT_DIR}/${schema}.schema.json" done diff --git a/tools/generate-openapi.bash b/tools/generate-openapi.bash index 3764e3c5..70ebb402 100755 --- a/tools/generate-openapi.bash +++ b/tools/generate-openapi.bash @@ -8,11 +8,11 @@ THIS_DIR="$(dirname "${THIS_SCRIPT}")" ROOT_DIR="$(dirname "${THIS_DIR}")" TGT_DIR="${ROOT_DIR}/build/artifacts/openapi" -TGT_FILE="${TGT_DIR}/workload-management-api-1.0.0.openapi.yaml" +TGT_FILE="${TGT_DIR}/workload-management-api-1.0.0-rc.2.openapi.yaml" # Tracked location in system-design/ — this is what the repo uses # generate-docs.bash copies system-design/ into build/site/ for mkdocs -SYSTEM_DESIGN_FILE="${ROOT_DIR}/system-design/specification/margo-management-interface/workload-management-api-1.0.0.yaml" +SYSTEM_DESIGN_FILE="${ROOT_DIR}/system-design/specification/margo-management-interface/workload-management-api-1.0.0-rc.2.yaml" if command -v poetry &>/dev/null; then RUN="poetry run" @@ -29,14 +29,14 @@ mkdir -p "${TGT_DIR}" # TODO: remove following block after LinkML release >v1.11.1 ( cd "${THIS_DIR}" - ${RUN} python openapigen.py --keep-unreferenced --inline-enums -t templates/openapi/workload-management-api-1.0.0.openapi.yaml ../model/margo-data-model.linkml.yaml \ + ${RUN} python openapigen.py --keep-unreferenced --inline-enums -t templates/openapi/workload-management-api-1.0.0-rc.2.openapi.yaml ../model/margo-data-model.linkml.yaml \ >"${TGT_FILE}" cp "${TGT_FILE}" "${SYSTEM_DESIGN_FILE}" ) exit ${RUN} linkml generate openapi \ - --template "${THIS_DIR}/templates/openapi/workload-management-api-1.0.0.openapi.yaml" \ + --template "${THIS_DIR}/templates/openapi/workload-management-api-1.0.0-rc.2.openapi.yaml" \ --inline-enums \ --keep-unreferenced \ "${ROOT_DIR}/model/margo-data-model.linkml.yaml" \ diff --git a/tools/templates/openapi/workload-management-api-1.0.0.openapi.yaml b/tools/templates/openapi/workload-management-api-1.0.0-rc.2.openapi.yaml similarity index 56% rename from tools/templates/openapi/workload-management-api-1.0.0.openapi.yaml rename to tools/templates/openapi/workload-management-api-1.0.0-rc.2.openapi.yaml index 127568ec..4491539b 100644 --- a/tools/templates/openapi/workload-management-api-1.0.0.openapi.yaml +++ b/tools/templates/openapi/workload-management-api-1.0.0-rc.2.openapi.yaml @@ -1,197 +1,98 @@ openapi: 3.1.0 info: title: Margo Workload Management API - version: 1.0.0 - description: - API for managing workloads on Margo-compliant edge devices. + version: 1.0.0-rc.2 + description: > + API for managing workloads on Margo-conformant edge devices. Includes the APIs for exchanging desired state and current state. - Communication is secured using server-side TLS (TLS 1.3 preferred), - and payloads are signed using X.509 certificates. + Communication is secured with mutual TLS, defaulting to TLS 1.3 per the MIAF + TLS requirements: the WFM Client + and the WFM each present an X.509-SVID, validated against the Trust Domain's + Trust Bundle per the Margo Identity and Authorization Framework (MIAF) and + the WFM Identity Profile. The caller identity for every request is the + authenticated WFM Client SPIFFE ID. Trust anchors are distributed via the + MIAF Trust Bundle. servers: - - url: https://wfm.margo.org/ - description: Workload Fleet Manager API + - url: https://wfm.margo.org + description: Workload Fleet Manager APIs security: - - PayloadSignature: [] + - mTLS: [] paths: - /api/v1/onboarding/certificate: - get: - summary: Download Root CA certificate - security: [] - responses: - '200': - description: Root CA certificate - content: - application/json: - schema: - type: object - properties: - certificate: - type: string - description: Base64-encoded certificate text - /api/v1/onboarding: - post: - requestBody: - content: - application/json: - schema: - type: object - required: [apiVersion, kind, certificate] - properties: - apiVersion: - type: string - description: API version identifier - kind: - type: string - enum: [OnboardingRequest] - description: Resource kind - certificate: - description: Base64-encoded client certificate - type: string - required: true - responses: - '201': - content: - application/json: - schema: - properties: - clientId: - type: string - type: object - description: New client onboarded successfully. - '400': - content: - application/json: - schema: - properties: - error: - example: Invalid certificate - type: string - type: object - description: Invalid certificate format or structure. - '403': - content: - application/json: - schema: - properties: - error: - example: Client rejected - type: string - type: object - description: Client certificate not trusted or client rejected. - security: - - PayloadSignature: [] - summary: Complete onboarding with client certificate - - /api/v1/clients/{clientId}/capabilities/{deviceId}: - post: - summary: Report device capabilities - security: - - PayloadSignature: [] - parameters: - - name: clientId - in: path - required: true - schema: - type: string - - name: deviceId - in: path - required: true - schema: - $ref: '#/components/schemas/DeviceId' - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/DeviceCapabilitiesManifest' - responses: - '201': - description: Capabilities reported successfully - '400': - description: Missing or invalid content-digest header. Ensure the SHA256 hash of the payload is included. - '401': - description: Signature verification failed. Ensure you are signing with the correct X.509 private key. - '403': - description: Client certificate is not trusted or has been revoked. - '404': - description: No client with the given `clientID` was found. - '422': - description: Request body includes a semantic error. +paths: + /api/v1/capabilities/{deviceId}: put: - summary: Update device capabilities (Update) - security: - - PayloadSignature: [] + summary: Report or update device capabilities parameters: - - name: clientId - in: path - required: true - schema: - type: string - name: deviceId in: path required: true schema: - $ref: '#/components/schemas/DeviceId' + $ref: "#/components/schemas/DeviceId" requestBody: required: true content: application/json: schema: - $ref: '#/components/schemas/DeviceCapabilitiesManifest' + $ref: "#/components/schemas/DeviceCapabilitiesManifest" responses: - '201': - description: Capabilities reported successfully - '400': - description: Missing or invalid content-digest header. Ensure the SHA256 hash of the payload is included. - '401': - description: Signature verification failed. Ensure you are signing with the correct X.509 private key. - '403': - description: Client certificate is not trusted or has been revoked. - '404': - description: No client with the given `clientID` was found. - '422': + "200": + description: Device capabilities updated successfully + "201": + description: Device capabilities created successfully + "400": + description: Malformed request body. + content: + application/problem+json: + schema: + $ref: "#/components/schemas/ProblemDetail" + "403": + description: The request is not authorized by the WFM's local policy (for example, the client relationship has been retired). + content: + application/problem+json: + schema: + $ref: "#/components/schemas/ProblemDetail" + "404": + description: No gateway was found for the given child-device deviceId. + content: + application/problem+json: + schema: + $ref: "#/components/schemas/ProblemDetail" + "422": description: Request body includes a semantic error. + content: + application/problem+json: + schema: + $ref: "#/components/schemas/ProblemDetail" delete: summary: Remove device (Unregister) - security: - - PayloadSignature: [] parameters: - - name: clientId - in: path - required: true - schema: - type: string - name: deviceId in: path required: true schema: - $ref: '#/components/schemas/DeviceId' + $ref: "#/components/schemas/DeviceId" responses: - '204': + "204": description: Device capabilities removed successfully - '400': - description: Missing or invalid content-digest header. Ensure the SHA256 hash of the payload is included. - '401': - description: Signature verification failed. Ensure you are signing with the correct X.509 private key. - '403': - description: Client certificate is not trusted or has been revoked. - '404': - description: Client or device not found. - /api/v1/clients/{clientId}/bundles/{digest}: + "403": + description: The request is not authorized by the WFM's local policy (for example, the client relationship has been retired). + content: + application/problem+json: + schema: + $ref: "#/components/schemas/ProblemDetail" + "404": + description: No device with the given deviceId was found for the client. + content: + application/problem+json: + schema: + $ref: "#/components/schemas/ProblemDetail" + /api/v1/bundles/{digest}: get: - summary: Retrieve bundle information for a specific device and digest - security: - - PayloadSignature: [] + summary: Retrieve a deployment bundle by its content digest parameters: - - name: clientId - in: path - required: true - schema: - type: string - description: Unique identifier of the device-client - name: digest in: path required: true @@ -205,45 +106,42 @@ paths: type: string description: Quoted ETag (same as digest) previously returned for this bundle. responses: - '200': + "200": description: Bundle archive (immutable) headers: ETag: schema: type: string - description: New ETag for the returned manifest + description: Quoted digest of the returned bundle archive Cache-Control: schema: type: string - description: public, max-age=31536000, immutable + description: private, max-age=31536000, immutable content: application/vnd.margo.bundle.v1+tar+gzip: schema: type: string format: binary description: Gzip-compressed tar containing one YAML file per deployment. - '304': + "304": description: Representation not modified - '404': + "403": + description: The request is not authorized by the WFM's local policy (for example, the client relationship has been retired). + content: + application/problem+json: + schema: + $ref: "#/components/schemas/ProblemDetail" + "404": description: Bundle not found for the given digest - '400': - description: Invalid request. - # TBD - # '500': - # $ref: '#/components/responses/ErrorResponse' + content: + application/problem+json: + schema: + $ref: "#/components/schemas/ProblemDetail" - /api/v1/clients/{clientId}/deployments: + /api/v1/deployments: get: summary: Retrieve the complete desired state for all workloads assigned to a device - security: - - PayloadSignature: [] parameters: - - name: clientId - in: path - required: true - schema: - type: string - description: The unique identifier of the Edge Compute Device making the request - name: If-None-Match in: header required: false @@ -260,7 +158,7 @@ paths: Indicates which manifest formats the client supports. Supported values: application/vnd.margo.manifest.v1+json. responses: - '200': + "200": description: Manifest returned in the negotiated format headers: Content-Type: @@ -271,31 +169,36 @@ paths: schema: type: string description: New ETag for the returned manifest + Cache-Control: + schema: + type: string + description: private content: application/vnd.margo.manifest.v1+json: schema: - $ref: '#/components/schemas/UnsignedAppStateManifest' - '304': + $ref: "#/components/schemas/UnsignedAppStateManifest" + "304": description: Not Modified - Manifest has not changed - '406': + "403": + description: The request is not authorized by the WFM's local policy (for example, the client relationship has been retired). + content: + application/problem+json: + schema: + $ref: "#/components/schemas/ProblemDetail" + "406": description: Not Acceptable - Server cannot generate a response matching the Accept header + content: + application/problem+json: + schema: + $ref: "#/components/schemas/ProblemDetail" - - /api/v1/clients/{clientId}/deployments/{deploymentId}/{digest}: + /api/v1/deployments/{deploymentId}/{digest}: get: summary: Retrieve an individual ApplicationDeployment YAML file - security: - - PayloadSignature: [] description: > This endpoint is used by the client to fetch the YAML for a single ApplicationDeployment after it has processed a new State Manifest and identified a small number of new or updated deployments. This allows for highly efficient, incremental updates without needing to download the full bundle. To make individual workload retrievals race-free and cache-friendly, this endpoint is content-addressable: the digest of the expected YAML is part of the URL. This guarantees immutability of the fetched resource and prevents a time-of-check / time-of-use race where a deployment changes between manifest retrieval and content fetch. parameters: - - name: clientId - in: path - required: true - schema: - type: string - description: Unique identifier of the Edge Compute Device - name: deploymentId in: path required: true @@ -323,7 +226,7 @@ paths: type: string description: Indicates supported compression formats (e.g., gzip, br) responses: - '200': + "200": description: > The response body is the raw ApplicationDeployment YAML file (Content-Type: application/yaml). The content MUST match the {digest} path segment; the server MUST return 404 if it does not have the exact digest referenced. headers: @@ -334,12 +237,12 @@ paths: ETag: schema: type: string - description: > + description: > The ETag is returned to the client from the /deployments endpoint, it is the digest of the state manifest. Cache-Control: schema: type: string - description: public, max-age=31536000, immutable + description: private, max-age=31536000, immutable Vary: schema: type: string @@ -349,20 +252,23 @@ paths: schema: type: string description: Raw YAML content of the ApplicationDeployment - '404': + "403": + description: The request is not authorized by the WFM's local policy (for example, the client relationship has been retired). + content: + application/problem+json: + schema: + $ref: "#/components/schemas/ProblemDetail" + "404": description: Deployment not found for the given digest + content: + application/problem+json: + schema: + $ref: "#/components/schemas/ProblemDetail" - /api/v1/clients/{clientId}/deployments/{deploymentId}/status: + /api/v1/deployments/{deploymentId}/status: post: summary: Report deployment status - security: - - PayloadSignature: [] parameters: - - name: clientId - in: path - required: true - schema: - type: string - name: deploymentId in: path required: true @@ -373,29 +279,41 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/DeploymentStatusManifest' + $ref: "#/components/schemas/DeploymentStatusManifest" responses: - '200': - description: The deployment status was added, or updated, successfully. - '400': - description: Missing or invalid content-digest header. Ensure the SHA256 hash of the base64-encoded payload is included. - '401': - description: Signature verification failed. Ensure you are signing with the correct X.509 private key. - '403': - description: Client certificate is not trusted or has been revoked. - '422': + "200": + description: The deployment status was updated successfully. + "201": + description: The deployment status was created successfully. + "400": + description: Malformed request body. + content: + application/problem+json: + schema: + $ref: "#/components/schemas/ProblemDetail" + "403": + description: The request is not authorized by the WFM's local policy (for example, the client relationship has been retired). + content: + application/problem+json: + schema: + $ref: "#/components/schemas/ProblemDetail" + "422": description: Request body includes a semantic error. + content: + application/problem+json: + schema: + $ref: "#/components/schemas/ProblemDetail" components: securitySchemes: - # TODO: fix this as we are following RFC 9421, instead of a custom signature header field - PayloadSignature: - type: apiKey - in: header - name: X-Payload-Signature + mTLS: + type: mutualTLS description: > - Base64-encoded payload signature using SHA-256 and device certificate. - Format: public_key;digital_signature + Mutual TLS, defaulting to TLS 1.3 (TLS 1.2 permitted only as a + non-default fallback). The WFM Client and the WFM each + present an X.509-SVID, validated against the Trust Domain's Trust + Bundle per the Margo Identity and Authorization Framework (MIAF) + and the WFM Identity Profile. # Modifications compared to pre-data-model stage: # - ManifestVersion INLINED into UnsignedAppStateManifest(OpenAPI)/DesiredStateManifest(LinkML) @@ -471,3 +389,11 @@ components: type: object x-linkml-schema: https://specification.margo.org/data-model x-linkml-source: Parameter.identifier + ProblemDetail: + type: object + x-linkml-schema: https://specification.margo.org/data-model + x-linkml-source: ProblemDetail + FieldError: + type: object + x-linkml-schema: https://specification.margo.org/data-model + x-linkml-source: FieldError From e82cf368781abc61aec6ce2fe548a1c2bb2540b9 Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Thu, 3 Sep 2026 21:28:55 +0200 Subject: [PATCH 24/24] generated: oad Signed-off-by: Silvano Cirujano Cuesta --- .../workload-management-api-1.0.0-rc.2.yaml | 1904 ++++++++++++----- 1 file changed, 1358 insertions(+), 546 deletions(-) diff --git a/system-design/specification/margo-management-interface/workload-management-api-1.0.0-rc.2.yaml b/system-design/specification/margo-management-interface/workload-management-api-1.0.0-rc.2.yaml index b3839ec2..017ba884 100644 --- a/system-design/specification/margo-management-interface/workload-management-api-1.0.0-rc.2.yaml +++ b/system-design/specification/margo-management-interface/workload-management-api-1.0.0-rc.2.yaml @@ -20,6 +20,7 @@ servers: security: - mTLS: [] +paths: paths: /api/v1/capabilities/{deviceId}: put: @@ -29,42 +30,42 @@ paths: in: path required: true schema: - $ref: '#/components/schemas/DeviceId' + $ref: "#/components/schemas/DeviceId" requestBody: required: true content: application/json: schema: - $ref: '#/components/schemas/DeviceCapabilitiesManifest' + $ref: "#/components/schemas/DeviceCapabilitiesManifest" responses: - '200': + "200": description: Device capabilities updated successfully - '201': + "201": description: Device capabilities created successfully - '400': + "400": description: Malformed request body. content: application/problem+json: schema: - $ref: '#/components/schemas/ProblemDetail' - '403': + $ref: "#/components/schemas/ProblemDetail" + "403": description: The request is not authorized by the WFM's local policy (for example, the client relationship has been retired). content: application/problem+json: schema: - $ref: '#/components/schemas/ProblemDetail' - '404': + $ref: "#/components/schemas/ProblemDetail" + "404": description: No gateway was found for the given child-device deviceId. content: application/problem+json: schema: - $ref: '#/components/schemas/ProblemDetail' - '422': + $ref: "#/components/schemas/ProblemDetail" + "422": description: Request body includes a semantic error. content: application/problem+json: schema: - $ref: '#/components/schemas/ProblemDetail' + $ref: "#/components/schemas/ProblemDetail" delete: summary: Remove device (Unregister) parameters: @@ -72,22 +73,22 @@ paths: in: path required: true schema: - $ref: '#/components/schemas/DeviceId' + $ref: "#/components/schemas/DeviceId" responses: - '204': + "204": description: Device capabilities removed successfully - '403': + "403": description: The request is not authorized by the WFM's local policy (for example, the client relationship has been retired). content: application/problem+json: schema: - $ref: '#/components/schemas/ProblemDetail' - '404': + $ref: "#/components/schemas/ProblemDetail" + "404": description: No device with the given deviceId was found for the client. content: application/problem+json: schema: - $ref: '#/components/schemas/ProblemDetail' + $ref: "#/components/schemas/ProblemDetail" /api/v1/bundles/{digest}: get: summary: Retrieve a deployment bundle by its content digest @@ -105,7 +106,7 @@ paths: type: string description: Quoted ETag (same as digest) previously returned for this bundle. responses: - '200': + "200": description: Bundle archive (immutable) headers: ETag: @@ -122,20 +123,20 @@ paths: type: string format: binary description: Gzip-compressed tar containing one YAML file per deployment. - '304': + "304": description: Representation not modified - '403': + "403": description: The request is not authorized by the WFM's local policy (for example, the client relationship has been retired). content: application/problem+json: schema: - $ref: '#/components/schemas/ProblemDetail' - '404': + $ref: "#/components/schemas/ProblemDetail" + "404": description: Bundle not found for the given digest content: application/problem+json: schema: - $ref: '#/components/schemas/ProblemDetail' + $ref: "#/components/schemas/ProblemDetail" /api/v1/deployments: get: @@ -157,7 +158,7 @@ paths: Indicates which manifest formats the client supports. Supported values: application/vnd.margo.manifest.v1+json. responses: - '200': + "200": description: Manifest returned in the negotiated format headers: Content-Type: @@ -175,21 +176,21 @@ paths: content: application/vnd.margo.manifest.v1+json: schema: - $ref: '#/components/schemas/UnsignedAppStateManifest' - '304': + $ref: "#/components/schemas/UnsignedAppStateManifest" + "304": description: Not Modified - Manifest has not changed - '403': + "403": description: The request is not authorized by the WFM's local policy (for example, the client relationship has been retired). content: application/problem+json: schema: - $ref: '#/components/schemas/ProblemDetail' - '406': + $ref: "#/components/schemas/ProblemDetail" + "406": description: Not Acceptable - Server cannot generate a response matching the Accept header content: application/problem+json: schema: - $ref: '#/components/schemas/ProblemDetail' + $ref: "#/components/schemas/ProblemDetail" /api/v1/deployments/{deploymentId}/{digest}: get: @@ -225,7 +226,7 @@ paths: type: string description: Indicates supported compression formats (e.g., gzip, br) responses: - '200': + "200": description: > The response body is the raw ApplicationDeployment YAML file (Content-Type: application/yaml). The content MUST match the {digest} path segment; the server MUST return 404 if it does not have the exact digest referenced. headers: @@ -251,19 +252,19 @@ paths: schema: type: string description: Raw YAML content of the ApplicationDeployment - '403': + "403": description: The request is not authorized by the WFM's local policy (for example, the client relationship has been retired). content: application/problem+json: schema: - $ref: '#/components/schemas/ProblemDetail' - '404': + $ref: "#/components/schemas/ProblemDetail" + "404": description: Deployment not found for the given digest content: application/problem+json: schema: - $ref: '#/components/schemas/ProblemDetail' - + $ref: "#/components/schemas/ProblemDetail" + /api/v1/deployments/{deploymentId}/status: post: summary: Report deployment status @@ -278,30 +279,30 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/DeploymentStatusManifest' + $ref: "#/components/schemas/DeploymentStatusManifest" responses: - '200': + "200": description: The deployment status was updated successfully. - '201': + "201": description: The deployment status was created successfully. - '400': + "400": description: Malformed request body. content: application/problem+json: schema: - $ref: '#/components/schemas/ProblemDetail' - '403': + $ref: "#/components/schemas/ProblemDetail" + "403": description: The request is not authorized by the WFM's local policy (for example, the client relationship has been retired). content: application/problem+json: schema: - $ref: '#/components/schemas/ProblemDetail' - '422': + $ref: "#/components/schemas/ProblemDetail" + "422": description: Request body includes a semantic error. content: application/problem+json: schema: - $ref: '#/components/schemas/ProblemDetail' + $ref: "#/components/schemas/ProblemDetail" components: securitySchemes: @@ -314,588 +315,1399 @@ components: Bundle per the Margo Identity and Authorization Framework (MIAF) and the WFM Identity Profile. + # Modifications compared to pre-data-model stage: + # - ManifestVersion INLINED into UnsignedAppStateManifest(OpenAPI)/DesiredStateManifest(LinkML) + # - appDeploymentParams INLINED into appDeploymentSpec(OpenAPI)/Spec(LinkML) schemas: - ProblemDetail: + Component: type: object - description: > - RFC 9457 Problem Details for HTTP APIs. Returned with Content-Type: - application/problem+json. - See https://www.rfc-editor.org/rfc/rfc9457. - Extension members (RFC 9457 §3.2) are permitted via additionalProperties. - Vendors MAY add custom fields alongside standard margo fields. - Vendor-specific problem types MUST use their own URI namespace. - The https://docs.margo.org/specification/problem-types namespace is reserved for Margo. - required: - - type - - title - - status + additionalProperties: true + description: A class representing a component of a deployment profile. properties: - type: - type: string - format: uri-reference - description: > - URI reference identifying the problem type. - Implementations MUST use the registered Margo type URI for any error - condition defined in the Margo specification. - For error conditions not defined in this specification, implementations - MAY define their own type URIs under their own namespace. - Clients MUST use this field for programmatic error handling, NOT the status code or title. - Clients encountering an unknown type URI SHOULD fall back to title, detail, and status - for display and handling. - example: https://docs.margo.org/specification/problem-types#invalid-request - title: + name: type: string - description: Short human-readable summary of the problem type. - example: Gateway not found - status: - type: integer - description: HTTP status code. - example: 404 - detail: + description: A unique name used to identify the component package. For helm + installations the name will be used as the chart name. The name must be lower + case letters and numbers and MAY contain dashes. Uppercase letters, underscores + and periods MUST NOT be used. + properties: + $ref: '#/components/schemas/ComponentProperties' + description: A dictionary element specifying the component packages's deployment + details. See the [Component Properties](#componentproperties-attributes) + section below. + required: + - name + - properties + ComponentProperties: + type: object + additionalProperties: true + description: Properties dictionary for component deployment details. + properties: + repository: type: string - description: Human-readable explanation specific to this occurrence of the problem. - example: No gateway was found for the given child-device deviceId. - instance: + description: Repository location for the component. + revision: type: string - format: uri-reference - description: URI reference identifying the specific occurrence of the problem. - example: /api/v1/capabilities/gateway-1/child-device-2 - retryable: + description: Revision version for the component. + wait: type: boolean - description: > - Whether the client MAY retry the request. If true, client SHOULD respect - the Retry-After response header when present. - example: false - retryAfterSeconds: - type: integer - description: > - Advisory retry delay in seconds. The authoritative value is the Retry-After - response header when present. This field is advisory only. - example: 30 - backoffStrategy: + description: If True, indicates the device waits for the component installation + to complete. + timeout: type: string - enum: [none, fixed, exponential] - description: > - Recommended backoff strategy for retrying. - none: do not retry. - fixed: retry after retryAfterSeconds. - exponential: use exponential backoff starting at retryAfterSeconds. - example: exponential - errors: - type: array - description: > - Optional list of field-level validation errors. - SHOULD be present on 422 Unprocessable Entity responses. - items: - type: object - properties: - field: - type: string - description: Field path that caused the validation error. - example: properties.roles - message: - type: string - description: Human-readable validation error message. - example: must contain at least one valid role - additionalProperties: true - # additionalProperties: true permits RFC 9457 §4 extension members. - # Margo extension fields: retryable, retryAfterSeconds, backoffStrategy, errors - # - # Vendor extension fields SHOULD follow RFC 9457 naming rules: - # - Start with a letter (A-Z, a-z) - # - Use only letters, digits, and underscores - # - Be three characters or longer - # - # Vendor extension examples: - # vendor_component: "sensor-subsystem" - # vendor_error_code: "ERR_4291" - ManifestVersion: - type: number - description: > - Monotonically increasing unsigned 64-bit integer in the inclusive range [1, 2^64-1]. - Prevents rollback attacks. The first manifest MUST use 1. - DeploymentBundleRef: - type: [object, 'null'] - description: > - Describes a single archive containing all ApplicationDeployment documents. If there are zero deployments (deployments array is empty) the property MUST be present with the value null (it MUST NOT be omitted). + description: Time to wait for component installation to complete, formatted + as "##m##s". + packageLocation: + type: string + description: URL indicating the Compose package's location. + keyLocation: + type: string + description: URL for the public key used to validate a digitally signed package. + helmApplicationDeploymentProfileComponent: + type: object + additionalProperties: true + description: '' properties: - mediaType: + name: type: string - description: > - MUST be application/vnd.margo.bundle.v1+tar+gzip; a gzip-compressed tar whose root contains one or more ApplicationDeployment YAML files. If there are zero deployments then bundle MUST be null (an empty archive MUST NOT be served). The archive MUST contain exactly the set of YAML files referenced by deployments. - digest: + description: A unique name used to identify the component package. For helm + installations the name will be used as the chart name. The name must be lower + case letters and numbers and MAY contain dashes. Uppercase letters, underscores + and periods MUST NOT be used. + properties: + $ref: '#/components/schemas/ComponentProperties' + description: A dictionary element specifying the component packages's deployment + details. See the [Component Properties](#componentproperties-attributes) + section below. + required: + - name + - properties + composeApplicationDeploymentProfileComponent: + type: object + additionalProperties: true + description: '' + properties: + name: type: string - description: > - The digest of the bundle archive. MUST equal the digest computed over the exact sequence of bytes (per Exact Bytes Rule) in the bundle endpoint's HTTP 200 OK response body. - sizeBytes: - type: number - description: > - Unsigned 64-bit advisory estimate of the decoded payload length in bytes for the bundle archive. Provided for bandwidth estimation and update planning. MUST NOT be used for integrity; digest verification remains mandatory. - url: + description: A unique name used to identify the component package. For helm + installations the name will be used as the chart name. The name must be lower + case letters and numbers and MAY contain dashes. Uppercase letters, underscores + and periods MUST NOT be used. + properties: + $ref: '#/components/schemas/ComponentProperties' + description: A dictionary element specifying the component packages's deployment + details. See the [Component Properties](#componentproperties-attributes) + section below. + required: + - name + - properties + appParameterTarget: + type: object + additionalProperties: true + description: Specifies where the parameter applies in the deployment. + properties: + pointer: type: string - description: > - Content-addressable retrieval endpoint of the form /api/v1/bundles/{digest} where {digest} equals bundle.digest. - DeploymentManifestRef: + description: The name of the parameter in the deployment configuration. For + Helm deployments, this is the dot notation for the matching element in the + `values.yaml` file. This follows the same naming convention you would use + with the `--set` command line argument with the `helm install` command. For + compose deployments, this is the name of the environment variable to set. + components: + type: array + items: + type: string + description: Indicates which deployment profile [component](#component-attributes + the parameter target applies to. The component name specified here MUST match + a component name in the [deployment profiles](#deploymentprofile-attributes) + section. + required: + - pointer + - components + DeploymentAnnotations: type: object - description: > - Reference to a deployment manifest with content addressing and integrity verification. + additionalProperties: true + description: A class representing annotations. + properties: + applicationId: + type: string + description: An identifier for the application. The id is used to help create + unique identifiers where required, such as namespaces. The id must be lower + case letters and numbers and MAY contain dashes. Uppercase letters, underscores + and periods MUST NOT be used. The id MUST NOT be more than 200 characters. + The applicationId MUST match the associated application package Metadata "id" + attribute. + pattern: ^[-a-z0-9]{1,200}$ + id: + type: string + description: The unique identifier UUID of the deployment specification. Needs + to be assigned by the Workload Orchestration Software. + pattern: ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$ required: - - deploymentId - - digest - - url + - applicationId + - id + appDeploymentMetadata: + type: object + additionalProperties: true + description: Metadata associated with the desired state. properties: - deploymentId: + annotations: + $ref: '#/components/schemas/DeploymentAnnotations' + description: Defines the application ID and unique identifier associated to + the deployment specification. Needs to be assigned by the Workload Orchestration + Software. See the [Annotation Attributes](#annotations-attributes) section + below. + name: type: string - description: > - Unique identifier for the application deployment. - digest: + description: When deploying to Kubernetes, the manifests name. The name is chosen + by the workload orchestration vendor and is not displayed anywhere. + namespace: type: string - description: > - The digest of the individual ApplicationDeployment YAML file. MUST equal the digest computed over the exact sequence of bytes (per Exact Bytes Rule) in that deployment endpoint's HTTP 200 OK response body. - sizeBytes: - type: number - description: > - Unsigned 64-bit advisory estimate of the decoded payload length in bytes for the deployment YAML. Provided for planning or progress display. MUST NOT be used for integrity; digest verification remains mandatory. - url: + description: When deploying to Kubernetes, the namespace the manifest is added + under. The namespace is chosen by the workload orchestration solution vendor. + deviceId: type: string - description: > - Content-addressable endpoint of the form /api/v1/deployments/{deploymentId}/{digest}. The {digest} MUST equal deployments[].digest; the referenced resource is immutable - UnsignedAppStateManifest: + pattern: ^[A-Za-z0-9._~-]+(\/[A-Za-z0-9._~-]+)*(\/\*)?$ + required: + - annotations + - name + - namespace + - deviceId + appDeploymentProfile: type: object + additionalProperties: true + description: Represents a deployment configuration for the application. + properties: + type: + type: string + description: Defines the type of this deployment configuration for the application. The + allowed values are `helm.v3`, to indicate the deployment profile's format + is Helm version 3, and `compose` to indicate the deployment profile's format + is a Compose file. When installing the application on a device supporting + the Kubernetes platform, all `helm.v3` components, and only `helm.v3` components, + will be provided to the device in same order they are listed in the application + description file. When installing the application on a device supporting + Compose, all `compose` components, and only `compose` components, will be + provided to the device in the same order they are listed in the application + description file. The device will install the components in the same order + they are listed in the application description file. + pattern: ^(helm\.v3|compose)$ + components: + type: array + items: + $ref: '#/components/schemas/Component' + description: Component element indicating the components to deploy when installing + the application. See the [Component](#component-attributes) section below. required: - - manifestVersion - - bundle - - bundle.mediaType - - bundle.digest - - bundle.url - - deployments + - type + - components + Parameter: + type: object + additionalProperties: true + description: Defines a configurable parameter for the application. properties: - manifestVersion: - $ref: '#/components/schemas/ManifestVersion' - bundle: - $ref: '#/components/schemas/DeploymentBundleRef' - deployments: + name: + type: string + description: Name of the parameter. + value: + description: The parameter's default value. Accepted data types are string, + integer, double, boolean, array[string], array[integer], array[double], array[boolean]. + anyOf: + - type: boolean + - type: integer + - type: number + - type: string + targets: type: array - description: A list of deployment object references for the device. The reference contains some meta info and reference to the url where the deployment is available. items: - $ref: '#/components/schemas/DeploymentManifestRef' - DeviceCapabilitiesManifest: + $ref: '#/components/schemas/appParameterTarget' + description: Used to indicate which component the value should be applied to + when installing, or updating, the application. See the [Target](#target-attributes) + section below. + required: + - name + - targets + appDeploymentSpec: type: object - required: [properties] - patternProperties: - '^x-[a-z][a-z0-9-]*-extensions$': - type: object - description: >- - Vendor-specific extension. Keys MUST match x--extensions - where matches [a-z][a-z0-9-]*. - additionalProperties: false + additionalProperties: true + description: Specification details of the desired state. properties: - properties: - type: object - required: [id, vendor, modelNumber, serialNumber] - # Only identity fields are required. A device that hosts workloads reports cpus, memory, - # storage, peripherals, interfaces, otelCollector (true), supportedRuntimes (>=1), and - # supportedDeploymentTypes (>=1). A device that does not host workloads (e.g. a see-thru - # gateway that only relays the devices behind it) omits those fields. - # The WFM infers it is non-hosting from their absence and infers a - # gateway from the parent/child deviceId hierarchy. - properties: - id: - $ref: '#/components/schemas/DeviceId' - vendor: - type: string - modelNumber: - type: string - serialNumber: - type: string - cpus: - type: array - items: - type: object - required: [cores] - properties: - cores: - type: number - architecture: - type: string - enum: [amd64, arm64, arm] - memory: - type: string - storage: - type: string - peripherals: - type: array - items: - $ref: '#/components/schemas/DevicePeripheral' - interfaces: - type: array - items: - $ref: '#/components/schemas/DeviceCommunicationInterface' - otelCollector: - type: boolean - supportedRuntimes: - type: array - minItems: 1 - items: - type: string - enum: [oci, custom] - supportedDeploymentTypes: - type: array - minItems: 1 - items: - type: string - enum: [helm, compose, custom] - labels: + deploymentProfile: + $ref: '#/components/schemas/appDeploymentProfile' + description: Section that defines deployment details including type and components. + parameters: type: object - description: >- - Optional supplier-defined key/value pair metadata used for device matching via eligibilityRules - label selectors. Values MUST be a string, number, boolean, or an array of strings or numbers. - Margo does not assign semantics to any particular label key or value. Label keys are case-sensitive. - Implementations SHOULD use stable, collision-resistant label names, prefixing with an organization - domain is recommended. additionalProperties: - oneOf: - - type: string - - type: number - - type: boolean - - type: array - items: - type: string - - type: array - items: - type: number - DeviceId: - # format: "{id}[/{id}[/{id}...]]" - # Top-level id is required and must include only unreserved characters as specified in RFC3986. - # Subsequent ids are only used when referencing child devices, and must include only unreserved characters as specified in RFC3986 when present. - type: string - pattern: '^[A-Za-z0-9._~-]+(\/[A-Za-z0-9._~-]+)*$' - DeviceId_with_asterisk: - # format: "{id}[/{id}[/{id}...]/*]" - # Top-level id is required and must include only unreserved characters as specified in RFC3986. - # Subsequent ids are only used when referencing child devices, and must include only unreserved characters as specified in RFC3986 when present. - type: string - pattern: '^[A-Za-z0-9._~-]+(\/[A-Za-z0-9._~-]+)*(\/\*)?$' - - ComponentStatus: + anyOf: + - $ref: '#/components/schemas/Parameter__identifier_optional' + - type: array + items: + $ref: '#/components/schemas/appParameterTarget' + description: Used to indicate which component the value should be applied + to when installing, or updating, the application. See the [Target](#target-attributes) + section below. + description: Describes the configured parameters applied via the end-user. + required: + - deploymentProfile + - parameters + CPU: type: object - required: [name, state] + additionalProperties: true + description: CPU element specifying the CPU requirements for the application. properties: - name: - type: string - state: - type: string - enum: [pending, installing, installed, failed, removing, removed] - error: - type: object - properties: - code: - type: string - source: - type: string - message: - type: string - - DeploymentStatusManifest: + cores: + type: number + description: The required amount of CPU cores the application must use to run + in its full functionality. Specified as decimal units of CPU cores (e.g., + `0.5` is half a core). This is defined by the application developer. After + deployment of the application, the device MUST provide this number of CPU + cores for the application. + architectures: + type: array + items: + type: string + description: Permissible CPU architecture values. + enum: + - amd64 + - x86_64 + - arm64 + - arm + - riscv64 + - other + description: The CPU architectures supported by the application. This can be + e.g. amd64, x86_64, arm64, arm. See the [CpuArchitectureType](#cpuarchitecturetype) + definition for all permissible values. Multiple arcitecture types can be specified, + as the deployment profile may support multiple CPU architectures. + required: + - cores + DeviceCommunicationInterface: type: object - required: [deploymentId, status, components] + additionalProperties: true + description: Communication interface of a device. properties: - deploymentId: + type: type: string - deviceId: - $ref: '#/components/schemas/DeviceId' - status: - type: object - required: [state] - properties: - state: - type: string - enum: [pending, installing, installed, failed, removing, removed] - error: - type: object - properties: - code: - type: string - source: - type: string - message: - type: string - components: - type: array - items: - $ref: '#/components/schemas/ComponentStatus' - + description: Permissible communication interface types. + enum: + - ethernet + - wifi + - cellular + - bluetooth + - usb + - canbus + - rs232 + - other + required: + - type DevicePeripheral: type: object - required: [type] + additionalProperties: true + description: Peripheral hardware of a device. properties: type: type: string - enum: [gpu, display, camera, microphone, speaker] + description: Permissible peripheral types. + enum: + - gpu + - display + - camera + - microphone + - speaker + - other manufacturer: type: string + description: The name of the manufacturer. If `manufacturer` is specified as + a requirement here, it may be difficult to find devices that can host the application. + Please use these requirements with caution. model: type: string - - DeviceCommunicationInterface: - type: object - required: [type] - properties: - type: - type: string - enum: [ethernet, wifi, cellular, bluetooth, usb, canbus, rs232] - - # app deployment struct added here for ease of programming, the code generators will generate the structs - # for the actual app deployment yaml and parsing would be easy to do - appDeploymentManifest: + description: The model of the peripheral. If `model` is specified as a requirement + here, it may be difficult to find devices that can host the application. Please + use these requirements with caution. + required: + - type + ApplicationMetadata: type: object - description: Application Deployment manifest - required: [metadata, spec] + additionalProperties: true + description: Metadata about the application. properties: id: type: string - description: Unique identifier for the application deployment - metadata: - $ref: '#/components/schemas/appDeploymentMetadata' - spec: - $ref: '#/components/schemas/appDeploymentSpec' - appDeploymentMetadata: - type: object - required: [annotations, name, namespace, deviceId] - properties: + description: An identifier for the application. The id is used to help create + unique identifiers where required, such as namespaces. The id must be lower + case letters and numbers and MAY contain dashes. Uppercase letters, underscores + and periods MUST NOT be used. The id MUST NOT be more than 200 characters. + pattern: ^[a-z0-9-]{1,200}$ name: type: string - description: Name of the resource - namespace: + description: The application's official name. This name is for display purposes + only and can container whitespace and special characters. + description: type: string - description: Namespace of the resource - deviceId: - $ref: '#/components/schemas/DeviceId_with_asterisk' - description: Device ID of the target device for the deployment - labels: - type: object - additionalProperties: { type: string } - description: Labels for the resource - applicationDeploymentProfileComponent: - type: object - description: >- - A component within a deployment profile. Uses the unified ComponentProperties - shape — both Helm and Compose components share the same OCI coordinate structure. - required: [name, properties] - patternProperties: - '^x-[a-z][a-z0-9-]*-extensions$': - type: object - description: >- - Vendor-specific extension. Keys MUST match x--extensions - where matches [a-z][a-z0-9-]*. - additionalProperties: false + version: + type: string + description: The application's version. + catalog: + $ref: '#/components/schemas/Catalog' + description: Catalog element specifying the application's metadata for enabling + its discovery. See the [Catalog](#catalog-attributes) section below. + required: + - id + - name + - version + - catalog + Author: + type: object + additionalProperties: true + description: Information about the application's author. properties: name: type: string - description: Name of the component - properties: - type: object - required: [repository, revision] - properties: - repository: - type: string - pattern: '^oci://.+' - description: >- - OCI repository URI for the component package - (e.g., oci://registry.example.com/org/component-name). - MUST be a valid OCI reference using the oci:// scheme. - revision: - type: string - pattern: '^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:_([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$' - description: >- - OCI tag identifying the component version. MUST be a valid SemVer 2.0 - string without leading v. Build metadata uses _ as separator instead of +. - wait: - type: boolean - description: >- - Whether to wait for component installation to complete before proceeding. - Default is true. Only applies when multiple components are provided. - timeout: - type: string - pattern: '^\d+m\d+s$' - description: >- - Maximum time to wait for component installation to complete. - Format is ##m##s (e.g., 5m0s, 8m30s). - appDeploymentProfile: + description: The name of the application's creator. + email: + type: string + description: Email address of the application's creator. + pattern: .*@[a-z0-9.-]* + Catalog: type: object - description: Application Deployment Profile - required: [type, components] - patternProperties: - '^x-[a-z][a-z0-9-]*-extensions$': - type: object - description: >- - Vendor-specific extension. Keys MUST match x--extensions - where matches [a-z][a-z0-9-]*. - additionalProperties: false + additionalProperties: true + description: Catalog metadata for displaying the application. properties: - type: - type: string - enum: ["helm", "compose"] - description: Type of deployment profile - components: + application: + $ref: '#/components/schemas/CatalogApplicationMetadata' + description: Application element specifying the application specific metadata. + See the [Application Metadata](#applicationmetadata-attributes) section below. + author: type: array - items: - $ref: '#/components/schemas/applicationDeploymentProfileComponent' - description: Components of the deployment profile - deviceConstraints: - $ref: '#/components/schemas/DeviceConstraints' - description: Device constraints specifying the minimum device capabilities and eligibility rules required for the deployment. - DeviceConstraints: - type: object - description: >- - Device constraints specifying the minimum device capabilities and eligibility rules required for the deployment. - properties: - capacityRequirements: - $ref: '#/components/schemas/CapacityRequirements' - description: Minimum CPU, memory, and storage requirements for the deployment profile. - eligibilityRules: + items: + $ref: '#/components/schemas/Author' + description: Author element specifying metadata about the application's author. + See the [Author Metadata](#author-attributes) section below. + organization: type: array items: - $ref: '#/components/schemas/EligibilityRule' - description: >- - Optional rules used to match the deployment with device properties and supplier-defined labels - reported in the device capabilities. - CapacityRequirements: + $ref: '#/components/schemas/Organization' + description: Organization element specifying metadata about the organization/company + providing the application. See the [Organization Metadata](#organization-attributes) + section below. + required: + - organization + CatalogApplicationMetadata: type: object - description: Minimum device capacity required by the deployment profile. + additionalProperties: true + description: Metadata specific to the application. properties: - cpu: - $ref: '#/components/schemas/DeploymentCpuRequirement' - description: CPU element specifying the CPU requirements for the deployment. - memory: + descriptionFile: type: string - description: >- - The minimum amount of memory required. The value is given in binary units - (`Ki` = Kibibytes, `Mi` = Mebibytes, `Gi` = Gibibytes). - pattern: ^[0-9]+(Mi|Gi|Ki)$ - storage: + description: Link to the file containing the application's full description. + The file should be a markdown file. + icon: type: string - description: >- - The minimum amount of storage required. The value is given in binary units - (`Ki` = Kibibytes, `Mi` = Mebibytes, `Gi` = Gibibytes, `Ti` = Tebibytes, `Pi` = Pebibytes, `Ei` = Exbibytes). - pattern: ^[0-9]+(Mi|Gi|Ki|Ti|Pi|Ei)$ - DeploymentCpuRequirement: - type: object - description: CPU element specifying the CPU requirements for the deployment. - required: [cores] - properties: - cores: - type: number - description: >- - The required amount of CPU cores. Specified as decimal units of CPU cores (e.g., `0.5` is half a core). - architectures: + description: Link to the icon file (e.g., in PNG format). + licenseFile: + type: string + description: Link to the file that details the application's license. The file + should either be a plain text, markdown or PDF file. + releaseNotes: + type: string + description: Statement about the changes for this application's release. The + file should either be a markdown or PDF file. + site: + type: string + description: Link to the application's website. + tagline: + type: string + description: The application's slogan. + tags: type: array items: type: string - enum: [amd64, arm64, arm, riscv64, other] - description: The CPU architectures supported by the deployment. - EligibilityRule: + description: An array of strings that can be used to provide additional context + for the application in a user interface to assist with task such as categorizing, + searching, etc. + Configuration: type: object - description: A rule matching properties and supplier-defined labels reported through the device capabilities. + additionalProperties: true + description: Configuration layout and validation rules. properties: - propertySelector: - $ref: '#/components/schemas/Selector' - description: Selector evaluated against the properties reported in the device capabilities. - labelSelector: - $ref: '#/components/schemas/Selector' - description: Selector evaluated against the labels reported in the device capabilities. - Selector: + sections: + type: array + items: + $ref: '#/components/schemas/Section' + description: Sections are used to group related parameters together, so it is + possible to present a user interface with a logical grouping of the parameters + in each section. See the [Section](#section-attributes) section below. + schema: + type: array + items: + $ref: '#/components/schemas/Schema' + description: Schema is used to provide details about how to validate each parameter + value. At a minimum, the parameter value must be validated to match the schema's + data type. The schema indicates additional rules the provided value must satisfy + to be considered valid input. See the [Schema](#schema-attributes) section + below. + required: + - sections + - schema + DeploymentProfileDescription: type: object - description: A set of match expressions evaluated with AND semantics. - required: [matchExpressions] + additionalProperties: true + description: Represents a deployment configuration for the application. properties: - matchExpressions: + id: + type: string + description: An identifier for the deployment profile, given by the application + developer, used to uniquely identify this deployment profile from others within + this application description's scope. + description: + type: string + description: This human-readable description of a deployment profile allows + for providing additional context about the deployment profile. E.g., the application + developer can use this to describe the deployment profile's purpose, such + as the intended use case. Additionally, the application developer can use + this to provide further details about the resources, peripherals, and interfaces + required to run the application. + requiredResources: + $ref: '#/components/schemas/Resources' + description: Required resources element specifying the resources required to + install the application. See the [Required Resources](#requiredresources-attributes) + section below. The consequences (e.g., aborting / blocking the installation + or execution of the application) of not meeting these required resources are + not defined (yet) by margo. + type: + type: string + description: Defines the type of this deployment configuration for the application. The + allowed values are `helm.v3`, to indicate the deployment profile's format + is Helm version 3, and `compose` to indicate the deployment profile's format + is a Compose file. When installing the application on a device supporting + the Kubernetes platform, all `helm.v3` components, and only `helm.v3` components, + will be provided to the device in same order they are listed in the application + description file. When installing the application on a device supporting + Compose, all `compose` components, and only `compose` components, will be + provided to the device in the same order they are listed in the application + description file. The device will install the components in the same order + they are listed in the application description file. + pattern: ^(helm\.v3|compose)$ + components: type: array items: - $ref: '#/components/schemas/MatchExpression' - description: Match expressions evaluated against the device's reported capabilities. - MatchExpression: + $ref: '#/components/schemas/Component' + description: Component element indicating the components to deploy when installing + the application. See the [Component](#component-attributes) section below. + required: + - id + - type + - components + Organization: type: object - description: An expression used to match a device's reported capabilities properties or labels. - required: [key, operator] + additionalProperties: true + description: Information about the providing organization. properties: - key: + name: type: string - description: >- - The key used to match the device's reported capabilities. For property selectors, this MUST be a JSON - Pointer, as defined by RFC 6901, mapping to a specific property. For label selectors, this MUST be the - exact label key. - operator: + description: Organization responsible for the application's development and + distribution. + site: type: string - enum: [In, NotIn, Exists, DoesNotExist, Gt, Lt, ContainsAll, ContainsAny] - description: Operator used to evaluate the referenced value. - values: - type: array - items: {} - description: >- - Values used by the operator when required for matching expressions. Required for the `In`, `NotIn`, - `Gt`, or `Lt` operator. - itemSelector: - $ref: '#/components/schemas/Selector' - description: Selector evaluated against array elements. Required for the `ContainsAll` or `ContainsAny` operator. - appParameterTarget: + description: Link to the organization's website. + required: + - name + Resources: type: object - description: Application Parameter Target - required: [pointer, components] + additionalProperties: true + description: Required resources element specifying the resources required to install + the application. properties: - pointer: + cpu: + $ref: '#/components/schemas/CPU' + description: CPU element specifying the CPU requirements for the application. + See the [CPU](#cpu-attributes) section below. + memory: type: string - description: Pointer to the parameter - components: + description: The minimum amount of memory required. The value is given in binary + units (`Ki` = Kibibytes, `Mi` = Mebibytes, `Gi` = Gibibytes). This is defined + by the application developer. After deployment of the application, the device + MUST provide this amount of memory for the application. + pattern: ^[0-9]+(Mi|Gi|Ki)$ + storage: + type: string + description: The amount of storage required for the application to run. This + encompasses the installed application and the data it needs to store. The + value is given in binary units (`Ki` = Kibibytes, `Mi` = Mebibytes, `Gi` = + Gibibytes, `Ti` Tebibytes, `Pi` = Pebibytes, `Ei` = Exbibytes). This is defined + by the application developer. After deployment of the application, the device + MUST provide this amount of storage for the application + pattern: ^[0-9]+(Mi|Gi|Ki|Ti|Pi|Ei)$ + peripherals: type: array items: - type: string - description: Components of the parameter - appParameterValue: - type: object - description: Application Parameter Value - required: [value, targets] - properties: - value: - # type: object - description: Value of the parameter - additionalProperties: true - x-go-type: interface{} - targets: + $ref: '#/components/schemas/DevicePeripheral' + description: Peripherals element specifying the peripherals required to run + the application. See the [Peripheral](#peripheral-attributes) section below. + interfaces: type: array items: - $ref: '#/components/schemas/appParameterTarget' - description: Targets of the parameter - appDeploymentParams: + $ref: '#/components/schemas/DeviceCommunicationInterface' + description: Interfaces element specifying the communication interfaces required + to run the application. See the [Communication Interfaces](#communicationinterface-attributes) + section below. + Schema: type: object - description: Application Parameters - additionalProperties: - $ref: '#/components/schemas/appParameterValue' - appDeploymentSpec: + additionalProperties: true + description: Defines data type and rules for validating user provided parameter + values. Subclasses (see below) define for each data type their own set of validation + rules that can be used. The value MUST be validated against all rules defined + in the schema. + properties: + name: + type: string + description: The name of the schema rule. This used in the [setting](#setting-attributes) + to link the setting to the schema rule. + dataType: + type: string + description: Indicates the expected data type for the user provided value. Accepted + values are string, integer, double, boolean, array[string], array[integer], + array[double], array[boolean]. At a minimum, the provided parameter value + MUST match the schema's data type if no other validation rules are provided. + required: + - name + - dataType + Section: type: object - description: Application Deployment specification - required: [applicationId, deploymentProfile] - patternProperties: - '^x-[a-z][a-z0-9-]*-extensions$': - type: object - description: >- - Vendor-specific extension. Keys MUST match x--extensions - where matches [a-z][a-z0-9-]*. - additionalProperties: false + additionalProperties: true + description: Named sections within the configuration layout. properties: - applicationId: + name: type: string - description: >- - An identifier for the application. - The id is used to help create unique identifiers where required, such as namespaces. - The id must be lower case letters and numbers and MAY contain dashes. - Uppercase letters, underscores and periods MUST NOT be used. - The id MUST NOT be more than 200 characters. - The applicationId MUST match the associated application description's top-level "id" attribute. - pattern: "^[-a-z0-9]{1,200}$" - deploymentProfile: - $ref: '#/components/schemas/appDeploymentProfile' - description: Deployment profile + description: The name of the section. This may be used in the user interface + to show the grouping of the associated parameters within the section. + settings: + type: array + items: + $ref: '#/components/schemas/Setting' + description: Settings are used to provide instructions to the workload orchestration + software vendor for displaying parameters to the user. A user MUST be able + to provide values for all settings. See the [Setting](#setting-attributes) + section below. + required: + - name + - settings + Setting: + type: object + additionalProperties: true + description: Individual configuration settings. + properties: + parameter: + type: string + description: The name of the [parameter](#parameter-attributes) the setting + is associated with. + name: + type: string + description: The parameter's display name to show in the user interface. + description: + type: string + description: The parameters's short description to provide additional context + to the user in the user interface about what the parameter is for. + immutable: + type: boolean + description: If true, indicates the parameter value MUST not be changed once + it has been set and used to install the application. Default is false if not + provided. + schema: + type: string + description: The name of the schema definition to use to validate the parameter's + value. See the [Schema](#schema-attributes) section below. + required: + - parameter + - name + - schema + DeploymentBundleRef: + type: object + additionalProperties: true + description: Describes an archive containing all referenced ApplicationDeployment + YAMLs. If there are zero deployments (i.e., the deployments array is empty), this + field MUST be present with the value null. An empty archive MUST NOT be served. + properties: + mediaType: + type: string + description: MUST be application/vnd.margo.bundle.v1+tar+gzip, which denotes + a gzip-compressed tar archive (commonly delivered as a .tar.gz) whose root + contains one or more ApplicationDeployment YAML files. Servers MUST set the + HTTP Content-Type to this media type. The archive MUST contain exactly the + set of YAML files referenced by deployments. + const: application/vnd.margo.bundle.v1+tar+gzip + digest: + type: string + description: Digest of the bundle archive. MUST equal the digest computed over + the exact sequence of bytes in the bundle endpoint's HTTP 200 OK response + body. See Protocol - Digest for further details. + pattern: ^[a-zA-Z0-9_-]+:[0-9a-fA-F]+$ + sizeBytes: + type: integer + description: Optional unsigned 64-bit advisory estimate of the decoded payload + length in bytes for the bundle archive. Provided for bandwidth estimation + and update planning. MUST NOT be used for integrity verification. + minimum: 0 + url: + type: string + format: uri + description: Content-addressable retrieval endpoint for the bundle of the form + /api/v1/clients/{clientId}/bundles/{digest} where {digest} equals bundle.digest. + pattern: ^/[a-zA-Z0-9-._~:/?#\[\]@!$&'()*+,;=]+$ + required: + - mediaType + - digest + - url + DeploymentManifestRef: + type: object + additionalProperties: true + description: Reference to an individual ApplicationDeployment within the desired + state manifest. + properties: + deploymentId: + type: string + description: The UUID of the deployment. MUST equal metadata.annotations.id + in the ApplicationDeployment. + digest: + type: string + description: "Digest of the corresponding ApplicationDeployment YAML file.\n\ + \ MUST equal the digest computed over the exact sequence of bytes in the individual\ + \ deployment endpoint's HTTP 200 OK response body.\n See Protocol - Digest\ + \ for further details." + pattern: ^[a-zA-Z0-9_-]+:[0-9a-fA-F]+$ + sizeBytes: + type: integer + description: Optional unsigned 64-bit advisory estimate of the decoded payload + length in bytes for the ApplicationDeployment YAML. Provided for bandwidth + estimation and update planning. MUST NOT be used for integrity verification. + minimum: 0 + url: + type: string + format: uri + description: Content-addressable retrieval endpoint for the ApplicationDeployment + YAML of the form /api/v1/clients/{clientId}/deployments/{deploymentId}/{digest} + where {digest} equals deployments[].digest. + pattern: ^/[a-zA-Z0-9-._~:/?#\[\]@!$&'()*+,;=]+$ + required: + - deploymentId + - digest + - url + Properties: + type: object + additionalProperties: true + description: Device properties reported to the WFM. + properties: + id: + type: string + description: Unique deviceID assigned to the device via the Device Owner. + vendor: + type: string + description: Defines the device vendor. + modelNumber: + type: string + description: Defines the model number of the device. + serialNumber: + type: string + description: Defines the serial number of the device. + roles: + type: array + items: + type: string + description: Role a device can provide to the Margo environment. + enum: + - Standalone Cluster + - Standalone Device + - Cluster Leader + - Gateway + description: 'Element that defines the device role it can provide to the Margo + environment. MUST be one of the following: Standalone Cluster, Cluster Leader, + Standalone Device, or Gateway.' + resources: + $ref: '#/components/schemas/Resources' + description: Element that defines the device's resources available to the application + deployed on the device. See the [Resources Attributes](#resources-attributes) + section below. + required: + - id + - vendor + - modelNumber + - serialNumber + - roles + - resources + ComponentStatus: + type: object + additionalProperties: true + description: Status of a component deployment. + properties: + name: + type: string + state: &id001 + type: string + description: Permissible deployment states. + enum: + - pending + - installing + - installed + - failed + - removing + - removed + error: + $ref: '#/components/schemas/Error' + description: Optional error details when the state is `failed`. + required: + - name + - state + Error: + type: object + additionalProperties: true + description: Error details associated with a failed deployment state. + properties: + code: + type: string + source: + type: string + description: Identifies the source of the error. It is set to the device id, + with its full hierarchy if applicable, of the device generating the error, + or to the component name of the component generating the error. + message: + type: string + Status: + type: object + additionalProperties: true + description: Overall deployment state and optional error details. + properties: + state: *id001 + error: + $ref: '#/components/schemas/Error' + description: Optional error details when the state is `failed`. + required: + - state + FieldError: + type: object + additionalProperties: true + description: A field-level validation error, as used in the `errors` member of a + ProblemDetail. + properties: + field: + type: string + description: Field path that caused the validation error. + message: + type: string + description: Human-readable validation error message. + HelmDeploymentProfile: + type: object + additionalProperties: true + description: '' + properties: + type: + type: string + description: Defines the type of this deployment configuration for the application. The + allowed values are `helm.v3`, to indicate the deployment profile's format + is Helm version 3, and `compose` to indicate the deployment profile's format + is a Compose file. When installing the application on a device supporting + the Kubernetes platform, all `helm.v3` components, and only `helm.v3` components, + will be provided to the device in same order they are listed in the application + description file. When installing the application on a device supporting + Compose, all `compose` components, and only `compose` components, will be + provided to the device in the same order they are listed in the application + description file. The device will install the components in the same order + they are listed in the application description file. + pattern: ^(helm\.v3|compose)$ + const: helm.v3 + components: + type: array + items: + $ref: '#/components/schemas/helmApplicationDeploymentProfileComponent' + description: Component element indicating the components to deploy when installing + the application. See the [Component](#component-attributes) section below. + required: + - type + - components + ComposeDeploymentProfile: + type: object + additionalProperties: true + description: '' + properties: + type: + type: string + description: Defines the type of this deployment configuration for the application. The + allowed values are `helm.v3`, to indicate the deployment profile's format + is Helm version 3, and `compose` to indicate the deployment profile's format + is a Compose file. When installing the application on a device supporting + the Kubernetes platform, all `helm.v3` components, and only `helm.v3` components, + will be provided to the device in same order they are listed in the application + description file. When installing the application on a device supporting + Compose, all `compose` components, and only `compose` components, will be + provided to the device in the same order they are listed in the application + description file. The device will install the components in the same order + they are listed in the application description file. + pattern: ^(helm\.v3|compose)$ + const: compose + components: + type: array + items: + $ref: '#/components/schemas/composeApplicationDeploymentProfileComponent' + description: Component element indicating the components to deploy when installing + the application. See the [Component](#component-attributes) section below. + required: + - type + - components + appDeploymentManifest: + type: object + additionalProperties: true + description: A class representing the desired state of an entity. + properties: + apiVersion: + type: string + description: Identifier of the version of the API the object definition follows. + kind: + type: string + description: Must be `ApplicationDeployment`. + const: ApplicationDeployment + enum: + - ApplicationDeployment + metadata: + $ref: '#/components/schemas/appDeploymentMetadata' + description: Metadata element specifying characteristics about the application + deployment. See the [Metadata Attributes](#metadata-attributes) section below. + spec: + $ref: '#/components/schemas/appDeploymentSpec' + description: Spec element that defines deployment profile and parameters associated + with the application deployment. See the [Spec Attributes](#spec-attributes) + section below. + required: + - apiVersion + - kind + - metadata + - spec + Parameter__identifier_optional: + type: object + additionalProperties: true + description: Defines a configurable parameter for the application. + properties: + name: + type: string + description: Name of the parameter. + value: + description: The parameter's default value. Accepted data types are string, + integer, double, boolean, array[string], array[integer], array[double], array[boolean]. + anyOf: + - type: boolean + - type: integer + - type: number + - type: string + targets: + type: array + items: + $ref: '#/components/schemas/appParameterTarget' + description: Used to indicate which component the value should be applied to + when installing, or updating, the application. See the [Target](#target-attributes) + section below. + required: + - targets + ApplicationDescription: + type: object + additionalProperties: true + description: Root class for an application description. + properties: + apiVersion: + type: string + description: Identifier of the version of the API the object definition follows. + kind: + type: string + description: Specifies the object type; must be `ApplicationDescription`. + const: ApplicationDescription + enum: + - ApplicationDescription + metadata: + $ref: '#/components/schemas/ApplicationMetadata' + description: Metadata element specifying characteristics about the application + deployment. See the [Metadata Attributes](#metadata-attributes) section below. + deploymentProfiles: + type: array + items: + $ref: '#/components/schemas/DeploymentProfileDescription' + description: Deployment profiles element specifying the types of deployments + the application supports. See the [Deployment](#deploymentprofile-attributes) + section below. parameters: - $ref: '#/components/schemas/appDeploymentParams' - description: Parameters for the deployment + type: object + additionalProperties: + anyOf: + - $ref: '#/components/schemas/Parameter__identifier_optional' + - type: array + items: + $ref: '#/components/schemas/appParameterTarget' + description: Used to indicate which component the value should be applied + to when installing, or updating, the application. See the [Target](#target-attributes) + section below. + description: Parameters element specifying the configurable parameters to use + when installing, or updating, the application. See the [Parameter](#parameter-attributes) + section below. + configuration: + $ref: '#/components/schemas/Configuration' + description: Configuration element specifying how parameters should be displayed + to the user for setting the value as well as the rules to use to validate + the user's input. See the [Configuration](#configuration-attributes) section + below. + required: + - apiVersion + - kind + - metadata + - deploymentProfiles + HelmDeploymentProfileDescription: + type: object + additionalProperties: true + description: '' + properties: + id: + type: string + description: An identifier for the deployment profile, given by the application + developer, used to uniquely identify this deployment profile from others within + this application description's scope. + description: + type: string + description: This human-readable description of a deployment profile allows + for providing additional context about the deployment profile. E.g., the application + developer can use this to describe the deployment profile's purpose, such + as the intended use case. Additionally, the application developer can use + this to provide further details about the resources, peripherals, and interfaces + required to run the application. + requiredResources: + $ref: '#/components/schemas/Resources' + description: Required resources element specifying the resources required to + install the application. See the [Required Resources](#requiredresources-attributes) + section below. The consequences (e.g., aborting / blocking the installation + or execution of the application) of not meeting these required resources are + not defined (yet) by margo. + type: + type: string + description: Defines the type of this deployment configuration for the application. The + allowed values are `helm.v3`, to indicate the deployment profile's format + is Helm version 3, and `compose` to indicate the deployment profile's format + is a Compose file. When installing the application on a device supporting + the Kubernetes platform, all `helm.v3` components, and only `helm.v3` components, + will be provided to the device in same order they are listed in the application + description file. When installing the application on a device supporting + Compose, all `compose` components, and only `compose` components, will be + provided to the device in the same order they are listed in the application + description file. The device will install the components in the same order + they are listed in the application description file. + pattern: ^(helm\.v3|compose)$ + const: helm.v3 + components: + type: array + items: + $ref: '#/components/schemas/helmApplicationDeploymentProfileComponent' + description: Component element indicating the components to deploy when installing + the application. See the [Component](#component-attributes) section below. + required: + - id + - type + - components + ComposeDeploymentProfileDescription: + type: object + additionalProperties: true + description: '' + properties: + id: + type: string + description: An identifier for the deployment profile, given by the application + developer, used to uniquely identify this deployment profile from others within + this application description's scope. + description: + type: string + description: This human-readable description of a deployment profile allows + for providing additional context about the deployment profile. E.g., the application + developer can use this to describe the deployment profile's purpose, such + as the intended use case. Additionally, the application developer can use + this to provide further details about the resources, peripherals, and interfaces + required to run the application. + requiredResources: + $ref: '#/components/schemas/Resources' + description: Required resources element specifying the resources required to + install the application. See the [Required Resources](#requiredresources-attributes) + section below. The consequences (e.g., aborting / blocking the installation + or execution of the application) of not meeting these required resources are + not defined (yet) by margo. + type: + type: string + description: Defines the type of this deployment configuration for the application. The + allowed values are `helm.v3`, to indicate the deployment profile's format + is Helm version 3, and `compose` to indicate the deployment profile's format + is a Compose file. When installing the application on a device supporting + the Kubernetes platform, all `helm.v3` components, and only `helm.v3` components, + will be provided to the device in same order they are listed in the application + description file. When installing the application on a device supporting + Compose, all `compose` components, and only `compose` components, will be + provided to the device in the same order they are listed in the application + description file. The device will install the components in the same order + they are listed in the application description file. + pattern: ^(helm\.v3|compose)$ + const: compose + components: + type: array + items: + $ref: '#/components/schemas/composeApplicationDeploymentProfileComponent' + description: Component element indicating the components to deploy when installing + the application. See the [Component](#component-attributes) section below. + required: + - id + - type + - components + TextValidationSchema: + type: object + additionalProperties: true + description: Extends schema to define a string/text-specific set of validation rules + that can be used. + properties: + allowEmpty: + type: boolean + description: If true, indicates a value must be provided. Default is false if + not provided. + minLength: + type: integer + description: If set, indicates the minimum number of characters the value must + have to be considered valid. + maxLength: + type: integer + description: If set, indicates the maximum number of characters the value must + have to be considered valid. + regexMatch: + type: string + description: If set, indicates a regular expression to use to validate the value. + name: + type: string + description: The name of the schema rule. This used in the [setting](#setting-attributes) + to link the setting to the schema rule. + dataType: + type: string + description: Indicates the expected data type for the user provided value. Accepted + values are string, integer, double, boolean, array[string], array[integer], + array[double], array[boolean]. At a minimum, the provided parameter value + MUST match the schema's data type if no other validation rules are provided. + required: + - name + - dataType + BooleanValidationSchema: + type: object + additionalProperties: true + description: Extends schema to define a boolean-specific set of validation rules + that can be used. + properties: + allowEmpty: + type: boolean + description: If true, indicates a value must be provided. Default is false if + not provided. + name: + type: string + description: The name of the schema rule. This used in the [setting](#setting-attributes) + to link the setting to the schema rule. + dataType: + type: string + description: Indicates the expected data type for the user provided value. Accepted + values are string, integer, double, boolean, array[string], array[integer], + array[double], array[boolean]. At a minimum, the provided parameter value + MUST match the schema's data type if no other validation rules are provided. + required: + - name + - dataType + NumericIntegerValidationSchema: + type: object + additionalProperties: true + description: Extends schema to define a integer-specific set of validation rules + that can be used. + properties: + allowEmpty: + type: boolean + description: If true, indicates a value must be provided. Default is false if + not provided. + minValue: + type: integer + description: If set, indicates the minimum allowed integer value the value must + have to be considered valid. + maxValue: + type: integer + description: If set, indicates the maximum allowed integer value the value must + have to be considered valid. + name: + type: string + description: The name of the schema rule. This used in the [setting](#setting-attributes) + to link the setting to the schema rule. + dataType: + type: string + description: Indicates the expected data type for the user provided value. Accepted + values are string, integer, double, boolean, array[string], array[integer], + array[double], array[boolean]. At a minimum, the provided parameter value + MUST match the schema's data type if no other validation rules are provided. + required: + - name + - dataType + NumericDoubleValidationSchema: + type: object + additionalProperties: true + description: Extends schema to define a double-specific set of validation rules + that can be used. + properties: + allowEmpty: + type: boolean + description: If true, indicates a value must be provided. Default is false if + not provided. + minValue: + type: number + description: If set, indicates the minimum value to be considered valid. + maxValue: + type: number + description: If set, indicates the maximum value to be considered valid. + minPrecision: + type: integer + description: If set, indicates the minimum level of precision the value must + have to be considered valid. + maxPrecision: + type: integer + description: If set, indicates the maximum level of precision the value must + have to be considered valid. + name: + type: string + description: The name of the schema rule. This used in the [setting](#setting-attributes) + to link the setting to the schema rule. + dataType: + type: string + description: Indicates the expected data type for the user provided value. Accepted + values are string, integer, double, boolean, array[string], array[integer], + array[double], array[boolean]. At a minimum, the provided parameter value + MUST match the schema's data type if no other validation rules are provided. + required: + - name + - dataType + SelectValidationSchema: + type: object + additionalProperties: true + description: Extends schema to define a specific set of validation rules that can + be used for select options. + properties: + allowEmpty: + type: boolean + description: If true, indicates a value must be provided. Default is false if + not provided. + multiselect: + type: boolean + description: If true, indicates multiple values can be selected. If multiple + values can be selected the resulting value is an array of the selected values. + The default is false if not provided. + options: + type: array + items: + type: string + description: "This provides the list of acceptable options the user can select\ + \ from. The data type for each option must match the parameter setting\u2019\ + s data type." + name: + type: string + description: The name of the schema rule. This used in the [setting](#setting-attributes) + to link the setting to the schema rule. + dataType: + type: string + description: Indicates the expected data type for the user provided value. Accepted + values are string, integer, double, boolean, array[string], array[integer], + array[double], array[boolean]. At a minimum, the provided parameter value + MUST match the schema's data type if no other validation rules are provided. + required: + - options + - name + - dataType + UnsignedAppStateManifest: + type: object + additionalProperties: true + description: Manifest from the Workload Fleet Manager, representing the complete + desired workload configuration assigned to the device. + properties: + manifestVersion: + type: integer + description: Monotonically increasing unsigned 64-bit integer in the inclusive + range [1, 2^64-1]. Prevents rollback attacks. + minimum: 1 + maximum: 18446744073709551615 + bundle: + $ref: '#/components/schemas/DeploymentBundleRef' + description: Package optimization containing multiple ApplicationDeployment + YAMLs. + deployments: + type: array + items: + $ref: '#/components/schemas/DeploymentManifestRef' + description: List of deployment objects describing each workload. + required: + - manifestVersion + - bundle + - deployments + DeviceCapabilitiesManifest: + type: object + additionalProperties: true + description: Capabilities of a device on which applications can be deployed. + properties: + apiVersion: + type: string + description: Identifier of the version the API resource follows. + kind: + type: string + description: Must be `DeviceCapabilitiesManifest`. + const: DeviceCapabilitiesManifest + enum: + - DeviceCapabilitiesManifest + properties: + $ref: '#/components/schemas/Properties' + description: Element that defines characteristics about the device. See the + [Properties Attributes](#properties-attributes) section below. + required: + - apiVersion + - kind + - properties + DeviceResources: + type: object + additionalProperties: true + description: '' + properties: + cpu: + $ref: '#/components/schemas/CPU' + description: CPU element specifying the CPU requirements for the application. + See the [CPU](#cpu-attributes) section below. + memory: + type: string + description: The minimum amount of memory required. The value is given in binary + units (`Ki` = Kibibytes, `Mi` = Mebibytes, `Gi` = Gibibytes). This is defined + by the application developer. After deployment of the application, the device + MUST provide this amount of memory for the application. + pattern: ^[0-9]+(Mi|Gi|Ki)$ + storage: + type: string + description: The amount of storage required for the application to run. This + encompasses the installed application and the data it needs to store. The + value is given in binary units (`Ki` = Kibibytes, `Mi` = Mebibytes, `Gi` = + Gibibytes, `Ti` Tebibytes, `Pi` = Pebibytes, `Ei` = Exbibytes). This is defined + by the application developer. After deployment of the application, the device + MUST provide this amount of storage for the application + pattern: ^[0-9]+(Mi|Gi|Ki|Ti|Pi|Ei)$ + peripherals: + type: array + items: + $ref: '#/components/schemas/DevicePeripheral' + description: Peripherals element specifying the peripherals required to run + the application. See the [Peripheral](#peripheral-attributes) section below. + interfaces: + type: array + items: + $ref: '#/components/schemas/DeviceCommunicationInterface' + description: Interfaces element specifying the communication interfaces required + to run the application. See the [Communication Interfaces](#communicationinterface-attributes) + section below. + required: + - cpu + - memory + - storage + - peripherals + - interfaces + DeploymentStatusManifest: + type: object + additionalProperties: true + description: Manifest sent by the device client to report the deployment status + of a workload. + properties: + apiVersion: + type: string + kind: + type: string + const: DeploymentStatusManifest + enum: + - DeploymentStatusManifest + deploymentId: + type: string + description: The unique identifier of the deployment whose status is being reported. + deviceId: + type: string + description: Id of the device hosting the deployment. Includes the full device + hierarchy if applicable. This attribute is required when reporting on behalf + of a child-device. + pattern: ^[A-Za-z0-9._~-]+(\/[A-Za-z0-9._~-]+)*(\/\*)?$ + status: + $ref: '#/components/schemas/Status' + description: Overall status of the deployment. + components: + type: array + items: + $ref: '#/components/schemas/ComponentStatus' + description: Per-component status list. + required: + - apiVersion + - kind + - deploymentId + - status + - components + ProblemDetail: + type: object + additionalProperties: true + description: "RFC 9457 Problem Details for HTTP APIs. Returned with Content-Type:\ + \ application/problem+json. See https://www.rfc-editor.org/rfc/rfc9457. Extension\ + \ members (RFC 9457 \xA73.2) are permitted. Vendors MAY add custom fields alongside\ + \ standard margo fields. Vendor-specific problem types MUST use their own URI\ + \ namespace. The https://docs.margo.org/specification/problem-types namespace\ + \ is reserved for Margo." + properties: + type: + type: string + format: uri + description: URI reference identifying the problem type. Implementations MUST + use the registered Margo type URI for any error condition defined in the Margo + specification. For error conditions not defined in this specification, implementations + MAY define their own type URIs under their own namespace. Clients MUST use + this field for programmatic error handling, NOT the status code or title. + Clients encountering an unknown type URI SHOULD fall back to title, detail, + and status for display and handling. + title: + type: string + description: Short human-readable summary of the problem type. + status: + type: integer + description: HTTP status code. + detail: + type: string + description: Human-readable explanation specific to this occurrence of the problem. + instance: + type: string + description: URI reference identifying the specific occurrence of the problem. + pattern: ^[a-zA-Z0-9-._~:/?#\[\]@!$&'()*+,;=%]+$ + retryable: + type: boolean + description: Whether the client MAY retry the request. If true, client SHOULD + respect the Retry-After response header when present. + retryAfterSeconds: + type: integer + description: Advisory retry delay in seconds. The authoritative value is the + Retry-After response header when present. This field is advisory only. + backoffStrategy: + type: string + description: Recommended backoff strategy for retrying. + enum: + - none + - fixed + - exponential + errors: + type: array + items: + $ref: '#/components/schemas/FieldError' + description: Optional list of field-level validation errors. SHOULD be present + on 422 Unprocessable Entity responses. + required: + - type + - title + - status + DeviceId_with_asterisk: + type: string + pattern: ^[A-Za-z0-9._~-]+(\/[A-Za-z0-9._~-]+)*(\/\*)?$ + DeviceId: + type: string + pattern: ^[A-Za-z0-9._~-]+(\/[A-Za-z0-9._~-]+)*$ + description: 'Unique identifier of a device or device hierarchy. Format: "{id}[/{id}[/{id}...]]". + The top-level id is required and must include only unreserved characters as specified + in RFC3986. Subsequent ids indicate child devices in a gateway hierarchy and must + also use only unreserved characters.'