From e81e93558bf32e525440f60f09eae4a0a6ba335d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miles=20St=C3=B6tzner?= Date: Sun, 22 Sep 2024 22:03:15 +0200 Subject: [PATCH] drop input conditions at shop --- .../variable-service-template.yaml | 18 -- .../variable-service-template.yaml | 14 -- .../scripts/study-002.txt | 177 ++++++++++++++++++ 3 files changed, 177 insertions(+), 32 deletions(-) create mode 100644 examples/unfurl-technology---shop---plus-maintenance-automated/scripts/study-002.txt 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 b1b66c65a4..7876824f09 100644 --- a/examples/unfurl-technology---shop---baseline-maintenance/variable-service-template.yaml +++ b/examples/unfurl-technology---shop---baseline-maintenance/variable-service-template.yaml @@ -13,75 +13,57 @@ topology_template: os_network: type: string - conditions: {equal: [{variability_input: env}, STATIC]} os_ssh_key_name: type: string - conditions: {equal: [{variability_input: env}, STATIC]} os_ssh_user: type: string - conditions: {equal: [{variability_input: env}, STATIC]} os_ssh_key_file: type: string - conditions: {equal: [{variability_input: env}, STATIC]} os_region_name: type: string - conditions: {equal: [{variability_input: env}, STATIC]} os_auth_type: type: string - conditions: {equal: [{variability_input: env}, STATIC]} os_auth_url: type: string - conditions: {equal: [{variability_input: env}, STATIC]} os_identity_api_version: type: string - conditions: {equal: [{variability_input: env}, STATIC]} os_interface: type: string - conditions: {equal: [{variability_input: env}, STATIC]} os_application_credential_id: type: string - conditions: {equal: [{variability_input: env}, STATIC]} os_application_credential_secret: type: string - conditions: {equal: [{variability_input: env}, STATIC]} gcp_region: type: string - conditions: {equal: [{variability_input: env}, ELASTIC]} gcp_service_account_file: type: string - conditions: {equal: [{variability_input: env}, ELASTIC]} gcp_project: type: string - conditions: {equal: [{variability_input: env}, ELASTIC]} k8s_host: type: string - conditions: {equal: [{variability_input: env}, KUBERNETES]} k8s_ca_cert_file: type: string - conditions: {equal: [{variability_input: env}, KUBERNETES]} k8s_client_cert_file: type: string - conditions: {equal: [{variability_input: env}, KUBERNETES]} k8s_client_key_file: type: string - conditions: {equal: [{variability_input: env}, KUBERNETES]} variability: inputs: 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 600b1cfbaf..899c74ffa9 100644 --- a/examples/unfurl-technology---shop---baseline-original/variable-service-template.yaml +++ b/examples/unfurl-technology---shop---baseline-original/variable-service-template.yaml @@ -13,59 +13,45 @@ topology_template: os_network: type: string - conditions: {equal: [{variability_input: env}, STATIC]} os_ssh_key_name: type: string - conditions: {equal: [{variability_input: env}, STATIC]} os_ssh_user: type: string - conditions: {equal: [{variability_input: env}, STATIC]} os_ssh_key_file: type: string - conditions: {equal: [{variability_input: env}, STATIC]} os_region_name: type: string - conditions: {equal: [{variability_input: env}, STATIC]} os_auth_type: type: string - conditions: {equal: [{variability_input: env}, STATIC]} os_auth_url: type: string - conditions: {equal: [{variability_input: env}, STATIC]} os_identity_api_version: type: string - conditions: {equal: [{variability_input: env}, STATIC]} os_interface: type: string - conditions: {equal: [{variability_input: env}, STATIC]} os_application_credential_id: type: string - conditions: {equal: [{variability_input: env}, STATIC]} os_application_credential_secret: type: string - conditions: {equal: [{variability_input: env}, STATIC]} gcp_region: type: string - conditions: {equal: [{variability_input: env}, ELASTIC]} gcp_service_account_file: type: string - conditions: {equal: [{variability_input: env}, ELASTIC]} gcp_project: type: string - conditions: {equal: [{variability_input: env}, ELASTIC]} variability: inputs: diff --git a/examples/unfurl-technology---shop---plus-maintenance-automated/scripts/study-002.txt b/examples/unfurl-technology---shop---plus-maintenance-automated/scripts/study-002.txt new file mode 100644 index 0000000000..787349b24d --- /dev/null +++ b/examples/unfurl-technology---shop---plus-maintenance-automated/scripts/study-002.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 │ 265 │ +│ 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 │ -265 │ +│ 1 │ 'VDMM+ Original Manual - VDMM Baseline Original' │ 0 │ -21 │ 6 │ 0 │ -29 │ +│ 2 │ 'VDMM+ Original Automated - VDMM Baseline Original' │ 0 │ -21 │ 0 │ -13 │ -52 │ +└─────────┴─────────────────────────────────────────────────────┴─────────────────┴───────────────────┴─────────────────────┴─────────────────────────────────┴────────────────────────┘ + +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.8 │ +└─────────┴─────────────────────────────────────────────────────┴─────────────────┴───────────────────┴─────────────────────┴─────────────────────────────────┴────────────────────────┘ + +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 │ 296 │ +│ 2 │ 'VDMM+ Maintenance Automated' │ 1 │ 99 │ 9 │ 0 │ 261 │ +└─────────┴───────────────────────────────┴────────┴──────────┴────────────┴────────────────────────┴───────────────┘ + +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 │ 115 │ +│ 1 │ 'VDMM+ Maintenance Manual - VDMM+ Original Manual' │ 0 │ 19 │ 11 │ 3 │ 60 │ +│ 2 │ 'VDMM+ Maintenance Automated - VDMM+ Original Automated' │ 0 │ 19 │ 3 │ 0 │ 48 │ +└─────────┴──────────────────────────────────────────────────────────┴─────────────────┴───────────────────┴─────────────────────┴─────────────────────────────────┴────────────────────────┘ + +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.52 │ +│ 1 │ '(VDMM+ Maintenance Automated - VDMM+ Original Automated) / (VDMM Baseline Maintenance - VDMM Baseline Original)' │ 1 │ 0.42 │ 0.21 │ 0 │ 0.42 │ +└─────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴─────────────────┴───────────────────┴─────────────────────┴─────────────────────────────────┴────────────────────────┘ + +CAUTION: Is this case study running with the latest implementation? +