Skip to content

TOSCA Vintner Profile 1.0 Release Candidate

This document specifies the TOSCA Vintner profile. This profile includes normative TOSCA types for the domain of cloud computing. Standardizing such normative TOSCA types improves interoperability. The specification is under active development and is not backwards compatible with any previous versions.

TOSCA Vintner Core Profile

The core normative TOSCA type definitions contain high-level type definitions.

Metadata

We define the following metadata.

Metadata Description
vintner_ignore Flag for ignoring an entity (type) during generation, e.g., to omit a property from the environment.
vintner_name Overrides the original name, e.g., override a property name with its correct environment name.
vintner_generated Flag for marking an entity (type) that has been generated.
vintner_orchestrator Orchestrator name for which the entity (type) has been generated.
vintner_abstract Flag for marking an entity type as abstract.
vintner_normative Flag for marking an entity type as normative (considering this specification).
vintner_link URL which points, e.g., to the documentation page of the entity type.

Artifact Types

We specify the following normative artifact types. An overview is given in Figure tosca-vintner-profile-core1.

Artifact Types

Figure C1: TOSCA Vintner Core Artifact Types

artifact

1
2
3
4
artifact:
    derived_from: tosca.artifacts.Root
    metadata:
        vintner_normative: 'true'

source.archive

application packaged as archive

source.archive:
    derived_from: artifact
    metadata:
        vintner_normative: 'true'
    properties:
        extra_opts:
            type: list
            entry_schema:
                type: string
            required: false

system.package

system.package:
    derived_from: artifact
    metadata:
        vintner_normative: 'true'
    properties:
        script:
            type: string
            required: false
            description: URL of an installation script
        repository:
            type: string
            required: false
            description: name of the repository (required if source is set)
        key:
            type: string
            required: false
            description: URL of the apt key which signs the apt repository (required if source is set)
        source:
            type: string
            required: false
            description: source of the repository
        dependencies:
            type: string
            required: false
            description: Comma separated list of apt packages that are additionally installed
        env:
            type: string
            required: false
            description: Space separated env variables

container.image

expects image reference in "file"

1
2
3
4
container.image:
    derived_from: artifact
    metadata:
        vintner_normative: 'true'

machine.image

expects image reference in "file"

1
2
3
4
machine.image:
    derived_from: artifact
    metadata:
        vintner_normative: 'true'

dbms.image

expects image reference in "file"

1
2
3
4
dbms.image:
    derived_from: artifact
    metadata:
        vintner_normative: 'true'

cache.image

expects image reference in "file"

1
2
3
4
cache.image:
    derived_from: artifact
    metadata:
        vintner_normative: 'true'

Interface Types

We specify the following normative interface types. An overview is given in Figure tosca-vintner-profile-core2.

Interface Types

Figure C2: TOSCA Vintner Core Interface Types

interface

1
2
3
4
interface:
    derived_from: tosca.interfaces.Root
    metadata:
        vintner_normative: 'true'

management

management:
    derived_from: interface
    metadata:
        vintner_normative: 'true'
    operations:
        create:
            description: management lifecycle create operation.
        configure:
            description: management lifecycle configure operation.
        start:
            description: management lifecycle start operation.
        stop:
            description: management lifecycle stop operation.
        delete:
            description: management lifecycle delete operation.

Node Types

We specify the following normative node types. An overview is given in Figure tosca-vintner-profile-core3.

Node Types

Figure C3: TOSCA Vintner Core Node Types

node

1
2
3
4
5
node:
    derived_from: tosca.nodes.Root
    metadata:
        vintner_normative: 'true'
        vintner_abstract: 'true'

cloud.provider

1
2
3
4
5
6
7
8
cloud.provider:
    derived_from: node
    metadata:
        vintner_normative: 'true'
        vintner_abstract: 'true'
    capabilities:
        host:
            type: tosca.capabilities.Compute

cloud.service

cloud.service:
    derived_from: node
    metadata:
        vintner_normative: 'true'
        vintner_abstract: 'true'
    capabilities:
        host:
            type: tosca.capabilities.Compute
    requirements:
        - host:
              capability: tosca.capabilities.Compute
              relationship: tosca.relationships.HostedOn

software.application

software.application:
    derived_from: node
    metadata:
        vintner_normative: 'true'
        vintner_abstract: 'true'
    properties:
        application_name:
            type: string
    requirements:
        - host:
              capability: tosca.capabilities.Compute
              relationship: tosca.relationships.HostedOn
    interfaces:
        management:
            type: management

service.application

service.application:
    derived_from: software.application
    metadata:
        vintner_normative: 'true'
        vintner_abstract: 'true'
    properties:
        application_language:
            type: string
        application_port:
            type: string
            metadata:
                vintner_name: PORT
        application_protocol:
            type: string
    attributes:
        application_address:
            type: string
        application_endpoint:
            type: string

software.runtime

1
2
3
4
5
6
7
8
software.runtime:
    derived_from: software.application
    metadata:
        vintner_normative: 'true'
        vintner_abstract: 'true'
    capabilities:
        host:
            type: tosca.capabilities.Compute

container.runtime

1
2
3
4
5
container.runtime:
    derived_from: software.runtime
    metadata:
        vintner_normative: 'true'
        vintner_abstract: 'true'

machine

machine:
    derived_from: node
    metadata:
        vintner_normative: 'true'
        vintner_abstract: 'true'
    properties:
        machine_name:
            type: string
    attributes:
        application_address:
            type: string
        management_address:
            type: string

local.machine

1
2
3
4
5
6
7
8
local.machine:
    derived_from: machine
    metadata:
        vintner_normative: 'true'
        vintner_abstract: 'true'
    capabilities:
        host:
            type: tosca.capabilities.Compute

remote.machine

remote.machine:
    derived_from: machine
    metadata:
        vintner_normative: 'true'
    properties:
        machine_name:
            type: string
        ports:
            type: list
            entry_schema:
                type: string
        flavor:
            type: string
            default: m1.medium
        network:
            type: string
        ssh_user:
            type: string
        ssh_key_name:
            type: string
        ssh_key_file:
            type: string
    capabilities:
        host:
            type: tosca.capabilities.Compute

virtual.machine

virtual.machine:
    derived_from: remote.machine

physical.machine

physical.machine:
    derived_from: remote.machine

database

1
2
3
4
5
6
7
8
9
database:
    derived_from: node
    metadata:
        vintner_normative: 'true'
        vintner_abstract: 'true'
    requirements:
        - host:
              capability: tosca.capabilities.Compute
              relationship: tosca.relationships.HostedOn

relational.database

1
2
3
4
5
relational.database:
    derived_from: database
    metadata:
        vintner_normative: 'true'
        vintner_abstract: 'true'

dbms

1
2
3
4
5
dbms:
    derived_from: software.application
    metadata:
        vintner_normative: 'true'
        vintner_abstract: 'true'

relational.dbms

1
2
3
4
5
relational.dbms:
    derived_from: dbms
    metadata:
        vintner_normative: 'true'
        vintner_abstract: 'true'

cache

cache:
    derived_from: software.application
    properties:
        cache_name:
            type: string
        cache_port:
            type: string
    attributes:
        application_endpoint:
            type: string
        application_address:
            type: string

storage

1
2
3
4
storage:
    derived_from: node
    metadata:
        vintner_normative: 'true'

block.storage

1
2
3
4
block.storage:
    derived_from: storage
    metadata:
        vintner_normative: 'true'

object.storage

object.storage:
    derived_from: storage
    metadata:
        vintner_normative: 'true'
    properties:
        storage_name:
            type: string
        storage_dialect:
            type: string
        storage_user:
            type: string
        storage_token:
            type: string
    attributes:
        storage_endpoint:
            type: string
        storage_token:
            type: string
    requirements:
        - host:
              capability: tosca.capabilities.Compute
              relationship: tosca.relationships.HostedOn

file.storage

1
2
3
4
file.storage:
    derived_from: storage
    metadata:
        vintner_normative: 'true'

ingress

ingress:
    derived_from: node
    metadata:
        vintner_normative: 'true'
    properties:
        application_name:
            type: string
        application_port:
            type: string
        application_protocol:
            type: string
    attributes:
        application_address:
            type: string
    requirements:
        - application:
              capability: tosca.capabilities.Endpoint
              relationship: tosca.relationships.ConnectsTo
        - host:
              capability: tosca.capabilities.Compute
              relationship: tosca.relationships.HostedOn

TOSCA Vintner Extended Profile

The extended normative TOSCA type definitions contain additional provider-specific type definitions which are derived from the core type definitions.

Artifact Types

We specify the following normative artifact types. An overview is given in Figure tosca-vintner-profile-extended1.

Artifact Types

Figure E1: Artifact Types

docker.image

expects image reference in "file"

1
2
3
4
docker.image:
    derived_from: container.image
    metadata:
        vintner_normative: 'true'

zip.archive

1
2
3
4
zip.archive:
    derived_from: source.archive
    metadata:
        vintner_normative: 'true'

tar.archive

1
2
3
4
tar.archive:
    derived_from: source.archive
    metadata:
        vintner_normative: 'true'

apt.package

apt.package:
    derived_from: system.package
    metadata:
        vintner_normative: 'true'
    properties:
        script:
            type: string
            required: false
            description: URL of an installation script
        repository:
            type: string
            required: false
            description: name of the repository (required if source is set)
        key:
            type: string
            required: false
            description: URL of the apt key which signs the apt repository (required if source is set)
        source:
            type: string
            required: false
            description: source of the repository
        dependencies:
            type: string
            required: false
            description: Comma separated list of apt packages that are additionally installed
        env:
            type: string
            required: false
            description: Space separated env variables

Node Types

We specify the following normative node types. An overview is given in Figure tosca-vintner-profile-extended2.

Node Types

Figure E2: Node Types

nodejs.runtime

nodejs.runtime:
    derived_from: software.runtime
    metadata:
        vintner_normative: 'true'
    properties:
        application_name:
            type: string
            default: nodejs
    artifacts:
        apt_package:
            type: apt.package
            file: nodejs
            properties:
                script: https://deb.nodesource.com/setup_18.x
    attributes:
        management_address:
            type: string
    capabilities:
        host:
            type: tosca.capabilities.Compute

nodejs.service.application

nodejs.service.application:
    derived_from: service.application
    metadata:
        vintner_normative: 'true'
        vintner_abstract: 'true'
    properties:
        application_language:
            type: string
            default: nodejs18
    interfaces:
        management:
            type: management
            operations:
                configure: npm ci
                start: npm start

reactjs.service.application

1
2
3
4
5
6
7
8
9
reactjs.service.application:
    derived_from: service.application
    metadata:
        vintner_normative: 'true'
        vintner_abstract: 'true'
    properties:
        application_language:
            type: string
            default: nodejs18

python.runtime

python.runtime:
    derived_from: software.runtime
    metadata:
        vintner_normative: 'true'
    artifacts:
        apt_package:
            type: apt.package
            file: python-is-python3
            properties:
                dependencies:
                    type: string
                    default: python3 python3-pip python3-venv
    attributes:
        management_address:
            type: string
    capabilities:
        host:
            type: tosca.capabilities.Compute

python.service.application

python.service.application:
    derived_from: service.application
    metadata:
        vintner_normative: 'true'
        vintner_abstract: 'true'
    properties:
        application_language:
            type: string
            default: python3
    interfaces:
        management:
            type: management
            operations:
                configure: pip install -r requirements.txt
                start: python main.py

go.service.application

1
2
3
4
5
6
7
8
9
go.service.application:
    derived_from: service.application
    metadata:
        vintner_normative: 'true'
        vintner_abstract: 'true'
    properties:
        application_language:
            type: string
            default: go122

java.runtime

java.runtime:
    derived_from: software.runtime
    metadata:
        vintner_normative: 'true'
    properties:
        application_name:
            type: string
            default: java
    artifacts:
        apt_package:
            type: apt.package
            file: openjdk-18-jre-headless
    attributes:
        management_address:
            type: string
    capabilities:
        host:
            type: tosca.capabilities.Compute

java.service.application

1
2
3
4
5
6
7
8
9
java.service.application:
    derived_from: service.application
    metadata:
        vintner_normative: 'true'
        vintner_abstract: 'true'
    properties:
        application_language:
            type: string
            default: java21

dotnet.runtime

dotnet.runtime:
    derived_from: software.runtime
    metadata:
        vintner_normative: 'true'
    properties:
        application_name:
            type: string
            default: java
    artifacts:
        apt_package:
            type: apt.package
            file: dotnet-sdk-8.0
    attributes:
        management_address:
            type: string
    capabilities:
        host:
            type: tosca.capabilities.Compute

csharp.service.application

1
2
3
4
5
6
7
8
9
csharp.service.application:
    derived_from: service.application
    metadata:
        vintner_normative: 'true'
        vintner_abstract: 'true'
    properties:
        application_language:
            type: string
            default: dotnet8

binary.service.application

1
2
3
4
5
6
7
8
9
binary.service.application:
    derived_from: service.application
    metadata:
        vintner_normative: 'true'
        vintner_abstract: 'true'
    properties:
        application_language:
            type: string
            default: binary

gcp.provider

gcp.provider:
    derived_from: cloud.provider
    metadata:
        vintner_normative: 'true'
        vintner_abstract: 'true'
    properties:
        _hosting:
            type: string
            default: gcp
        gcp_region:
            type: string
        gcp_service_account_file:
            type: string
        gcp_project:
            type: string
    interfaces:
        Standard:
            operations:
                create: exit 0
                delete: exit 0

gcp.service

gcp.service:
    derived_from: cloud.service
    metadata:
        vintner_normative: 'true'
        vintner_abstract: 'true'
    properties:
        _hosting:
            type: string
            default: gcp
        gcp_service:
            type: string

gcp.cloudrun

1
2
3
4
5
6
7
8
gcp.cloudrun:
    derived_from: gcp.service
    metadata:
        vintner_normative: 'true'
    properties:
        gcp_service:
            type: string
            default: run.googleapis.com

gcp.cloudsql

1
2
3
4
5
6
7
8
gcp.cloudsql:
    derived_from: gcp.service
    metadata:
        vintner_normative: 'true'
    properties:
        gcp_service:
            type: string
            default: sqladmin.googleapis.com

gcp.appengine

gcp.appengine:
    derived_from: gcp.service
    metadata:
        vintner_normative: 'true'
    properties:
        gcp_service:
            type: string
            default: appengine.googleapis.com
    requirements:
        - build:
              capability: tosca.capabilities.Root
              relationship: tosca.relationships.DependsOn
        - reporting:
              capability: tosca.capabilities.Root
              relationship: tosca.relationships.DependsOn

gcp.appenginereporting

1
2
3
4
5
6
7
8
gcp.appenginereporting:
    derived_from: gcp.service
    metadata:
        vintner_normative: 'true'
    properties:
        gcp_service:
            type: string
            default: appenginereporting.googleapis.com

gcp.cloudbuild

1
2
3
4
5
6
7
8
gcp.cloudbuild:
    derived_from: gcp.service
    metadata:
        vintner_normative: 'true'
    properties:
        gcp_service:
            type: string
            default: cloudbuild.googleapis.com

gcp.kubernetesengine

1
2
3
4
5
6
7
8
gcp.kubernetesengine:
    derived_from: gcp.service
    metadata:
        vintner_normative: 'true'
    properties:
        gcp_service:
            type: string
            default: container.googleapis.com

gcp.cloudstorage

1
2
3
4
5
6
7
8
gcp.cloudstorage:
    derived_from: gcp.service
    metadata:
        vintner_normative: 'true'
    properties:
        gcp_service:
            type: string
            default: storage.googleapis.com

gcp.memorystore

1
2
3
4
5
6
7
8
gcp.memorystore:
    derived_from: gcp.service
    metadata:
        vintner_normative: 'true'
    properties:
        gcp_service:
            type: string
            default: redis.googleapis.com

docker.engine

Installs Docker Engine listening on the unix socket as well as on tcp://0.0.0.0:2375

docker.engine:
    derived_from: container.runtime
    metadata:
        vintner_normative: 'true'
    properties:
        application_name:
            type: string
            default: docker
        _hosting:
            type: string
            default: docker
    attributes:
        management_address:
            type: string
    capabilities:
        host:
            type: tosca.capabilities.Compute

kubernetes.cluster

kubernetes.cluster:
    derived_from: cloud.service
    metadata:
        vintner_normative: 'true'
        vintner_abstract: 'true'
    properties:
        _hosting:
            type: string
            default: kubernetes
        k8s_host:
            type: string
        k8s_ca_cert_file:
            type: string
        k8s_client_cert_file:
            type: string
        k8s_client_key_file:
            type: string
    capabilities:
        host:
            type: tosca.capabilities.Compute
    interfaces:
        Standard:
            operations:
                create: exit 0
                delete: exit 0

openstack.provider

openstack.provider:
    derived_from: cloud.provider
    metadata:
        vintner_normative: 'true'
        vintner_abstract: 'true'
    properties:
        _hosting:
            type: string
            default: openstack
        os_region_name:
            type: string
        os_auth_type:
            type: string
        os_auth_url:
            type: string
        os_identity_api_version:
            type: string
        os_interface:
            type: string
        os_application_credential_id:
            type: string
        os_application_credential_secret:
            type: string
    interfaces:
        Standard:
            operations:
                create: exit 0
                delete: exit 0

mysql.dbms

mysql.dbms:
    derived_from: relational.dbms
    metadata:
        vintner_normative: 'true'
    properties:
        dbms_name:
            type: string
        application_name:
            type: string
        dbms_password:
            type: string
        dbms_ssl_mode:
            type: string
            default: None
    attributes:
        application_address:
            type: string
        application_port:
            type: string
        management_address:
            type: string
        management_port:
            type: string
    capabilities:
        host:
            type: tosca.capabilities.Compute
    requirements:
        - host:
              capability: tosca.capabilities.Compute
              relationship: tosca.relationships.HostedOn

mysql.database

mysql.database:
    derived_from: relational.database
    metadata:
        vintner_normative: 'true'
    properties:
        database_name:
            type: string
        database_user:
            type: string
        database_password:
            type: string
    attributes:
        application_address:
            type: string
        application_port:
            type: string
    capabilities:
        database:
            type: tosca.capabilities.Endpoint.Database
    requirements:
        - host:
              capability: tosca.capabilities.Compute
              relationship: tosca.relationships.HostedOn

minio.server

minio.server:
    derived_from: service.application
    metadata:
        vintner_normative: 'true'
    properties:
        access_key:
            type: string
            metadata:
                vintner_name: MINIO_ROOT_USER
        secret_key:
            type: string
            metadata:
                vintner_name: MINIO_ROOT_PASSWORD

redis.server

1
2
3
4
5
6
7
8
redis.server:
    derived_from: cache
    metadata:
        vintner_normative: 'true'
    properties:
        application_protocol:
            type: string
            default: redis

Appendix A "TOSCA Vintner Profile"

This appendix contains the TOSCA Vintner profile. The profile is also available as download.

tosca_definitions_version: tosca_simple_yaml_1_3
description: TOSCA Profile for OpenTOSCA Vintner
metadata:
    vintner_normative: 'true'
    template_name: TOSCA Vintner Profile
    template_author: Miles Stötzner
    template_contact: miles.stoetzner@iste.uni-stuttgart.de
    template_link: https://vintner.opentosca.org
    template_version: 1.0.0-draft
    template_id: tosca-vintner-profile
    template_license: https://www.apache.org/licenses/LICENSE-2.0
    acknowledgments: Partially funded by the [German Federal Ministry for Economic Affairs and Climate Action (BMWK)](https://www.bmwk.de) as part of the research project [SofDCar (19S21002)](https://sofdcar.de).
imports:
    - ./tosca-vintner-profile-core.yaml
    - ./tosca-vintner-profile-extended.yaml

Appendix B "TOSCA Vintner Core Profile"

This appendix contains the TOSCA Vintner Core profile. The profile is also available as download.

tosca_definitions_version: tosca_simple_yaml_1_3
description: TOSCA Profile for OpenTOSCA Vintner (Core)
metadata:
    vintner_normative: 'true'
    template_name: TOSCA Vintner Profile (Core)
    template_author: Miles Stötzner
    template_contact: miles.stoetzner@iste.uni-stuttgart.de
    template_link: https://vintner.opentosca.org
    template_version: 1.0.0-draft
    template_id: tosca-vintner-profile
    template_license: https://www.apache.org/licenses/LICENSE-2.0
    acknowledgments: Partially funded by the [German Federal Ministry for Economic Affairs and Climate Action (BMWK)](https://www.bmwk.de) as part of the research project [SofDCar (19S21002)](https://sofdcar.de).
artifact_types:
    artifact:
        derived_from: tosca.artifacts.Root
        metadata:
            vintner_normative: 'true'
    source.archive:
        derived_from: artifact
        description: application packaged as archive
        metadata:
            vintner_normative: 'true'
        properties:
            extra_opts:
                type: list
                entry_schema:
                    type: string
                required: false
    system.package:
        derived_from: artifact
        metadata:
            vintner_normative: 'true'
        properties:
            script:
                type: string
                required: false
                description: URL of an installation script
            repository:
                type: string
                required: false
                description: name of the repository (required if source is set)
            key:
                type: string
                required: false
                description: URL of the apt key which signs the apt repository (required if source is set)
            source:
                type: string
                required: false
                description: source of the repository
            dependencies:
                type: string
                required: false
                description: Comma separated list of apt packages that are additionally installed
            env:
                type: string
                required: false
                description: Space separated env variables
    container.image:
        derived_from: artifact
        description: expects image reference in "file"
        metadata:
            vintner_normative: 'true'
    machine.image:
        derived_from: artifact
        description: expects image reference in "file"
        metadata:
            vintner_normative: 'true'
    dbms.image:
        derived_from: artifact
        description: expects image reference in "file"
        metadata:
            vintner_normative: 'true'
    cache.image:
        derived_from: artifact
        description: expects image reference in "file"
        metadata:
            vintner_normative: 'true'
interface_types:
    interface:
        derived_from: tosca.interfaces.Root
        metadata:
            vintner_normative: 'true'
    management:
        derived_from: interface
        metadata:
            vintner_normative: 'true'
        operations:
            create:
                description: management lifecycle create operation.
            configure:
                description: management lifecycle configure operation.
            start:
                description: management lifecycle start operation.
            stop:
                description: management lifecycle stop operation.
            delete:
                description: management lifecycle delete operation.
node_types:
    node:
        derived_from: tosca.nodes.Root
        metadata:
            vintner_normative: 'true'
            vintner_abstract: 'true'
    cloud.provider:
        derived_from: node
        metadata:
            vintner_normative: 'true'
            vintner_abstract: 'true'
        capabilities:
            host:
                type: tosca.capabilities.Compute
    cloud.service:
        derived_from: node
        metadata:
            vintner_normative: 'true'
            vintner_abstract: 'true'
        capabilities:
            host:
                type: tosca.capabilities.Compute
        requirements:
            - host:
                  capability: tosca.capabilities.Compute
                  relationship: tosca.relationships.HostedOn
    software.application:
        derived_from: node
        metadata:
            vintner_normative: 'true'
            vintner_abstract: 'true'
        properties:
            application_name:
                type: string
        requirements:
            - host:
                  capability: tosca.capabilities.Compute
                  relationship: tosca.relationships.HostedOn
        interfaces:
            management:
                type: management
    service.application:
        derived_from: software.application
        metadata:
            vintner_normative: 'true'
            vintner_abstract: 'true'
        properties:
            application_language:
                type: string
            application_port:
                type: string
                metadata:
                    vintner_name: PORT
            application_protocol:
                type: string
        attributes:
            application_address:
                type: string
            application_endpoint:
                type: string
    software.runtime:
        derived_from: software.application
        metadata:
            vintner_normative: 'true'
            vintner_abstract: 'true'
        capabilities:
            host:
                type: tosca.capabilities.Compute
    container.runtime:
        derived_from: software.runtime
        metadata:
            vintner_normative: 'true'
            vintner_abstract: 'true'
    machine:
        derived_from: node
        metadata:
            vintner_normative: 'true'
            vintner_abstract: 'true'
        properties:
            machine_name:
                type: string
        attributes:
            application_address:
                type: string
            management_address:
                type: string
    local.machine:
        derived_from: machine
        metadata:
            vintner_normative: 'true'
            vintner_abstract: 'true'
        capabilities:
            host:
                type: tosca.capabilities.Compute
    remote.machine:
        derived_from: machine
        metadata:
            vintner_normative: 'true'
        properties:
            machine_name:
                type: string
            ports:
                type: list
                entry_schema:
                    type: string
            flavor:
                type: string
                default: m1.medium
            network:
                type: string
            ssh_user:
                type: string
            ssh_key_name:
                type: string
            ssh_key_file:
                type: string
        capabilities:
            host:
                type: tosca.capabilities.Compute
    virtual.machine:
        derived_from: remote.machine
    physical.machine:
        derived_from: remote.machine
    database:
        derived_from: node
        metadata:
            vintner_normative: 'true'
            vintner_abstract: 'true'
        requirements:
            - host:
                  capability: tosca.capabilities.Compute
                  relationship: tosca.relationships.HostedOn
    relational.database:
        derived_from: database
        metadata:
            vintner_normative: 'true'
            vintner_abstract: 'true'
    dbms:
        derived_from: software.application
        metadata:
            vintner_normative: 'true'
            vintner_abstract: 'true'
    relational.dbms:
        derived_from: dbms
        metadata:
            vintner_normative: 'true'
            vintner_abstract: 'true'
    cache:
        derived_from: software.application
        properties:
            cache_name:
                type: string
            cache_port:
                type: string
        attributes:
            application_endpoint:
                type: string
            application_address:
                type: string
    storage:
        derived_from: node
        metadata:
            vintner_normative: 'true'
    block.storage:
        derived_from: storage
        metadata:
            vintner_normative: 'true'
    object.storage:
        derived_from: storage
        metadata:
            vintner_normative: 'true'
        properties:
            storage_name:
                type: string
            storage_dialect:
                type: string
            storage_user:
                type: string
            storage_token:
                type: string
        attributes:
            storage_endpoint:
                type: string
            storage_token:
                type: string
        requirements:
            - host:
                  capability: tosca.capabilities.Compute
                  relationship: tosca.relationships.HostedOn
    file.storage:
        derived_from: storage
        metadata:
            vintner_normative: 'true'
    ingress:
        derived_from: node
        metadata:
            vintner_normative: 'true'
        properties:
            application_name:
                type: string
            application_port:
                type: string
            application_protocol:
                type: string
        attributes:
            application_address:
                type: string
        requirements:
            - application:
                  capability: tosca.capabilities.Endpoint
                  relationship: tosca.relationships.ConnectsTo
            - host:
                  capability: tosca.capabilities.Compute
                  relationship: tosca.relationships.HostedOn

Appendix C "TOSCA Vintner Extended Profile"

This appendix contains the TOSCA Vintner Extended profile. The profile is also available as download.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
tosca_definitions_version: tosca_simple_yaml_1_3
description: TOSCA Profile for OpenTOSCA Vintner (Extended)
metadata:
    vintner_normative: 'true'
    template_name: TOSCA Vintner Profile (Extended)
    template_author: Miles Stötzner
    template_contact: miles.stoetzner@iste.uni-stuttgart.de
    template_link: https://vintner.opentosca.org
    template_version: 1.0.0-draft
    template_id: tosca-vintner-profile
    template_license: https://www.apache.org/licenses/LICENSE-2.0
    acknowledgments: Partially funded by the [German Federal Ministry for Economic Affairs and Climate Action (BMWK)](https://www.bmwk.de) as part of the research project [SofDCar (19S21002)](https://sofdcar.de).
imports:
    - tosca-vintner-profile-core.yaml
artifact_types:
    docker.image:
        derived_from: container.image
        description: expects image reference in "file"
        metadata:
            vintner_normative: 'true'
    zip.archive:
        derived_from: source.archive
        metadata:
            vintner_normative: 'true'
    tar.archive:
        derived_from: source.archive
        metadata:
            vintner_normative: 'true'
    apt.package:
        derived_from: system.package
        metadata:
            vintner_normative: 'true'
        properties:
            script:
                type: string
                required: false
                description: URL of an installation script
            repository:
                type: string
                required: false
                description: name of the repository (required if source is set)
            key:
                type: string
                required: false
                description: URL of the apt key which signs the apt repository (required if source is set)
            source:
                type: string
                required: false
                description: source of the repository
            dependencies:
                type: string
                required: false
                description: Comma separated list of apt packages that are additionally installed
            env:
                type: string
                required: false
                description: Space separated env variables
node_types:
    nodejs.runtime:
        derived_from: software.runtime
        metadata:
            vintner_normative: 'true'
        properties:
            application_name:
                type: string
                default: nodejs
        artifacts:
            apt_package:
                type: apt.package
                file: nodejs
                properties:
                    script: https://deb.nodesource.com/setup_18.x
        attributes:
            management_address:
                type: string
        capabilities:
            host:
                type: tosca.capabilities.Compute
    nodejs.service.application:
        derived_from: service.application
        metadata:
            vintner_normative: 'true'
            vintner_abstract: 'true'
        properties:
            application_language:
                type: string
                default: nodejs18
        interfaces:
            management:
                type: management
                operations:
                    configure: npm ci
                    start: npm start
    reactjs.service.application:
        derived_from: service.application
        metadata:
            vintner_normative: 'true'
            vintner_abstract: 'true'
        properties:
            application_language:
                type: string
                default: nodejs18
    python.runtime:
        derived_from: software.runtime
        metadata:
            vintner_normative: 'true'
        artifacts:
            apt_package:
                type: apt.package
                file: python-is-python3
                properties:
                    dependencies:
                        type: string
                        default: python3 python3-pip python3-venv
        attributes:
            management_address:
                type: string
        capabilities:
            host:
                type: tosca.capabilities.Compute
    python.service.application:
        derived_from: service.application
        metadata:
            vintner_normative: 'true'
            vintner_abstract: 'true'
        properties:
            application_language:
                type: string
                default: python3
        interfaces:
            management:
                type: management
                operations:
                    configure: pip install -r requirements.txt
                    start: python main.py
    go.service.application:
        derived_from: service.application
        metadata:
            vintner_normative: 'true'
            vintner_abstract: 'true'
        properties:
            application_language:
                type: string
                default: go122
    java.runtime:
        derived_from: software.runtime
        metadata:
            vintner_normative: 'true'
        properties:
            application_name:
                type: string
                default: java
        artifacts:
            apt_package:
                type: apt.package
                file: openjdk-18-jre-headless
        attributes:
            management_address:
                type: string
        capabilities:
            host:
                type: tosca.capabilities.Compute
    java.service.application:
        derived_from: service.application
        metadata:
            vintner_normative: 'true'
            vintner_abstract: 'true'
        properties:
            application_language:
                type: string
                default: java21
    dotnet.runtime:
        derived_from: software.runtime
        metadata:
            vintner_normative: 'true'
        properties:
            application_name:
                type: string
                default: java
        artifacts:
            apt_package:
                type: apt.package
                file: dotnet-sdk-8.0
        attributes:
            management_address:
                type: string
        capabilities:
            host:
                type: tosca.capabilities.Compute
    csharp.service.application:
        derived_from: service.application
        metadata:
            vintner_normative: 'true'
            vintner_abstract: 'true'
        properties:
            application_language:
                type: string
                default: dotnet8
    binary.service.application:
        derived_from: service.application
        metadata:
            vintner_normative: 'true'
            vintner_abstract: 'true'
        properties:
            application_language:
                type: string
                default: binary
    gcp.provider:
        derived_from: cloud.provider
        metadata:
            vintner_normative: 'true'
            vintner_abstract: 'true'
        properties:
            _hosting:
                type: string
                default: gcp
            gcp_region:
                type: string
            gcp_service_account_file:
                type: string
            gcp_project:
                type: string
        interfaces:
            Standard:
                operations:
                    create: exit 0
                    delete: exit 0
    gcp.service:
        derived_from: cloud.service
        metadata:
            vintner_normative: 'true'
            vintner_abstract: 'true'
        properties:
            _hosting:
                type: string
                default: gcp
            gcp_service:
                type: string
    gcp.cloudrun:
        derived_from: gcp.service
        metadata:
            vintner_normative: 'true'
        properties:
            gcp_service:
                type: string
                default: run.googleapis.com
    gcp.cloudsql:
        derived_from: gcp.service
        metadata:
            vintner_normative: 'true'
        properties:
            gcp_service:
                type: string
                default: sqladmin.googleapis.com
    gcp.appengine:
        derived_from: gcp.service
        metadata:
            vintner_normative: 'true'
        properties:
            gcp_service:
                type: string
                default: appengine.googleapis.com
        requirements:
            - build:
                  capability: tosca.capabilities.Root
                  relationship: tosca.relationships.DependsOn
            - reporting:
                  capability: tosca.capabilities.Root
                  relationship: tosca.relationships.DependsOn
    gcp.appenginereporting:
        derived_from: gcp.service
        metadata:
            vintner_normative: 'true'
        properties:
            gcp_service:
                type: string
                default: appenginereporting.googleapis.com
    gcp.cloudbuild:
        derived_from: gcp.service
        metadata:
            vintner_normative: 'true'
        properties:
            gcp_service:
                type: string
                default: cloudbuild.googleapis.com
    gcp.kubernetesengine:
        derived_from: gcp.service
        metadata:
            vintner_normative: 'true'
        properties:
            gcp_service:
                type: string
                default: container.googleapis.com
    gcp.cloudstorage:
        derived_from: gcp.service
        metadata:
            vintner_normative: 'true'
        properties:
            gcp_service:
                type: string
                default: storage.googleapis.com
    gcp.memorystore:
        derived_from: gcp.service
        metadata:
            vintner_normative: 'true'
        properties:
            gcp_service:
                type: string
                default: redis.googleapis.com
    docker.engine:
        derived_from: container.runtime
        description: Installs Docker Engine listening on the unix socket as well as on tcp://0.0.0.0:2375
        metadata:
            vintner_normative: 'true'
        properties:
            application_name:
                type: string
                default: docker
            _hosting:
                type: string
                default: docker
        attributes:
            management_address:
                type: string
        capabilities:
            host:
                type: tosca.capabilities.Compute
    kubernetes.cluster:
        derived_from: cloud.service
        metadata:
            vintner_normative: 'true'
            vintner_abstract: 'true'
        properties:
            _hosting:
                type: string
                default: kubernetes
            k8s_host:
                type: string
            k8s_ca_cert_file:
                type: string
            k8s_client_cert_file:
                type: string
            k8s_client_key_file:
                type: string
        capabilities:
            host:
                type: tosca.capabilities.Compute
        interfaces:
            Standard:
                operations:
                    create: exit 0
                    delete: exit 0
    openstack.provider:
        derived_from: cloud.provider
        metadata:
            vintner_normative: 'true'
            vintner_abstract: 'true'
        properties:
            _hosting:
                type: string
                default: openstack
            os_region_name:
                type: string
            os_auth_type:
                type: string
            os_auth_url:
                type: string
            os_identity_api_version:
                type: string
            os_interface:
                type: string
            os_application_credential_id:
                type: string
            os_application_credential_secret:
                type: string
        interfaces:
            Standard:
                operations:
                    create: exit 0
                    delete: exit 0
    mysql.dbms:
        derived_from: relational.dbms
        metadata:
            vintner_normative: 'true'
        properties:
            dbms_name:
                type: string
            application_name:
                type: string
            dbms_password:
                type: string
            dbms_ssl_mode:
                type: string
                default: None
        attributes:
            application_address:
                type: string
            application_port:
                type: string
            management_address:
                type: string
            management_port:
                type: string
        capabilities:
            host:
                type: tosca.capabilities.Compute
        requirements:
            - host:
                  capability: tosca.capabilities.Compute
                  relationship: tosca.relationships.HostedOn
    mysql.database:
        derived_from: relational.database
        metadata:
            vintner_normative: 'true'
        properties:
            database_name:
                type: string
            database_user:
                type: string
            database_password:
                type: string
        attributes:
            application_address:
                type: string
            application_port:
                type: string
        capabilities:
            database:
                type: tosca.capabilities.Endpoint.Database
        requirements:
            - host:
                  capability: tosca.capabilities.Compute
                  relationship: tosca.relationships.HostedOn
    minio.server:
        derived_from: service.application
        metadata:
            vintner_normative: 'true'
        properties:
            access_key:
                type: string
                metadata:
                    vintner_name: MINIO_ROOT_USER
            secret_key:
                type: string
                metadata:
                    vintner_name: MINIO_ROOT_PASSWORD
    redis.server:
        derived_from: cache
        metadata:
            vintner_normative: 'true'
        properties:
            application_protocol:
                type: string
                default: redis

Acknowledgments

This specification is developed for the purpose of research by the Institute of Software Engineering (ISTE) and the Institute of Architecture of Application Systems (IAAS) of the University of Stuttgart, Germany. The development is partially funded by the German Federal Ministry for Economic Affairs and Climate Action (BMWK) as part of the Software-Defined Car (SofDCar) project (19S21002).

Correspondence

Please address all correspondence concerning this specification to Miles Stötzner <miles.stoetzner@iste.uni-stuttgart.de, https://miles.stoetzner.de>.

Disclaimer of Warranty

Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.


Last update: September 14, 2024