diff --git a/examples/unfurl-technology---shop---baseline-maintenance/variable-service-template.yaml b/examples/unfurl-technology---shop---baseline-maintenance/variable-service-template.yaml index 7876824f09..874f58810b 100644 --- a/examples/unfurl-technology---shop---baseline-maintenance/variable-service-template.yaml +++ b/examples/unfurl-technology---shop---baseline-maintenance/variable-service-template.yaml @@ -1,4 +1,4 @@ -tosca_definitions_version: tosca_variability_1_0_rc_2 +tosca_definitions_version: tosca_variability_1_0_rc_3 imports: - lib/types.yaml diff --git a/examples/unfurl-technology---shop---baseline-original/variable-service-template.yaml b/examples/unfurl-technology---shop---baseline-original/variable-service-template.yaml index 899c74ffa9..e8ac02dfe4 100644 --- a/examples/unfurl-technology---shop---baseline-original/variable-service-template.yaml +++ b/examples/unfurl-technology---shop---baseline-original/variable-service-template.yaml @@ -1,4 +1,4 @@ -tosca_definitions_version: tosca_variability_1_0_rc_2 +tosca_definitions_version: tosca_variability_1_0_rc_3 imports: - lib/types.yaml @@ -147,7 +147,6 @@ topology_template: - database_password: {get_input: database_password} requirements: - host: mysql_dbms_terraform - artifacts: mysql_dbms_ansible: type: mysql.dbms diff --git a/examples/unfurl-technology---shop---plus-maintenance-automated/scripts/study-003.txt b/examples/unfurl-technology---shop---plus-maintenance-automated/scripts/study-003.txt new file mode 100644 index 0000000000..7fc645a953 --- /dev/null +++ b/examples/unfurl-technology---shop---plus-maintenance-automated/scripts/study-003.txt @@ -0,0 +1,177 @@ + +The technology rules of our case study. Qualities range from bad (0) to good (1). +┌─────────┬──────────────┬────────────────────────┬─────────────────┬───────────────────────────────────────────────────────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ (index) │ Technology │ Component │ Artifact │ Hosting │ Quality │ Reason │ +├─────────┼──────────────┼────────────────────────┼─────────────────┼───────────────────────────────────────────────────────┼─────────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ +│ 0 │ 'ansible' │ 'docker.engine' │ undefined │ [ 'local.machine' ] │ 1 │ 'Primary use case due to the specialization of Ansible.' │ +│ 1 │ 'terraform' │ 'docker.engine' │ undefined │ [ 'local.machine' ] │ 0 │ 'Ansible is more specialized. Also using provisioners is a "last resort".' │ +│ 2 │ 'ansible' │ 'docker.engine' │ undefined │ [ 'remote.machine' ] │ 1 │ 'Primary use case due to the specialization of Ansible.' │ +│ 3 │ 'terraform' │ 'docker.engine' │ undefined │ [ 'remote.machine' ] │ 0 │ 'Ansible is more specialized. Also using provisioners is a "last resort".' │ +│ 4 │ 'ansible' │ 'gcp.service' │ undefined │ [] │ 1 │ 'Ansible provides a declarative module' │ +│ 5 │ 'terraform' │ 'gcp.service' │ undefined │ [] │ 1 │ 'Terraform provides a declarative module.' │ +│ 6 │ 'ansible' │ 'ingress' │ undefined │ [ 'kubernetes.cluster' ] │ 0.5 │ 'Kubernetes is more specialized.' │ +│ 7 │ 'kubernetes' │ 'ingress' │ undefined │ [ 'kubernetes.cluster' ] │ 1 │ 'Kubernetes is the underlying technology.' │ +│ 8 │ 'terraform' │ 'ingress' │ undefined │ [ 'kubernetes.cluster' ] │ 0.5 │ 'Kubernetes is more specialized.' │ +│ 9 │ 'ansible' │ 'ingress' │ undefined │ [ 'local.machine' ] │ 1 │ 'Primary use case due to the specialization of Ansible.' │ +│ 10 │ 'terraform' │ 'ingress' │ undefined │ [ 'local.machine' ] │ 0 │ 'Ansible is more specialized. Also using provisioners is a "last resort".' │ +│ 11 │ 'ansible' │ 'ingress' │ undefined │ [ 'remote.machine' ] │ 1 │ 'Primary use case due to the specialization of Ansible.' │ +│ 12 │ 'terraform' │ 'ingress' │ undefined │ [ 'remote.machine' ] │ 0 │ 'Ansible is more specialized. Also using provisioners is a "last resort".' │ +│ 13 │ 'ansible' │ 'mysql.database' │ undefined │ [ 'mysql.dbms', 'docker.engine', 'local.machine' ] │ 1 │ 'Primary use case due to the specialization of Ansible.' │ +│ 14 │ 'compose' │ 'mysql.database' │ undefined │ [ 'mysql.dbms', 'docker.engine', 'local.machine' ] │ 0 │ 'One-time use docker container ("fake Kubernetes job") with imperative parts, while other technologies provide declarative modules.' │ +│ 15 │ 'terraform' │ 'mysql.database' │ undefined │ [ 'mysql.dbms', 'docker.engine', 'local.machine' ] │ 1 │ 'Terraform provides a declarative module.' │ +│ 16 │ 'ansible' │ 'mysql.database' │ undefined │ [ 'mysql.dbms', 'docker.engine', 'remote.machine' ] │ 1 │ 'Primary use case due to the specialization of Ansible.' │ +│ 17 │ 'compose' │ 'mysql.database' │ undefined │ [ 'mysql.dbms', 'docker.engine', 'remote.machine' ] │ 0 │ 'One-time use docker container ("fake Kubernetes job") with imperative parts, while other technologies provide declarative modules.' │ +│ 18 │ 'terraform' │ 'mysql.database' │ undefined │ [ 'mysql.dbms', 'docker.engine', 'remote.machine' ] │ 0.5 │ 'Terraform provides a declarative module. However, Terraform requires an SSH workaround. Ansible is more specialized.' │ +│ 19 │ 'ansible' │ 'mysql.database' │ undefined │ [ 'mysql.dbms', 'gcp.cloudsql' ] │ 0.5 │ 'Primary use case due to the specialization of Ansible. However, need to install and handle GCP CloudSQL Proxy, while the corresponding Terraform module already provides this.' │ +│ 20 │ 'terraform' │ 'mysql.database' │ undefined │ [ 'mysql.dbms', 'gcp.cloudsql' ] │ 1 │ 'Terraform provides a declarative module.' │ +│ 21 │ 'ansible' │ 'mysql.database' │ undefined │ [ 'mysql.dbms', 'kubernetes.cluster' ] │ 1 │ 'Primary use case due to the specialization of Ansible.' │ +│ 22 │ 'kubernetes' │ 'mysql.database' │ undefined │ [ 'mysql.dbms', 'kubernetes.cluster' ] │ 0 │ 'Kubernetes Job with imperative parts, while declarative other technologies provide declarative modules.' │ +│ 23 │ 'terraform' │ 'mysql.database' │ undefined │ [ 'mysql.dbms', 'kubernetes.cluster' ] │ 0 │ 'Ansible is more specialized.' │ +│ 24 │ 'ansible' │ 'mysql.database' │ undefined │ [ 'mysql.dbms', 'local.machine' ] │ 1 │ 'Primary use case due to the specialization of Ansible.' │ +│ 25 │ 'terraform' │ 'mysql.database' │ undefined │ [ 'mysql.dbms', 'local.machine' ] │ 1 │ 'Terraform provides a declarative module.' │ +│ 26 │ 'ansible' │ 'mysql.database' │ undefined │ [ 'mysql.dbms', 'remote.machine' ] │ 1 │ 'Primary use case due to the specialization of Ansible.' │ +│ 27 │ 'terraform' │ 'mysql.database' │ undefined │ [ 'mysql.dbms', 'remote.machine' ] │ 0.5 │ 'Terraform provides a declarative module. However, Terraform requires an SSH workaround. Ansible is more specialized.' │ +│ 28 │ 'ansible' │ 'mysql.dbms' │ 'dbms.image' │ [ 'docker.engine', 'local.machine' ] │ 0.5 │ 'Docker Compose is more specialized' │ +│ 29 │ 'compose' │ 'mysql.dbms' │ 'dbms.image' │ [ 'docker.engine', 'local.machine' ] │ 1 │ 'Docker is the underlying technology.' │ +│ 30 │ 'terraform' │ 'mysql.dbms' │ 'dbms.image' │ [ 'docker.engine', 'local.machine' ] │ 0.5 │ 'Docker Compose is more specialized.' │ +│ 31 │ 'ansible' │ 'mysql.dbms' │ 'dbms.image' │ [ 'docker.engine', 'remote.machine' ] │ 0.5 │ 'Docker Compose is more specialized' │ +│ 32 │ 'compose' │ 'mysql.dbms' │ 'dbms.image' │ [ 'docker.engine', 'remote.machine' ] │ 1 │ 'Docker is the underlying technology.' │ +│ 33 │ 'terraform' │ 'mysql.dbms' │ 'dbms.image' │ [ 'docker.engine', 'remote.machine' ] │ 0.5 │ 'Docker Compose is more specialized.' │ +│ 34 │ 'ansible' │ 'mysql.dbms' │ 'dbms.image' │ [ 'gcp.cloudsql' ] │ 1 │ 'Primary use case due to the specialization of Ansible.' │ +│ 35 │ 'terraform' │ 'mysql.dbms' │ 'dbms.image' │ [ 'gcp.cloudsql' ] │ 1 │ 'Terraform provides a declarative module.' │ +│ 36 │ 'ansible' │ 'mysql.dbms' │ 'dbms.image' │ [ 'kubernetes.cluster' ] │ 0.5 │ 'Kubernetes is more specialized.' │ +│ 37 │ 'kubernetes' │ 'mysql.dbms' │ 'dbms.image' │ [ 'kubernetes.cluster' ] │ 1 │ 'Kubernetes is the underlying technology.' │ +│ 38 │ 'terraform' │ 'mysql.dbms' │ 'dbms.image' │ [ 'kubernetes.cluster' ] │ 0.5 │ 'Kubernetes is more specialized.' │ +│ 39 │ 'ansible' │ 'mysql.dbms' │ 'dbms.image' │ [ 'local.machine' ] │ 1 │ 'Primary use case due to the specialization of Ansible.' │ +│ 40 │ 'terraform' │ 'mysql.dbms' │ 'dbms.image' │ [ 'local.machine' ] │ 0 │ 'Ansible is more specialized. Also using provisioners is a "last resort".' │ +│ 41 │ 'ansible' │ 'mysql.dbms' │ 'dbms.image' │ [ 'remote.machine' ] │ 1 │ 'Primary use case due to the specialization of Ansible.' │ +│ 42 │ 'terraform' │ 'mysql.dbms' │ 'dbms.image' │ [ 'remote.machine' ] │ 0 │ 'Ansible is more specialized. Also using provisioners is a "last resort".' │ +│ 43 │ 'ansible' │ 'object.storage' │ undefined │ [ 'gcp.cloudstorage' ] │ 1 │ 'Primary use case due to the specialization of Ansible.' │ +│ 44 │ 'terraform' │ 'object.storage' │ undefined │ [ 'gcp.cloudstorage' ] │ 1 │ 'Terraform provides a declarative module.' │ +│ 45 │ 'ansible' │ 'object.storage' │ undefined │ [ 'minio.server', 'docker.engine', 'local.machine' ] │ 1 │ 'Primary use case due to the specialization of Ansible.' │ +│ 46 │ 'compose' │ 'object.storage' │ undefined │ [ 'minio.server', 'docker.engine', 'local.machine' ] │ 0 │ 'One-time use docker container ("fake Kubernetes job") with imperative parts, while other technologies provide declarative modules.' │ +│ 47 │ 'terraform' │ 'object.storage' │ undefined │ [ 'minio.server', 'docker.engine', 'local.machine' ] │ 1 │ 'Terraform provides a declarative module.' │ +│ 48 │ 'ansible' │ 'object.storage' │ undefined │ [ 'minio.server', 'docker.engine', 'remote.machine' ] │ 1 │ 'Primary use case due to the specialization of Ansible.' │ +│ 49 │ 'compose' │ 'object.storage' │ undefined │ [ 'minio.server', 'docker.engine', 'remote.machine' ] │ 0 │ 'One-time use docker container ("fake Kubernetes job") with imperative parts, while other technologies provide declarative modules.' │ +│ 50 │ 'terraform' │ 'object.storage' │ undefined │ [ 'minio.server', 'docker.engine', 'remote.machine' ] │ 0.5 │ 'Terraform provides a declarative module. However, Terraform requires an SSH workaround. Ansible is more specialized.' │ +│ 51 │ 'ansible' │ 'object.storage' │ undefined │ [ 'minio.server', 'kubernetes.cluster' ] │ 1 │ 'Primary use case due to the specialization of Ansible.' │ +│ 52 │ 'kubernetes' │ 'object.storage' │ undefined │ [ 'minio.server', 'kubernetes.cluster' ] │ 0 │ 'Kubernetes Job with imperative parts, while declarative other technologies provide declarative modules.' │ +│ 53 │ 'terraform' │ 'object.storage' │ undefined │ [ 'minio.server', 'kubernetes.cluster' ] │ 0 │ 'Ansible is more specialized.' │ +│ 54 │ 'ansible' │ 'redis.server' │ 'cache.image' │ [ 'docker.engine', 'local.machine' ] │ 0.5 │ 'Docker Compose is more specialized.' │ +│ 55 │ 'compose' │ 'redis.server' │ 'cache.image' │ [ 'docker.engine', 'local.machine' ] │ 1 │ 'Docker is the underlying technology.' │ +│ 56 │ 'terraform' │ 'redis.server' │ 'cache.image' │ [ 'docker.engine', 'local.machine' ] │ 0.5 │ 'Docker Compose is more specialized.' │ +│ 57 │ 'ansible' │ 'redis.server' │ 'cache.image' │ [ 'docker.engine', 'remote.machine' ] │ 0.5 │ 'Docker Compose is more specialized.' │ +│ 58 │ 'compose' │ 'redis.server' │ 'cache.image' │ [ 'docker.engine', 'remote.machine' ] │ 1 │ 'Docker is the underlying technology.' │ +│ 59 │ 'terraform' │ 'redis.server' │ 'cache.image' │ [ 'docker.engine', 'remote.machine' ] │ 0.5 │ 'Docker Compose is more specialized.' │ +│ 60 │ 'ansible' │ 'redis.server' │ 'cache.image' │ [ 'gcp.memorystore' ] │ 1 │ 'Primary use case due to the specialization of Ansible.' │ +│ 61 │ 'terraform' │ 'redis.server' │ 'cache.image' │ [ 'gcp.memorystore' ] │ 1 │ 'Terraform provides a declarative module.' │ +│ 62 │ 'ansible' │ 'redis.server' │ 'cache.image' │ [ 'kubernetes.cluster' ] │ 0.5 │ 'Kubernetes is more specialized.' │ +│ 63 │ 'kubernetes' │ 'redis.server' │ 'cache.image' │ [ 'kubernetes.cluster' ] │ 1 │ 'Kubernetes is the underlying technology.' │ +│ 64 │ 'terraform' │ 'redis.server' │ 'cache.image' │ [ 'kubernetes.cluster' ] │ 0.5 │ 'Kubernetes is more specialized.' │ +│ 65 │ 'ansible' │ 'service.application' │ 'docker.image' │ [ 'docker.engine', 'local.machine' ] │ 0.5 │ 'Docker Compose is more specialized.' │ +│ 66 │ 'compose' │ 'service.application' │ 'docker.image' │ [ 'docker.engine', 'local.machine' ] │ 1 │ 'Docker is the underlying technology.' │ +│ 67 │ 'terraform' │ 'service.application' │ 'docker.image' │ [ 'docker.engine', 'local.machine' ] │ 0.5 │ 'Docker Compose is more specialized.' │ +│ 68 │ 'ansible' │ 'service.application' │ 'docker.image' │ [ 'docker.engine', 'remote.machine' ] │ 0.5 │ 'Docker Compose is more specialized.' │ +│ 69 │ 'compose' │ 'service.application' │ 'docker.image' │ [ 'docker.engine', 'remote.machine' ] │ 1 │ 'Docker is the underlying technology.' │ +│ 70 │ 'terraform' │ 'service.application' │ 'docker.image' │ [ 'docker.engine', 'remote.machine' ] │ 0.5 │ 'Docker Compose is more specialized.' │ +│ 71 │ 'ansible' │ 'service.application' │ 'docker.image' │ [ 'gcp.cloudrun' ] │ 0 │ 'Custom module with imperative parts, while Terraform provides a declarative module.' │ +│ 72 │ 'terraform' │ 'service.application' │ 'docker.image' │ [ 'gcp.cloudrun' ] │ 1 │ 'Terraform provides a declarative module.' │ +│ 73 │ 'ansible' │ 'service.application' │ 'docker.image' │ [ 'kubernetes.cluster' ] │ 0.5 │ 'Kubernetes is more specialized.' │ +│ 74 │ 'kubernetes' │ 'service.application' │ 'docker.image' │ [ 'kubernetes.cluster' ] │ 1 │ 'Kubernetes is the underlying technology.' │ +│ 75 │ 'terraform' │ 'service.application' │ 'docker.image' │ [ 'kubernetes.cluster' ] │ 0.5 │ 'Kubernetes is more specialized.' │ +│ 76 │ 'ansible' │ 'service.application' │ 'tar.archive' │ [ '*', 'local.machine' ] │ 1 │ 'Primary use case due to the specialization of Ansible. Special integration for systemd.' │ +│ 77 │ 'terraform' │ 'service.application' │ 'tar.archive' │ [ '*', 'local.machine' ] │ 0 │ 'Ansible is more specialized. Also using provisioners is a "last resort".' │ +│ 78 │ 'ansible' │ 'service.application' │ 'tar.archive' │ [ '*', 'remote.machine' ] │ 1 │ 'Primary use case due to the specialization of Ansible. Special integration for systemd.' │ +│ 79 │ 'terraform' │ 'service.application' │ 'tar.archive' │ [ '*', 'remote.machine' ] │ 0 │ 'Ansible is more specialized. Also using provisioners is a "last resort".' │ +│ 80 │ 'ansible' │ 'service.application' │ 'zip.archive' │ [ '*', 'local.machine' ] │ 1 │ 'Primary use case due to the specialization of Ansible. Special integration for systemd.' │ +│ 81 │ 'terraform' │ 'service.application' │ 'zip.archive' │ [ '*', 'local.machine' ] │ 0 │ 'Ansible is more specialized. Also using provisioners is a "last resort".' │ +│ 82 │ 'ansible' │ 'service.application' │ 'zip.archive' │ [ '*', 'remote.machine' ] │ 1 │ 'Primary use case due to the specialization of Ansible. Special integration for systemd.' │ +│ 83 │ 'terraform' │ 'service.application' │ 'zip.archive' │ [ '*', 'remote.machine' ] │ 0 │ 'Ansible is more specialized. Also using provisioners is a "last resort".' │ +│ 84 │ 'ansible' │ 'service.application' │ 'zip.archive' │ [ 'gcp.appengine' ] │ 0 │ 'Custom module with imperative parts, while Terraform provides a declarative module.' │ +│ 85 │ 'terraform' │ 'service.application' │ 'zip.archive' │ [ 'gcp.appengine' ] │ 1 │ 'Terraform provides a declarative module.' │ +│ 86 │ 'ansible' │ 'software.application' │ 'apt.package' │ [ '*', 'local.machine' ] │ 1 │ 'Primary use case due to the specialization of Ansible.' │ +│ 87 │ 'terraform' │ 'software.application' │ 'apt.package' │ [ '*', 'local.machine' ] │ 0 │ 'Ansible is more specialized. Also using provisioners is a "last resort".' │ +│ 88 │ 'ansible' │ 'software.application' │ 'apt.package' │ [ '*', 'remote.machine' ] │ 1 │ 'Primary use case due to the specialization of Ansible.' │ +│ 89 │ 'terraform' │ 'software.application' │ 'apt.package' │ [ '*', 'remote.machine' ] │ 0 │ 'Ansible is more specialized. Also using provisioners is a "last resort".' │ +│ 90 │ 'ansible' │ 'software.application' │ 'tar.archive' │ [ '*', 'local.machine' ] │ 0.5 │ 'While this is a primary use case due to the specialization of Ansible, we must rely on scripts. More specialized types should be used, e.g., service.application.' │ +│ 91 │ 'terraform' │ 'software.application' │ 'tar.archive' │ [ '*', 'local.machine' ] │ 0 │ 'Ansible is more specialized. Also using provisioners is a "last resort".' │ +│ 92 │ 'ansible' │ 'software.application' │ 'tar.archive' │ [ '*', 'remote.machine' ] │ 0.5 │ 'While this is a primary use case due to the specialization of Ansible, we must rely on scripts. More specialized types should be used, e.g., "service.application".' │ +│ 93 │ 'terraform' │ 'software.application' │ 'tar.archive' │ [ '*', 'remote.machine' ] │ 0 │ 'Ansible is more specialized. Also using provisioners is a "last resort".' │ +│ 94 │ 'ansible' │ 'software.application' │ 'zip.archive' │ [ '*', 'local.machine' ] │ 0.5 │ 'While this is a primary use case due to the specialization of Ansible, we must rely on scripts. More specialized types should be used, e.g., service.application.' │ +│ 95 │ 'terraform' │ 'software.application' │ 'zip.archive' │ [ '*', 'local.machine' ] │ 0 │ 'Ansible is more specialized. Also using provisioners is a "last resort".' │ +│ 96 │ 'ansible' │ 'software.application' │ 'zip.archive' │ [ '*', 'remote.machine' ] │ 0.5 │ 'While this is a primary use case due to the specialization of Ansible, we must rely on scripts. More specialized types should be used, e.g., service.application.' │ +│ 97 │ 'terraform' │ 'software.application' │ 'zip.archive' │ [ '*', 'remote.machine' ] │ 0 │ 'Ansible is more specialized. Also using provisioners is a "last resort".' │ +│ 98 │ 'ansible' │ 'virtual.machine' │ 'machine.image' │ [ 'openstack.provider' ] │ 0.5 │ 'Terraform is more specialized.' │ +│ 99 │ 'terraform' │ 'virtual.machine' │ 'machine.image' │ [ 'openstack.provider' ] │ 1 │ 'Terraform provides a declarative module.' │ +└─────────┴──────────────┴────────────────────────┴─────────────────┴───────────────────────────────────────────────────────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ + +Metrics relevant when modeling the different scenarios +┌─────────┬────────────────────────────┬────────┬──────────┬────────────┬────────────────────────┬───────────────┐ +│ (index) │ scenario │ models │ elements │ conditions │ technology_assignments │ lines_of_code │ +├─────────┼────────────────────────────┼────────┼──────────┼────────────┼────────────────────────┼───────────────┤ +│ 0 │ 'EDMM "elastic"' │ 1 │ 42 │ 0 │ 7 │ 118 │ +│ 1 │ 'EDMM "kubernetes"' │ 1 │ 39 │ 0 │ 4 │ 108 │ +│ 2 │ 'EDMM "static"' │ 1 │ 60 │ 0 │ 6 │ 152 │ +│ 3 │ 'EDMM "static-large"' │ 1 │ 60 │ 0 │ 6 │ 152 │ +│ 4 │ 'EDMM Total' │ 4 │ 201 │ 0 │ 23 │ 530 │ +│ 5 │ 'VDMM Baseline Original' │ 1 │ 101 │ 6 │ 13 │ 264 │ +│ 6 │ 'VDMM+ Original Manual' │ 1 │ 80 │ 12 │ 13 │ 236 │ +│ 7 │ 'VDMM+ Original Automated' │ 1 │ 80 │ 6 │ 0 │ 213 │ +└─────────┴────────────────────────────┴────────┴──────────┴────────────┴────────────────────────┴───────────────┘ + +Absolute diff when modeling the different original scenarios +┌─────────┬─────────────────────────────────────────────────────┬─────────────────┬───────────────────┬─────────────────────┬─────────────────────────────────┬────────────────────────┐ +│ (index) │ scenario │ models_abs_diff │ elements_abs_diff │ conditions_abs_diff │ technology_assignments_abs_diff │ lines_of_code_abs_diff │ +├─────────┼─────────────────────────────────────────────────────┼─────────────────┼───────────────────┼─────────────────────┼─────────────────────────────────┼────────────────────────┤ +│ 0 │ 'VDMM Baseline Original - EDMM Total' │ -3 │ -100 │ 6 │ -10 │ -266 │ +│ 1 │ 'VDMM+ Original Manual - VDMM Baseline Original' │ 0 │ -21 │ 6 │ 0 │ -28 │ +│ 2 │ 'VDMM+ Original Automated - VDMM Baseline Original' │ 0 │ -21 │ 0 │ -13 │ -51 │ +└─────────┴─────────────────────────────────────────────────────┴─────────────────┴───────────────────┴─────────────────────┴─────────────────────────────────┴────────────────────────┘ + +Relative diff when modeling the different original scenarios +┌─────────┬─────────────────────────────────────────────────────┬─────────────────┬───────────────────┬─────────────────────┬─────────────────────────────────┬────────────────────────┐ +│ (index) │ scenario │ models_rel_diff │ elements_rel_diff │ conditions_rel_diff │ technology_assignments_rel_diff │ lines_of_code_rel_diff │ +├─────────┼─────────────────────────────────────────────────────┼─────────────────┼───────────────────┼─────────────────────┼─────────────────────────────────┼────────────────────────┤ +│ 0 │ 'VDMM Baseline Original / EDMM Total' │ 0.25 │ 0.5 │ Infinity │ 0.57 │ 0.5 │ +│ 1 │ 'VDMM+ Original Manual / VDMM Baseline Original' │ 1 │ 0.79 │ 2 │ 1 │ 0.89 │ +│ 2 │ 'VDMM+ Original Automated / VDMM Baseline Original' │ 1 │ 0.79 │ 1 │ 0 │ 0.81 │ +└─────────┴─────────────────────────────────────────────────────┴─────────────────┴───────────────────┴─────────────────────┴─────────────────────────────────┴────────────────────────┘ + +Qualities of the derived deployment models, i.e., the deployment variants, of the different scenarios ranging from bad (0) to good (1). +┌─────────┬────────────────┬────────┬─────────────┬─────────────┬────────────────┬─────────┬──────────────────┐ +│ (index) │ scenario │ expert │ non_expert │ random │ counting │ quality │ quality_counting │ +├─────────┼────────────────┼────────┼─────────────┼─────────────┼────────────────┼─────────┼──────────────────┤ +│ 0 │ 'elastic' │ 1 │ [ 0.79, 1 ] │ [ 0.79, 1 ] │ [ 0.79, 1 ] │ 1 │ 1 │ +│ 1 │ 'kubernetes' │ 1 │ [ 0.38, 1 ] │ [ 0.38, 1 ] │ [ 0.38, 0.75 ] │ 1 │ 1 │ +│ 2 │ 'static' │ 1 │ [ 0.17, 1 ] │ [ 0.17, 1 ] │ [ 0.25, 0.92 ] │ 1 │ 1 │ +│ 3 │ 'static-large' │ 1 │ [ 0.17, 1 ] │ [ 0.17, 1 ] │ [ 0.25, 0.92 ] │ 1 │ 1 │ +└─────────┴────────────────┴────────┴─────────────┴─────────────┴────────────────┴─────────┴──────────────────┘ + +Metrics relevant when modeling the maintenance scenario of our case study +┌─────────┬───────────────────────────────┬────────┬──────────┬────────────┬────────────────────────┬───────────────┐ +│ (index) │ scenario │ models │ elements │ conditions │ technology_assignments │ lines_of_code │ +├─────────┼───────────────────────────────┼────────┼──────────┼────────────┼────────────────────────┼───────────────┤ +│ 0 │ 'VDMM Baseline Maintenance' │ 1 │ 146 │ 20 │ 16 │ 380 │ +│ 1 │ 'VDMM+ Maintenance Manual' │ 1 │ 99 │ 23 │ 16 │ 295 │ +│ 2 │ 'VDMM+ Maintenance Automated' │ 1 │ 99 │ 12 │ 0 │ 263 │ +└─────────┴───────────────────────────────┴────────┴──────────┴────────────┴────────────────────────┴───────────────┘ + +Absolute diff from original to maintained +┌─────────┬──────────────────────────────────────────────────────────┬─────────────────┬───────────────────┬─────────────────────┬─────────────────────────────────┬────────────────────────┐ +│ (index) │ scenario │ models_abs_diff │ elements_abs_diff │ conditions_abs_diff │ technology_assignments_abs_diff │ lines_of_code_abs_diff │ +├─────────┼──────────────────────────────────────────────────────────┼─────────────────┼───────────────────┼─────────────────────┼─────────────────────────────────┼────────────────────────┤ +│ 0 │ 'VDMM Baseline Maintenance - VDMM Baseline Original' │ 0 │ 45 │ 14 │ 3 │ 116 │ +│ 1 │ 'VDMM+ Maintenance Manual - VDMM+ Original Manual' │ 0 │ 19 │ 11 │ 3 │ 59 │ +│ 2 │ 'VDMM+ Maintenance Automated - VDMM+ Original Automated' │ 0 │ 19 │ 6 │ 0 │ 50 │ +└─────────┴──────────────────────────────────────────────────────────┴─────────────────┴───────────────────┴─────────────────────┴─────────────────────────────────┴────────────────────────┘ + +Relative diff from the absolute diff from original to maintained +┌─────────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─────────────────┬───────────────────┬─────────────────────┬─────────────────────────────────┬────────────────────────┐ +│ (index) │ scenario │ models_rel_diff │ elements_rel_diff │ conditions_rel_diff │ technology_assignments_rel_diff │ lines_of_code_rel_diff │ +├─────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼─────────────────┼───────────────────┼─────────────────────┼─────────────────────────────────┼────────────────────────┤ +│ 0 │ '(VDMM+ Maintenance Manual - VDMM+ Original Manual) / (VDMM Baseline Maintenance - VDMM Baseline Original)' │ 1 │ 0.42 │ 0.79 │ 1 │ 0.51 │ +│ 1 │ '(VDMM+ Maintenance Automated - VDMM+ Original Automated) / (VDMM Baseline Maintenance - VDMM Baseline Original)' │ 1 │ 0.42 │ 0.43 │ 0 │ 0.43 │ +└─────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴─────────────────┴───────────────────┴─────────────────────┴─────────────────────────────────┴────────────────────────┘ + +CAUTION: Is this case study running with the latest implementation? + diff --git a/examples/unfurl-technology---shop---plus-maintenance-automated/variable-service-template.yaml b/examples/unfurl-technology---shop---plus-maintenance-automated/variable-service-template.yaml index 9287ccc499..1df0de9f5d 100644 --- a/examples/unfurl-technology---shop---plus-maintenance-automated/variable-service-template.yaml +++ b/examples/unfurl-technology---shop---plus-maintenance-automated/variable-service-template.yaml @@ -117,9 +117,11 @@ topology_template: - docker_image: type: docker.image file: ghcr.io/opentosca/opentosca-shop-demo@sha256:25ce63b1d399b7d311edc13195abc12d98be859fd32f36f3e96056b32c622b8d + conditions: {node_presence: kubernetes_cluster} - zip_archive: type: zip.archive file: files/shop.source.zip + conditions: {or: [{node_presence: nodejs_runtime}, {node_presence: gcp_appengine}]} shop_ingress: type: ingress diff --git a/examples/unfurl-technology---shop---plus-maintenance-manual/variable-service-template.yaml b/examples/unfurl-technology---shop---plus-maintenance-manual/variable-service-template.yaml index 208053aa70..9c26102fbf 100644 --- a/examples/unfurl-technology---shop---plus-maintenance-manual/variable-service-template.yaml +++ b/examples/unfurl-technology---shop---plus-maintenance-manual/variable-service-template.yaml @@ -127,7 +127,6 @@ topology_template: type: docker.image file: ghcr.io/opentosca/opentosca-shop-demo@sha256:25ce63b1d399b7d311edc13195abc12d98be859fd32f36f3e96056b32c622b8d conditions: {node_presence: kubernetes_cluster} - - zip_archive: type: zip.archive file: files/shop.source.zip