Repository: SODALITE-EU/iac-blueprint-builder

Issue:
Upgrade to cover new KB features and TOSCA upgrade
Has to support:
- TOSCA 1.3 valid creation (constraints, operation defininitions) 
- artifact uploads
- Ansible playbook uploads 
- optimisation DSL 



Discussion:

Patch:
diff --git a/src/blueprint2CSAR.py b/src/blueprint2CSAR.py
index a470f37..36f2d68 100644
--- a/src/blueprint2CSAR.py
+++ b/src/blueprint2CSAR.py
@@ -82,7 +82,8 @@ def to_CSAR(blueprint_name: str, blueprint_dir: Path, no_meta: bool = False, ent
 
         yaml_files = glob.glob(str(tmp_blueprint_path) + "/*.yaml") + glob.glob(str(tmp_blueprint_path) + "/*.yml")
         if len(yaml_files) != 1:
-            raise MultipleDefinitionsFoundException('CSAR should contain a single .yaml / .yml file in root dir, multiple found')
+            raise MultipleDefinitionsFoundException(
+                'CSAR should contain a single .yaml / .yml file in root dir, multiple found')
 
         entry_definitions_path = Path(yaml_files[0])
         entry_definitions = yaml.safe_load(entry_definitions_path.open('r'))
@@ -175,11 +176,13 @@ def validate_csar(csar: Path, raise_exceptions=False):
         yaml_files = glob.glob(str(tmp_blueprint_path) + "/*.yaml") + glob.glob(str(tmp_blueprint_path) + "/*.yml")
         if len(yaml_files) > 1:
             if raise_exceptions:
-                raise MultipleDefinitionsFoundException('without metadata file, CSAR should contain a single .yaml / .yml file in root dir, multiple found')
+                raise MultipleDefinitionsFoundException(
+                    'without metadata file, CSAR should contain a single .yaml / .yml file in root dir, multiple found')
             return False
         elif len(yaml_files) == 0:
             if raise_exceptions:
-                raise NoEntryDefinitionsFoundException('without metadata file, CSAR should contain a single .yaml / .yml file in root dir, None found')
+                raise NoEntryDefinitionsFoundException(
+                    'without metadata file, CSAR should contain a single .yaml / .yml file in root dir, None found')
             return False
 
         entry_definitions_path = Path(yaml_files[0])
diff --git a/src/blueprint2json.py b/src/blueprint2json.py
index d7ee486..cbb6aad 100644
--- a/src/blueprint2json.py
+++ b/src/blueprint2json.py
@@ -120,7 +120,8 @@ def main(args):
     path_to_TOSCA_yaml = Path(args.tosca)
     path_to_template = path_to_TOSCA_yaml.parent
 
-    deployment = Deployment(id=deploy_id, template=path_to_template, tosca=path_to_TOSCA_yaml, openrc=args.config_script)
+    deployment = Deployment(id=deploy_id, template=path_to_template, tosca=path_to_TOSCA_yaml,
+                            openrc=args.config_script)
 
     json_obj = deployment.to_dict()
     output = json.dumps(json_obj, indent=2, sort_keys=False)
diff --git a/src/iacparser.py b/src/iacparser.py
index a12f628..7364420 100644
--- a/src/iacparser.py
+++ b/src/iacparser.py
@@ -1,5 +1,6 @@
+import os
 import re
-import json,os
+
 artifact_types = ['\nartifact_types: \n\n']
 capability_types = ['\ncapability_types: \n\n']
 data_types = ['\ndata_types: \n \n']
@@ -8,30 +9,50 @@ group_types = ['\ngroup_types: \n\n']
 interface_types = ['\ninterface_types: \n\n']
 policy_types = ['\npolicy_types: \n\n']
 relationship_types = ['\nrelationship_types: \n\n']
-topology_template = ['  ', 'node_templates: \n'] # header and template nodes
-node_types = ['\nnode_types: \n \n' ] # type nodes
+topology_template = ['  ', 'node_templates: \n']  # header and template nodes
+node_types = ['\nnode_types: \n \n']  # type nodes
 
 participants = []
 ansible_files = []
+ansible_paths = []
+dependency_files = []
+dependency_paths = []
 inputs = ['\ntopology_template:\n\n']
 
+types = ['https://www.sodalite.eu/ontologies/tosca/tosca.artifacts',
+         'https://www.sodalite.eu/ontologies/tosca/tosca.capabilities',
+         'https://www.sodalite.eu/ontologies/tosca/tosca.datatypes',
+         'https://www.sodalite.eu/ontologies/tosca/tosca.entity',
+         'https://www.sodalite.eu/ontologies/tosca/tosca.groups',
+         'https://www.sodalite.eu/ontologies/tosca/tosca.interfaces',
+         'https://www.sodalite.eu/ontologies/tosca/tosca.policies',
+         'https://www.sodalite.eu/ontologies/tosca/tosca.relationships']
 
-types = ['https://www.sodalite.eu/ontologies/tosca/tosca.artifacts', 'https://www.sodalite.eu/ontologies/tosca/tosca.capabilities',
-'https://www.sodalite.eu/ontologies/tosca/tosca.datatypes', 'https://www.sodalite.eu/ontologies/tosca/tosca.entity',
-'https://www.sodalite.eu/ontologies/tosca/tosca.groups', 'https://www.sodalite.eu/ontologies/tosca/tosca.interfaces',
-'https://www.sodalite.eu/ontologies/tosca/tosca.policies', 'https://www.sodalite.eu/ontologies/tosca/tosca.relationships']
+l_of_l = [artifact_types, capability_types, data_types, entity_types, group_types, interface_types, policy_types,
+          relationship_types, node_types, inputs, topology_template]
 
-l_of_l = [artifact_types, capability_types, data_types, entity_types, group_types, interface_types, policy_types, relationship_types, node_types, inputs, topology_template]
 
 def innerdicts(data, tabs, l=[], inList=False):
     for key, value in data.items():
         isList = False
         if key == "participants": participants = value
+        if key == 'valid_source_types' and str(value) == '{}':
+            value = []  # convert badly parsed empty lists to lists
         if value and isinstance(value, list):
             if key == 'requirements':
-                value = [{ ('- '+k.split('/')[-1]) : (v)  for (k, v) in c.items()} for c in value if isinstance(c, dict)]
+                value = [{('- ' + k.split('/')[-1]): (v) for (k, v) in c.items()} for c in value if isinstance(c, dict)]
                 isList = True
-            if isinstance(value[0],dict):
+            elif "occurrences" in key:
+                constraint_value = ""
+                first_el = True
+                for element in value:
+                    if first_el:
+                        constraint_value += str(element)
+                        first_el = False
+                    else:
+                        constraint_value += (", " + str(element))
+                value = '[ {} ]'.format(constraint_value)
+            if isinstance(value[0], dict):
                 v = {}
                 for i in value:
                     v.update(i)
@@ -40,7 +61,7 @@ def innerdicts(data, tabs, l=[], inList=False):
             if 'topology_template_inputs' in key:
                 l = inputs
                 tabs = 1
-            elif 'isNodeTemplate' in value: # node template or node type
+            elif 'isNodeTemplate' in value:  # node template or node type
                 if value['isNodeTemplate'] == False:
                     l = node_types
                     tabs = 1
@@ -54,51 +75,109 @@ def innerdicts(data, tabs, l=[], inList=False):
                     tabs = 2
                 l.append('\n')
                 del value['isNodeTemplate']
-            if "https://" in str(key): key = str(key)[str(key).rfind('/')+1:]
+            if "https://" in str(key): key = str(key)[str(key).rfind('/') + 1:]
             if "Standard" in key:
-                l.append('  '*(tabs) + "Standard: "+ "\n")
+                l.append('  ' * (tabs) + "Standard: " + "\n")
                 if 'specification' in value:
-                    l.append('  '*(tabs+1) + "type: tosca.interfaces.node.lifecycle.Standard "+ "\n")
-                    l.append('  '*(tabs+1) + "operations: "+ "\n")
+                    l.append('  ' * (tabs + 1) + "type: tosca.interfaces.node.lifecycle.Standard " + "\n")
+                    l.append('  ' * (tabs + 1) + "operations: " + "\n")
                     operations = ['create', 'delete']
-                    for a in operations:
-                        l.append('  '*(tabs+3) + a + ": \n")
-                        innerdicts(value['specification'][a], tabs+4, l, isList)
-
-            elif  key != 'specification' and  key  != 'topology_template_inputs':
-                l. append('  '*(tabs)  + str(key) + ':  \n')
+                    for operation in operations:
+                        # implementations don't need to implement all steps anymore
+                        if operation in value['specification']['operations'].keys():
+                            l.append('  ' * (tabs + 2) + operation + ": \n")
+                            innerdicts(value['specification']['operations'][operation], tabs + 3, l, isList)
+            # convert constraints maps to lists
+            elif "constraints" in key:
+                l.append('  ' * (tabs) + "constraints: \n")
+                for constraint in value.keys():
+                    l.append('  ' * (tabs + 1) + '- {}: {}'.format(constraint, value[constraint]) + "\n")
+            # concat implementation urls
+            elif "implementation" in key:
+                l.append("{}implementation: \n".format('  ' * tabs))
+                if "primary" in value:
+                    ansible_files.append(value['primary']['url'])
+                    temp_path = os.path.join(*value['primary']['url'].split('/')[4:]) + "_" + \
+                                value['primary']['path'].split('/')[-1]
+                    ansible_paths.append(temp_path)
+                    l.append("{}primary: {} \n".format('  ' * (tabs + 1), temp_path))
+                if "dependencies" in value:
+                    if "file" in value["dependencies"]:
+                        dep = value['dependencies']['file']
+                        dependency_files.append(dep['url'])
+                        temp_path = dep['path'].split('/')[-1]
+                        dependency_paths.append(temp_path)
+                        l.append("{}dependencies: \n".format('  ' * (tabs + 1)))
+                        l.append("{}- file: {} \n".format('  ' * (tabs + 2), temp_path))
+                        l.append("{}type: {} \n".format('  ' * (tabs + 3), "tosca.artifacts.File"))
+            # convert variable accessors to shorthand variants to improve clarity
+            elif "default" in value and isinstance(value["default"], dict) and (
+                    "get_property" in value["default"].keys() or "get_attribute" in value["default"].keys()):
+                get_prop_or_att = next(iter(value["default"]))
+                prop_or_att = get_prop_or_att.split("_")[-1]
+                default_properties = value["default"][get_prop_or_att]
+                if "req_cap" in default_properties.keys():
+                    l.append(
+                        "{}{:20} {{ default: {{ {}: [ {}, {}, {} ] }} }} \n".format('  ' * tabs,
+                                                                                    key + ":",
+                                                                                    get_prop_or_att,
+                                                                                    default_properties['entity'],
+                                                                                    default_properties['req_cap'],
+                                                                                    default_properties[prop_or_att]))
+                else:
+                    l.append(
+                        "{}{:20} {{ default: {{ {}: [ {}, {} ] }} }} \n".format('  ' * tabs,
+                                                                                key + ":",
+                                                                                get_prop_or_att,
+                                                                                default_properties['entity'],
+                                                                                default_properties[prop_or_att]))
+            elif "command" in key and "value" in value.keys():
+                l.append('  ' * (tabs) + "command: \n")
+                if isinstance(value["value"], list):
+                    for command_value in value["value"]:
+                        l.append('  ' * (tabs + 1) + '- "{}"'.format(command_value) + "\n")
+                else:
+                    l.append('  ' * (tabs + 1) + '- "{}"'.format(value["value"]) + "\n")
+            elif key != 'specification' and key != 'topology_template_inputs':
+                l.append('  ' * (tabs) + str(key) + ':  \n')
                 if inList:
-                    innerdicts(value, tabs+2, l, isList)
+                    innerdicts(value, tabs + 2, l, isList)
                 else:
-                    innerdicts(value, tabs+1, l, isList)
+                    innerdicts(value, tabs + 1, l, isList)
             else:
                 innerdicts(value, tabs, l, isList)
         else:
-            if key == 'type' and '/tosca/tosca.' in value:
-                key = 'derived_from'
+            # legacy implementation parser
             if "Ansibles" in str(value):
                 ansible_files.append(str(value))
-                value = os.path.join(*value.split('/')[4:])
-            if "https://" in str(value):
-                value = str(value)[str(value).rfind('/')+1:]
-            elif ": " in str(value) and "description" == str(key):
-                value = str(value).replace(':', ' ')
-            l. append('  '*(tabs) + str(key) + ': ' + str(value) + ' \n')
+                value = os.path.join(*value.split('/')[4:]) + "_" + data['path'].split('/')[-1]
+                ansible_paths.append(value)
+                l.append('  ' * (tabs) + 'file: ' + str(value) + ' \n')
+                l.append('  ' * (tabs) + 'type: tosca.artifacts.Implementation \n')
+            else:
+                if key == 'type' and '/tosca/tosca.' in value:
+                    key = 'derived_from'
+                if "https://" in str(value):
+                    value = str(value)[str(value).rfind('/') + 1:]
+                elif ": " in str(value) and "description" == str(key):
+                    value = str(value).replace(':', ' ')
+                l.append('  ' * (tabs) + str(key) + ': ' + str(value) + ' \n')
 
 
 def remove_extra_hierarchies(s):
-    s=re.sub("(\s*)(.*?:)(\s+)(.*?):(\s+)(label:)(\s+)(.*?)(\s+)", r'\1\2 \4\9',  s, flags=re.M)
-    s=re.sub("(\s*)(.*?:)(\s+)(value:)(.*?)(\s+)(label:)(\s+)(.*?)(\s+)", r'\1\2 \5\10',  s, flags=re.M)
+    s = re.sub("(\s*)(.*?:)(\s+)(.*?):(\s+)(label:)(\s+)(.*?)(\s+)", r'\1\2 \4\9', s, flags=re.M)
+    s = re.sub("(\s*)(.*?:)(\s+)(value:)(.*?)(\s+)(label:)(\s+)(.*?)(\s+)", r'\1\2 \5\10', s, flags=re.M)
     return s
 
 
 def parse(data):
     innerdicts(data, 1)
-    return ansible_files
+    return ansible_files, ansible_paths, dependency_files, dependency_paths
+
 
 def parse_data(name, data):
-    #create an output file
-    outfile = open(name+".yml", "w")
+    # create an output file
+    outfile = open(name + ".yml", "w")
     # output file header generator
     outfile.write('tosca_definitions_version: tosca_simple_yaml_1_3  \n\n')
     parse(data)
@@ -106,9 +185,9 @@ def parse_data(name, data):
     # print(data_types)
     for l in l_of_l:
         if len(l) > 1:
-                s.append(''.join(l) + '\n\n')
+            s.append(''.join(l) + '\n\n')
     # s.append(''.join(data_types) + '\n\n' + ''.join(node_types) + '\n\n' + ''.join(topology_template) + '\n\n')
 
     outfile.write(remove_extra_hierarchies(''.join(s)))
     print('TOSCA generated -------')
-    return ansible_files
+    return ansible_files, ansible_paths, dependency_files, dependency_paths
diff --git a/src/main.py b/src/main.py
index a4efee2..f62411f 100644
--- a/src/main.py
+++ b/src/main.py
@@ -1,14 +1,13 @@
+import json
+import os
+import uuid
+
+import requests
 from flask import Flask, request
-import shutil
 from flask_swagger_ui import get_swaggerui_blueprint
-import requests
-import os
-import blueprint2json
 from gevent.pywsgi import WSGIServer
-import iacparser
-import uuid
-import json
 
+from src import iacparser
 
 SWAGGER_URL = '/docs'
 API_URL = '/static/swagger.json'
@@ -27,8 +26,6 @@ SWAGGERUI_BLUEPRINT = get_swaggerui_blueprint(
 )
 app.register_blueprint(SWAGGERUI_BLUEPRINT, url_prefix=SWAGGER_URL)
 
-
-
 XOPERA_ENDPOINT = os.getenv(XOPERA_ENDPOINT_KEY)
 
 if not XOPERA_ENDPOINT:
@@ -51,12 +48,14 @@ def parse():
     if not os.path.exists(workpath):
         os.makedirs(workpath)
     outpath = os.path.join(workpath, body["name"])
-    ansibles = iacparser.parse_data(outpath, body["data"])
-    print('Reading Ansible files ---------')
-    for url in ansibles:
+    ansible_tuple = iacparser.parse_data(outpath, body["data"])
+    ansibles = ansible_tuple[0]
+    ansible_paths = ansible_tuple[1]
+    print('Downloading Ansible files ---------')
+    for i, url in enumerate(ansibles):
         print('Reading   %s ------- ' % url)
         temp = str(url).split('/')
-        filename = temp[-1]
+        filename = ansible_paths[i]
         foldername = os.path.join(workpath, *temp[4:-1])
         if not os.path.exists(foldername):
             os.makedirs(foldername)
@@ -64,6 +63,20 @@ def parse():
         outfile.write(str(requests.get(url).text))
         outfile.close()
     print('Ansible files done ------- ')
+    depen_files = ansible_tuple[2]
+    depen_paths = ansible_tuple[3]
+    print('Downloading Dependencies ---------')
+    for i, url in enumerate(depen_files):
+        print('Reading   %s ------- ' % url)
+        temp = str(url).split('/')
+        filename = depen_paths[i]
+        foldername = os.path.join(workpath, *temp[4:-1])
+        if not os.path.exists(foldername):
+            os.makedirs(foldername)
+        outfile = open(os.path.join(foldername, filename), "w")
+        outfile.write(str(requests.get(url).text))
+        outfile.close()
+    print('Dependencies are done loading ------- ')
     print('blueprint2CSAR ongoing ------- ')
     os.system('python3 src/blueprint2CSAR.py %s %s --entry-definitions %s.yml --output %s' %
               (body["name"], outpath[:outpath.rfind('/')], body["name"], outpath))


Test patch:
diff --git a/test/fixture.json b/test/fixture.json
index 16d6f85..e066f20 100644
--- a/test/fixture.json
+++ b/test/fixture.json
@@ -1,1359 +1,3838 @@
 {
-  "name": "snow-test",
-  "data": {
-    "https://www.sodalite.eu/ontologies/workspace/1/snow/AADM_5p0jj4jceurei9er4ecb3mieqa": {
-      "type": "AbstractApplicationDeploymentModel",
-      "createdBy": "https://www.sodalite.eu/ontologies/workspace/1/snow/27827d44-0f6c-11ea-8d71-362b9e155667",
-      "createdAt": "2020-02-12T17:46:24.120+02:00",
-      "version": "1",
-      "participants": [
-        "https://www.sodalite.eu/ontologies/workspace/1/snow/skyline_alignment",
-        "https://www.sodalite.eu/ontologies/workspace/1/snow/skyline_extractor",
-        "https://www.sodalite.eu/ontologies/workspace/1/snow/snow-vm",
-        "https://www.sodalite.eu/ontologies/workspace/1/snow/security-rules-snow",
-        "https://www.sodalite.eu/ontologies/workspace/1/snow/topology_template_inputs",
-        "https://www.sodalite.eu/ontologies/workspace/1/snow/snow-docker_host"
-      ]
-    },
-    "https://www.sodalite.eu/ontologies/workspace/1/snow/skyline_alignment": {
-      "type": "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/sodalite.nodes.DockerizedComponent",
-      "isNodeTemplate": true,
-      "properties": [
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/image_name": {
-            "value": "snow-skyline-alignment",
-            "label": "image_name"
-          }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/exposed_ports": {
-            "value": ["8080"],
-            "label": "exposed_ports"
-          }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/ports": {
-            "value": ["8081:8080", "80:8080"],
-            "label": "ports"
-          }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/volumes": {
-            "value": "/tmp/docker:/tmp",
-            "label": "volumes"
-          }
-        }
-      ],
-      "requirements": [
-        {
-          "https://www.sodalite.eu/ontologies/tosca/host": {
-            "value": {
-              "https://www.sodalite.eu/ontologies/workspace/1/snow/snow-docker_host": {
-                "label": "snow-docker_host"
-              },
-              "label": "host"
-            }
-          }
-        }
-      ]
-    },
-    "https://www.sodalite.eu/ontologies/workspace/1/snow/skyline_extractor": {
-      "type": "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/sodalite.nodes.DockerizedComponent",
-      "isNodeTemplate": true,
-      "properties": [
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/ports": {
-            "value": ["8080:8080"],
-            "label": "ports"
-          }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/volumes": {
-            "value": "/tmp/docker:/tmp",
-            "label": "volumes"
-          }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/exposed_ports": {
-            "value": ["8080"],
-            "label": "exposed_ports"
-          }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/image_name": {
-            "value": "snow-skyline-extractor",
-            "label": "image_name"
-          }
-        }
-      ],
-      "requirements": [
-        {
-          "https://www.sodalite.eu/ontologies/tosca/host": {
-            "value": {
-              "https://www.sodalite.eu/ontologies/workspace/1/snow/snow-docker_host": {
-                "label": "snow-docker_host"
-              },
-              "label": "host"
-            }
-          }
-        }
-      ]
-    },
-    "https://www.sodalite.eu/ontologies/workspace/1/snow/snow-vm": {
-      "type": "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/sodalite.nodes.OpenStack.VM",
-      "isNodeTemplate": true,
-      "properties": [
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/flavor": {
-            "value": "m1.small",
-            "label": "flavor"
-          }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/name": {
-            "value": "snow-vm",
-            "label": "name"
-          }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/key_name": {
-            "value": "{ get_input: ssh-key-name }",
-            "label": "key_name"
-          }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/security_groups": {
-            "value": "default,snow",
-            "label": "security_groups"
-          }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/network": {
-            "value": "orchestrator-net",
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/AADM_me7sho52bqqi2qmc2q5vnauvdq": {
+    "type": "AbstractApplicationDeploymentModel",
+    "createdBy": "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/27827d44-0f6c-11ea-8d71-362b9e155667",
+    "createdAt": "2020-07-30T20:10:19.152+03:00",
+    "version": "1",
+    "participants": [
+      "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/configuration-demo1",
+      "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/topology_template_inputs",
+      "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-vm_1",
+      "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-skyline-extractor1",
+      "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-network1",
+      "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-demo-nginx1",
+      "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/security-rules-snow1",
+      "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-skyline-alignment1",
+      "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-volume-shots1",
+      "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-demo1",
+      "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-mysql1",
+      "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-webcam-mockup1",
+      "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-weather-condition-filter1",
+      "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-host1",
+      "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/docker-registry-certificate1",
+      "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-volume-demo-output1",
+      "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-volume-daily-shots1",
+      "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-vm-2_1",
+      "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-daily-median-aggregator1",
+      "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-volume-masks1",
+      "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-host-2_1",
+      "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/docker-registry-certificate-2_1",
+      "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/docker-registry1",
+      "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-webcam-crawler1"
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/configuration-demo1": {
+    "type": "https://www.sodalite.eu/ontologies/workspace/1/l111tnd79mgoukfr0p1sss0j0t/sodalite.nodes.ConfigurationDemo",
+    "isNodeTemplate": true,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/l111tnd79mgoukfr0p1sss0j0t/mysql_db_pass": {
+          "value": "{ get_input: mysql-db-pass }",
+          "label": "mysql_db_pass"
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/l111tnd79mgoukfr0p1sss0j0t/remote_server": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-vm-2_1": {
+              "label": "snow-vm-2_1"
+            },
+            "label": "remote_server"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-vm_1": {
+              "label": "snow-vm_1"
+            },
+            "label": "host"
+          }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/topology_template_inputs": {
+    "inputs": [
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/dr6n3fi2vs3sre2st451bjsf3l/security-groups": {
+          "specification": {
+            "type": "string"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/dr6n3fi2vs3sre2st451bjsf3l/image-name": {
+          "specification": {
+            "type": "string"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/dr6n3fi2vs3sre2st451bjsf3l/flavor-name": {
+          "specification": {
+            "type": "string"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/dr6n3fi2vs3sre2st451bjsf3l/docker-network": {
+          "specification": {
+            "type": "string"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/dr6n3fi2vs3sre2st451bjsf3l/openstack-network-name": {
+          "specification": {
+            "type": "string"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/dr6n3fi2vs3sre2st451bjsf3l/ssh-key-name": {
+          "specification": {
+            "type": "string"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/dr6n3fi2vs3sre2st451bjsf3l/docker-registry-cert-organization-name": {
+          "specification": {
+            "type": "string"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/dr6n3fi2vs3sre2st451bjsf3l/demo-files-path": {
+          "specification": {
+            "type": "string"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/dr6n3fi2vs3sre2st451bjsf3l/docker-registry-cert-country-name": {
+          "specification": {
+            "type": "string"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/dr6n3fi2vs3sre2st451bjsf3l/docker-registry-url": {
+          "specification": {
+            "type": "string"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/dr6n3fi2vs3sre2st451bjsf3l/docker-registry-cert-email-address": {
+          "specification": {
+            "type": "string"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/dr6n3fi2vs3sre2st451bjsf3l/mysql-db-pass": {
+          "specification": {
+            "type": "string"
+          }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-vm_1": {
+    "type": "https://www.sodalite.eu/ontologies/workspace/1/nt606dkcar8p0v51ir0kaeb1l/sodalite.nodes.OpenStack.VM",
+    "isNodeTemplate": true,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nt606dkcar8p0v51ir0kaeb1l/security_groups": {
+          "value": "{ get_input: security-groups }",
+          "label": "security_groups"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nt606dkcar8p0v51ir0kaeb1l/image": {
+          "value": "{ get_input: image-name }",
+          "label": "image"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/name": {
+          "value": "snow-vm_am_10",
+          "label": "name"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nt606dkcar8p0v51ir0kaeb1l/key_name": {
+          "value": "{ get_input: ssh-key-name }",
+          "label": "key_name"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/network": {
+          "value": "{ get_input: openstack-network-name }",
+          "label": "network"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nt606dkcar8p0v51ir0kaeb1l/flavor": {
+          "value": "{ get_input: flavor-name }",
+          "label": "flavor"
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nt606dkcar8p0v51ir0kaeb1l/protected_by": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/security-rules-snow1": {
+              "label": "security-rules-snow1"
+            },
+            "label": "protected_by"
+          }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-skyline-extractor1": {
+    "type": "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/sodalite.nodes.DockerizedComponent",
+    "isNodeTemplate": true,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/registry_url": {
+          "value": "{ get_input: docker-registry-url }",
+          "label": "registry_url"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/exposed_ports": {
+          "value": [
+            "8080"
+          ],
+          "label": "exposed_ports"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/image_name": {
+          "value": "snow-skyline-extractor1:latest",
+          "label": "image_name"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/volumes": {
+          "value": "/tmp/docker:/tmp",
+          "label": "volumes"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/ports": {
+          "value": [
+            "8080:8080"
+          ],
+          "label": "ports"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/alias": {
+          "value": "snow-skyline-extractor1",
+          "label": "alias"
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-host-2_1": {
+              "label": "snow-docker-host-2_1"
+            },
+            "label": "host"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/registry": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/kuo5nrsil2t33ktj3mb8sfnci2/docker-registry1": {
+              "label": "docker-registry1"
+            },
+            "label": "registry"
+          }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-network1": {
+    "type": "https://www.sodalite.eu/ontologies/workspace/1/kijggphp9tsu7g26a5ve5e8ck0/sodalite.nodes.DockerNetwork",
+    "isNodeTemplate": true,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/name": {
+          "value": "{ get_input: docker-network }",
+          "label": "name"
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-vm_1": {
+              "label": "snow-vm_1"
+            },
+            "label": "host"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-host1": {
+              "label": "snow-docker-host1"
+            },
+            "label": "dependency"
+          }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-demo-nginx1": {
+    "type": "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/sodalite.nodes.DockerizedComponent",
+    "isNodeTemplate": true,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/alias": {
+          "value": "snow-nginx",
+          "label": "alias"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/restart_policy": {
+          "value": "always",
+          "label": "restart_policy"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/registry_url": {
+          "value": "{ get_input: docker-registry-url }",
+          "label": "registry_url"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/image_name": {
+          "value": "nginx:latest",
+          "label": "image_name"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/volumes": {
+          "specification": {
+            "snow_volume_demo_output": "/usr/share/nginx/html"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/exposed_ports": {
+          "value": [
+            "80"
+          ],
+          "label": "exposed_ports"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/ports": {
+          "value": [
+            "80:80"
+          ],
+          "label": "ports"
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-host1": {
+              "label": "snow-docker-host1"
+            },
+            "label": "host"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/registry": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/kuo5nrsil2t33ktj3mb8sfnci2/docker-registry1": {
+              "label": "docker-registry1"
+            },
+            "label": "registry"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-volume-demo-output1": {
+              "label": "snow-docker-volume-demo-output1"
+            },
+            "label": "dependency"
+          }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/security-rules-snow1": {
+    "type": "https://www.sodalite.eu/ontologies/workspace/1/i33oic0aohevnjrr7gibsjt5cv/sodalite.nodes.OpenStack.SecurityRules",
+    "isNodeTemplate": true,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/i33oic0aohevnjrr7gibsjt5cv/group_description": {
+          "value": "Snow UC security group",
+          "label": "group_description"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/ports": {
+          "specification": {
+            "http_port": {
+              "port_range_min": 80,
+              "remote_ip_prefix": "0.0.0.0/0",
+              "port_range_max": 80,
+              "protocol": "tcp"
+            },
+            "component_ports": {
+              "protocol": "tcp",
+              "port_range_max": 8081,
+              "remote_ip_prefix": "0.0.0.0/0",
+              "port_range_min": 8080
+            }
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/i33oic0aohevnjrr7gibsjt5cv/group_name": {
+          "value": "snow",
+          "label": "group_name"
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-skyline-alignment1": {
+    "type": "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/sodalite.nodes.DockerizedComponent",
+    "isNodeTemplate": true,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/ports": {
+          "value": [
+            "80:8080",
+            "8081:8080"
+          ],
+          "label": "ports"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/registry_url": {
+          "value": "{ get_input: docker-registry-url }",
+          "label": "registry_url"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/exposed_ports": {
+          "value": [
+            "8080"
+          ],
+          "label": "exposed_ports"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/alias": {
+          "value": "snow-skyline-alignment1",
+          "label": "alias"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/image_name": {
+          "value": "snow-skyline-alignment1:latest",
+          "label": "image_name"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/volumes": {
+          "value": "/tmp/docker:/tmp",
+          "label": "volumes"
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-host-2_1": {
+              "label": "snow-docker-host-2_1"
+            },
+            "label": "host"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/registry": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/kuo5nrsil2t33ktj3mb8sfnci2/docker-registry1": {
+              "label": "docker-registry1"
+            },
+            "label": "registry"
+          }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-volume-shots1": {
+    "type": "https://www.sodalite.eu/ontologies/workspace/1/5nf45bccrr6rmkt2f4cinoi6u/sodalite.nodes.DockerVolume",
+    "isNodeTemplate": true,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/name": {
+          "value": "snow_volume_shots",
+          "label": "name"
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-vm_1": {
+              "label": "snow-vm_1"
+            },
+            "label": "host"
+          }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-demo1": {
+    "type": "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/sodalite.nodes.DockerizedComponent",
+    "isNodeTemplate": true,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/registry_url": {
+          "value": "{ get_input: docker-registry-url }",
+          "label": "registry_url"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/volumes": {
+          "value": [
+            "/tmp/conf/config.json:/SnowWatch-SODALITE/config.json",
+            "snow_volume_daily_shots: /SnowWatch-SODALITE/data/daily_shots",
+            "snow_volume_demo_output: /SnowWatch-SODALITE/data/output"
+          ],
+          "label": "volumes"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/alias": {
+          "value": "snow-demo1",
+          "label": "alias"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/image_name": {
+          "value": "snow-demo:latest",
+          "label": "image_name"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/command": {
+          "value": "{{ ansible_date_time.date }}",
+          "label": "command"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/dr6n3fi2vs3sre2st451bjsf3l/docker_network_name": {}
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/restart_policy": {
+          "value": "always",
+          "label": "restart_policy"
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-volume-demo-output1": {
+              "label": "snow-docker-volume-demo-output1"
+            },
+            "label": "dependency"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/registry": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/kuo5nrsil2t33ktj3mb8sfnci2/docker-registry1": {
+              "label": "docker-registry1"
+            },
+            "label": "registry"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-host1": {
+              "label": "snow-docker-host1"
+            },
+            "label": "host"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-volume-daily-shots1": {
+              "label": "snow-docker-volume-daily-shots1"
+            },
+            "label": "dependency"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-mysql1": {
+              "label": "snow-mysql1"
+            },
+            "label": "dependency"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/configuration-demo1": {
+              "label": "configuration-demo1"
+            },
+            "label": "dependency"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/network": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-network1": {
+              "label": "snow-docker-network1"
+            },
+            "label": "network"
+          }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-mysql1": {
+    "type": "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/sodalite.nodes.DockerizedComponent",
+    "isNodeTemplate": true,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/alias": {
+          "value": "mysql",
+          "label": "alias"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/ports": {
+          "value": [
+            "3306:3306"
+          ],
+          "label": "ports"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/dr6n3fi2vs3sre2st451bjsf3l/docker_network_name": {}
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/command": {
+          "value": "--default-authentication-plugin\u003dmysql_native_password",
+          "label": "command"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/image_name": {
+          "value": "snow-mysql1:latest",
+          "label": "image_name"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/registry_url": {
+          "value": "{ get_input: docker-registry-url }",
+          "label": "registry_url"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/env": {
+          "specification": {
+            "MYSQL_ROOT_PASSWORD": "#set password here",
+            "MYSQL_DATABASE": "wc_crawler_db"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/exposed_ports": {
+          "value": [
+            "3306"
+          ],
+          "label": "exposed_ports"
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/registry": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/kuo5nrsil2t33ktj3mb8sfnci2/docker-registry1": {
+              "label": "docker-registry1"
+            },
+            "label": "registry"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/network": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-network1": {
+              "label": "snow-docker-network1"
+            },
+            "label": "network"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-host1": {
+              "label": "snow-docker-host1"
+            },
+            "label": "host"
+          }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-webcam-mockup1": {
+    "type": "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/sodalite.nodes.DockerizedComponent",
+    "isNodeTemplate": true,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/image_name": {
+          "value": "snow-webcam-mockup1:latest",
+          "label": "image_name"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/registry_url": {
+          "value": "{ get_input: docker-registry-url }",
+          "label": "registry_url"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/exposed_ports": {
+          "value": [
+            "8080"
+          ],
+          "label": "exposed_ports"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/ports": {
+          "value": [
+            "8080:8080"
+          ],
+          "label": "ports"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/dr6n3fi2vs3sre2st451bjsf3l/docker_network_name": {}
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/alias": {
+          "value": "snow-webcam-mockup1",
+          "label": "alias"
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/registry": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/kuo5nrsil2t33ktj3mb8sfnci2/docker-registry1": {
+              "label": "docker-registry1"
+            },
+            "label": "registry"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-host1": {
+              "label": "snow-docker-host1"
+            },
+            "label": "host"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/network": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-network1": {
+              "label": "snow-docker-network1"
+            },
+            "label": "network"
+          }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-weather-condition-filter1": {
+    "type": "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/sodalite.nodes.DockerizedComponent",
+    "isNodeTemplate": true,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/volumes": {
+          "value": [
+            "snow_volume_shots:/SnowWatch-SODALITE/data/shots",
+            "/tmp/conf/config.json:/SnowWatch-SODALITE/config.json",
+            "snow_volume_daily_shots: /SnowWatch-SODALITE/data/daily_shots"
+          ],
+          "label": "volumes"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/registry_url": {
+          "value": "{ get_input: docker-registry-url }",
+          "label": "registry_url"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/command": {
+          "value": [
+            "{{ ansible_date_time.date }}",
+            "34 40 50 62 608 666 822 852 943 1307 6666"
+          ],
+          "label": "command"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/dr6n3fi2vs3sre2st451bjsf3l/docker_network_name": {}
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/restart_policy": {
+          "value": "always",
+          "label": "restart_policy"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/alias": {
+          "value": "snow-weather-condition-filter1",
+          "label": "alias"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/image_name": {
+          "value": "snow-weather-condition-filter1:latest",
+          "label": "image_name"
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-volume-shots1": {
+              "label": "snow-docker-volume-shots1"
+            },
+            "label": "dependency"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-host1": {
+              "label": "snow-docker-host1"
+            },
+            "label": "host"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/network": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-network1": {
+              "label": "snow-docker-network1"
+            },
+            "label": "network"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-mysql1": {
+              "label": "snow-mysql1"
+            },
+            "label": "dependency"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-volume-masks1": {
+              "label": "snow-docker-volume-masks1"
+            },
+            "label": "dependency"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-volume-daily-shots1": {
+              "label": "snow-docker-volume-daily-shots1"
+            },
+            "label": "dependency"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/configuration-demo1": {
+              "label": "configuration-demo1"
+            },
+            "label": "dependency"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/registry": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/kuo5nrsil2t33ktj3mb8sfnci2/docker-registry1": {
+              "label": "docker-registry1"
+            },
+            "label": "registry"
+          }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-host1": {
+    "type": "https://www.sodalite.eu/ontologies/workspace/1/i5rq2l9e5at501mve07ubclavq/sodalite.nodes.DockerHost",
+    "isNodeTemplate": true,
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-vm_1": {
+              "label": "snow-vm_1"
+            },
+            "label": "host"
+          }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/docker-registry-certificate1": {
+    "type": "https://www.sodalite.eu/ontologies/workspace/1/aaqsft03mc3fdn03nrh40st7rc/sodalite.nodes.RegistryCertificate",
+    "isNodeTemplate": true,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/aaqsft03mc3fdn03nrh40st7rc/email_address": {
+          "value": "{ get_input: docker-registry-cert-email-address }",
+          "label": "email_address"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/aaqsft03mc3fdn03nrh40st7rc/organization_name": {
+          "value": "{ get_input: docker-registry-cert-organization-name }",
+          "label": "organization_name"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/5nq8pufmcm9ia090hd9rjghaj7/registry_ip": {
+          "value": "{ get_input: docker-registry-url }",
+          "label": "registry_ip"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/aaqsft03mc3fdn03nrh40st7rc/country_name": {
+          "value": "{ get_input: docker-registry-cert-country-name }",
+          "label": "country_name"
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-host1": {
+              "label": "snow-docker-host1"
+            },
+            "label": "dependency"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-vm_1": {
+              "label": "snow-vm_1"
+            },
+            "label": "host"
+          }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-volume-demo-output1": {
+    "type": "https://www.sodalite.eu/ontologies/workspace/1/5nf45bccrr6rmkt2f4cinoi6u/sodalite.nodes.DockerVolume",
+    "isNodeTemplate": true,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/name": {
+          "value": "snow_volume_demo_output",
+          "label": "name"
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-vm_1": {
+              "label": "snow-vm_1"
+            },
+            "label": "host"
+          }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-volume-daily-shots1": {
+    "type": "https://www.sodalite.eu/ontologies/workspace/1/5nf45bccrr6rmkt2f4cinoi6u/sodalite.nodes.DockerVolume",
+    "isNodeTemplate": true,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/name": {
+          "value": "snow_volume_daily_shots",
+          "label": "name"
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-vm_1": {
+              "label": "snow-vm_1"
+            },
+            "label": "host"
+          }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-vm-2_1": {
+    "type": "https://www.sodalite.eu/ontologies/workspace/1/nt606dkcar8p0v51ir0kaeb1l/sodalite.nodes.OpenStack.VM",
+    "isNodeTemplate": true,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/name": {
+          "value": "snow-vm_am_9",
+          "label": "name"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/network": {
+          "value": "{ get_input: openstack-network-name }",
+          "label": "network"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nt606dkcar8p0v51ir0kaeb1l/security_groups": {
+          "value": "{ get_input: security-groups }",
+          "label": "security_groups"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nt606dkcar8p0v51ir0kaeb1l/flavor": {
+          "value": "{ get_input: flavor-name }",
+          "label": "flavor"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nt606dkcar8p0v51ir0kaeb1l/key_name": {
+          "value": "{ get_input: ssh-key-name }",
+          "label": "key_name"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nt606dkcar8p0v51ir0kaeb1l/image": {
+          "value": "{ get_input: image-name }",
+          "label": "image"
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nt606dkcar8p0v51ir0kaeb1l/protected_by": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/security-rules-snow1": {
+              "label": "security-rules-snow1"
+            },
+            "label": "protected_by"
+          }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-daily-median-aggregator1": {
+    "type": "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/sodalite.nodes.DockerizedComponent",
+    "isNodeTemplate": true,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/dr6n3fi2vs3sre2st451bjsf3l/docker_network_name": {}
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/image_name": {
+          "value": "snow-daily-median-aggregator1:latest",
+          "label": "image_name"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/restart_policy": {
+          "value": "always",
+          "label": "restart_policy"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/alias": {
+          "value": "snow-daily-median-aggregator1",
+          "label": "alias"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/volumes": {
+          "value": [
+            "snow_volume_daily_shots:/SnowWatch-SODALITE/data/daily_shots",
+            "snow_volume_shots:/SnowWatch-SODALITE/data/shots",
+            "/tmp/conf/config.json:/SnowWatch-SODALITE/config.json"
+          ],
+          "label": "volumes"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/registry_url": {
+          "value": "{ get_input: docker-registry-url }",
+          "label": "registry_url"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/command": {
+          "value": [
+            "{{ ansible_date_time.date }}",
+            "34 40 50 62 608 666 822 852 943 1307 6666"
+          ],
+          "label": "command"
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/configuration-demo1": {
+              "label": "configuration-demo1"
+            },
+            "label": "dependency"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-volume-shots1": {
+              "label": "snow-docker-volume-shots1"
+            },
+            "label": "dependency"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/network": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-network1": {
+              "label": "snow-docker-network1"
+            },
+            "label": "network"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-host1": {
+              "label": "snow-docker-host1"
+            },
+            "label": "host"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-volume-daily-shots1": {
+              "label": "snow-docker-volume-daily-shots1"
+            },
+            "label": "dependency"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-mysql1": {
+              "label": "snow-mysql1"
+            },
+            "label": "dependency"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/registry": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/kuo5nrsil2t33ktj3mb8sfnci2/docker-registry1": {
+              "label": "docker-registry1"
+            },
+            "label": "registry"
+          }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-volume-masks1": {
+    "type": "https://www.sodalite.eu/ontologies/workspace/1/5nf45bccrr6rmkt2f4cinoi6u/sodalite.nodes.DockerVolume",
+    "isNodeTemplate": true,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/name": {
+          "value": "snow_volume_masks",
+          "label": "name"
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-vm_1": {
+              "label": "snow-vm_1"
+            },
+            "label": "host"
+          }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-host-2_1": {
+    "type": "https://www.sodalite.eu/ontologies/workspace/1/i5rq2l9e5at501mve07ubclavq/sodalite.nodes.DockerHost",
+    "isNodeTemplate": true,
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-vm-2_1": {
+              "label": "snow-vm-2_1"
+            },
+            "label": "host"
+          }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/docker-registry-certificate-2_1": {
+    "type": "https://www.sodalite.eu/ontologies/workspace/1/aaqsft03mc3fdn03nrh40st7rc/sodalite.nodes.RegistryCertificate",
+    "isNodeTemplate": true,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/aaqsft03mc3fdn03nrh40st7rc/email_address": {
+          "value": "{ get_input: docker-registry-cert-email-address }",
+          "label": "email_address"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/aaqsft03mc3fdn03nrh40st7rc/organization_name": {
+          "value": "{ get_input: docker-registry-cert-organization-name }",
+          "label": "organization_name"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/aaqsft03mc3fdn03nrh40st7rc/country_name": {
+          "value": "{ get_input: docker-registry-cert-country-name }",
+          "label": "country_name"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/5nq8pufmcm9ia090hd9rjghaj7/registry_ip": {
+          "value": "{ get_input: docker-registry-url }",
+          "label": "registry_ip"
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-host-2_1": {
+              "label": "snow-docker-host-2_1"
+            },
+            "label": "dependency"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-vm-2_1": {
+              "label": "snow-vm-2_1"
+            },
+            "label": "host"
+          }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/docker-registry1": {
+    "type": "https://www.sodalite.eu/ontologies/workspace/1/h2tk1f9lv7h5d722a7tr5bvmqk/sodalite.nodes.DockerRegistry",
+    "isNodeTemplate": true,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/5nq8pufmcm9ia090hd9rjghaj7/docker_registry_url": {
+          "value": "{ get_input: docker-registry-url }",
+          "label": "docker_registry_url"
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-host-2_1": {
+              "label": "snow-docker-host-2_1"
+            },
+            "label": "dependency"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-vm_1": {
+              "label": "snow-vm_1"
+            },
+            "label": "host"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-host1": {
+              "label": "snow-docker-host1"
+            },
+            "label": "dependency"
+          }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-webcam-crawler1": {
+    "type": "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/sodalite.nodes.DockerizedComponent",
+    "isNodeTemplate": true,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/alias": {
+          "value": "snow-webcam-crawler1",
+          "label": "alias"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/command": {
+          "value": "34,40,50,62,608,666,822,852,943,1307,6666",
+          "label": "command"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/registry_url": {
+          "value": "{ get_input: docker-registry-url }",
+          "label": "registry_url"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/dr6n3fi2vs3sre2st451bjsf3l/docker_network_name": {}
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/image_name": {
+          "value": "snow-webcam-crawler1:latest",
+          "label": "image_name"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/volumes": {
+          "value": [
+            "snow_volume_daily_shots:/SnowWatch-SODALITE/data/daily_shots",
+            "/tmp/conf/config.json: /SnowWatch-SODALITE/WebCamCrawler/config.json",
+            "snow_volume_shots:/SnowWatch-SODALITE/data/shots"
+          ],
+          "label": "volumes"
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-mysql1": {
+              "label": "snow-mysql1"
+            },
+            "label": "dependency"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/registry": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/kuo5nrsil2t33ktj3mb8sfnci2/docker-registry1": {
+              "label": "docker-registry1"
+            },
+            "label": "registry"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/network": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-network1": {
+              "label": "snow-docker-network1"
+            },
             "label": "network"
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/image": {
-            "value": "centos7",
-            "label": "image"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-volume-shots1": {
+              "label": "snow-docker-volume-shots1"
+            },
+            "label": "dependency"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/snow-docker-host1": {
+              "label": "snow-docker-host1"
+            },
+            "label": "host"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "value": {
+            "https://www.sodalite.eu/ontologies/workspace/1/cem2u0h71q2odl4fm8o6k69g5k/configuration-demo1": {
+              "label": "configuration-demo1"
+            },
+            "label": "dependency"
+          }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/l111tnd79mgoukfr0p1sss0j0t/sodalite.nodes.ConfigurationDemo": {
+    "type": "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.SoftwareComponent",
+    "isNodeTemplate": false,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/admin_credential": {
+          "description": "The optional credential that can be used to authenticate to the software component.",
+          "specification": {
+            "required": false,
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.datatypes.Credential": {
+                "label": "tosca.datatypes.Credential"
+              }
+            }
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/l111tnd79mgoukfr0p1sss0j0t/mysql_db_pass": {
+          "description": "MYSQL database password",
+          "specification": {
+            "required": true,
+            "type": "string"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/component_version": {
+          "description": "Domain-specific software component version.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/version": {
+                "label": "version"
+              }
+            },
+            "required": false
+          }
+        }
+      }
+    ],
+    "attributes": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/state": {
+          "description": "The state of the node instance.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
+              }
+            }
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/tosca_name": {
+          "description": "Reflects the name of the Node Template as defined in the TOSCA service template. This name is not unique to the realized instance model of corresponding deployed application as each template in the model can result in one or more instances (e.g., scaled) when orchestrated to a provider environment.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
+              }
+            }
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/tosca_id": {
+          "description": "A unique identifier of the realized instance of a Node Template that derives from any TOSCA normative type",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
+              }
+            }
+          }
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "specification": {
+            "capability": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
+                "label": "tosca.capabilities.Node"
+              }
+            },
+            "occurrences": [
+              "0",
+              "UNBOUNDED"
+            ],
+            "relationship": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.DependsOn": {
+                "label": "tosca.relationships.DependsOn"
+              }
+            },
+            "node": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Root": {
+                "label": "tosca.nodes.Root"
+              }
+            }
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/l111tnd79mgoukfr0p1sss0j0t/remote_server": {
+          "specification": {
+            "node": {
+              "https://www.sodalite.eu/ontologies/workspace/1/nt606dkcar8p0v51ir0kaeb1l/sodalite.nodes.OpenStack.VM": {
+                "label": "sodalite.nodes.OpenStack.VM"
+              }
+            },
+            "relationship": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.DependsOn": {
+                "label": "tosca.relationships.DependsOn"
+              }
+            },
+            "capability": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Compute": {
+                "label": "tosca.capabilities.Compute"
+              }
+            }
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "specification": {
+            "relationship": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.HostedOn": {
+                "label": "tosca.relationships.HostedOn"
+              }
+            },
+            "capability": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Compute": {
+                "label": "tosca.capabilities.Compute"
+              }
+            },
+            "node": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Compute": {
+                "label": "tosca.nodes.Compute"
+              }
+            }
+          }
+        }
+      }
+    ],
+    "capabilities": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/feature": {
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
+                "label": "tosca.capabilities.Node"
+              }
+            }
+          }
+        }
+      }
+    ],
+    "interfaces": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/Standard": {
+          "specification": {
+            "operations": {
+              "create": {
+                "inputs": {
+                  "mysql_db_pass": {
+                    "default": {
+                      "get_property": {
+                        "property": "mysql_db_pass",
+                        "entity": "SELF"
+                      }
+                    }
+                  },
+                  "remote_server": {
+                    "default": {
+                      "get_attribute": {
+                        "attribute": "public_address",
+                        "entity": "SELF",
+                        "req_cap": "remote_server"
+                      }
+                    }
+                  }
+                },
+                "implementation": {
+                  "dependencies": {
+                    "file": {
+                      "path": "/home/yosu/Projects/Sodalite/Git/iac-management/use-cases/snow-uc/snow-demo/playbooks/config.json.tmpl",
+                      "url": "http://160.40.52.200:8084/Ansibles/e008e756-1380-4c85-acb2-91f34ea3115d"
+                    }
+                  },
+                  "primary": {
+                    "url": "http://160.40.52.200:8084/Ansibles/2d57b396-0e23-479e-972e-49f1ee33417c",
+                    "path": "/home/yosu/Projects/Sodalite/Git/iac-management/use-cases/snow-uc/snow-demo/playbooks/configure_demo.yml"
+                  }
+                }
+              }
+            },
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.interfaces.node.lifecycle.Standard": {
+                "label": "tosca.interfaces.node.lifecycle.Standard"
+              }
+            }
+          }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/nt606dkcar8p0v51ir0kaeb1l/sodalite.nodes.OpenStack.VM": {
+    "type": "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Compute",
+    "isNodeTemplate": false,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nt606dkcar8p0v51ir0kaeb1l/key_name": {
+          "description": "OpenStack SSH key name that should be placed on the VM",
+          "specification": {
+            "required": false,
+            "type": "string"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nt606dkcar8p0v51ir0kaeb1l/flavor": {
+          "description": "OpenStack flavor id (flavor names are not accepted)",
+          "specification": {
+            "type": "string",
+            "required": false
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nt606dkcar8p0v51ir0kaeb1l/image": {
+          "description": "OpenStack image id (image names are not accepted)",
+          "specification": {
+            "required": false,
+            "type": "string"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/name": {
+          "description": "Name that should be given to the VM in OpenStack",
+          "specification": {
+            "type": "string",
+            "required": false
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nt606dkcar8p0v51ir0kaeb1l/security_groups": {
+          "description": "OpenStack names of the security groups to which the instance should be added.Comma separated string.",
+          "specification": {
+            "required": false,
+            "type": "string"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/network": {
+          "description": "OpenStack network id (network names are not accepted)",
+          "specification": {
+            "required": false,
+            "type": "string"
+          }
+        }
+      }
+    ],
+    "attributes": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/state": {
+          "description": "The state of the node instance.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
+              }
+            }
           }
         }
-      ],
-      "requirements": [
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/protected_by": {
-            "value": {
-              "https://www.sodalite.eu/ontologies/workspace/1/snow/security-rules-snow": {
-                "label": "security-rules-snow"
-              },
-              "label": "protected_by"
-            }
-          }
-        }
-      ]
-    },
-    "https://www.sodalite.eu/ontologies/workspace/1/snow/security-rules-snow": {
-      "type": "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/sodalite.nodes.OpenStack.SecurityRules",
-      "isNodeTemplate": true,
-      "properties": [
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/group_name": {
-            "value": "snow",
-            "label": "group_name"
-          }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/group_description": {
-            "value": "Snow UC security group",
-            "label": "group_description"
-          }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/ports": {
-            "specification": {
-              "component_ports": {
-                "remote_ip_prefix": "0.0.0.0/0",
-                "protocol": "tcp",
-                "port_range_max": 8081,
-                "port_range_min": 8080
-              },
-              "http_port": {
-                "remote_ip_prefix": "0.0.0.0/0",
-                "port_range_max": 80,
-                "port_range_min": 80,
-                "protocol": "tcp"
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/ports": {
+          "description": "The list of logical ports assigned to the compute host instance and information about them.",
+          "specification": {
+            "entry_schema": {
+              "type": {
+                "https://www.sodalite.eu/ontologies/tosca/tosca.datatypes.network.PortInfo": {
+                  "label": "tosca.datatypes.network.PortInfo"
+                }
+              }
+            },
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/map": {
+                "label": "map"
               }
             }
           }
         }
-      ]
-    },
-    "https://www.sodalite.eu/ontologies/workspace/1/snow/topology_template_inputs": {
-      "inputs": [
-        {
-          "https://www.sodalite.eu/ontologies/workspace/1/snow/ssh-key-name": {
-            "specification": {
-              "type": "string"
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/public_address": {
+          "description": "The primary public IP address assigned by the cloud provider that applications may use to access the Compute node.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
+              }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/workspace/1/snow/docker-registry-ip": {
-            "specification": {
-              "type": "string"
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nt606dkcar8p0v51ir0kaeb1l/ansible_ip": {
+          "description": "ansible ipv4",
+          "specification": {
+            "type": "string"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/tosca_id": {
+          "description": "A unique identifier of the realized instance of a Node Template that derives from any TOSCA normative type",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
+              }
             }
           }
         }
-      ]
-    },
-    "https://www.sodalite.eu/ontologies/workspace/1/snow/snow-docker_host": {
-      "type": "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/sodalite.nodes.DockerHost",
-      "isNodeTemplate": true,
-      "properties": [
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/registry_ip": {
-            "value": "{ get_input: docker-registry-ip }",
-            "label": "registry_ip"
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/tosca_name": {
+          "description": "Reflects the name of the Node Template as defined in the TOSCA service template. This name is not unique to the realized instance model of corresponding deployed application as each template in the model can result in one or more instances (e.g., scaled) when orchestrated to a provider environment.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
+              }
+            }
           }
         }
-      ],
-      "requirements": [
-        {
-          "https://www.sodalite.eu/ontologies/tosca/host": {
-            "value": {
-              "https://www.sodalite.eu/ontologies/workspace/1/snow/snow-vm": {
-                "label": "snow-vm"
-              },
-              "label": "host"
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nt606dkcar8p0v51ir0kaeb1l/id": {
+          "description": "OpenStack id of the VM",
+          "specification": {
+            "type": "string"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/private_address": {
+          "description": "The primary private IP address assigned by the cloud provider that applications may use to access the Compute node.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
+              }
             }
           }
         }
-      ]
-    },
-    "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/sodalite.nodes.DockerizedComponent": {
-      "type": "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.SoftwareComponent",
-      "isNodeTemplate": false,
-      "properties": [
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/volumes": {
-            "description": "A list of mounted volumes for the docker container \"host_path:container_path\" like \"/tmp/docker:/tmp\"",
-            "specification": {
-              "required": false,
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/list": {
-                  "label": "list"
-                }
-              },
-              "default": []
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/networks": {
+          "description": "The list of logical networks assigned to the compute host instance and information about them.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/map": {
+                "label": "map"
+              }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/pull": {
-            "description": "If true, always pull the latest version of an image. Otherwise, will only pull an image when missing.",
-            "specification": {
-              "required": false,
-              "default": false,
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/entry_schema": {
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.datatypes.network.NetworkInfo": {
+                "label": "tosca.datatypes.network.NetworkInfo"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/component_version": {
-            "description": "Domain-specific software component version.",
-            "specification": {
-              "required": false,
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/version": {
-                  "label": "version"
-                }
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "specification": {
+            "capability": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
+                "label": "tosca.capabilities.Node"
+              }
+            },
+            "node": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Root": {
+                "label": "tosca.nodes.Root"
+              }
+            },
+            "relationship": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.DependsOn": {
+                "label": "tosca.relationships.DependsOn"
+              }
+            },
+            "occurrences": [
+              "0",
+              "UNBOUNDED"
+            ]
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/local_storage": {
+          "specification": {
+            "node": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Storage.BlockStorage": {
+                "label": "tosca.nodes.Storage.BlockStorage"
+              }
+            },
+            "occurrences": [
+              "0",
+              "UNBOUNDED"
+            ],
+            "relationship": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.AttachesTo": {
+                "label": "tosca.relationships.AttachesTo"
+              }
+            },
+            "capability": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Attachment": {
+                "label": "tosca.capabilities.Attachment"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/alias": {
-            "description": "Alias name for docker container",
-            "specification": {
-              "required": false,
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nt606dkcar8p0v51ir0kaeb1l/protected_by": {
+          "specification": {
+            "node": {
+              "https://www.sodalite.eu/ontologies/workspace/1/nt606dkcar8p0v51ir0kaeb1l/sodalite.nodes.OpenStack.SecurityRules": {
+                "label": "sodalite.nodes.OpenStack.SecurityRules"
+              }
+            },
+            "capability": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
+                "label": "tosca.capabilities.Node"
+              }
+            },
+            "relationship": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.DependsOn": {
+                "label": "tosca.relationships.DependsOn"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/restart_policy": {
-            "description": "Restart policy [no, on-failure, always, unless-stopped]",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
-              },
-              "required": false,
-              "default": false
+        }
+      }
+    ],
+    "capabilities": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/os": {
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.OperatingSystem": {
+                "label": "tosca.capabilities.OperatingSystem"
+              }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/admin_credential": {
-            "description": "The optional credential that can be used to authenticate to the software component.",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.datatypes.Credential": {
-                  "label": "tosca.datatypes.Credential"
-                }
-              },
-              "required": false
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/endpoint": {
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Endpoint.Admin": {
+                "label": "tosca.capabilities.Endpoint.Admin"
+              }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/env": {
-            "description": "Map for docker enviroment variables key-value dictionary",
-            "specification": {
-              "default": {},
-              "required": false,
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/map": {
-                  "label": "map"
-                }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/feature": {
+          "specification": {
+            "valid_source_types": {},
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
+                "label": "tosca.capabilities.Node"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/ports": {
-            "description": "Port binding for the docker container \"exposed:internal\" like \"8081:8080\"",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
-              },
-              "default": [],
-              "required": true
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/scalable": {
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Scalable": {
+                "label": "tosca.capabilities.Scalable"
+              }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/command": {
-            "description": "Commands list for starting the container",
-            "specification": {
-              "required": false,
-              "default": [],
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/list": {
-                  "label": "list"
-                }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/binding": {
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.network.Bindable": {
+                "label": "tosca.capabilities.network.Bindable"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/image_name": {
-            "description": "The name of the image on the host",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
-              },
-              "required": true
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Compute": {
+                "label": "tosca.capabilities.Compute"
+              }
+            },
+            "valid_source_types": [
+              "tosca.nodes.SoftwareComponent"
+            ]
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Compute": {
+                "label": "tosca.capabilities.Compute"
+              }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/exposed_ports": {
-            "description": "Exposed ports of the container like \"8081\"",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
+        }
+      }
+    ],
+    "interfaces": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/Standard": {
+          "specification": {
+            "operations": {
+              "delete": {
+                "implementation": {
+                  "primary": {
+                    "path": "/home/yosu/Projects/Sodalite/Git/iac-management/use-cases/modules/openstack/playbooks/vm_delete.yml",
+                    "url": "http://160.40.52.200:8084/Ansibles/3828dab9-220f-4f38-b425-59a459315f4c"
+                  }
+                },
+                "inputs": {
+                  "id": {
+                    "default": {
+                      "get_attribute": {
+                        "entity": "SELF",
+                        "attribute": "id"
+                      }
+                    }
+                  }
                 }
               },
-              "required": true,
-              "default": []
+              "create": {
+                "implementation": {
+                  "primary": {
+                    "url": "http://160.40.52.200:8084/Ansibles/e8f67cde-c4b5-4beb-94a8-5c08e94cac22",
+                    "path": "/home/yosu/Projects/Sodalite/Git/iac-management/use-cases/modules/openstack/playbooks/vm_create.yml"
+                  }
+                },
+                "inputs": {
+                  "security_groups": {
+                    "default": {
+                      "get_property": {
+                        "entity": "SELF",
+                        "property": "security_groups"
+                      }
+                    }
+                  },
+                  "key_name": {
+                    "default": {
+                      "get_property": {
+                        "entity": "SELF",
+                        "property": "key_name"
+                      }
+                    }
+                  },
+                  "image": {
+                    "default": {
+                      "get_property": {
+                        "property": "image",
+                        "entity": "SELF"
+                      }
+                    }
+                  },
+                  "network": {
+                    "default": {
+                      "get_property": {
+                        "entity": "SELF",
+                        "property": "network"
+                      }
+                    }
+                  },
+                  "vm_name": {
+                    "default": {
+                      "get_property": {
+                        "entity": "SELF",
+                        "property": "name"
+                      }
+                    }
+                  },
+                  "flavor": {
+                    "default": {
+                      "get_property": {
+                        "property": "flavor",
+                        "entity": "SELF"
+                      }
+                    }
+                  }
+                }
+              }
+            },
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.interfaces.node.lifecycle.Standard": {
+                "label": "tosca.interfaces.node.lifecycle.Standard"
+              }
             }
           }
         }
-      ],
-      "attributes": [
-        {
-          "https://www.sodalite.eu/ontologies/tosca/tosca_id": {
-            "description": "A unique identifier of the realized instance of a Node Template that derives from any TOSCA normative type",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/sodalite.nodes.DockerizedComponent": {
+    "type": "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.SoftwareComponent",
+    "isNodeTemplate": false,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/ports": {
+          "description": "Port binding for the docker container \"exposed:internal\" like \"8081:8080\"",
+          "specification": {
+            "required": false,
+            "default": [],
+            "type": "list"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/component_version": {
+          "description": "Domain-specific software component version.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/version": {
+                "label": "version"
+              }
+            },
+            "required": false
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/sleep": {
+          "description": "Sleep after image is deployed",
+          "specification": {
+            "default": 0,
+            "required": false,
+            "type": "integer"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/exposed_ports": {
+          "description": "Exposed ports of the container like \"8081\"",
+          "specification": {
+            "required": false,
+            "type": "string",
+            "default": []
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/env": {
+          "description": "Map for docker enviroment variables key-value dictionary",
+          "specification": {
+            "default": "{}",
+            "required": false,
+            "type": "map"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/image_name": {
+          "description": "The name of the image on the host",
+          "specification": {
+            "type": "string",
+            "required": true
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/restart_policy": {
+          "description": "Restart policy [no, on-failure, always, unless-stopped]",
+          "specification": {
+            "required": false,
+            "type": "string",
+            "default": "always"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/command": {
+          "description": "Commands list for starting the container",
+          "specification": {
+            "type": "list",
+            "required": false,
+            "default": ""
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/volumes": {
+          "description": "A list of mounted volumes for the docker container \"host_path:container_path\" like \"/tmp/docker:/tmp\"",
+          "specification": {
+            "required": false,
+            "type": "list",
+            "default": []
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/registry_url": {
+          "description": "The URL of the registry containing images",
+          "specification": {
+            "type": "string",
+            "required": true
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/alias": {
+          "description": "Alias name for docker container",
+          "specification": {
+            "required": true,
+            "type": "string"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/admin_credential": {
+          "description": "The optional credential that can be used to authenticate to the software component.",
+          "specification": {
+            "required": false,
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.datatypes.Credential": {
+                "label": "tosca.datatypes.Credential"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/state": {
-            "description": "The state of the node instance.",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/hostname": {
+          "description": "The container hostname",
+          "specification": {
+            "type": "string",
+            "required": false
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/kijggphp9tsu7g26a5ve5e8ck0/docker_network_name": {
+          "description": "Alias name for docker container",
+          "specification": {
+            "type": "string",
+            "required": false
+          }
+        }
+      }
+    ],
+    "attributes": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/state": {
+          "description": "The state of the node instance.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/tosca_name": {
-            "description": "Reflects the name of the Node Template as defined in the TOSCA service template. This name is not unique to the realized instance model of corresponding deployed application as each template in the model can result in one or more instances (e.g., scaled) when orchestrated to a provider environment.",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/tosca_name": {
+          "description": "Reflects the name of the Node Template as defined in the TOSCA service template. This name is not unique to the realized instance model of corresponding deployed application as each template in the model can result in one or more instances (e.g., scaled) when orchestrated to a provider environment.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
               }
             }
           }
         }
-      ],
-      "requirements": [
-        {
-          "https://www.sodalite.eu/ontologies/tosca/host": {
-            "specification": {
-              "node": {
-                "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/sodalite.nodes.DockerHost": {
-                  "label": "sodalite.nodes.DockerHost"
-                }
-              },
-              "capability": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
-                  "label": "tosca.capabilities.Node"
-                }
-              },
-              "relationship": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.HostedOn": {
-                  "label": "tosca.relationships.HostedOn"
-                }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/tosca_id": {
+          "description": "A unique identifier of the realized instance of a Node Template that derives from any TOSCA normative type",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/dependency": {
-            "specification": {
-              "relationship": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.DependsOn": {
-                  "label": "tosca.relationships.DependsOn"
-                }
-              },
-              "node": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Root": {
-                  "label": "tosca.nodes.Root"
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "specification": {
+            "capability": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Compute": {
+                "label": "tosca.capabilities.Compute"
+              }
+            },
+            "relationship": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.HostedOn": {
+                "label": "tosca.relationships.HostedOn"
+              }
+            },
+            "node": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Compute": {
+                "label": "tosca.nodes.Compute"
+              }
+            }
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/registry": {
+          "specification": {
+            "capability": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
+                "label": "tosca.capabilities.Node"
+              }
+            },
+            "node": {
+              "https://www.sodalite.eu/ontologies/workspace/1/h2tk1f9lv7h5d722a7tr5bvmqk/sodalite.nodes.DockerRegistry": {
+                "label": "sodalite.nodes.DockerRegistry"
+              }
+            },
+            "relationship": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.DependsOn": {
+                "label": "tosca.relationships.DependsOn"
+              }
+            }
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/network": {
+          "specification": {
+            "node": {
+              "https://www.sodalite.eu/ontologies/workspace/1/kijggphp9tsu7g26a5ve5e8ck0/sodalite.nodes.DockerNetwork": {
+                "label": "sodalite.nodes.DockerNetwork"
+              }
+            },
+            "relationship": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.DependsOn": {
+                "label": "tosca.relationships.DependsOn"
+              }
+            },
+            "capability": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Network": {
+                "label": "tosca.capabilities.Network"
+              }
+            }
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "specification": {
+            "capability": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
+                "label": "tosca.capabilities.Node"
+              }
+            },
+            "occurrences": [
+              "0",
+              "UNBOUNDED"
+            ],
+            "relationship": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.DependsOn": {
+                "label": "tosca.relationships.DependsOn"
+              }
+            },
+            "node": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Root": {
+                "label": "tosca.nodes.Root"
+              }
+            }
+          }
+        }
+      }
+    ],
+    "capabilities": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/feature": {
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
+                "label": "tosca.capabilities.Node"
+              }
+            }
+          }
+        }
+      }
+    ],
+    "interfaces": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/Standard": {
+          "specification": {
+            "operations": {
+              "create": {
+                "implementation": {
+                  "primary": {
+                    "url": "http://160.40.52.200:8084/Ansibles/045b57b7-2a2b-4490-98b1-764516af2a65",
+                    "path": "/home/yosu/Projects/Sodalite/Git/iac-management/use-cases/modules/docker/playbooks/add_container.yml"
+                  }
+                },
+                "inputs": {
+                  "ports": {
+                    "default": {
+                      "get_property": {
+                        "entity": "SELF",
+                        "property": "ports"
+                      }
+                    }
+                  },
+                  "registry_url": {
+                    "default": {
+                      "get_property": {
+                        "property": "docker_registry_url",
+                        "req_cap": "registry",
+                        "entity": "SELF"
+                      }
+                    }
+                  },
+                  "exposed_ports": {
+                    "default": {
+                      "get_property": {
+                        "entity": "SELF",
+                        "property": "exposed_ports"
+                      }
+                    }
+                  },
+                  "volumes": {
+                    "default": {
+                      "get_property": {
+                        "entity": "SELF",
+                        "property": "volumes"
+                      }
+                    }
+                  },
+                  "env": {
+                    "default": {
+                      "get_property": {
+                        "entity": "SELF",
+                        "property": "env"
+                      }
+                    }
+                  },
+                  "restart_policy": {
+                    "default": {
+                      "get_property": {
+                        "entity": "SELF",
+                        "property": "restart_policy"
+                      }
+                    }
+                  },
+                  "command": {
+                    "default": {
+                      "get_property": {
+                        "property": "command",
+                        "entity": "SELF"
+                      }
+                    }
+                  },
+                  "public_address": {
+                    "default": {
+                      "get_attribute": {
+                        "entity": "SELF",
+                        "req_cap": "host",
+                        "attribute": "public_address"
+                      }
+                    }
+                  },
+                  "docker_network_name": {
+                    "default": {
+                      "get_property": {
+                        "property": "docker_network_name",
+                        "entity": "SELF"
+                      }
+                    }
+                  },
+                  "sleep": {
+                    "default": {
+                      "get_property": {
+                        "entity": "SELF",
+                        "property": "sleep"
+                      }
+                    }
+                  },
+                  "alias": {
+                    "default": {
+                      "get_property": {
+                        "property": "alias",
+                        "entity": "SELF"
+                      }
+                    }
+                  },
+                  "image_name": {
+                    "default": {
+                      "get_property": {
+                        "property": "image_name",
+                        "entity": "SELF"
+                      }
+                    }
+                  }
                 }
               },
-              "occurrences": {
-                "max": "UNBOUNDED",
-                "min": 0
-              },
-              "capability": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
-                  "label": "tosca.capabilities.Node"
+              "delete": {
+                "implementation": {
+                  "primary": {
+                    "path": "/home/yosu/Projects/Sodalite/Git/iac-management/use-cases/modules/docker/playbooks/remove_container.yml",
+                    "url": "http://160.40.52.200:8084/Ansibles/a9ffd599-fb40-4a19-a9d6-30db5407d1ae"
+                  }
+                },
+                "inputs": {
+                  "alias": {
+                    "default": {
+                      "get_property": {
+                        "entity": "SELF",
+                        "property": "alias"
+                      }
+                    }
+                  }
                 }
               }
+            },
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.interfaces.node.lifecycle.Standard": {
+                "label": "tosca.interfaces.node.lifecycle.Standard"
+              }
             }
           }
         }
-      ],
-      "capabilities": [
-        {
-          "https://www.sodalite.eu/ontologies/tosca/feature": {
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
-                  "label": "tosca.capabilities.Node"
-                }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/kijggphp9tsu7g26a5ve5e8ck0/sodalite.nodes.DockerNetwork": {
+    "type": "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.SoftwareComponent",
+    "isNodeTemplate": false,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/component_version": {
+          "description": "Domain-specific software component version.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/version": {
+                "label": "version"
+              }
+            },
+            "required": false
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/admin_credential": {
+          "description": "The optional credential that can be used to authenticate to the software component.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.datatypes.Credential": {
+                "label": "tosca.datatypes.Credential"
+              }
+            },
+            "required": false
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/name": {
+          "description": "The name of the network",
+          "specification": {
+            "type": "string",
+            "required": true
+          }
+        }
+      }
+    ],
+    "attributes": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/tosca_id": {
+          "description": "A unique identifier of the realized instance of a Node Template that derives from any TOSCA normative type",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
+              }
+            }
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/state": {
+          "description": "The state of the node instance.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
+              }
+            }
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/tosca_name": {
+          "description": "Reflects the name of the Node Template as defined in the TOSCA service template. This name is not unique to the realized instance model of corresponding deployed application as each template in the model can result in one or more instances (e.g., scaled) when orchestrated to a provider environment.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
+              }
+            }
+          }
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "specification": {
+            "relationship": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.DependsOn": {
+                "label": "tosca.relationships.DependsOn"
+              }
+            },
+            "capability": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
+                "label": "tosca.capabilities.Node"
+              }
+            },
+            "occurrences": [
+              "0",
+              "UNBOUNDED"
+            ],
+            "node": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Root": {
+                "label": "tosca.nodes.Root"
+              }
+            }
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "specification": {
+            "node": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Compute": {
+                "label": "tosca.nodes.Compute"
+              }
+            },
+            "relationship": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.HostedOn": {
+                "label": "tosca.relationships.HostedOn"
+              }
+            },
+            "capability": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Compute": {
+                "label": "tosca.capabilities.Compute"
+              }
+            }
+          }
+        }
+      }
+    ],
+    "capabilities": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/feature": {
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
+                "label": "tosca.capabilities.Node"
               }
             }
           }
         }
-      ],
-      "interfaces": [
-        {
-          "https://www.sodalite.eu/ontologies/tosca/Standard": {
-            "specification": {
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/nn14rfsf92t6ha9jbeiemr8drd/network": {
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Network": {
+                "label": "tosca.capabilities.Network"
+              }
+            },
+            "valid_source_types": [
+              "sodalite.nodes.DockerizedComponent"
+            ]
+          }
+        }
+      }
+    ],
+    "interfaces": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/Standard": {
+          "specification": {
+            "operations": {
               "delete": {
                 "inputs": {
-                  "alias": "{ default: { get_property: [ SELF, alias ] } }"
+                  "docker_network_name": {
+                    "default": {
+                      "get_property": {
+                        "entity": "SELF",
+                        "property": "name"
+                      }
+                    }
+                  }
                 },
                 "implementation": {
-                  "primary": "http://160.40.52.200:8084/Ansibles/playbooks/docker/dockerized_component_undeploy.yml"
+                  "primary": {
+                    "path": "/home/yosu/Projects/Sodalite/Git/iac-management/use-cases/modules/docker/playbooks/remove_network.yml",
+                    "url": "http://160.40.52.200:8084/Ansibles/f7913d15-7974-4241-99b3-cfd6d0ec793b"
+                  }
                 }
               },
               "create": {
                 "inputs": {
-                  "restart_policy": "{ default: { get_property: [ SELF, restart_policy ] } }",
-                  "command": "{ default: { get_property: [ SELF, command ] } }",
-                  "ports": "{ default: { get_property: [ SELF, ports ] } }",
-                  "volumes": "{ default: { get_property: [ SELF, volumes ] } }",
-                  "pull": "{ default: { get_property: [ SELF, pull ] } }",
-                  "env": "{ default: { get_property: [ SELF, env ] } }",
-                  "registry_ip": "{ default: { get_attribute: [ SELF, host, registry_ip ] } }",
-                  "ansible_ip": "{ default: { get_attribute: [ SELF, host, ansible_ip ] } }",
-                  "alias": "{ default: { get_property: [ SELF, alias ] } }",
-                  "image_name": "{ default: { get_property: [ SELF, image_name ] } }",
-                  "exposed_ports": "{ default: { get_property: [ SELF, exposed_ports ] } }"
+                  "docker_network_name": {
+                    "default": {
+                      "get_property": {
+                        "entity": "SELF",
+                        "property": "name"
+                      }
+                    }
+                  }
                 },
                 "implementation": {
-                  "primary": "http://160.40.52.200:8084/Ansibles/playbooks/docker/dockerized_component_deploy.yml"
-                }
-              },
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.interfaces.node.lifecycle.Standard": {
-                  "label": "tosca.interfaces.node.lifecycle.Standard"
+                  "primary": {
+                    "path": "/home/yosu/Projects/Sodalite/Git/iac-management/use-cases/modules/docker/playbooks/add_network.yml",
+                    "url": "http://160.40.52.200:8084/Ansibles/b4cc6090-4790-468d-9e7b-8d6ce85e0424"
+                  }
                 }
               }
+            },
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.interfaces.node.lifecycle.Standard": {
+                "label": "tosca.interfaces.node.lifecycle.Standard"
+              }
             }
           }
         }
-      ]
-    },
-    "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/sodalite.nodes.OpenStack.VM": {
-      "type": "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Compute",
-      "isNodeTemplate": false,
-      "properties": [
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/key_name": {
-            "description": "OpenStack SSH key name that should be placed on the VM",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/i33oic0aohevnjrr7gibsjt5cv/sodalite.nodes.OpenStack.SecurityRules": {
+    "type": "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Root",
+    "isNodeTemplate": false,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/ports": {
+          "specification": {
+            "entry_schema": {
+              "type": {
+                "https://www.sodalite.eu/ontologies/workspace/1/i33oic0aohevnjrr7gibsjt5cv/sodalite.datatypes.OpenStack.SecurityRule": {
+                  "label": "sodalite.datatypes.OpenStack.SecurityRule"
                 }
               }
+            },
+            "constraints": {
+              "min_length": 1
+            },
+            "type": "map",
+            "required": false
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/i33oic0aohevnjrr7gibsjt5cv/group_name": {
+          "description": "Name of the security group in openstack.",
+          "specification": {
+            "required": true,
+            "type": "string"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/i33oic0aohevnjrr7gibsjt5cv/group_description": {
+          "description": "Description of the security group in openstack",
+          "specification": {
+            "required": true,
+            "type": "string"
+          }
+        }
+      }
+    ],
+    "attributes": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/tosca_name": {
+          "description": "Reflects the name of the Node Template as defined in the TOSCA service template. This name is not unique to the realized instance model of corresponding deployed application as each template in the model can result in one or more instances (e.g., scaled) when orchestrated to a provider environment.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
+              }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/flavor": {
-            "description": "OpenStack flavor id (flavor names are not accepted)",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/tosca_id": {
+          "description": "A unique identifier of the realized instance of a Node Template that derives from any TOSCA normative type",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/name": {
-            "description": "Name that should be given to the VM in OpenStack",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/state": {
+          "description": "The state of the node instance.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/network": {
-            "description": "OpenStack network id (network names are not accepted)",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "specification": {
+            "node": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Root": {
+                "label": "tosca.nodes.Root"
+              }
+            },
+            "relationship": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.DependsOn": {
+                "label": "tosca.relationships.DependsOn"
+              }
+            },
+            "occurrences": [
+              "0",
+              "UNBOUNDED"
+            ],
+            "capability": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
+                "label": "tosca.capabilities.Node"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/image": {
-            "description": "OpenStack image id (image names are not accepted)",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+        }
+      }
+    ],
+    "capabilities": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/feature": {
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
+                "label": "tosca.capabilities.Node"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/security_groups": {
-            "description": "OpenStack names of the security groups to which the instance should be added.Comma separated string.",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
+        }
+      }
+    ],
+    "interfaces": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/Standard": {
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.interfaces.node.lifecycle.Standard": {
+                "label": "tosca.interfaces.node.lifecycle.Standard"
+              }
+            },
+            "operations": {
+              "create": {
+                "implementation": {
+                  "primary": {
+                    "path": "/home/yosu/Projects/Sodalite/Git/iac-management/use-cases/modules/openstack/playbooks/security_rule_create.yml",
+                    "url": "http://160.40.52.200:8084/Ansibles/d60fe710-7d65-4cca-aa8e-737eab3e3a26"
+                  }
+                },
+                "inputs": {
+                  "ports": {
+                    "default": {
+                      "get_property": {
+                        "property": "ports",
+                        "entity": "SELF"
+                      }
+                    }
+                  },
+                  "group_description": {
+                    "default": {
+                      "get_property": {
+                        "property": "group_description",
+                        "entity": "SELF"
+                      }
+                    }
+                  },
+                  "group_name": {
+                    "default": {
+                      "get_property": {
+                        "entity": "SELF",
+                        "property": "group_name"
+                      }
+                    }
+                  }
+                }
+              },
+              "delete": {
+                "implementation": {
+                  "primary": {
+                    "path": "/home/yosu/Projects/Sodalite/Git/iac-management/use-cases/modules/openstack/playbooks/security_rule_delete.yml",
+                    "url": "http://160.40.52.200:8084/Ansibles/2461b289-4435-4031-a999-1de0d0a6c5ff"
+                  }
+                },
+                "inputs": {
+                  "group_name": {
+                    "default": {
+                      "get_property": {
+                        "entity": "SELF",
+                        "property": "group_name"
+                      }
+                    }
+                  }
                 }
               }
             }
           }
         }
-      ],
-      "attributes": [
-        {
-          "https://www.sodalite.eu/ontologies/tosca/entry_schema": {
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.datatypes.network.NetworkInfo": {
-                  "label": "tosca.datatypes.network.NetworkInfo"
-                }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/5nf45bccrr6rmkt2f4cinoi6u/sodalite.nodes.DockerVolume": {
+    "type": "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.SoftwareComponent",
+    "isNodeTemplate": false,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/admin_credential": {
+          "description": "The optional credential that can be used to authenticate to the software component.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.datatypes.Credential": {
+                "label": "tosca.datatypes.Credential"
               }
-            }
+            },
+            "required": false
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/private_address": {
-            "description": "The primary private IP address assigned by the cloud provider that applications may use to access the Compute node.",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
-              }
-            }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/name": {
+          "description": "The name of the volume",
+          "specification": {
+            "required": true,
+            "type": "string"
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/id": {
-            "description": "OpenStack id of the VM",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/component_version": {
+          "description": "Domain-specific software component version.",
+          "specification": {
+            "required": false,
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/version": {
+                "label": "version"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/tosca_name": {
-            "description": "Reflects the name of the Node Template as defined in the TOSCA service template. This name is not unique to the realized instance model of corresponding deployed application as each template in the model can result in one or more instances (e.g., scaled) when orchestrated to a provider environment.",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+        }
+      }
+    ],
+    "attributes": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/tosca_id": {
+          "description": "A unique identifier of the realized instance of a Node Template that derives from any TOSCA normative type",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/public_address": {
-            "description": "Public ipv4",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/state": {
+          "description": "The state of the node instance.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/tosca_id": {
-            "description": "A unique identifier of the realized instance of a Node Template that derives from any TOSCA normative type",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/tosca_name": {
+          "description": "Reflects the name of the Node Template as defined in the TOSCA service template. This name is not unique to the realized instance model of corresponding deployed application as each template in the model can result in one or more instances (e.g., scaled) when orchestrated to a provider environment.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/state": {
-            "description": "The state of the node instance.",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "specification": {
+            "relationship": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.DependsOn": {
+                "label": "tosca.relationships.DependsOn"
               }
-            }
-          }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/ports": {
-            "description": "The list of logical ports assigned to the compute host instance and information about them.",
-            "specification": {
-              "entry_schema": {
-                "type": {
-                  "https://www.sodalite.eu/ontologies/tosca/tosca.datatypes.network.PortInfo": {
-                    "label": "tosca.datatypes.network.PortInfo"
-                  }
-                }
-              },
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/map": {
-                  "label": "map"
-                }
+            },
+            "capability": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
+                "label": "tosca.capabilities.Node"
               }
-            }
-          }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/public_address": {
-            "description": "The primary public IP address assigned by the cloud provider that applications may use to access the Compute node.",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+            },
+            "node": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Root": {
+                "label": "tosca.nodes.Root"
               }
-            }
+            },
+            "occurrences": [
+              "0",
+              "UNBOUNDED"
+            ]
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/networks": {
-            "description": "The list of logical networks assigned to the compute host instance and information about them.",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/map": {
-                  "label": "map"
-                }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "specification": {
+            "capability": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Compute": {
+                "label": "tosca.capabilities.Compute"
               }
-            }
-          }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/ansible_ip": {
-            "description": "ansible ipv4",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+            },
+            "node": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Compute": {
+                "label": "tosca.nodes.Compute"
+              }
+            },
+            "relationship": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.HostedOn": {
+                "label": "tosca.relationships.HostedOn"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/private_address": {
-            "description": "Private ipv4",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+        }
+      }
+    ],
+    "capabilities": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/feature": {
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
+                "label": "tosca.capabilities.Node"
               }
             }
           }
         }
-      ],
-      "requirements": [
-        {
-          "https://www.sodalite.eu/ontologies/tosca/local_storage": {
-            "specification": {
-              "capability": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Attachment": {
-                  "label": "tosca.capabilities.Attachment"
-                }
-              },
-              "node": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Storage.BlockStorage": {
-                  "label": "tosca.nodes.Storage.BlockStorage"
+      }
+    ],
+    "interfaces": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/Standard": {
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.interfaces.node.lifecycle.Standard": {
+                "label": "tosca.interfaces.node.lifecycle.Standard"
+              }
+            },
+            "operations": {
+              "create": {
+                "implementation": {
+                  "primary": {
+                    "path": "/home/yosu/Projects/Sodalite/Git/iac-management/use-cases/modules/docker/playbooks/add_volume.yml",
+                    "url": "http://160.40.52.200:8084/Ansibles/520afe9e-b083-444e-9b93-74765c7e90ac"
+                  }
+                },
+                "inputs": {
+                  "volume_name": {
+                    "default": {
+                      "get_property": {
+                        "entity": "SELF",
+                        "property": "name"
+                      }
+                    }
+                  }
                 }
               },
-              "occurrences": {
-                "max": "UNBOUNDED",
-                "min": 0
-              },
-              "relationship": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.AttachesTo": {
-                  "label": "tosca.relationships.AttachesTo"
+              "delete": {
+                "implementation": {
+                  "primary": {
+                    "path": "/home/yosu/Projects/Sodalite/Git/iac-management/use-cases/modules/docker/playbooks/remove_volume.yml",
+                    "url": "http://160.40.52.200:8084/Ansibles/f7180043-ff5f-4693-be05-014f90b7977c"
+                  }
+                },
+                "inputs": {
+                  "volume_name": {
+                    "default": {
+                      "get_property": {
+                        "property": "name",
+                        "entity": "SELF"
+                      }
+                    }
+                  }
                 }
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/dependency": {
-            "specification": {
-              "capability": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
-                  "label": "tosca.capabilities.Node"
-                }
-              },
-              "occurrences": {
-                "max": "UNBOUNDED",
-                "min": 0
-              },
-              "node": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Root": {
-                  "label": "tosca.nodes.Root"
-                }
-              },
-              "relationship": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.DependsOn": {
-                  "label": "tosca.relationships.DependsOn"
-                }
+        }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/i5rq2l9e5at501mve07ubclavq/sodalite.nodes.DockerHost": {
+    "type": "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.SoftwareComponent",
+    "isNodeTemplate": false,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/admin_credential": {
+          "description": "The optional credential that can be used to authenticate to the software component.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.datatypes.Credential": {
+                "label": "tosca.datatypes.Credential"
               }
-            }
+            },
+            "required": false
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/protected_by": {
-            "specification": {
-              "capability": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
-                  "label": "tosca.capabilities.Node"
-                }
-              },
-              "node": {
-                "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/sodalite.nodes.OpenStack.SecurityRules": {
-                  "label": "sodalite.nodes.OpenStack.SecurityRules"
-                }
-              },
-              "relationship": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.DependsOn": {
-                  "label": "tosca.relationships.DependsOn"
-                }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/component_version": {
+          "description": "Domain-specific software component version.",
+          "specification": {
+            "required": false,
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/version": {
+                "label": "version"
               }
             }
           }
         }
-      ],
-      "capabilities": [
-        {
-          "https://www.sodalite.eu/ontologies/tosca/endpoint": {
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Endpoint.Admin": {
-                  "label": "tosca.capabilities.Endpoint.Admin"
-                }
+      }
+    ],
+    "attributes": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/tosca_name": {
+          "description": "Reflects the name of the Node Template as defined in the TOSCA service template. This name is not unique to the realized instance model of corresponding deployed application as each template in the model can result in one or more instances (e.g., scaled) when orchestrated to a provider environment.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/os": {
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.OperatingSystem": {
-                  "label": "tosca.capabilities.OperatingSystem"
-                }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/state": {
+          "description": "The state of the node instance.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/scalable": {
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Scalable": {
-                  "label": "tosca.capabilities.Scalable"
-                }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/tosca_id": {
+          "description": "A unique identifier of the realized instance of a Node Template that derives from any TOSCA normative type",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/host": {
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Compute": {
-                  "label": "tosca.capabilities.Compute"
-                }
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "specification": {
+            "occurrences": [
+              "0",
+              "UNBOUNDED"
+            ],
+            "capability": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
+                "label": "tosca.capabilities.Node"
+              }
+            },
+            "relationship": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.DependsOn": {
+                "label": "tosca.relationships.DependsOn"
+              }
+            },
+            "node": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Root": {
+                "label": "tosca.nodes.Root"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/feature": {
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
-                  "label": "tosca.capabilities.Node"
-                }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "specification": {
+            "capability": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Compute": {
+                "label": "tosca.capabilities.Compute"
+              }
+            },
+            "node": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Compute": {
+                "label": "tosca.nodes.Compute"
+              }
+            },
+            "relationship": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.HostedOn": {
+                "label": "tosca.relationships.HostedOn"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/host": {
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Compute": {
-                  "label": "tosca.capabilities.Compute"
-                }
-              },
-              "valid_source_types": ["tosca.nodes.SoftwareComponent"]
-            }
+        }
+      }
+    ],
+    "capabilities": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
+                "label": "tosca.capabilities.Node"
+              }
+            },
+            "valid_source_types": [
+              "sodalite.nodes.DockerizedComponent"
+            ]
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/binding": {
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.network.Bindable": {
-                  "label": "tosca.capabilities.network.Bindable"
-                }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/feature": {
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
+                "label": "tosca.capabilities.Node"
               }
             }
           }
         }
-      ],
-      "interfaces": [
-        {
-          "https://www.sodalite.eu/ontologies/tosca/Standard": {
-            "specification": {
-              "delete": {
-                "inputs": {
-                  "id": "{ default: { get_attribute: [ SELF, id ] } }"
-                },
-                "implementation": "http://160.40.52.200:8084/Ansibles/playbooks/openstack/vm/delete.yml"
-              },
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.interfaces.node.lifecycle.Standard": {
-                  "label": "tosca.interfaces.node.lifecycle.Standard"
+      }
+    ],
+    "interfaces": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/Standard": {
+          "specification": {
+            "operations": {
+              "create": {
+                "implementation": {
+                  "primary": {
+                    "path": "/home/yosu/Projects/Sodalite/Git/iac-management/use-cases/modules/docker/playbooks/create_docker_host.yml",
+                    "url": "http://160.40.52.200:8084/Ansibles/acbb3d50-f145-4279-91e9-be4d0aa5733a"
+                  }
                 }
               },
-              "create": {
-                "implementation": "http://160.40.52.200:8084/Ansibles/playbooks/openstack/vm/create.yml",
-                "inputs": {
-                  "vm_name": "{ default: { get_property: [ SELF, name     ] } }",
-                  "key_name": "{ default: { get_property: [ SELF, key_name ] } }",
-                  "image": "{ default: { get_property: [ SELF, image    ] } }",
-                  "network": "{ default: { get_property: [ SELF, network  ] } }",
-                  "security_groups": "{ default: { get_property: [ SELF, security_groups  ] } }",
-                  "flavor": "{ default: { get_property: [ SELF, flavor   ] } }"
+              "delete": {
+                "implementation": {
+                  "primary": {
+                    "url": "http://160.40.52.200:8084/Ansibles/08fae0a3-5b2b-421e-b61f-c5a97e43e07d",
+                    "path": "/home/yosu/Projects/Sodalite/Git/iac-management/use-cases/modules/docker/playbooks/delete_docker_host.yml"
+                  }
                 }
               }
+            },
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.interfaces.node.lifecycle.Standard": {
+                "label": "tosca.interfaces.node.lifecycle.Standard"
+              }
             }
           }
         }
-      ]
-    },
-    "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/sodalite.nodes.OpenStack.SecurityRules": {
-      "type": "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Root",
-      "isNodeTemplate": false,
-      "properties": [
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/ports": {
-            "specification": {
-              "entry_schema": {
-                "type": {
-                  "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/sodalite.nodes.OpenStack.SecurityRule": {
-                    "label": "sodalite.nodes.OpenStack.SecurityRule"
-                  }
-                }
-              },
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/map": {
-                  "label": "map"
-                }
-              },
-              "constraints": {
-                "min_length": 1
-              },
-              "required": false
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/aaqsft03mc3fdn03nrh40st7rc/sodalite.nodes.RegistryCertificate": {
+    "type": "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.SoftwareComponent",
+    "isNodeTemplate": false,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/aaqsft03mc3fdn03nrh40st7rc/email_address": {
+          "description": "The email address field of the certificate signing request subject.",
+          "specification": {
+            "required": true,
+            "type": "string"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/aaqsft03mc3fdn03nrh40st7rc/registry_ip": {
+          "description": "IP of the SODALITE docker registry",
+          "specification": {
+            "default": "localhost",
+            "type": "string",
+            "required": true
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/aaqsft03mc3fdn03nrh40st7rc/organization_name": {
+          "description": "The organizationName field of the certificate signing request subject.",
+          "specification": {
+            "required": true,
+            "type": "string"
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/component_version": {
+          "description": "Domain-specific software component version.",
+          "specification": {
+            "required": false,
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/version": {
+                "label": "version"
+              }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/group_name": {
-            "description": "Name of the security group in openstack.",
-            "specification": {
-              "required": true,
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/admin_credential": {
+          "description": "The optional credential that can be used to authenticate to the software component.",
+          "specification": {
+            "required": false,
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.datatypes.Credential": {
+                "label": "tosca.datatypes.Credential"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/group_description": {
-            "description": "Description of the security group in openstack.",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
-              },
-              "required": true
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/aaqsft03mc3fdn03nrh40st7rc/country_name": {
+          "description": "Country name field of the certificate signing request subject.",
+          "specification": {
+            "required": true,
+            "type": "string"
+          }
+        }
+      }
+    ],
+    "attributes": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/state": {
+          "description": "The state of the node instance.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
+              }
             }
           }
         }
-      ],
-      "attributes": [
-        {
-          "https://www.sodalite.eu/ontologies/tosca/tosca_id": {
-            "description": "A unique identifier of the realized instance of a Node Template that derives from any TOSCA normative type",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/tosca_id": {
+          "description": "A unique identifier of the realized instance of a Node Template that derives from any TOSCA normative type",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/tosca_name": {
-            "description": "Reflects the name of the Node Template as defined in the TOSCA service template. This name is not unique to the realized instance model of corresponding deployed application as each template in the model can result in one or more instances (e.g., scaled) when orchestrated to a provider environment.",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/tosca_name": {
+          "description": "Reflects the name of the Node Template as defined in the TOSCA service template. This name is not unique to the realized instance model of corresponding deployed application as each template in the model can result in one or more instances (e.g., scaled) when orchestrated to a provider environment.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/state": {
-            "description": "The state of the node instance.",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+        }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "specification": {
+            "relationship": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.DependsOn": {
+                "label": "tosca.relationships.DependsOn"
+              }
+            },
+            "node": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Root": {
+                "label": "tosca.nodes.Root"
+              }
+            },
+            "occurrences": [
+              "0",
+              "UNBOUNDED"
+            ],
+            "capability": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
+                "label": "tosca.capabilities.Node"
               }
             }
           }
         }
-      ],
-      "requirements": [
-        {
-          "https://www.sodalite.eu/ontologies/tosca/dependency": {
-            "specification": {
-              "relationship": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.DependsOn": {
-                  "label": "tosca.relationships.DependsOn"
-                }
-              },
-              "node": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Root": {
-                  "label": "tosca.nodes.Root"
-                }
-              },
-              "occurrences": {
-                "min": 0,
-                "max": "UNBOUNDED"
-              },
-              "capability": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
-                  "label": "tosca.capabilities.Node"
-                }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "specification": {
+            "node": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Compute": {
+                "label": "tosca.nodes.Compute"
+              }
+            },
+            "relationship": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.HostedOn": {
+                "label": "tosca.relationships.HostedOn"
+              }
+            },
+            "capability": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Compute": {
+                "label": "tosca.capabilities.Compute"
               }
             }
           }
         }
-      ],
-      "capabilities": [
-        {
-          "https://www.sodalite.eu/ontologies/tosca/feature": {
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
-                  "label": "tosca.capabilities.Node"
-                }
+      }
+    ],
+    "capabilities": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/feature": {
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
+                "label": "tosca.capabilities.Node"
               }
             }
           }
         }
-      ],
-      "interfaces": [
-        {
-          "https://www.sodalite.eu/ontologies/tosca/Standard": {
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.interfaces.node.lifecycle.Standard": {
-                  "label": "tosca.interfaces.node.lifecycle.Standard"
+      }
+    ],
+    "interfaces": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/Standard": {
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.interfaces.node.lifecycle.Standard": {
+                "label": "tosca.interfaces.node.lifecycle.Standard"
+              }
+            },
+            "operations": {
+              "delete": {
+                "implementation": {
+                  "primary": {
+                    "path": "/home/yosu/Projects/Sodalite/Git/iac-management/use-cases/modules/docker/playbooks/remove_cert.yml",
+                    "url": "http://160.40.52.200:8084/Ansibles/5341320a-25ea-4b47-9fa9-afa7528da585"
+                  }
+                },
+                "inputs": {
+                  "registry_ip": {
+                    "default": {
+                      "get_property": {
+                        "entity": "SELF",
+                        "property": "registry_ip"
+                      }
+                    }
+                  }
                 }
               },
               "create": {
                 "inputs": {
-                  "group_name": "{ default: { get_property: [ SELF, group_name         ] } }",
-                  "group_description": "{ default: { get_property: [ SELF, group_description  ] } }",
-                  "ports": "{ default: { get_property: [ SELF, ports  ] } }"
-                },
-                "implementation": "http://160.40.52.200:8084/Ansibles/playbooks/openstack/security-rule/create.yml"
-              },
-              "delete": {
-                "inputs": {
-                  "group_name": "{ default: { get_property: [ SELF, group_name         ] } }"
+                  "email_address": {
+                    "default": {
+                      "get_property": {
+                        "entity": "SELF",
+                        "property": "email_address"
+                      }
+                    }
+                  },
+                  "public_ipv4_address": {
+                    "default": {
+                      "get_attribute": {
+                        "attribute": "public_address",
+                        "req_cap": "host",
+                        "entity": "SELF"
+                      }
+                    }
+                  },
+                  "registry_ip": {
+                    "default": {
+                      "get_property": {
+                        "property": "registry_ip",
+                        "entity": "SELF"
+                      }
+                    }
+                  },
+                  "country_name": {
+                    "default": {
+                      "get_property": {
+                        "property": "country_name",
+                        "entity": "SELF"
+                      }
+                    }
+                  },
+                  "organization_name": {
+                    "default": {
+                      "get_property": {
+                        "entity": "SELF",
+                        "property": "organization_name"
+                      }
+                    }
+                  }
                 },
-                "implementation": "http://160.40.52.200:8084/Ansibles/playbooks/openstack/security-rule/delete.yml"
+                "implementation": {
+                  "dependencies": {
+                    "file": {
+                      "url": "http://160.40.52.200:8084/Ansibles/93e3668b-2edd-4a4a-8f9a-999213d14a40",
+                      "path": "/home/yosu/Projects/Sodalite/Git/ide/dsl/org.sodalite.dsl.examples/certificates/docker/ca.crt"
+                    },
+                    "relative_path": "artifacts"
+                  },
+                  "primary": {
+                    "relative_path": "playbooks",
+                    "path": "/home/yosu/Projects/Sodalite/Git/iac-management/use-cases/modules/docker/playbooks/add_cert.yml",
+                    "url": "http://160.40.52.200:8084/Ansibles/73b225c6-0cdd-4f77-8345-8702e3535322"
+                  }
+                }
               }
             }
           }
         }
-      ]
-    },
-    "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/sodalite.nodes.DockerHost": {
-      "type": "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.SoftwareComponent",
-      "isNodeTemplate": false,
-      "properties": [
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/registry_ip": {
-            "description": "IP of the SODALITE docker registry",
-            "specification": {
-              "required": true,
-              "default": "localhost",
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/h2tk1f9lv7h5d722a7tr5bvmqk/sodalite.nodes.DockerRegistry": {
+    "type": "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.SoftwareComponent",
+    "isNodeTemplate": false,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/h2tk1f9lv7h5d722a7tr5bvmqk/docker_registry_url": {
+          "description": "Docker Hub login",
+          "specification": {
+            "type": "string",
+            "required": false
+          }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/component_version": {
+          "description": "Domain-specific software component version.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/version": {
+                "label": "version"
               }
-            }
+            },
+            "required": false
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/admin_credential": {
-            "description": "The optional credential that can be used to authenticate to the software component.",
-            "specification": {
-              "required": false,
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.datatypes.Credential": {
-                  "label": "tosca.datatypes.Credential"
-                }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/admin_credential": {
+          "description": "The optional credential that can be used to authenticate to the software component.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.datatypes.Credential": {
+                "label": "tosca.datatypes.Credential"
               }
-            }
+            },
+            "required": false
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/component_version": {
-            "description": "Domain-specific software component version.",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/version": {
-                  "label": "version"
-                }
-              },
-              "required": false
-            }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/h2tk1f9lv7h5d722a7tr5bvmqk/docker_user": {
+          "description": "Docker Hub login",
+          "specification": {
+            "type": "string",
+            "required": false,
+            "default": ""
           }
         }
-      ],
-      "attributes": [
-        {
-          "https://www.sodalite.eu/ontologies/tosca/state": {
-            "description": "The state of the node instance.",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
-              }
-            }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/h2tk1f9lv7h5d722a7tr5bvmqk/docker_pass": {
+          "description": "Docker Hub password",
+          "specification": {
+            "required": false,
+            "default": "",
+            "type": "string"
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/registry_ip": {
-            "description": "IP of the SODALITE docker registry",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+        }
+      }
+    ],
+    "attributes": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/tosca_name": {
+          "description": "Reflects the name of the Node Template as defined in the TOSCA service template. This name is not unique to the realized instance model of corresponding deployed application as each template in the model can result in one or more instances (e.g., scaled) when orchestrated to a provider environment.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/tosca_name": {
-            "description": "Reflects the name of the Node Template as defined in the TOSCA service template. This name is not unique to the realized instance model of corresponding deployed application as each template in the model can result in one or more instances (e.g., scaled) when orchestrated to a provider environment.",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/tosca_id": {
+          "description": "A unique identifier of the realized instance of a Node Template that derives from any TOSCA normative type",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/tosca_id": {
-            "description": "A unique identifier of the realized instance of a Node Template that derives from any TOSCA normative type",
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/state": {
+          "description": "The state of the node instance.",
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/string": {
+                "label": "string"
               }
             }
           }
         }
-      ],
-      "requirements": [
-        {
-          "https://www.sodalite.eu/ontologies/tosca/dependency": {
-            "specification": {
-              "capability": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
-                  "label": "tosca.capabilities.Node"
-                }
-              },
-              "relationship": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.DependsOn": {
-                  "label": "tosca.relationships.DependsOn"
-                }
-              },
-              "occurrences": {
-                "max": "UNBOUNDED",
-                "min": 0
-              },
-              "node": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Root": {
-                  "label": "tosca.nodes.Root"
-                }
+      }
+    ],
+    "requirements": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/host": {
+          "specification": {
+            "capability": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Compute": {
+                "label": "tosca.capabilities.Compute"
               }
-            }
-          }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/host": {
-            "specification": {
-              "relationship": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.HostedOn": {
-                  "label": "tosca.relationships.HostedOn"
-                }
-              },
-              "capability": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Compute": {
-                  "label": "tosca.capabilities.Compute"
-                }
-              },
-              "node": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Compute": {
-                  "label": "tosca.nodes.Compute"
-                }
+            },
+            "node": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Compute": {
+                "label": "tosca.nodes.Compute"
+              }
+            },
+            "relationship": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.HostedOn": {
+                "label": "tosca.relationships.HostedOn"
               }
             }
           }
         }
-      ],
-      "capabilities": [
-        {
-          "https://www.sodalite.eu/ontologies/tosca/feature": {
-            "specification": {
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
-                  "label": "tosca.capabilities.Node"
-                }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/dependency": {
+          "specification": {
+            "occurrences": [
+              "0",
+              "UNBOUNDED"
+            ],
+            "relationship": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.relationships.DependsOn": {
+                "label": "tosca.relationships.DependsOn"
+              }
+            },
+            "node": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.nodes.Root": {
+                "label": "tosca.nodes.Root"
+              }
+            },
+            "capability": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
+                "label": "tosca.capabilities.Node"
               }
             }
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/tosca/host": {
-            "specification": {
-              "valid_source_types": ["sodalite.nodes.DockerizedComponent"],
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
-                  "label": "tosca.capabilities.Node"
-                }
+        }
+      }
+    ],
+    "capabilities": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/feature": {
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.capabilities.Node": {
+                "label": "tosca.capabilities.Node"
               }
             }
           }
         }
-      ],
-      "interfaces": [
-        {
-          "https://www.sodalite.eu/ontologies/tosca/Standard": {
-            "specification": {
-              "delete": {
+      }
+    ],
+    "interfaces": [
+      {
+        "https://www.sodalite.eu/ontologies/tosca/Standard": {
+          "specification": {
+            "type": {
+              "https://www.sodalite.eu/ontologies/tosca/tosca.interfaces.node.lifecycle.Standard": {
+                "label": "tosca.interfaces.node.lifecycle.Standard"
+              }
+            },
+            "operations": {
+              "create": {
                 "implementation": {
-                  "primary": "http://160.40.52.200:8084/Ansibles/playbooks/docker/destroy_docker_host.yml"
+                  "primary": {
+                    "url": "http://160.40.52.200:8084/Ansibles/7c81cd34-aa8e-4666-a978-c874557278fe",
+                    "path": "/home/yosu/Projects/Sodalite/Git/iac-management/use-cases/modules/docker/playbooks/login_user.yml"
+                  }
                 },
                 "inputs": {
-                  "registry_ip": "{ default: { get_property: [ SELF, registry_ip ] } }"
+                  "docker_registry_url": {
+                    "default": {
+                      "get_property": {
+                        "entity": "SELF",
+                        "property": "docker_registry_url"
+                      }
+                    }
+                  },
+                  "docker_pass": {
+                    "default": {
+                      "get_property": {
+                        "entity": "SELF",
+                        "property": "docker_pass"
+                      }
+                    }
+                  },
+                  "docker_user": {
+                    "default": {
+                      "get_property": {
+                        "entity": "SELF",
+                        "property": "docker_user"
+                      }
+                    }
+                  }
                 }
               },
-              "create": {
+              "delete": {
                 "inputs": {
-                  "registry_ip": "{ default: { get_property: [ SELF, registry_ip ] } }",
-                  "public_ipv4_address": "{ default:  { get_attribute: [ SELF, host, public_address ] } }"
+                  "docker_registry_url": {
+                    "default": {
+                      "get_property": {
+                        "property": "docker_registry_url",
+                        "entity": "SELF"
+                      }
+                    }
+                  }
                 },
                 "implementation": {
-                  "primary": "http://160.40.52.200:8084/Ansibles/playbooks/docker/create_docker_host.yml"
-                }
-              },
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.interfaces.node.lifecycle.Standard": {
-                  "label": "tosca.interfaces.node.lifecycle.Standard"
+                  "primary": {
+                    "url": "http://160.40.52.200:8084/Ansibles/6aedac32-1dd9-445d-8e05-5d02bcf8e580",
+                    "path": "/home/yosu/Projects/Sodalite/Git/iac-management/use-cases/modules/docker/playbooks/logout_user.yml"
+                  }
                 }
               }
             }
           }
         }
-      ]
-    },
-    "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/sodalite.nodes.OpenStack.SecurityRule": {
-      "type": "https://www.sodalite.eu/ontologies/tosca/tosca.datatypes.Root",
-      "isNodeTemplate": false,
-      "properties": [
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/protocol": {
-            "specification": {
-              "constraints": {
-                "valid_values": ["tcp", "udp", "icmp"]
-              },
-              "required": true,
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
-              },
-              "default": "tcp"
-            }
+      }
+    ]
+  },
+  "https://www.sodalite.eu/ontologies/workspace/1/i33oic0aohevnjrr7gibsjt5cv/sodalite.datatypes.OpenStack.SecurityRule": {
+    "type": "https://www.sodalite.eu/ontologies/tosca/tosca.datatypes.Root",
+    "isNodeTemplate": false,
+    "properties": [
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/i33oic0aohevnjrr7gibsjt5cv/remote_ip_prefix": {
+          "specification": {
+            "default": "0.0.0.0/0",
+            "required": true,
+            "type": "string"
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/port_range_min": {
-            "specification": {
-              "required": true,
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.datatypes.network.PortDef": {
-                  "label": "tosca.datatypes.network.PortDef"
-                }
-              }
-            }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/i33oic0aohevnjrr7gibsjt5cv/port_range_min": {
+          "specification": {
+            "type": "tosca.datatypes.network.PortDef",
+            "required": true
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/remote_ip_prefix": {
-            "specification": {
-              "required": true,
-              "default": "0.0.0.0/0",
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/string": {
-                  "label": "string"
-                }
-              }
-            }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/workspace/1/i33oic0aohevnjrr7gibsjt5cv/port_range_max": {
+          "specification": {
+            "required": true,
+            "type": "tosca.datatypes.network.PortDef"
           }
-        },
-        {
-          "https://www.sodalite.eu/ontologies/snow-vehicle/tier1/port_range_max": {
-            "specification": {
-              "required": true,
-              "type": {
-                "https://www.sodalite.eu/ontologies/tosca/tosca.datatypes.network.PortDef": {
-                  "label": "tosca.datatypes.network.PortDef"
-                }
-              }
+        }
+      },
+      {
+        "https://www.sodalite.eu/ontologies/tosca/protocol": {
+          "specification": {
+            "default": "tcp",
+            "type": "string",
+            "required": true,
+            "constraints": {
+              "valid_values": [
+                "tcp",
+                "udp",
+                "icmp"
+              ]
             }
           }
         }
-      ]
-    }
+      }
+    ]
   }
-}
+}
\ No newline at end of file
diff --git a/test/test_parser.py b/test/test_parser.py
index 3149954..75d601e 100644
--- a/test/test_parser.py
+++ b/test/test_parser.py
@@ -1,22 +1,58 @@
 # import unittest
 # target = __import__("src")
-import pytest
 import json
 from src import parse
-#
+
 
 def test_parser():
-    expected = [
-        'http://160.40.52.200:8084/Ansibles/playbooks/docker/dockerized_component_undeploy.yml',
-        'http://160.40.52.200:8084/Ansibles/playbooks/docker/dockerized_component_deploy.yml',
-        'http://160.40.52.200:8084/Ansibles/playbooks/openstack/vm/delete.yml',
-        'http://160.40.52.200:8084/Ansibles/playbooks/openstack/vm/create.yml',
-        'http://160.40.52.200:8084/Ansibles/playbooks/openstack/security-rule/create.yml',
-        'http://160.40.52.200:8084/Ansibles/playbooks/openstack/security-rule/delete.yml',
-        'http://160.40.52.200:8084/Ansibles/playbooks/docker/destroy_docker_host.yml',
-        'http://160.40.52.200:8084/Ansibles/playbooks/docker/create_docker_host.yml']
+    # expected ansible_files, expected ansible_paths, expected dependency_files, expected dependency_paths
+    expected = (['http://160.40.52.200:8084/Ansibles/2d57b396-0e23-479e-972e-49f1ee33417c',
+                 'http://160.40.52.200:8084/Ansibles/e8f67cde-c4b5-4beb-94a8-5c08e94cac22',
+                 'http://160.40.52.200:8084/Ansibles/3828dab9-220f-4f38-b425-59a459315f4c',
+                 'http://160.40.52.200:8084/Ansibles/045b57b7-2a2b-4490-98b1-764516af2a65',
+                 'http://160.40.52.200:8084/Ansibles/a9ffd599-fb40-4a19-a9d6-30db5407d1ae',
+                 'http://160.40.52.200:8084/Ansibles/b4cc6090-4790-468d-9e7b-8d6ce85e0424',
+                 'http://160.40.52.200:8084/Ansibles/f7913d15-7974-4241-99b3-cfd6d0ec793b',
+                 'http://160.40.52.200:8084/Ansibles/d60fe710-7d65-4cca-aa8e-737eab3e3a26',
+                 'http://160.40.52.200:8084/Ansibles/2461b289-4435-4031-a999-1de0d0a6c5ff',
+                 'http://160.40.52.200:8084/Ansibles/520afe9e-b083-444e-9b93-74765c7e90ac',
+                 'http://160.40.52.200:8084/Ansibles/f7180043-ff5f-4693-be05-014f90b7977c',
+                 'http://160.40.52.200:8084/Ansibles/acbb3d50-f145-4279-91e9-be4d0aa5733a',
+                 'http://160.40.52.200:8084/Ansibles/08fae0a3-5b2b-421e-b61f-c5a97e43e07d',
+                 'http://160.40.52.200:8084/Ansibles/73b225c6-0cdd-4f77-8345-8702e3535322',
+                 'http://160.40.52.200:8084/Ansibles/5341320a-25ea-4b47-9fa9-afa7528da585',
+                 'http://160.40.52.200:8084/Ansibles/7c81cd34-aa8e-4666-a978-c874557278fe',
+                 'http://160.40.52.200:8084/Ansibles/6aedac32-1dd9-445d-8e05-5d02bcf8e580'],
+
+                ['2d57b396-0e23-479e-972e-49f1ee33417c_configure_demo.yml',
+                 'e8f67cde-c4b5-4beb-94a8-5c08e94cac22_vm_create.yml',
+                 '3828dab9-220f-4f38-b425-59a459315f4c_vm_delete.yml',
+                 '045b57b7-2a2b-4490-98b1-764516af2a65_add_container.yml',
+                 'a9ffd599-fb40-4a19-a9d6-30db5407d1ae_remove_container.yml',
+                 'b4cc6090-4790-468d-9e7b-8d6ce85e0424_add_network.yml',
+                 'f7913d15-7974-4241-99b3-cfd6d0ec793b_remove_network.yml',
+                 'd60fe710-7d65-4cca-aa8e-737eab3e3a26_security_rule_create.yml',
+                 '2461b289-4435-4031-a999-1de0d0a6c5ff_security_rule_delete.yml',
+                 '520afe9e-b083-444e-9b93-74765c7e90ac_add_volume.yml',
+                 'f7180043-ff5f-4693-be05-014f90b7977c_remove_volume.yml',
+                 'acbb3d50-f145-4279-91e9-be4d0aa5733a_create_docker_host.yml',
+                 '08fae0a3-5b2b-421e-b61f-c5a97e43e07d_delete_docker_host.yml',
+                 '73b225c6-0cdd-4f77-8345-8702e3535322_add_cert.yml',
+                 '5341320a-25ea-4b47-9fa9-afa7528da585_remove_cert.yml',
+                 '7c81cd34-aa8e-4666-a978-c874557278fe_login_user.yml',
+                 '6aedac32-1dd9-445d-8e05-5d02bcf8e580_logout_user.yml'],
+
+                ['http://160.40.52.200:8084/Ansibles/e008e756-1380-4c85-acb2-91f34ea3115d',
+                 'http://160.40.52.200:8084/Ansibles/93e3668b-2edd-4a4a-8f9a-999213d14a40'],
+
+                ['config.json.tmpl', 'ca.crt'])
 
     with open('test/fixture.json') as f:
         t = json.load(f)
-        # assert parse(t["data"]) == expected
-        assert set(parse(t["data"])) == set(expected)
+        parsed_data = parse(t)
+        pds = []
+        exs = []
+        for i in range(0, 3):
+            pds.append(set(parsed_data[i]))
+            exs.append(set(expected[i]))
+        assert exs == pds