Puccini
Cloud topology management and deployment tools based on TOSCA.
Puccini is primarily a TOSCA processor. It parses TOSCA service templates and compiles them into the Clout format.
Let’s dive in!
- Head to the tutorial. It will likely answer most of your questions.
- Want to try it out without installing it? Here’s a live demo of Puccini TOSCA running in a browser.
Note that Puccini is intentionally not an orchestrator. This is a “BYOO” kind of establishment (“Bring Your Own Orchestrator”). Available orchestration integrations:
- Khutulun is an extensible TOSCA-native orchestrator
- Kubernetes: Turandot packages Puccini as a Kubernetes operator and includes TOSCA types generated directly from the Kubernetes API
- Ansible: Puccini is packaged for Ansible Galaxy
- OpenStack: see these examples using Ansible (Puccini also natively supports OpenStack’s Heat Orchestration Template language)
- Process automation: see these examples for BPMN integration
Puccini is also available as a GitHub action, allowing you to validate and otherwise use TOSCA in your git workflow.
For a TOSCA development environment, check out the TOSCA Visual Studio Code Extension, which is based on Puccini (work in progress).
Get It
To build Puccini yourself see the build guide.
Overview
Distribution
Each tool is a self-contained executable file, allowing them to be easily distributed with and embedded in toolchains, orchestration, and development environments. They are coded in 100% Go and are very portable, even available for WebAssembly, which is how the in-browser demo linked above works.
You can also embed Puccini into your program as a library. Puccini is immediately usable from Go, but can be used in many other programming languages via self-contained shared C libraries. See included wrappers and examples for Java, Python, and Ruby.
Dialects
Puccini can parse all versions of TOSCA:
Additionally, Puccini can parse the following TOSCA-like dialects:
TOSCA is a complex object-oriented language. We put considerable effort into adhering to every aspect of the grammar, especially in regards to data type checking and type inheritance contracts, which are key to delivering the object-oriented promise of extensibility while maintaining reliable base-type compatibility. Unfortunately, in earlier versions of TOSCA some grammatical features and even some syntax have been specified in ways that are open to interpretation. Puccini picks one interpretation by default, but also supports quirk modes that enable alternative behaviors.
Packaging
The TOSCA source can be accessed by URL, either on the local file systems or via HTTP/HTTPS, as individual files as well as packaged in CSAR files.
Puccini also comes with a simple CSAR creation tool that can be used independently of the
other tools, puccini-csar
.
Design Principles
Puccini’s TOSCA parser comprises 6 multi-threaded phases that handle validation, inheritance, assignment, and normalization of TOSCA’s many types and templates, resulting in a flat, serializable data structure that can be directly consumed by your program. Validation error messages are precise and useful.
FAQ
Please read it!