Contributing to Models
Mesheryβs internal object model is designed to provide a consistent and extensible way of capturing and characterizing the resources under Mesheryβs management and the capabilities Meshery has at its disposal. Meshery Models serve as the unit of packaging for the object models that define a registered capability or a type of managed infrastructure and their relationships, and details specifics of how to manage them.
Models often represent infrastructure and application technologies, however, they are also capable of defining other types of constructs like annotations, like shapes (infrastructure ambiguous components). Models are used to define the capabilities of Meshery.
See the Meshery Registry to learn more.
Figure: Model Construct Classification
Meshery Constructs and their Lifecycle
This section aids in your understanding of the vernacular of Mesheryβs internal object model and discusses the difference beteween schemas, definitions, declarations, and instances
The lifecycle of Meshery entities (components, relationships, policies) is represented by the following terms, which are used to describe the various stages of a Modelβs lifecycle:
Schema
Schema (static) : the skeletal structure representing a logical view of the size, shape, characteristics of a construct.
The schema represents the skeletal structure of a construct and provides a logical view of its size, shape, and characteristics. It defines the expected properties and attributes of the construct. The schema serves as a blueprint or template for creating instances of the construct. It is a static representation that defines the structure and properties but does not contain specific configuration values.
Schema example
Component schema excerpt
{ "$id": "https://schemas.meshery.io/component.json", "$schema": "http://json-schema.org/draft-07/schema#", "description": "Components are the atomic units for designing infrastructure. Learn more at https://docs.meshery.io/concepts/components", "required": [ "apiVersion", "kind", "schema", "model" ], "additionalProperties": false, "type": "object", "properties": { "apiVersion": { "type": "string", "description": "API Version of the component." }, "kind": { "type": "string", "description": "Kind of the component." . . .
Definition
Definition (static) : An implementation of the Schema containing an outline of the specific attributes of a given, unconfigured construct.
A definition is an implementation of the schema. It contains specific configurations and values for the construct at hand. The definition provides the actual configuration details for a specific instance of the construct. It is static because it is created based on the schema but does not change once created. The definition is used to instantiate instances of the construct.
Definition example
a generic, unconfigured Kubernetes Pod.Declaration
Declaration (static) : - A configured construct with detailed intentions of a given Definition.
Declaration example
NGINX container as a Kubernetes Pod with port 443 and SSL termination.Instance
Instance (dynamic) : A realized construct (deployed/discovered); An instantiation of the declaration.
An instance represents a realized construct. An instance is a dynamic representation that corresponds to a deployed or discovered instantiation of a declaration. An instance is created based on its corresponding definition and represents an actual running or deployed version of the construct within the environment.
Instance example
NGINX-as234z2 pod running in a cluster as a Kubernetes Pod with port 443 and SSL termination.Generating Models does not require Meshery Server
Model and Component generation logic is MeshKit. mesheryctl
and Meshery Server both utilize MeshKitβs libraries for ongoing programmatic generation of models and components. For adding a model, the link to the CRDs for the specific model needs to be added to the Meshery Integration Spreadsheet. On adding the link to the Meshery Integration Spreadsheet, the model generator automatically registers the specific model with Meshery.
Suggested Reading
- Build & Release (CI) - Details of Meshery's build and release strategy.
- Contributing to Meshery Adapters - How to contribute to Meshery Adapters
- Contributing to Meshery CLI - How to contribute to Meshery Command Line Interface.
- Contributing to Meshery's End-to-End Tests using Cypress - How to contribute to End-to-End Tests using Cypress.
- Contributing to Meshery Docker Extension - How to contribute to Meshery Docker Extension
- Contributing to Meshery Docs - How to contribute to Meshery Docs.
- How to write MeshKit compatible errors - How to declare errors in Meshery components.
- Contributing to Meshery using git - How to contribute to Meshery using git
- Meshery CLI Contributing Guidelines - Design principles and code conventions.
- Contributing to Model Relationships - How to contribute to Meshery Models Relationships, Policies...
- Contributing to Meshery Server Events - Guide is to help backend contributors send server events using Golang.
- Contributing to Meshery UI - Notification Center - How to contribute to the Notification Center in Meshery's web-based UI.
- Contributing to Meshery UI - How to contribute to Meshery UI (web-based user interface).
- Contributing to Meshery Server - How to contribute to Meshery Server
- Setting up Meshery Development Environment on Windows - How to set up Meshery Development Environment on Windows