The xos-tosca
container is responsible to autogenerate the TOSCA interface starting from the xproto
definition.
Topology and Orchestration Specification for Cloud Applications (TOSCA), is an OASIS standard language to describe a topology of cloud based web services, their components, relationships, and the processes that manage them. The TOSCA standard includes specifications to describe processes that create or modify web services.
You can read more about it on the OASIS website.
In XOS we are extending the TOSCA specification to support our custom models and let you manage them with a simple and well known YAML interface.
When the xos-tosca
container starts, it will connect to xos-core
via the gRPC
APIs to fetch all the xproto
definition of the onboarded models, this include both core
and service
models. Then using the xos-genx
toolchain it will generate TOSCA specification for them.
For example, the xproto
definition of a compute node in XOS
:
message Node::node_policy (XOSBase) { required string name = 1 [max_length = 200, content_type = "stripped", blank = False, help_text = "Name of the Node", null = False, db_index = False]; required manytoone site_deployment->SiteDeployment:nodes = 2 [db_index = True, null = False, blank = False]; }
Will be transformed in a TOSCA spec:
tosca_definitions_version: tosca_simple_yaml_1_0 node_types: tosca.nodes.Node: derived_from: tosca.nodes.Root description: "An XOS Node" capabilities: node: type: tosca.capabilities.xos.Node properties: must-exist: type: boolean default: false description: Allow to reference existing models in TOSCA recipes name: type: string required: false description: "Name of the Node" tosca.relationships.BelongsToOne: derived_from: tosca.relationships.Root valid_target_types: [ tosca.capabilities.xos.SiteDeployment ] tosca.capabilities.xos.Node: derived_from: tosca.capabilities.Root description: Node
And a node
can be added to XOS
using this recipe:
tosca_definitions_version: tosca_simple_yaml_1_0 description: Load a compute node in XOS imports: - custom_types/node.yaml topology_template: node_templates: # A compute node GratefulVest: type: tosca.nodes.Node properties: name: Grateful Vest