Skip to main content

Sardou TOSCA Library

Project description

TOSCA in Swarmchestrate

This repository is home to TOSCA in the Swarmchestrate project, which will use TOSCA v2.0 to describe applications and capacities managed in a Swarmchestrate Universe.

Sardou TOSCA Library

Sardou validates and extracts info from a Swarmchestrate TOSCA template.

Prerequisites

  • Python 3.11+
  • Puccini: Should work with any 0.22.x version, but prefer the latest (currently unreleased) version. Build from source from Go-Puccini or use the prebuilts attached to this release in this repository
    • Minimum GLIBC 2.34 (Ubuntu 22.04 or higher)

Install Puccini on Linux by:

wget https://github.com/Swarmchestrate/tosca/releases/download/v0.2.4/go-puccini_0.22.7-SNAPSHOT-3e85b40_linux_amd64.deb
sudo dpkg -i go-puccini_0.22.7-SNAPSHOT-3e85b40_linux_amd64.deb || sudo apt --fix-broken install -y

Installation

Install using the PyPi package

pip install Sardou

Usage

Import the Sardou TOSCA Library

from sardou import Sardou # note the uppercase S

Create a new Sardou object, passing it the path to your Swarmchestrate TOSCA template. This will validate the template and complete the representation, inheriting from parent types.

>>> tosca = Sardou("my_app.yaml")
Processed successfully: my_app.yaml

>>> tosca
{'description': 'stressng on Swarmchestrate', 'nodeTemplates': {'resource-1': {'metadata': {}, 'description': '', 'types': {'eu.swarmchestrate:0.1::EC2.micro.t3': {'description': 'An EC2 compute node from the University of Westminster provision\n', 'parent': 'eu.swarmchestrate:0.1::Resource'} ...

The template is not resolved at this point (i.e. statisfied requirements and created relationships) - that functionality to come. If there are errors or warnings, they will be presented at this time.

Get the raw, uncompleted (original YAML) with the raw attribute.

>>> tosca.raw
{'tosca_definitions_version': 'tosca_2_0', 'description': 'stressng on Swarmchestrate', 'imports': [{'namespace': 'swch' ...

Grab the QoS requirements as a Python object with get_qos() You could dump this to JSON or YAML.

>>> tosca.get_qos()
[{'energy': {'type': 'swch:QoS.Energy.Budget', 'properties': {'priority': 0.3, 'target': 10}}}...

Grab the Resource requirements as a Python object with get_requirements() You could dump this to JSON or YAML.

>>> tosca.get_requirements()
{'worker-node': {'metadata': {'created_by': 'floria-tosca-lib', 'created_at': '2025-09-16T14:51:24Z', 'description': 'Generated from node worker-node', 'version': '1.0'}, 'capabilities': {'host': {'properties': {'num-cpus': {'$greater_than': 4}, 'mem-size': {'$greater_than': '8 GB'}}}, ...

Get the specification of the resources as a Python object with get_cluster() You could dump this to JSON or YAML.

>>> tosca.get_cluster()
{'resource-1': {'image_id': 'ami-0c02fb291006c7d929', 'instance_type': 't3.micro', 'key_name': 'mykey', 'region_name': 'us-east-1' ...

You can traverse YAML maps using dot notation if needed (which leads to some unexpected behaviour, so this may not be a long-term feature)

>>> tosca.nodeTemplates
{'resource-1': {'metadata': {}, 'description': '', 'types': {'eu.swarmchestrate:0.1::EC2.micro.t3' ...

Devs

It is recommended that developers open a GitHub Codespace on this repository, which includes dependencies and a Makefile for running Puccini manually.

TOSCA Template Validation with Puccini

This is an added feature that provides a Python validation library and script to check whether TOSCA service templates are valid using the Go-Puccini parser.

Validation Library (lib/validation.py )
  • A library that defines the validate_template() function to validate a single TOSCA YAML file.
  • Returns True if the template is valid, False if not.
Validation Script (run_validation.py)
  • A script that searches the templates/ folder and validates all .yaml files in one run.
  • Prints total successes/failures and exits with code 1 if any file fails.

Run:

  • python3 run_validation.py

Contact

Contact Jay at Westminster for support with TOSCA and/or this repository.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sardou-0.3.0.tar.gz (5.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sardou-0.3.0-py3-none-any.whl (6.5 kB view details)

Uploaded Python 3

File details

Details for the file sardou-0.3.0.tar.gz.

File metadata

  • Download URL: sardou-0.3.0.tar.gz
  • Upload date:
  • Size: 5.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for sardou-0.3.0.tar.gz
Algorithm Hash digest
SHA256 150db82d1ad8ab4416e4c742729704e8b2e6d678b6553bc4e4380e7962bab615
MD5 61316bfc30864641ea76805702fca80c
BLAKE2b-256 0389b13f9f8060cff4775fb1db8e43f58a0268c99e6164fdd5a585d312c8630c

See more details on using hashes here.

File details

Details for the file sardou-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: sardou-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 6.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for sardou-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e4abccd986b8b8d85446145422100fd8a70468b53fc894aa151609b8d0f5722d
MD5 7840c953041fed9c1c5d887b8b047ea0
BLAKE2b-256 1ba8340903f339ee85421a25b4c5f1bb73e946c0d1c0b8bc8e2c67f6d6133eb4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page