From 073fd54f63e8628b36e28c2c089710e14378dcce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miles=20St=C3=B6tzner?= Date: Fri, 15 Nov 2024 17:57:20 +0100 Subject: [PATCH 1/4] propose new qualities --- .../lib/technology-rules.yaml | 18 +- .../scripts/study-009.txt | 178 ++++++++++++++++++ .../lib/technology-rules.yaml | 18 +- .../scripts/study-003.txt | 176 +++++++++++++++++ .../lib/technology-rules.yaml | 18 +- .../scripts/study-004.txt | 178 ++++++++++++++++++ .../generators/gcp-service/ansible/index.ts | 2 +- .../remote-machine/terraform/index.ts | 2 +- .../mysql-dbms/gcp-cloudsql/ansible/index.ts | 2 +- .../kubernetes-cluster/terraform/index.ts | 2 +- .../dbms-image/gcp-cloudsql/ansible/index.ts | 2 +- .../gcp-cloudstorage/ansible/index.ts | 2 +- .../remote-machine/terraform/index.ts | 2 +- .../kubernetes-cluster/terraform/index.ts | 2 +- .../gcp-memorystore/ansible/index.ts | 2 +- 15 files changed, 568 insertions(+), 36 deletions(-) create mode 100644 examples/unfurl-technology---boutique---plus-maintenance-automated/scripts/study-009.txt create mode 100644 examples/unfurl-technology---industry---plus-maintenance-automated/scripts/study-003.txt create mode 100644 examples/unfurl-technology---shop---plus-maintenance-automated/scripts/study-004.txt diff --git a/examples/unfurl-technology---boutique---plus-maintenance-automated/lib/technology-rules.yaml b/examples/unfurl-technology---boutique---plus-maintenance-automated/lib/technology-rules.yaml index b2587923ee..6e5e4b23df 100644 --- a/examples/unfurl-technology---boutique---plus-maintenance-automated/lib/technology-rules.yaml +++ b/examples/unfurl-technology---boutique---plus-maintenance-automated/lib/technology-rules.yaml @@ -35,7 +35,7 @@ - technology: ansible component: gcp.service hosting: [] - weight: 1 + weight: 0 reason: Ansible provides a declarative module details: '"google.cloud.gcp_serviceusage_service" task' - technology: terraform @@ -139,14 +139,14 @@ - mysql.dbms - docker.engine - remote.machine - weight: 0.5 + weight: 0.75 reason: Terraform provides a declarative module. However, Terraform requires an SSH workaround. Ansible is more specialized. - technology: ansible component: mysql.database hosting: - mysql.dbms - gcp.cloudsql - weight: 0.5 + weight: 0 reason: 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. - technology: terraform component: mysql.database @@ -174,7 +174,7 @@ hosting: - mysql.dbms - kubernetes.cluster - weight: 0 + weight: 0.25 reason: Ansible is more specialized. - technology: ansible component: mysql.database @@ -263,7 +263,7 @@ artifact: dbms.image hosting: - gcp.cloudsql - weight: 1 + weight: 0 reason: Primary use case due to the specialization of Ansible. details: '"google.cloud.gcp_sql_instance" and "google.cloud.gcp_sql_user" tasks' - technology: terraform @@ -334,7 +334,7 @@ component: object.storage hosting: - gcp.cloudstorage - weight: 1 + weight: 0 reason: Primary use case due to the specialization of Ansible. - technology: terraform component: object.storage @@ -388,7 +388,7 @@ - minio.server - docker.engine - remote.machine - weight: 0.5 + weight: 0.75 reason: Terraform provides a declarative module. However, Terraform requires an SSH workaround. Ansible is more specialized. - technology: ansible component: object.storage @@ -409,7 +409,7 @@ hosting: - minio.server - kubernetes.cluster - weight: 0 + weight: 0.25 reason: Ansible is more specialized. - technology: ansible component: redis.server @@ -470,7 +470,7 @@ artifact: cache.image hosting: - gcp.memorystore - weight: 1 + weight: 0 reason: Primary use case due to the specialization of Ansible. - technology: terraform component: redis.server diff --git a/examples/unfurl-technology---boutique---plus-maintenance-automated/scripts/study-009.txt b/examples/unfurl-technology---boutique---plus-maintenance-automated/scripts/study-009.txt new file mode 100644 index 0000000000..903564b657 --- /dev/null +++ b/examples/unfurl-technology---boutique---plus-maintenance-automated/scripts/study-009.txt @@ -0,0 +1,178 @@ + +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 │ [] │ 0 │ '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.75 │ '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 │ '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.25 │ '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' ] │ 0 │ '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' ] │ 0 │ '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.75 │ '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.25 │ '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' ] │ 0 │ '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 "gcp"' │ 1 │ 212 │ 76 │ 14 │ 325 │ +│ 1 │ 'EDMM "kubernetes"' │ 1 │ 235 │ 84 │ 14 │ 355 │ +│ 2 │ 'EDMM "os-medium"' │ 1 │ 281 │ 100 │ 18 │ 421 │ +│ 3 │ 'EDMM "os-large"' │ 1 │ 281 │ 100 │ 18 │ 421 │ +│ 4 │ 'EDMM Total' │ 4 │ 1009 │ 360 │ 64 │ 1522 │ +│ 5 │ 'VDMM Baseline Original' │ 1 │ 504 │ 210 │ 32 │ 768 │ +│ 6 │ 'VDMM+ Original Manual' │ 1 │ 313 │ 149 │ 32 │ 588 │ +│ 7 │ 'VDMM+ Original Automated' │ 1 │ 340 │ 131 │ 0 │ 562 │ +└─────────┴────────────────────────────┴────────┴──────────┴────────────┴────────────────────────┴───────────────┘ + +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 │ -505 │ -150 │ -32 │ -754 │ +│ 1 │ 'VDMM+ Original Manual - VDMM Baseline Original' │ 0 │ -191 │ -61 │ 0 │ -180 │ +│ 2 │ 'VDMM+ Original Automated - VDMM Baseline Original' │ 0 │ -164 │ -79 │ -32 │ -206 │ +└─────────┴─────────────────────────────────────────────────────┴─────────────────┴───────────────────┴─────────────────────┴─────────────────────────────────┴────────────────────────┘ + +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 │ 0.58 │ 0.5 │ 0.5 │ +│ 1 │ 'VDMM+ Original Manual / VDMM Baseline Original' │ 1 │ 0.62 │ 0.71 │ 1 │ 0.77 │ +│ 2 │ 'VDMM+ Original Automated / VDMM Baseline Original' │ 1 │ 0.67 │ 0.62 │ 0 │ 0.73 │ +└─────────┴─────────────────────────────────────────────────────┴─────────────────┴───────────────────┴─────────────────────┴─────────────────────────────────┴────────────────────────┘ + +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 │ 'gcp' │ 1 │ [ 0, 1 ] │ [ 0, 1 ] │ [ 0, 1 ] │ 1 │ 1 │ +│ 1 │ 'kubernetes' │ 1 │ [ 0.46, 1 ] │ [ 0.46, 1 ] │ [ 0.48, 0.93 ] │ 1 │ 1 │ +│ 2 │ 'os-medium' │ 1 │ [ 0.34, 1 ] │ [ 0.34, 1 ] │ [ 0.41, 0.66 ] │ 1 │ 1 │ +│ 3 │ 'os-large' │ 1 │ [ 0.34, 1 ] │ [ 0.34, 1 ] │ [ 0.41, 0.66 ] │ 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 │ 780 │ 336 │ 47 │ 1162 │ +│ 1 │ 'VDMM+ Maintenance Manual' │ 1 │ 363 │ 183 │ 47 │ 703 │ +│ 2 │ 'VDMM+ Maintenance Automated' │ 1 │ 363 │ 142 │ 0 │ 599 │ +└─────────┴───────────────────────────────┴────────┴──────────┴────────────┴────────────────────────┴───────────────┘ + +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 │ 276 │ 126 │ 15 │ 394 │ +│ 1 │ 'VDMM+ Maintenance Manual - VDMM+ Original Manual' │ 0 │ 50 │ 34 │ 15 │ 115 │ +│ 2 │ 'VDMM+ Maintenance Automated - VDMM+ Original Automated' │ 0 │ 23 │ 11 │ 0 │ 37 │ +└─────────┴──────────────────────────────────────────────────────────┴─────────────────┴───────────────────┴─────────────────────┴─────────────────────────────────┴────────────────────────┘ + +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.18 │ 0.27 │ 1 │ 0.29 │ +│ 1 │ '(VDMM+ Maintenance Automated - VDMM+ Original Automated) / (VDMM Baseline Maintenance - VDMM Baseline Original)' │ 1 │ 0.08 │ 0.09 │ 0 │ 0.09 │ +└─────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴─────────────────┴───────────────────┴─────────────────────┴─────────────────────────────────┴────────────────────────┘ + +CAUTION: Is this case study running with the latest implementation? + +COMMENT: using proposed qualities after questionnaires \ No newline at end of file diff --git a/examples/unfurl-technology---industry---plus-maintenance-automated/lib/technology-rules.yaml b/examples/unfurl-technology---industry---plus-maintenance-automated/lib/technology-rules.yaml index b2587923ee..6e5e4b23df 100644 --- a/examples/unfurl-technology---industry---plus-maintenance-automated/lib/technology-rules.yaml +++ b/examples/unfurl-technology---industry---plus-maintenance-automated/lib/technology-rules.yaml @@ -35,7 +35,7 @@ - technology: ansible component: gcp.service hosting: [] - weight: 1 + weight: 0 reason: Ansible provides a declarative module details: '"google.cloud.gcp_serviceusage_service" task' - technology: terraform @@ -139,14 +139,14 @@ - mysql.dbms - docker.engine - remote.machine - weight: 0.5 + weight: 0.75 reason: Terraform provides a declarative module. However, Terraform requires an SSH workaround. Ansible is more specialized. - technology: ansible component: mysql.database hosting: - mysql.dbms - gcp.cloudsql - weight: 0.5 + weight: 0 reason: 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. - technology: terraform component: mysql.database @@ -174,7 +174,7 @@ hosting: - mysql.dbms - kubernetes.cluster - weight: 0 + weight: 0.25 reason: Ansible is more specialized. - technology: ansible component: mysql.database @@ -263,7 +263,7 @@ artifact: dbms.image hosting: - gcp.cloudsql - weight: 1 + weight: 0 reason: Primary use case due to the specialization of Ansible. details: '"google.cloud.gcp_sql_instance" and "google.cloud.gcp_sql_user" tasks' - technology: terraform @@ -334,7 +334,7 @@ component: object.storage hosting: - gcp.cloudstorage - weight: 1 + weight: 0 reason: Primary use case due to the specialization of Ansible. - technology: terraform component: object.storage @@ -388,7 +388,7 @@ - minio.server - docker.engine - remote.machine - weight: 0.5 + weight: 0.75 reason: Terraform provides a declarative module. However, Terraform requires an SSH workaround. Ansible is more specialized. - technology: ansible component: object.storage @@ -409,7 +409,7 @@ hosting: - minio.server - kubernetes.cluster - weight: 0 + weight: 0.25 reason: Ansible is more specialized. - technology: ansible component: redis.server @@ -470,7 +470,7 @@ artifact: cache.image hosting: - gcp.memorystore - weight: 1 + weight: 0 reason: Primary use case due to the specialization of Ansible. - technology: terraform component: redis.server diff --git a/examples/unfurl-technology---industry---plus-maintenance-automated/scripts/study-003.txt b/examples/unfurl-technology---industry---plus-maintenance-automated/scripts/study-003.txt new file mode 100644 index 0000000000..8f64b62a3c --- /dev/null +++ b/examples/unfurl-technology---industry---plus-maintenance-automated/scripts/study-003.txt @@ -0,0 +1,176 @@ + +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 │ [] │ 0 │ '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.75 │ '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 │ '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.25 │ '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' ] │ 0 │ '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' ] │ 0 │ '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.75 │ '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.25 │ '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' ] │ 0 │ '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 "customer"' │ 1 │ 650 │ 242 │ 39 │ 854 │ +│ 1 │ 'EDMM "development"' │ 1 │ 680 │ 252 │ 41 │ 897 │ +│ 2 │ 'EDMM "local"' │ 1 │ 623 │ 238 │ 35 │ 803 │ +│ 3 │ 'EDMM Total' │ 3 │ 1953 │ 732 │ 115 │ 2554 │ +│ 4 │ 'VDMM Baseline Original' │ 1 │ 1330 │ 629 │ 69 │ 2064 │ +│ 5 │ 'VDMM+ Original Manual' │ 1 │ 785 │ 395 │ 69 │ 1411 │ +│ 6 │ 'VDMM+ Original Automated' │ 1 │ 785 │ 339 │ 0 │ 1260 │ +└─────────┴────────────────────────────┴────────┴──────────┴────────────┴────────────────────────┴───────────────┘ + +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' │ -2 │ -623 │ -103 │ -46 │ -490 │ +│ 1 │ 'VDMM+ Original Manual - VDMM Baseline Original' │ 0 │ -545 │ -234 │ 0 │ -653 │ +│ 2 │ 'VDMM+ Original Automated - VDMM Baseline Original' │ 0 │ -545 │ -290 │ -69 │ -804 │ +└─────────┴─────────────────────────────────────────────────────┴─────────────────┴───────────────────┴─────────────────────┴─────────────────────────────────┴────────────────────────┘ + +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.33 │ 0.68 │ 0.86 │ 0.6 │ 0.81 │ +│ 1 │ 'VDMM+ Original Manual / VDMM Baseline Original' │ 1 │ 0.59 │ 0.63 │ 1 │ 0.68 │ +│ 2 │ 'VDMM+ Original Automated / VDMM Baseline Original' │ 1 │ 0.59 │ 0.54 │ 0 │ 0.61 │ +└─────────┴─────────────────────────────────────────────────────┴─────────────────┴───────────────────┴─────────────────────┴─────────────────────────────────┴────────────────────────┘ + +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 │ 'customer' │ 1 │ [ 0.35, 1 ] │ [ 0.35, 1 ] │ [ 0.42, 0.69 ] │ 1 │ 1 │ +│ 1 │ 'development' │ 1 │ [ 0.28, 1 ] │ [ 0.28, 1 ] │ [ 0.51, 0.72 ] │ 1 │ 1 │ +│ 2 │ 'local' │ 1 │ [ 0.31, 1 ] │ [ 0.31, 1 ] │ [ 0.66, 0.69 ] │ 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 │ 1500 │ 737 │ 90 │ 2436 │ +│ 1 │ 'VDMM+ Maintenance Manual' │ 1 │ 814 │ 437 │ 90 │ 1541 │ +│ 2 │ 'VDMM+ Maintenance Automated' │ 1 │ 814 │ 348 │ 0 │ 1326 │ +└─────────┴───────────────────────────────┴────────┴──────────┴────────────┴────────────────────────┴───────────────┘ + +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 │ 170 │ 108 │ 21 │ 372 │ +│ 1 │ 'VDMM+ Maintenance Manual - VDMM+ Original Manual' │ 0 │ 29 │ 42 │ 21 │ 130 │ +│ 2 │ 'VDMM+ Maintenance Automated - VDMM+ Original Automated' │ 0 │ 29 │ 9 │ 0 │ 66 │ +└─────────┴──────────────────────────────────────────────────────────┴─────────────────┴───────────────────┴─────────────────────┴─────────────────────────────────┴────────────────────────┘ + +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.17 │ 0.39 │ 1 │ 0.35 │ +│ 1 │ '(VDMM+ Maintenance Automated - VDMM+ Original Automated) / (VDMM Baseline Maintenance - VDMM Baseline Original)' │ 1 │ 0.17 │ 0.08 │ 0 │ 0.18 │ +└─────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴─────────────────┴───────────────────┴─────────────────────┴─────────────────────────────────┴────────────────────────┘ + +CAUTION: Is this case study running with the latest implementation? + +COMMENT: using proposed qualities after questionnaires \ No newline at end of file diff --git a/examples/unfurl-technology---shop---plus-maintenance-automated/lib/technology-rules.yaml b/examples/unfurl-technology---shop---plus-maintenance-automated/lib/technology-rules.yaml index b2587923ee..6e5e4b23df 100644 --- a/examples/unfurl-technology---shop---plus-maintenance-automated/lib/technology-rules.yaml +++ b/examples/unfurl-technology---shop---plus-maintenance-automated/lib/technology-rules.yaml @@ -35,7 +35,7 @@ - technology: ansible component: gcp.service hosting: [] - weight: 1 + weight: 0 reason: Ansible provides a declarative module details: '"google.cloud.gcp_serviceusage_service" task' - technology: terraform @@ -139,14 +139,14 @@ - mysql.dbms - docker.engine - remote.machine - weight: 0.5 + weight: 0.75 reason: Terraform provides a declarative module. However, Terraform requires an SSH workaround. Ansible is more specialized. - technology: ansible component: mysql.database hosting: - mysql.dbms - gcp.cloudsql - weight: 0.5 + weight: 0 reason: 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. - technology: terraform component: mysql.database @@ -174,7 +174,7 @@ hosting: - mysql.dbms - kubernetes.cluster - weight: 0 + weight: 0.25 reason: Ansible is more specialized. - technology: ansible component: mysql.database @@ -263,7 +263,7 @@ artifact: dbms.image hosting: - gcp.cloudsql - weight: 1 + weight: 0 reason: Primary use case due to the specialization of Ansible. details: '"google.cloud.gcp_sql_instance" and "google.cloud.gcp_sql_user" tasks' - technology: terraform @@ -334,7 +334,7 @@ component: object.storage hosting: - gcp.cloudstorage - weight: 1 + weight: 0 reason: Primary use case due to the specialization of Ansible. - technology: terraform component: object.storage @@ -388,7 +388,7 @@ - minio.server - docker.engine - remote.machine - weight: 0.5 + weight: 0.75 reason: Terraform provides a declarative module. However, Terraform requires an SSH workaround. Ansible is more specialized. - technology: ansible component: object.storage @@ -409,7 +409,7 @@ hosting: - minio.server - kubernetes.cluster - weight: 0 + weight: 0.25 reason: Ansible is more specialized. - technology: ansible component: redis.server @@ -470,7 +470,7 @@ artifact: cache.image hosting: - gcp.memorystore - weight: 1 + weight: 0 reason: Primary use case due to the specialization of Ansible. - technology: terraform component: redis.server diff --git a/examples/unfurl-technology---shop---plus-maintenance-automated/scripts/study-004.txt b/examples/unfurl-technology---shop---plus-maintenance-automated/scripts/study-004.txt new file mode 100644 index 0000000000..68f301443c --- /dev/null +++ b/examples/unfurl-technology---shop---plus-maintenance-automated/scripts/study-004.txt @@ -0,0 +1,178 @@ + +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 │ [] │ 0 │ '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.75 │ '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 │ '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.25 │ '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' ] │ 0 │ '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' ] │ 0 │ '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.75 │ '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.25 │ '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' ] │ 0 │ '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 │ 59 │ 17 │ 7 │ 118 │ +│ 1 │ 'EDMM "kubernetes"' │ 1 │ 57 │ 18 │ 4 │ 108 │ +│ 2 │ 'EDMM "static"' │ 1 │ 89 │ 29 │ 6 │ 152 │ +│ 3 │ 'EDMM "static-large"' │ 1 │ 89 │ 29 │ 6 │ 152 │ +│ 4 │ 'EDMM Total' │ 4 │ 294 │ 93 │ 23 │ 530 │ +│ 5 │ 'VDMM Baseline Original' │ 1 │ 147 │ 52 │ 13 │ 264 │ +│ 6 │ 'VDMM+ Original Manual' │ 1 │ 112 │ 44 │ 13 │ 236 │ +│ 7 │ 'VDMM+ Original Automated' │ 1 │ 112 │ 38 │ 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 │ -147 │ -41 │ -10 │ -266 │ +│ 1 │ 'VDMM+ Original Manual - VDMM Baseline Original' │ 0 │ -35 │ -8 │ 0 │ -28 │ +│ 2 │ 'VDMM+ Original Automated - VDMM Baseline Original' │ 0 │ -35 │ -14 │ -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 │ 0.56 │ 0.57 │ 0.5 │ +│ 1 │ 'VDMM+ Original Manual / VDMM Baseline Original' │ 1 │ 0.76 │ 0.85 │ 1 │ 0.89 │ +│ 2 │ 'VDMM+ Original Automated / VDMM Baseline Original' │ 1 │ 0.76 │ 0.73 │ 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, 1 ] │ [ 0, 1 ] │ [ 0, 1 ] │ 1 │ 1 │ +│ 1 │ 'kubernetes' │ 1 │ [ 0.38, 1 ] │ [ 0.38, 1 ] │ [ 0.44, 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 │ 213 │ 87 │ 16 │ 380 │ +│ 1 │ 'VDMM+ Maintenance Manual' │ 1 │ 137 │ 61 │ 16 │ 295 │ +│ 2 │ 'VDMM+ Maintenance Automated' │ 1 │ 137 │ 50 │ 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 │ 66 │ 35 │ 3 │ 116 │ +│ 1 │ 'VDMM+ Maintenance Manual - VDMM+ Original Manual' │ 0 │ 25 │ 17 │ 3 │ 59 │ +│ 2 │ 'VDMM+ Maintenance Automated - VDMM+ Original Automated' │ 0 │ 25 │ 12 │ 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.38 │ 0.49 │ 1 │ 0.51 │ +│ 1 │ '(VDMM+ Maintenance Automated - VDMM+ Original Automated) / (VDMM Baseline Maintenance - VDMM Baseline Original)' │ 1 │ 0.38 │ 0.34 │ 0 │ 0.43 │ +└─────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴─────────────────┴───────────────────┴─────────────────────┴─────────────────────────────────┴────────────────────────┘ + +CAUTION: Is this case study running with the latest implementation? + +COMMENT: using proposed qualities after questionnaires \ No newline at end of file diff --git a/src/technologies/plugins/rules/generators/gcp-service/ansible/index.ts b/src/technologies/plugins/rules/generators/gcp-service/ansible/index.ts index 3d6db75534..38ae6dca36 100644 --- a/src/technologies/plugins/rules/generators/gcp-service/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/gcp-service/ansible/index.ts @@ -6,7 +6,7 @@ const generator: ImplementationGenerator = { component: 'gcp.service', technology: 'ansible', hosting: [], - weight: 1, + weight: 0, reason: 'Ansible provides a declarative module', details: '"google.cloud.gcp_serviceusage_service" task', diff --git a/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/docker-engine/remote-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/docker-engine/remote-machine/terraform/index.ts index dc1f81fb91..ba0cf8b854 100644 --- a/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/docker-engine/remote-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/docker-engine/remote-machine/terraform/index.ts @@ -11,7 +11,7 @@ const generator: ImplementationGenerator = { component: 'mysql.database', technology: 'terraform', hosting: ['mysql.dbms', 'docker.engine', 'remote.machine'], - weight: 0.5, + weight: 0.75, reason: 'Terraform provides a declarative module. However, Terraform requires an SSH workaround. Ansible is more specialized.', generate: (name, type) => { diff --git a/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/gcp-cloudsql/ansible/index.ts b/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/gcp-cloudsql/ansible/index.ts index 33d7f35218..695dbbb849 100644 --- a/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/gcp-cloudsql/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/gcp-cloudsql/ansible/index.ts @@ -6,7 +6,7 @@ const generator: ImplementationGenerator = { component: 'mysql.database', technology: 'ansible', hosting: ['mysql.dbms', 'gcp.cloudsql'], - weight: 0.5, + weight: 0, reason: '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.', generate: (name, type) => { diff --git a/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/kubernetes-cluster/terraform/index.ts b/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/kubernetes-cluster/terraform/index.ts index 231eca8d58..97d19742c1 100644 --- a/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/kubernetes-cluster/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/kubernetes-cluster/terraform/index.ts @@ -26,7 +26,7 @@ const generator: ImplementationGenerator = { component: 'mysql.database', technology: 'terraform', hosting: ['mysql.dbms', 'kubernetes.cluster'], - weight: 0, + weight: 0.25, reason: 'Ansible is more specialized.', generate: (name, type) => { diff --git a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/gcp-cloudsql/ansible/index.ts b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/gcp-cloudsql/ansible/index.ts index c45f2141f4..3279e06548 100644 --- a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/gcp-cloudsql/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/gcp-cloudsql/ansible/index.ts @@ -8,7 +8,7 @@ const generator: ImplementationGenerator = { technology: 'ansible', artifact: 'dbms.image', hosting: ['gcp.cloudsql'], - weight: 1, + weight: 0, reason: 'Primary use case due to the specialization of Ansible.', details: '"google.cloud.gcp_sql_instance" and "google.cloud.gcp_sql_user" tasks', diff --git a/src/technologies/plugins/rules/generators/object-storage/gcp-cloudstorage/ansible/index.ts b/src/technologies/plugins/rules/generators/object-storage/gcp-cloudstorage/ansible/index.ts index 860cf90010..6db79665b6 100644 --- a/src/technologies/plugins/rules/generators/object-storage/gcp-cloudstorage/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/object-storage/gcp-cloudstorage/ansible/index.ts @@ -6,7 +6,7 @@ const generator: ImplementationGenerator = { component: 'object.storage', technology: 'ansible', hosting: ['gcp.cloudstorage'], - weight: 1, + weight: 0, reason: 'Primary use case due to the specialization of Ansible.', generate: (name, type) => { diff --git a/src/technologies/plugins/rules/generators/object-storage/minio/docker-engine/remote-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/object-storage/minio/docker-engine/remote-machine/terraform/index.ts index b29cc3cd06..cb45b1d689 100644 --- a/src/technologies/plugins/rules/generators/object-storage/minio/docker-engine/remote-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/object-storage/minio/docker-engine/remote-machine/terraform/index.ts @@ -16,7 +16,7 @@ const generator: ImplementationGenerator = { component: 'object.storage', technology: 'terraform', hosting: ['minio.server', 'docker.engine', 'remote.machine'], - weight: 0.5, + weight: 0.75, reason: 'Terraform provides a declarative module. However, Terraform requires an SSH workaround. Ansible is more specialized.', generate: (name, type) => { diff --git a/src/technologies/plugins/rules/generators/object-storage/minio/kubernetes-cluster/terraform/index.ts b/src/technologies/plugins/rules/generators/object-storage/minio/kubernetes-cluster/terraform/index.ts index 3c0cd6d698..ea78e9c703 100644 --- a/src/technologies/plugins/rules/generators/object-storage/minio/kubernetes-cluster/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/object-storage/minio/kubernetes-cluster/terraform/index.ts @@ -12,7 +12,7 @@ const generator: ImplementationGenerator = { component: 'object.storage', technology: 'terraform', hosting: ['minio.server', 'kubernetes.cluster'], - weight: 0, + weight: 0.25, reason: 'Ansible is more specialized.', generate: (name, type) => { diff --git a/src/technologies/plugins/rules/generators/redis-server/cache-image/gcp-memorystore/ansible/index.ts b/src/technologies/plugins/rules/generators/redis-server/cache-image/gcp-memorystore/ansible/index.ts index 2e7ccdd6ec..9d9db0958c 100644 --- a/src/technologies/plugins/rules/generators/redis-server/cache-image/gcp-memorystore/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/redis-server/cache-image/gcp-memorystore/ansible/index.ts @@ -9,7 +9,7 @@ const generator: ImplementationGenerator = { technology: 'ansible', artifact: 'cache.image', hosting: ['gcp.memorystore'], - weight: 1, + weight: 0, reason: 'Primary use case due to the specialization of Ansible.', generate: (name, type) => { From e29215c63aacc1776f5f13ba91f21f8a503bc59b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miles=20St=C3=B6tzner?= Date: Mon, 18 Nov 2024 13:46:24 +0100 Subject: [PATCH 2/4] add qualities back to docs --- docs/docs/variability4tosca/rules/index.md | 597 +++++++++++++++++- .../rules/technology-rules.yaml | 18 +- tasks/docs/generate/rules/template.ejs | 20 +- 3 files changed, 622 insertions(+), 13 deletions(-) diff --git a/docs/docs/variability4tosca/rules/index.md b/docs/docs/variability4tosca/rules/index.md index 7afa0f29e2..903f20864c 100644 --- a/docs/docs/variability4tosca/rules/index.md +++ b/docs/docs/variability4tosca/rules/index.md @@ -9,6 +9,8 @@ tags: # Deployment Technology Rules Specification 1.0 Release Candidate +{{ autogenerated_notice('./task docs:generate:rules') }} + !!! info "Hidden Information" The document does not specify quality assignments at this stage. @@ -18,8 +20,6 @@ tags: !!! info "Quick Tip #2" You can query technology rules for your deployment scenario using `vintner utils scenarios`! -{{ autogenerated_notice('./task docs:generate:rules') }} - This document specifies the deployment technology rules. The specification is under active development and is not backwards compatible with any previous versions. @@ -62,6 +62,14 @@ The node template is hosted on the node template "host 1" of node type [local.ma
component(docker.engine)host 1(local.machine)host
+!!! success "Ansible (Quality: 1)" + Primary use case due to the specialization of Ansible. + +!!! failure "Terraform (Quality: 0)" + Ansible is more specialized. Also using provisioners is a "last resort". + + + ### Scenario #2 In this scenario, the node template "component" of node type [docker.engine](/normative#dockerengine){target=_blank} is deployed. @@ -70,6 +78,14 @@ The node template is hosted on the node template "host 1" of node type [remote.m
component(docker.engine)host 1(remote.machine)host
+!!! success "Ansible (Quality: 1)" + Primary use case due to the specialization of Ansible. + +!!! failure "Terraform (Quality: 0)" + Ansible is more specialized. Also using provisioners is a "last resort". + + + ## Component "gcp.service" The following scenarios deploy a node template of node type [gcp.service](/normative#gcpservice){target=_blank} with various hosting stacks, artifacts, deployment technologies, and qualities. @@ -83,6 +99,14 @@ The scenario does not require a specific hosting.
component(gcp.service)
+!!! failure "Ansible (Quality: 0)" + Ansible provides a declarative module + +!!! success "Terraform (Quality: 1)" + Terraform provides a declarative module. + + + ## Component "ingress" The following scenarios deploy a node template of node type [ingress](/normative#ingress){target=_blank} with various hosting stacks, artifacts, deployment technologies, and qualities. @@ -96,6 +120,17 @@ The node template is hosted on the node template "host 1" of node type [kubernet
component(ingress)host 1(kubernetes.cluster)host
+!!! warning "Ansible (Quality: 0.5)" + Kubernetes is more specialized. + +!!! success "Kubernetes (Quality: 1)" + Kubernetes is the underlying technology. + +!!! warning "Terraform (Quality: 0.5)" + Kubernetes is more specialized. + + + ### Scenario #2 In this scenario, the node template "component" of node type [ingress](/normative#ingress){target=_blank} is deployed. @@ -104,6 +139,14 @@ The node template is hosted on the node template "host 1" of node type [local.ma
component(ingress)host 1(local.machine)host
+!!! success "Ansible (Quality: 1)" + Primary use case due to the specialization of Ansible. + +!!! failure "Terraform (Quality: 0)" + Ansible is more specialized. Also using provisioners is a "last resort". + + + ### Scenario #3 In this scenario, the node template "component" of node type [ingress](/normative#ingress){target=_blank} is deployed. @@ -112,6 +155,14 @@ The node template is hosted on the node template "host 1" of node type [remote.m
component(ingress)host 1(remote.machine)host
+!!! success "Ansible (Quality: 1)" + Primary use case due to the specialization of Ansible. + +!!! failure "Terraform (Quality: 0)" + Ansible is more specialized. Also using provisioners is a "last resort". + + + ## Component "mysql.database" The following scenarios deploy a node template of node type [mysql.database](/normative#mysqldatabase){target=_blank} with various hosting stacks, artifacts, deployment technologies, and qualities. @@ -125,6 +176,17 @@ The node template is hosted on the node template "host 1" of node type [mysql.db
component(mysql.database)host 1(mysql.dbms)host 2(docker.engine)host 3(local.machine)hosthosthost
+!!! success "Ansible (Quality: 1)" + Primary use case due to the specialization of Ansible. + +!!! failure "Docker Compose (Quality: 0)" + One-time use docker container ("fake Kubernetes job") with imperative parts, while other technologies provide declarative modules. + +!!! success "Terraform (Quality: 1)" + Terraform provides a declarative module. + + + ### Scenario #2 In this scenario, the node template "component" of node type [mysql.database](/normative#mysqldatabase){target=_blank} is deployed. @@ -133,6 +195,17 @@ The node template is hosted on the node template "host 1" of node type [mysql.db
component(mysql.database)host 1(mysql.dbms)host 2(docker.engine)host 3(remote.machine)hosthosthost
+!!! success "Ansible (Quality: 1)" + Primary use case due to the specialization of Ansible. + +!!! failure "Docker Compose (Quality: 0)" + One-time use docker container ("fake Kubernetes job") with imperative parts, while other technologies provide declarative modules. + +!!! question "Terraform (Quality: 0.75)" + Terraform provides a declarative module. However, Terraform requires an SSH workaround. Ansible is more specialized. + + + ### Scenario #3 In this scenario, the node template "component" of node type [mysql.database](/normative#mysqldatabase){target=_blank} is deployed. @@ -141,6 +214,14 @@ The node template is hosted on the node template "host 1" of node type [mysql.db
component(mysql.database)host 1(mysql.dbms)host 2(gcp.cloudsql)hosthost
+!!! failure "Ansible (Quality: 0)" + 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. + +!!! success "Terraform (Quality: 1)" + Terraform provides a declarative module. + + + ### Scenario #4 In this scenario, the node template "component" of node type [mysql.database](/normative#mysqldatabase){target=_blank} is deployed. @@ -149,6 +230,17 @@ The node template is hosted on the node template "host 1" of node type [mysql.db
component(mysql.database)host 1(mysql.dbms)host 2(kubernetes.cluster)hosthost
+!!! success "Ansible (Quality: 1)" + Primary use case due to the specialization of Ansible. + +!!! failure "Kubernetes (Quality: 0)" + Kubernetes Job with imperative parts, while declarative other technologies provide declarative modules. + +!!! failure "Terraform (Quality: 0.25)" + Ansible is more specialized. + + + ### Scenario #5 In this scenario, the node template "component" of node type [mysql.database](/normative#mysqldatabase){target=_blank} is deployed. @@ -157,6 +249,14 @@ The node template is hosted on the node template "host 1" of node type [mysql.db
component(mysql.database)host 1(mysql.dbms)host 2(local.machine)hosthost
+!!! success "Ansible (Quality: 1)" + Primary use case due to the specialization of Ansible. + +!!! success "Terraform (Quality: 1)" + Terraform provides a declarative module. + + + ### Scenario #6 In this scenario, the node template "component" of node type [mysql.database](/normative#mysqldatabase){target=_blank} is deployed. @@ -165,6 +265,14 @@ The node template is hosted on the node template "host 1" of node type [mysql.db
component(mysql.database)host 1(mysql.dbms)host 2(remote.machine)hosthost
+!!! success "Ansible (Quality: 1)" + Primary use case due to the specialization of Ansible. + +!!! warning "Terraform (Quality: 0.5)" + Terraform provides a declarative module. However, Terraform requires an SSH workaround. Ansible is more specialized. + + + ## Component "mysql.dbms" The following scenarios deploy a node template of node type [mysql.dbms](/normative#mysqldbms){target=_blank} with various hosting stacks, artifacts, deployment technologies, and qualities. @@ -179,6 +287,17 @@ The node template is hosted on the node template "host 1" of node type [docker.e
component(mysql.dbms)artifact(dbms.image)host 1(docker.engine)host 2(local.machine)hosthost
+!!! warning "Ansible (Quality: 0.5)" + Docker Compose is more specialized + +!!! success "Docker Compose (Quality: 1)" + Docker is the underlying technology. + +!!! warning "Terraform (Quality: 0.5)" + Docker Compose is more specialized. + + + ### Scenario #2 In this scenario, the node template "component" of node type [mysql.dbms](/normative#mysqldbms){target=_blank} is deployed. @@ -188,6 +307,17 @@ The node template is hosted on the node template "host 1" of node type [docker.e
component(mysql.dbms)artifact(dbms.image)host 1(docker.engine)host 2(remote.machine)hosthost
+!!! warning "Ansible (Quality: 0.5)" + Docker Compose is more specialized + +!!! success "Docker Compose (Quality: 1)" + Docker is the underlying technology. + +!!! warning "Terraform (Quality: 0.5)" + Docker Compose is more specialized. + + + ### Scenario #3 In this scenario, the node template "component" of node type [mysql.dbms](/normative#mysqldbms){target=_blank} is deployed. @@ -197,6 +327,14 @@ The node template is hosted on the node template "host 1" of node type [gcp.clou
component(mysql.dbms)artifact(dbms.image)host 1(gcp.cloudsql)host
+!!! failure "Ansible (Quality: 0)" + Primary use case due to the specialization of Ansible. + +!!! success "Terraform (Quality: 1)" + Terraform provides a declarative module. + + + ### Scenario #4 In this scenario, the node template "component" of node type [mysql.dbms](/normative#mysqldbms){target=_blank} is deployed. @@ -206,6 +344,17 @@ The node template is hosted on the node template "host 1" of node type [kubernet
component(mysql.dbms)artifact(dbms.image)host 1(kubernetes.cluster)host
+!!! warning "Ansible (Quality: 0.5)" + Kubernetes is more specialized. + +!!! success "Kubernetes (Quality: 1)" + Kubernetes is the underlying technology. + +!!! warning "Terraform (Quality: 0.5)" + Kubernetes is more specialized. + + + ### Scenario #5 In this scenario, the node template "component" of node type [mysql.dbms](/normative#mysqldbms){target=_blank} is deployed. @@ -215,6 +364,14 @@ The node template is hosted on the node template "host 1" of node type [local.ma
component(mysql.dbms)artifact(dbms.image)host 1(local.machine)host
+!!! success "Ansible (Quality: 1)" + Primary use case due to the specialization of Ansible. + +!!! failure "Terraform (Quality: 0)" + Ansible is more specialized. Also using provisioners is a "last resort". + + + ### Scenario #6 In this scenario, the node template "component" of node type [mysql.dbms](/normative#mysqldbms){target=_blank} is deployed. @@ -224,6 +381,14 @@ The node template is hosted on the node template "host 1" of node type [remote.m
component(mysql.dbms)artifact(dbms.image)host 1(remote.machine)host
+!!! success "Ansible (Quality: 1)" + Primary use case due to the specialization of Ansible. + +!!! failure "Terraform (Quality: 0)" + Ansible is more specialized. Also using provisioners is a "last resort". + + + ## Component "object.storage" The following scenarios deploy a node template of node type [object.storage](/normative#objectstorage){target=_blank} with various hosting stacks, artifacts, deployment technologies, and qualities. @@ -237,6 +402,14 @@ The node template is hosted on the node template "host 1" of node type [gcp.clou
component(object.storage)host 1(gcp.cloudstorage)host
+!!! failure "Ansible (Quality: 0)" + Primary use case due to the specialization of Ansible. + +!!! success "Terraform (Quality: 1)" + Terraform provides a declarative module. + + + ### Scenario #2 In this scenario, the node template "component" of node type [object.storage](/normative#objectstorage){target=_blank} is deployed. @@ -245,6 +418,17 @@ The node template is hosted on the node template "host 1" of node type [minio.se
component(object.storage)host 1(minio.server)host 2(docker.engine)host 3(local.machine)hosthosthost
+!!! success "Ansible (Quality: 1)" + Primary use case due to the specialization of Ansible. + +!!! failure "Docker Compose (Quality: 0)" + One-time use docker container ("fake Kubernetes job") with imperative parts, while other technologies provide declarative modules. + +!!! success "Terraform (Quality: 1)" + Terraform provides a declarative module. + + + ### Scenario #3 In this scenario, the node template "component" of node type [object.storage](/normative#objectstorage){target=_blank} is deployed. @@ -253,6 +437,17 @@ The node template is hosted on the node template "host 1" of node type [minio.se
component(object.storage)host 1(minio.server)host 2(docker.engine)host 3(remote.machine)hosthosthost
+!!! success "Ansible (Quality: 1)" + Primary use case due to the specialization of Ansible. + +!!! failure "Docker Compose (Quality: 0)" + One-time use docker container ("fake Kubernetes job") with imperative parts, while other technologies provide declarative modules. + +!!! question "Terraform (Quality: 0.75)" + Terraform provides a declarative module. However, Terraform requires an SSH workaround. Ansible is more specialized. + + + ### Scenario #4 In this scenario, the node template "component" of node type [object.storage](/normative#objectstorage){target=_blank} is deployed. @@ -261,6 +456,17 @@ The node template is hosted on the node template "host 1" of node type [minio.se
component(object.storage)host 1(minio.server)host 2(kubernetes.cluster)hosthost
+!!! success "Ansible (Quality: 1)" + Primary use case due to the specialization of Ansible. + +!!! failure "Kubernetes (Quality: 0)" + Kubernetes Job with imperative parts, while declarative other technologies provide declarative modules. + +!!! failure "Terraform (Quality: 0.25)" + Ansible is more specialized. + + + ## Component "redis.server" The following scenarios deploy a node template of node type [redis.server](/normative#redisserver){target=_blank} with various hosting stacks, artifacts, deployment technologies, and qualities. @@ -275,6 +481,17 @@ The node template is hosted on the node template "host 1" of node type [docker.e
component(redis.server)artifact(cache.image)host 1(docker.engine)host 2(local.machine)hosthost
+!!! warning "Ansible (Quality: 0.5)" + Docker Compose is more specialized. + +!!! success "Docker Compose (Quality: 1)" + Docker is the underlying technology. + +!!! warning "Terraform (Quality: 0.5)" + Docker Compose is more specialized. + + + ### Scenario #2 In this scenario, the node template "component" of node type [redis.server](/normative#redisserver){target=_blank} is deployed. @@ -284,6 +501,17 @@ The node template is hosted on the node template "host 1" of node type [docker.e
component(redis.server)artifact(cache.image)host 1(docker.engine)host 2(remote.machine)hosthost
+!!! warning "Ansible (Quality: 0.5)" + Docker Compose is more specialized. + +!!! success "Docker Compose (Quality: 1)" + Docker is the underlying technology. + +!!! warning "Terraform (Quality: 0.5)" + Docker Compose is more specialized. + + + ### Scenario #3 In this scenario, the node template "component" of node type [redis.server](/normative#redisserver){target=_blank} is deployed. @@ -293,6 +521,14 @@ The node template is hosted on the node template "host 1" of node type [gcp.memo
component(redis.server)artifact(cache.image)host 1(gcp.memorystore)host
+!!! failure "Ansible (Quality: 0)" + Primary use case due to the specialization of Ansible. + +!!! success "Terraform (Quality: 1)" + Terraform provides a declarative module. + + + ### Scenario #4 In this scenario, the node template "component" of node type [redis.server](/normative#redisserver){target=_blank} is deployed. @@ -302,6 +538,17 @@ The node template is hosted on the node template "host 1" of node type [kubernet
component(redis.server)artifact(cache.image)host 1(kubernetes.cluster)host
+!!! warning "Ansible (Quality: 0.5)" + Kubernetes is more specialized. + +!!! success "Kubernetes (Quality: 1)" + Kubernetes is the underlying technology. + +!!! warning "Terraform (Quality: 0.5)" + Kubernetes is more specialized. + + + ## Component "service.application" The following scenarios deploy a node template of node type [service.application](/normative#serviceapplication){target=_blank} with various hosting stacks, artifacts, deployment technologies, and qualities. @@ -316,6 +563,17 @@ The node template is hosted on the node template "host 1" of node type [docker.e
component(service.application)artifact(docker.image)host 1(docker.engine)host 2(local.machine)hosthost
+!!! warning "Ansible (Quality: 0.5)" + Docker Compose is more specialized. + +!!! success "Docker Compose (Quality: 1)" + Docker is the underlying technology. + +!!! warning "Terraform (Quality: 0.5)" + Docker Compose is more specialized. + + + ### Scenario #2 In this scenario, the node template "component" of node type [service.application](/normative#serviceapplication){target=_blank} is deployed. @@ -325,6 +583,17 @@ The node template is hosted on the node template "host 1" of node type [docker.e
component(service.application)artifact(docker.image)host 1(docker.engine)host 2(remote.machine)hosthost
+!!! warning "Ansible (Quality: 0.5)" + Docker Compose is more specialized. + +!!! success "Docker Compose (Quality: 1)" + Docker is the underlying technology. + +!!! warning "Terraform (Quality: 0.5)" + Docker Compose is more specialized. + + + ### Scenario #3 In this scenario, the node template "component" of node type [service.application](/normative#serviceapplication){target=_blank} is deployed. @@ -334,6 +603,14 @@ The node template is hosted on the node template "host 1" of node type [gcp.clou
component(service.application)artifact(docker.image)host 1(gcp.cloudrun)host
+!!! failure "Ansible (Quality: 0)" + Custom module with imperative parts, while Terraform provides a declarative module. + +!!! success "Terraform (Quality: 1)" + Terraform provides a declarative module. + + + ### Scenario #4 In this scenario, the node template "component" of node type [service.application](/normative#serviceapplication){target=_blank} is deployed. @@ -343,6 +620,17 @@ The node template is hosted on the node template "host 1" of node type [kubernet
component(service.application)artifact(docker.image)host 1(kubernetes.cluster)host
+!!! warning "Ansible (Quality: 0.5)" + Kubernetes is more specialized. + +!!! success "Kubernetes (Quality: 1)" + Kubernetes is the underlying technology. + +!!! warning "Terraform (Quality: 0.5)" + Kubernetes is more specialized. + + + ### Scenario #5 In this scenario, the node template "component" of node type [service.application](/normative#serviceapplication){target=_blank} is deployed. @@ -352,6 +640,14 @@ The node template is hosted on an arbitrary hosting stack of arbitrary length, w
component(service.application)artifact(tar.archive)...host 2(local.machine)hosthost
+!!! success "Ansible (Quality: 1)" + Primary use case due to the specialization of Ansible. Special integration for systemd. + +!!! failure "Terraform (Quality: 0)" + Ansible is more specialized. Also using provisioners is a "last resort". + + + ### Scenario #6 In this scenario, the node template "component" of node type [service.application](/normative#serviceapplication){target=_blank} is deployed. @@ -361,6 +657,14 @@ The node template is hosted on an arbitrary hosting stack of arbitrary length, w
component(service.application)artifact(tar.archive)...host 2(remote.machine)hosthost
+!!! success "Ansible (Quality: 1)" + Primary use case due to the specialization of Ansible. Special integration for systemd. + +!!! failure "Terraform (Quality: 0)" + Ansible is more specialized. Also using provisioners is a "last resort". + + + ### Scenario #7 In this scenario, the node template "component" of node type [service.application](/normative#serviceapplication){target=_blank} is deployed. @@ -370,6 +674,14 @@ The node template is hosted on an arbitrary hosting stack of arbitrary length, w
component(service.application)artifact(zip.archive)...host 2(local.machine)hosthost
+!!! success "Ansible (Quality: 1)" + Primary use case due to the specialization of Ansible. Special integration for systemd. + +!!! failure "Terraform (Quality: 0)" + Ansible is more specialized. Also using provisioners is a "last resort". + + + ### Scenario #8 In this scenario, the node template "component" of node type [service.application](/normative#serviceapplication){target=_blank} is deployed. @@ -379,6 +691,14 @@ The node template is hosted on an arbitrary hosting stack of arbitrary length, w
component(service.application)artifact(zip.archive)...host 2(remote.machine)hosthost
+!!! success "Ansible (Quality: 1)" + Primary use case due to the specialization of Ansible. Special integration for systemd. + +!!! failure "Terraform (Quality: 0)" + Ansible is more specialized. Also using provisioners is a "last resort". + + + ### Scenario #9 In this scenario, the node template "component" of node type [service.application](/normative#serviceapplication){target=_blank} is deployed. @@ -388,6 +708,14 @@ The node template is hosted on the node template "host 1" of node type [gcp.appe
component(service.application)artifact(zip.archive)host 1(gcp.appengine)host
+!!! failure "Ansible (Quality: 0)" + Custom module with imperative parts, while Terraform provides a declarative module. + +!!! success "Terraform (Quality: 1)" + Terraform provides a declarative module. + + + ## Component "software.application" The following scenarios deploy a node template of node type [software.application](/normative#softwareapplication){target=_blank} with various hosting stacks, artifacts, deployment technologies, and qualities. @@ -402,6 +730,14 @@ The node template is hosted on an arbitrary hosting stack of arbitrary length, w
component(software.application)artifact(apt.package)...host 2(local.machine)hosthost
+!!! success "Ansible (Quality: 1)" + Primary use case due to the specialization of Ansible. + +!!! failure "Terraform (Quality: 0)" + Ansible is more specialized. Also using provisioners is a "last resort". + + + ### Scenario #2 In this scenario, the node template "component" of node type [software.application](/normative#softwareapplication){target=_blank} is deployed. @@ -411,6 +747,14 @@ The node template is hosted on an arbitrary hosting stack of arbitrary length, w
component(software.application)artifact(apt.package)...host 2(remote.machine)hosthost
+!!! success "Ansible (Quality: 1)" + Primary use case due to the specialization of Ansible. + +!!! failure "Terraform (Quality: 0)" + Ansible is more specialized. Also using provisioners is a "last resort". + + + ### Scenario #3 In this scenario, the node template "component" of node type [software.application](/normative#softwareapplication){target=_blank} is deployed. @@ -420,6 +764,14 @@ The node template is hosted on an arbitrary hosting stack of arbitrary length, w
component(software.application)artifact(tar.archive)...host 2(local.machine)hosthost
+!!! warning "Ansible (Quality: 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. + +!!! failure "Terraform (Quality: 0)" + Ansible is more specialized. Also using provisioners is a "last resort". + + + ### Scenario #4 In this scenario, the node template "component" of node type [software.application](/normative#softwareapplication){target=_blank} is deployed. @@ -429,6 +781,14 @@ The node template is hosted on an arbitrary hosting stack of arbitrary length, w
component(software.application)artifact(tar.archive)...host 2(remote.machine)hosthost
+!!! warning "Ansible (Quality: 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". + +!!! failure "Terraform (Quality: 0)" + Ansible is more specialized. Also using provisioners is a "last resort". + + + ### Scenario #5 In this scenario, the node template "component" of node type [software.application](/normative#softwareapplication){target=_blank} is deployed. @@ -438,6 +798,14 @@ The node template is hosted on an arbitrary hosting stack of arbitrary length, w
component(software.application)artifact(zip.archive)...host 2(local.machine)hosthost
+!!! warning "Ansible (Quality: 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. + +!!! failure "Terraform (Quality: 0)" + Ansible is more specialized. Also using provisioners is a "last resort". + + + ### Scenario #6 In this scenario, the node template "component" of node type [software.application](/normative#softwareapplication){target=_blank} is deployed. @@ -447,6 +815,14 @@ The node template is hosted on an arbitrary hosting stack of arbitrary length, w
component(software.application)artifact(zip.archive)...host 2(remote.machine)hosthost
+!!! warning "Ansible (Quality: 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. + +!!! failure "Terraform (Quality: 0)" + Ansible is more specialized. Also using provisioners is a "last resort". + + + ## Component "virtual.machine" The following scenarios deploy a node template of node type [virtual.machine](/normative#virtualmachine){target=_blank} with various hosting stacks, artifacts, deployment technologies, and qualities. @@ -461,6 +837,14 @@ The node template is hosted on the node template "host 1" of node type [openstac
component(virtual.machine)artifact(machine.image)host 1(openstack.provider)host
+!!! warning "Ansible (Quality: 0.5)" + Terraform is more specialized. + +!!! success "Terraform (Quality: 1)" + Terraform provides a declarative module. + + + ## Appendix A "Rules" @@ -473,6 +857,8 @@ This appendix contains the deployment technology rules. | Component | [docker.engine](/normative#dockerengine){target=_blank} | | Technology | ansible | | Hosting | [local.machine](/normative#localmachine){target=_blank} | +| Quality | 1 | +| Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(docker.engine)host 1(local.machine)host
| ### Rule #2 @@ -482,6 +868,8 @@ This appendix contains the deployment technology rules. | Component | [docker.engine](/normative#dockerengine){target=_blank} | | Technology | terraform | | Hosting | [local.machine](/normative#localmachine){target=_blank} | +| Quality | 0 | +| Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(docker.engine)host 1(local.machine)host
| ### Rule #3 @@ -491,6 +879,8 @@ This appendix contains the deployment technology rules. | Component | [docker.engine](/normative#dockerengine){target=_blank} | | Technology | ansible | | Hosting | [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 1 | +| Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(docker.engine)host 1(remote.machine)host
| ### Rule #4 @@ -500,6 +890,8 @@ This appendix contains the deployment technology rules. | Component | [docker.engine](/normative#dockerengine){target=_blank} | | Technology | terraform | | Hosting | [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 0 | +| Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(docker.engine)host 1(remote.machine)host
| ### Rule #5 @@ -508,6 +900,8 @@ This appendix contains the deployment technology rules. | Identifier | gcp.service::ansible | | Component | [gcp.service](/normative#gcpservice){target=_blank} | | Technology | ansible | +| Quality | 0 | +| Reason | Ansible provides a declarative module | | Graph |
component(gcp.service)
| ### Rule #6 @@ -516,6 +910,8 @@ This appendix contains the deployment technology rules. | Identifier | gcp.service::terraform | | Component | [gcp.service](/normative#gcpservice){target=_blank} | | Technology | terraform | +| Quality | 1 | +| Reason | Terraform provides a declarative module. | | Graph |
component(gcp.service)
| ### Rule #7 @@ -525,6 +921,8 @@ This appendix contains the deployment technology rules. | Component | [ingress](/normative#ingress){target=_blank} | | Technology | ansible | | Hosting | [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | +| Quality | 0.5 | +| Reason | Kubernetes is more specialized. | | Graph |
component(ingress)host 1(kubernetes.cluster)host
| ### Rule #8 @@ -534,6 +932,8 @@ This appendix contains the deployment technology rules. | Component | [ingress](/normative#ingress){target=_blank} | | Technology | kubernetes | | Hosting | [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | +| Quality | 1 | +| Reason | Kubernetes is the underlying technology. | | Graph |
component(ingress)host 1(kubernetes.cluster)host
| ### Rule #9 @@ -543,6 +943,8 @@ This appendix contains the deployment technology rules. | Component | [ingress](/normative#ingress){target=_blank} | | Technology | terraform | | Hosting | [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | +| Quality | 0.5 | +| Reason | Kubernetes is more specialized. | | Graph |
component(ingress)host 1(kubernetes.cluster)host
| ### Rule #10 @@ -552,6 +954,8 @@ This appendix contains the deployment technology rules. | Component | [ingress](/normative#ingress){target=_blank} | | Technology | ansible | | Hosting | [local.machine](/normative#localmachine){target=_blank} | +| Quality | 1 | +| Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(ingress)host 1(local.machine)host
| ### Rule #11 @@ -561,6 +965,8 @@ This appendix contains the deployment technology rules. | Component | [ingress](/normative#ingress){target=_blank} | | Technology | terraform | | Hosting | [local.machine](/normative#localmachine){target=_blank} | +| Quality | 0 | +| Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(ingress)host 1(local.machine)host
| ### Rule #12 @@ -570,6 +976,8 @@ This appendix contains the deployment technology rules. | Component | [ingress](/normative#ingress){target=_blank} | | Technology | ansible | | Hosting | [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 1 | +| Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(ingress)host 1(remote.machine)host
| ### Rule #13 @@ -579,6 +987,8 @@ This appendix contains the deployment technology rules. | Component | [ingress](/normative#ingress){target=_blank} | | Technology | terraform | | Hosting | [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 0 | +| Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(ingress)host 1(remote.machine)host
| ### Rule #14 @@ -588,6 +998,8 @@ This appendix contains the deployment technology rules. | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | ansible | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 1 | +| Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(docker.engine)host 3(local.machine)hosthosthost
| ### Rule #15 @@ -597,6 +1009,8 @@ This appendix contains the deployment technology rules. | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | compose | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 0 | +| Reason | One-time use docker container ("fake Kubernetes job") with imperative parts, while other technologies provide declarative modules. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(docker.engine)host 3(local.machine)hosthosthost
| ### Rule #16 @@ -606,6 +1020,8 @@ This appendix contains the deployment technology rules. | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | terraform | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 1 | +| Reason | Terraform provides a declarative module. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(docker.engine)host 3(local.machine)hosthosthost
| ### Rule #17 @@ -615,6 +1031,8 @@ This appendix contains the deployment technology rules. | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | ansible | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 1 | +| Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(docker.engine)host 3(remote.machine)hosthosthost
| ### Rule #18 @@ -624,6 +1042,8 @@ This appendix contains the deployment technology rules. | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | compose | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 0 | +| Reason | One-time use docker container ("fake Kubernetes job") with imperative parts, while other technologies provide declarative modules. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(docker.engine)host 3(remote.machine)hosthosthost
| ### Rule #19 @@ -633,6 +1053,8 @@ This appendix contains the deployment technology rules. | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | terraform | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 0.75 | +| Reason | Terraform provides a declarative module. However, Terraform requires an SSH workaround. Ansible is more specialized. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(docker.engine)host 3(remote.machine)hosthosthost
| ### Rule #20 @@ -642,6 +1064,8 @@ This appendix contains the deployment technology rules. | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | ansible | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [gcp.cloudsql](/normative#gcpcloudsql){target=_blank} | +| Quality | 0 | +| Reason | 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. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(gcp.cloudsql)hosthost
| ### Rule #21 @@ -651,6 +1075,8 @@ This appendix contains the deployment technology rules. | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | terraform | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [gcp.cloudsql](/normative#gcpcloudsql){target=_blank} | +| Quality | 1 | +| Reason | Terraform provides a declarative module. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(gcp.cloudsql)hosthost
| ### Rule #22 @@ -660,6 +1086,8 @@ This appendix contains the deployment technology rules. | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | ansible | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | +| Quality | 1 | +| Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(kubernetes.cluster)hosthost
| ### Rule #23 @@ -669,6 +1097,8 @@ This appendix contains the deployment technology rules. | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | kubernetes | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | +| Quality | 0 | +| Reason | Kubernetes Job with imperative parts, while declarative other technologies provide declarative modules. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(kubernetes.cluster)hosthost
| ### Rule #24 @@ -678,6 +1108,8 @@ This appendix contains the deployment technology rules. | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | terraform | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | +| Quality | 0.25 | +| Reason | Ansible is more specialized. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(kubernetes.cluster)hosthost
| ### Rule #25 @@ -687,6 +1119,8 @@ This appendix contains the deployment technology rules. | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | ansible | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 1 | +| Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(local.machine)hosthost
| ### Rule #26 @@ -696,6 +1130,8 @@ This appendix contains the deployment technology rules. | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | terraform | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 1 | +| Reason | Terraform provides a declarative module. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(local.machine)hosthost
| ### Rule #27 @@ -705,6 +1141,8 @@ This appendix contains the deployment technology rules. | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | ansible | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 1 | +| Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(remote.machine)hosthost
| ### Rule #28 @@ -714,6 +1152,8 @@ This appendix contains the deployment technology rules. | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | terraform | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 0.5 | +| Reason | Terraform provides a declarative module. However, Terraform requires an SSH workaround. Ansible is more specialized. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(remote.machine)hosthost
| ### Rule #29 @@ -724,6 +1164,8 @@ This appendix contains the deployment technology rules. | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | ansible | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 0.5 | +| Reason | Docker Compose is more specialized | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(docker.engine)host 2(local.machine)hosthost
| ### Rule #30 @@ -734,6 +1176,8 @@ This appendix contains the deployment technology rules. | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | compose | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 1 | +| Reason | Docker is the underlying technology. | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(docker.engine)host 2(local.machine)hosthost
| ### Rule #31 @@ -744,6 +1188,8 @@ This appendix contains the deployment technology rules. | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | terraform | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 0.5 | +| Reason | Docker Compose is more specialized. | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(docker.engine)host 2(local.machine)hosthost
| ### Rule #32 @@ -754,6 +1200,8 @@ This appendix contains the deployment technology rules. | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | ansible | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 0.5 | +| Reason | Docker Compose is more specialized | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(docker.engine)host 2(remote.machine)hosthost
| ### Rule #33 @@ -764,6 +1212,8 @@ This appendix contains the deployment technology rules. | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | compose | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 1 | +| Reason | Docker is the underlying technology. | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(docker.engine)host 2(remote.machine)hosthost
| ### Rule #34 @@ -774,6 +1224,8 @@ This appendix contains the deployment technology rules. | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | terraform | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 0.5 | +| Reason | Docker Compose is more specialized. | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(docker.engine)host 2(remote.machine)hosthost
| ### Rule #35 @@ -784,6 +1236,8 @@ This appendix contains the deployment technology rules. | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | ansible | | Hosting | [gcp.cloudsql](/normative#gcpcloudsql){target=_blank} | +| Quality | 0 | +| Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(gcp.cloudsql)host
| ### Rule #36 @@ -794,6 +1248,8 @@ This appendix contains the deployment technology rules. | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | terraform | | Hosting | [gcp.cloudsql](/normative#gcpcloudsql){target=_blank} | +| Quality | 1 | +| Reason | Terraform provides a declarative module. | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(gcp.cloudsql)host
| ### Rule #37 @@ -804,6 +1260,8 @@ This appendix contains the deployment technology rules. | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | ansible | | Hosting | [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | +| Quality | 0.5 | +| Reason | Kubernetes is more specialized. | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(kubernetes.cluster)host
| ### Rule #38 @@ -814,6 +1272,8 @@ This appendix contains the deployment technology rules. | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | kubernetes | | Hosting | [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | +| Quality | 1 | +| Reason | Kubernetes is the underlying technology. | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(kubernetes.cluster)host
| ### Rule #39 @@ -824,6 +1284,8 @@ This appendix contains the deployment technology rules. | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | terraform | | Hosting | [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | +| Quality | 0.5 | +| Reason | Kubernetes is more specialized. | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(kubernetes.cluster)host
| ### Rule #40 @@ -834,6 +1296,8 @@ This appendix contains the deployment technology rules. | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | ansible | | Hosting | [local.machine](/normative#localmachine){target=_blank} | +| Quality | 1 | +| Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(local.machine)host
| ### Rule #41 @@ -844,6 +1308,8 @@ This appendix contains the deployment technology rules. | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | terraform | | Hosting | [local.machine](/normative#localmachine){target=_blank} | +| Quality | 0 | +| Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(local.machine)host
| ### Rule #42 @@ -854,6 +1320,8 @@ This appendix contains the deployment technology rules. | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | ansible | | Hosting | [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 1 | +| Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(remote.machine)host
| ### Rule #43 @@ -864,6 +1332,8 @@ This appendix contains the deployment technology rules. | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | terraform | | Hosting | [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 0 | +| Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(remote.machine)host
| ### Rule #44 @@ -873,6 +1343,8 @@ This appendix contains the deployment technology rules. | Component | [object.storage](/normative#objectstorage){target=_blank} | | Technology | ansible | | Hosting | [gcp.cloudstorage](/normative#gcpcloudstorage){target=_blank} | +| Quality | 0 | +| Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(object.storage)host 1(gcp.cloudstorage)host
| ### Rule #45 @@ -882,6 +1354,8 @@ This appendix contains the deployment technology rules. | Component | [object.storage](/normative#objectstorage){target=_blank} | | Technology | terraform | | Hosting | [gcp.cloudstorage](/normative#gcpcloudstorage){target=_blank} | +| Quality | 1 | +| Reason | Terraform provides a declarative module. | | Graph |
component(object.storage)host 1(gcp.cloudstorage)host
| ### Rule #46 @@ -891,6 +1365,8 @@ This appendix contains the deployment technology rules. | Component | [object.storage](/normative#objectstorage){target=_blank} | | Technology | ansible | | Hosting | [minio.server](/normative#minioserver){target=_blank} -> [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 1 | +| Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(object.storage)host 1(minio.server)host 2(docker.engine)host 3(local.machine)hosthosthost
| ### Rule #47 @@ -900,6 +1376,8 @@ This appendix contains the deployment technology rules. | Component | [object.storage](/normative#objectstorage){target=_blank} | | Technology | compose | | Hosting | [minio.server](/normative#minioserver){target=_blank} -> [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 0 | +| Reason | One-time use docker container ("fake Kubernetes job") with imperative parts, while other technologies provide declarative modules. | | Graph |
component(object.storage)host 1(minio.server)host 2(docker.engine)host 3(local.machine)hosthosthost
| ### Rule #48 @@ -909,6 +1387,8 @@ This appendix contains the deployment technology rules. | Component | [object.storage](/normative#objectstorage){target=_blank} | | Technology | terraform | | Hosting | [minio.server](/normative#minioserver){target=_blank} -> [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 1 | +| Reason | Terraform provides a declarative module. | | Graph |
component(object.storage)host 1(minio.server)host 2(docker.engine)host 3(local.machine)hosthosthost
| ### Rule #49 @@ -918,6 +1398,8 @@ This appendix contains the deployment technology rules. | Component | [object.storage](/normative#objectstorage){target=_blank} | | Technology | ansible | | Hosting | [minio.server](/normative#minioserver){target=_blank} -> [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 1 | +| Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(object.storage)host 1(minio.server)host 2(docker.engine)host 3(remote.machine)hosthosthost
| ### Rule #50 @@ -927,6 +1409,8 @@ This appendix contains the deployment technology rules. | Component | [object.storage](/normative#objectstorage){target=_blank} | | Technology | compose | | Hosting | [minio.server](/normative#minioserver){target=_blank} -> [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 0 | +| Reason | One-time use docker container ("fake Kubernetes job") with imperative parts, while other technologies provide declarative modules. | | Graph |
component(object.storage)host 1(minio.server)host 2(docker.engine)host 3(remote.machine)hosthosthost
| ### Rule #51 @@ -936,6 +1420,8 @@ This appendix contains the deployment technology rules. | Component | [object.storage](/normative#objectstorage){target=_blank} | | Technology | terraform | | Hosting | [minio.server](/normative#minioserver){target=_blank} -> [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 0.75 | +| Reason | Terraform provides a declarative module. However, Terraform requires an SSH workaround. Ansible is more specialized. | | Graph |
component(object.storage)host 1(minio.server)host 2(docker.engine)host 3(remote.machine)hosthosthost
| ### Rule #52 @@ -945,6 +1431,8 @@ This appendix contains the deployment technology rules. | Component | [object.storage](/normative#objectstorage){target=_blank} | | Technology | ansible | | Hosting | [minio.server](/normative#minioserver){target=_blank} -> [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | +| Quality | 1 | +| Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(object.storage)host 1(minio.server)host 2(kubernetes.cluster)hosthost
| ### Rule #53 @@ -954,6 +1442,8 @@ This appendix contains the deployment technology rules. | Component | [object.storage](/normative#objectstorage){target=_blank} | | Technology | kubernetes | | Hosting | [minio.server](/normative#minioserver){target=_blank} -> [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | +| Quality | 0 | +| Reason | Kubernetes Job with imperative parts, while declarative other technologies provide declarative modules. | | Graph |
component(object.storage)host 1(minio.server)host 2(kubernetes.cluster)hosthost
| ### Rule #54 @@ -963,6 +1453,8 @@ This appendix contains the deployment technology rules. | Component | [object.storage](/normative#objectstorage){target=_blank} | | Technology | terraform | | Hosting | [minio.server](/normative#minioserver){target=_blank} -> [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | +| Quality | 0.25 | +| Reason | Ansible is more specialized. | | Graph |
component(object.storage)host 1(minio.server)host 2(kubernetes.cluster)hosthost
| ### Rule #55 @@ -973,6 +1465,8 @@ This appendix contains the deployment technology rules. | Artifact | [cache.image](/normative#cacheimage){target=_blank} | | Technology | ansible | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 0.5 | +| Reason | Docker Compose is more specialized. | | Graph |
component(redis.server)artifact(cache.image)host 1(docker.engine)host 2(local.machine)hosthost
| ### Rule #56 @@ -983,6 +1477,8 @@ This appendix contains the deployment technology rules. | Artifact | [cache.image](/normative#cacheimage){target=_blank} | | Technology | compose | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 1 | +| Reason | Docker is the underlying technology. | | Graph |
component(redis.server)artifact(cache.image)host 1(docker.engine)host 2(local.machine)hosthost
| ### Rule #57 @@ -993,6 +1489,8 @@ This appendix contains the deployment technology rules. | Artifact | [cache.image](/normative#cacheimage){target=_blank} | | Technology | terraform | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 0.5 | +| Reason | Docker Compose is more specialized. | | Graph |
component(redis.server)artifact(cache.image)host 1(docker.engine)host 2(local.machine)hosthost
| ### Rule #58 @@ -1003,6 +1501,8 @@ This appendix contains the deployment technology rules. | Artifact | [cache.image](/normative#cacheimage){target=_blank} | | Technology | ansible | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 0.5 | +| Reason | Docker Compose is more specialized. | | Graph |
component(redis.server)artifact(cache.image)host 1(docker.engine)host 2(remote.machine)hosthost
| ### Rule #59 @@ -1013,6 +1513,8 @@ This appendix contains the deployment technology rules. | Artifact | [cache.image](/normative#cacheimage){target=_blank} | | Technology | compose | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 1 | +| Reason | Docker is the underlying technology. | | Graph |
component(redis.server)artifact(cache.image)host 1(docker.engine)host 2(remote.machine)hosthost
| ### Rule #60 @@ -1023,6 +1525,8 @@ This appendix contains the deployment technology rules. | Artifact | [cache.image](/normative#cacheimage){target=_blank} | | Technology | terraform | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 0.5 | +| Reason | Docker Compose is more specialized. | | Graph |
component(redis.server)artifact(cache.image)host 1(docker.engine)host 2(remote.machine)hosthost
| ### Rule #61 @@ -1033,6 +1537,8 @@ This appendix contains the deployment technology rules. | Artifact | [cache.image](/normative#cacheimage){target=_blank} | | Technology | ansible | | Hosting | [gcp.memorystore](/normative#gcpmemorystore){target=_blank} | +| Quality | 0 | +| Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(redis.server)artifact(cache.image)host 1(gcp.memorystore)host
| ### Rule #62 @@ -1043,6 +1549,8 @@ This appendix contains the deployment technology rules. | Artifact | [cache.image](/normative#cacheimage){target=_blank} | | Technology | terraform | | Hosting | [gcp.memorystore](/normative#gcpmemorystore){target=_blank} | +| Quality | 1 | +| Reason | Terraform provides a declarative module. | | Graph |
component(redis.server)artifact(cache.image)host 1(gcp.memorystore)host
| ### Rule #63 @@ -1053,6 +1561,8 @@ This appendix contains the deployment technology rules. | Artifact | [cache.image](/normative#cacheimage){target=_blank} | | Technology | ansible | | Hosting | [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | +| Quality | 0.5 | +| Reason | Kubernetes is more specialized. | | Graph |
component(redis.server)artifact(cache.image)host 1(kubernetes.cluster)host
| ### Rule #64 @@ -1063,6 +1573,8 @@ This appendix contains the deployment technology rules. | Artifact | [cache.image](/normative#cacheimage){target=_blank} | | Technology | kubernetes | | Hosting | [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | +| Quality | 1 | +| Reason | Kubernetes is the underlying technology. | | Graph |
component(redis.server)artifact(cache.image)host 1(kubernetes.cluster)host
| ### Rule #65 @@ -1073,6 +1585,8 @@ This appendix contains the deployment technology rules. | Artifact | [cache.image](/normative#cacheimage){target=_blank} | | Technology | terraform | | Hosting | [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | +| Quality | 0.5 | +| Reason | Kubernetes is more specialized. | | Graph |
component(redis.server)artifact(cache.image)host 1(kubernetes.cluster)host
| ### Rule #66 @@ -1083,6 +1597,8 @@ This appendix contains the deployment technology rules. | Artifact | [docker.image](/normative#dockerimage){target=_blank} | | Technology | ansible | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 0.5 | +| Reason | Docker Compose is more specialized. | | Graph |
component(service.application)artifact(docker.image)host 1(docker.engine)host 2(local.machine)hosthost
| ### Rule #67 @@ -1093,6 +1609,8 @@ This appendix contains the deployment technology rules. | Artifact | [docker.image](/normative#dockerimage){target=_blank} | | Technology | compose | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 1 | +| Reason | Docker is the underlying technology. | | Graph |
component(service.application)artifact(docker.image)host 1(docker.engine)host 2(local.machine)hosthost
| ### Rule #68 @@ -1103,6 +1621,8 @@ This appendix contains the deployment technology rules. | Artifact | [docker.image](/normative#dockerimage){target=_blank} | | Technology | terraform | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 0.5 | +| Reason | Docker Compose is more specialized. | | Graph |
component(service.application)artifact(docker.image)host 1(docker.engine)host 2(local.machine)hosthost
| ### Rule #69 @@ -1113,6 +1633,8 @@ This appendix contains the deployment technology rules. | Artifact | [docker.image](/normative#dockerimage){target=_blank} | | Technology | ansible | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 0.5 | +| Reason | Docker Compose is more specialized. | | Graph |
component(service.application)artifact(docker.image)host 1(docker.engine)host 2(remote.machine)hosthost
| ### Rule #70 @@ -1123,6 +1645,8 @@ This appendix contains the deployment technology rules. | Artifact | [docker.image](/normative#dockerimage){target=_blank} | | Technology | compose | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 1 | +| Reason | Docker is the underlying technology. | | Graph |
component(service.application)artifact(docker.image)host 1(docker.engine)host 2(remote.machine)hosthost
| ### Rule #71 @@ -1133,6 +1657,8 @@ This appendix contains the deployment technology rules. | Artifact | [docker.image](/normative#dockerimage){target=_blank} | | Technology | terraform | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 0.5 | +| Reason | Docker Compose is more specialized. | | Graph |
component(service.application)artifact(docker.image)host 1(docker.engine)host 2(remote.machine)hosthost
| ### Rule #72 @@ -1143,6 +1669,8 @@ This appendix contains the deployment technology rules. | Artifact | [docker.image](/normative#dockerimage){target=_blank} | | Technology | ansible | | Hosting | [gcp.cloudrun](/normative#gcpcloudrun){target=_blank} | +| Quality | 0 | +| Reason | Custom module with imperative parts, while Terraform provides a declarative module. | | Graph |
component(service.application)artifact(docker.image)host 1(gcp.cloudrun)host
| ### Rule #73 @@ -1153,6 +1681,8 @@ This appendix contains the deployment technology rules. | Artifact | [docker.image](/normative#dockerimage){target=_blank} | | Technology | terraform | | Hosting | [gcp.cloudrun](/normative#gcpcloudrun){target=_blank} | +| Quality | 1 | +| Reason | Terraform provides a declarative module. | | Graph |
component(service.application)artifact(docker.image)host 1(gcp.cloudrun)host
| ### Rule #74 @@ -1163,6 +1693,8 @@ This appendix contains the deployment technology rules. | Artifact | [docker.image](/normative#dockerimage){target=_blank} | | Technology | ansible | | Hosting | [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | +| Quality | 0.5 | +| Reason | Kubernetes is more specialized. | | Graph |
component(service.application)artifact(docker.image)host 1(kubernetes.cluster)host
| ### Rule #75 @@ -1173,6 +1705,8 @@ This appendix contains the deployment technology rules. | Artifact | [docker.image](/normative#dockerimage){target=_blank} | | Technology | kubernetes | | Hosting | [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | +| Quality | 1 | +| Reason | Kubernetes is the underlying technology. | | Graph |
component(service.application)artifact(docker.image)host 1(kubernetes.cluster)host
| ### Rule #76 @@ -1183,6 +1717,8 @@ This appendix contains the deployment technology rules. | Artifact | [docker.image](/normative#dockerimage){target=_blank} | | Technology | terraform | | Hosting | [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | +| Quality | 0.5 | +| Reason | Kubernetes is more specialized. | | Graph |
component(service.application)artifact(docker.image)host 1(kubernetes.cluster)host
| ### Rule #77 @@ -1193,6 +1729,8 @@ This appendix contains the deployment technology rules. | Artifact | [tar.archive](/normative#tararchive){target=_blank} | | Technology | ansible | | Hosting | * -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 1 | +| Reason | Primary use case due to the specialization of Ansible. Special integration for systemd. | | Graph |
component(service.application)artifact(tar.archive)...host 2(local.machine)hosthost
| ### Rule #78 @@ -1203,6 +1741,8 @@ This appendix contains the deployment technology rules. | Artifact | [tar.archive](/normative#tararchive){target=_blank} | | Technology | terraform | | Hosting | * -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 0 | +| Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(service.application)artifact(tar.archive)...host 2(local.machine)hosthost
| ### Rule #79 @@ -1213,6 +1753,8 @@ This appendix contains the deployment technology rules. | Artifact | [tar.archive](/normative#tararchive){target=_blank} | | Technology | ansible | | Hosting | * -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 1 | +| Reason | Primary use case due to the specialization of Ansible. Special integration for systemd. | | Graph |
component(service.application)artifact(tar.archive)...host 2(remote.machine)hosthost
| ### Rule #80 @@ -1223,6 +1765,8 @@ This appendix contains the deployment technology rules. | Artifact | [tar.archive](/normative#tararchive){target=_blank} | | Technology | terraform | | Hosting | * -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 0 | +| Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(service.application)artifact(tar.archive)...host 2(remote.machine)hosthost
| ### Rule #81 @@ -1233,6 +1777,8 @@ This appendix contains the deployment technology rules. | Artifact | [zip.archive](/normative#ziparchive){target=_blank} | | Technology | ansible | | Hosting | * -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 1 | +| Reason | Primary use case due to the specialization of Ansible. Special integration for systemd. | | Graph |
component(service.application)artifact(zip.archive)...host 2(local.machine)hosthost
| ### Rule #82 @@ -1243,6 +1789,8 @@ This appendix contains the deployment technology rules. | Artifact | [zip.archive](/normative#ziparchive){target=_blank} | | Technology | terraform | | Hosting | * -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 0 | +| Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(service.application)artifact(zip.archive)...host 2(local.machine)hosthost
| ### Rule #83 @@ -1253,6 +1801,8 @@ This appendix contains the deployment technology rules. | Artifact | [zip.archive](/normative#ziparchive){target=_blank} | | Technology | ansible | | Hosting | * -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 1 | +| Reason | Primary use case due to the specialization of Ansible. Special integration for systemd. | | Graph |
component(service.application)artifact(zip.archive)...host 2(remote.machine)hosthost
| ### Rule #84 @@ -1263,6 +1813,8 @@ This appendix contains the deployment technology rules. | Artifact | [zip.archive](/normative#ziparchive){target=_blank} | | Technology | terraform | | Hosting | * -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 0 | +| Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(service.application)artifact(zip.archive)...host 2(remote.machine)hosthost
| ### Rule #85 @@ -1273,6 +1825,8 @@ This appendix contains the deployment technology rules. | Artifact | [zip.archive](/normative#ziparchive){target=_blank} | | Technology | ansible | | Hosting | [gcp.appengine](/normative#gcpappengine){target=_blank} | +| Quality | 0 | +| Reason | Custom module with imperative parts, while Terraform provides a declarative module. | | Graph |
component(service.application)artifact(zip.archive)host 1(gcp.appengine)host
| ### Rule #86 @@ -1283,6 +1837,8 @@ This appendix contains the deployment technology rules. | Artifact | [zip.archive](/normative#ziparchive){target=_blank} | | Technology | terraform | | Hosting | [gcp.appengine](/normative#gcpappengine){target=_blank} | +| Quality | 1 | +| Reason | Terraform provides a declarative module. | | Graph |
component(service.application)artifact(zip.archive)host 1(gcp.appengine)host
| ### Rule #87 @@ -1293,6 +1849,8 @@ This appendix contains the deployment technology rules. | Artifact | [apt.package](/normative#aptpackage){target=_blank} | | Technology | ansible | | Hosting | * -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 1 | +| Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(software.application)artifact(apt.package)...host 2(local.machine)hosthost
| ### Rule #88 @@ -1303,6 +1861,8 @@ This appendix contains the deployment technology rules. | Artifact | [apt.package](/normative#aptpackage){target=_blank} | | Technology | terraform | | Hosting | * -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 0 | +| Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(software.application)artifact(apt.package)...host 2(local.machine)hosthost
| ### Rule #89 @@ -1313,6 +1873,8 @@ This appendix contains the deployment technology rules. | Artifact | [apt.package](/normative#aptpackage){target=_blank} | | Technology | ansible | | Hosting | * -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 1 | +| Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(software.application)artifact(apt.package)...host 2(remote.machine)hosthost
| ### Rule #90 @@ -1323,6 +1885,8 @@ This appendix contains the deployment technology rules. | Artifact | [apt.package](/normative#aptpackage){target=_blank} | | Technology | terraform | | Hosting | * -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 0 | +| Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(software.application)artifact(apt.package)...host 2(remote.machine)hosthost
| ### Rule #91 @@ -1333,6 +1897,8 @@ This appendix contains the deployment technology rules. | Artifact | [tar.archive](/normative#tararchive){target=_blank} | | Technology | ansible | | Hosting | * -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 0.5 | +| Reason | 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. | | Graph |
component(software.application)artifact(tar.archive)...host 2(local.machine)hosthost
| ### Rule #92 @@ -1343,6 +1909,8 @@ This appendix contains the deployment technology rules. | Artifact | [tar.archive](/normative#tararchive){target=_blank} | | Technology | terraform | | Hosting | * -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 0 | +| Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(software.application)artifact(tar.archive)...host 2(local.machine)hosthost
| ### Rule #93 @@ -1353,6 +1921,8 @@ This appendix contains the deployment technology rules. | Artifact | [tar.archive](/normative#tararchive){target=_blank} | | Technology | ansible | | Hosting | * -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 0.5 | +| Reason | 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". | | Graph |
component(software.application)artifact(tar.archive)...host 2(remote.machine)hosthost
| ### Rule #94 @@ -1363,6 +1933,8 @@ This appendix contains the deployment technology rules. | Artifact | [tar.archive](/normative#tararchive){target=_blank} | | Technology | terraform | | Hosting | * -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 0 | +| Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(software.application)artifact(tar.archive)...host 2(remote.machine)hosthost
| ### Rule #95 @@ -1373,6 +1945,8 @@ This appendix contains the deployment technology rules. | Artifact | [zip.archive](/normative#ziparchive){target=_blank} | | Technology | ansible | | Hosting | * -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 0.5 | +| Reason | 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. | | Graph |
component(software.application)artifact(zip.archive)...host 2(local.machine)hosthost
| ### Rule #96 @@ -1383,6 +1957,8 @@ This appendix contains the deployment technology rules. | Artifact | [zip.archive](/normative#ziparchive){target=_blank} | | Technology | terraform | | Hosting | * -> [local.machine](/normative#localmachine){target=_blank} | +| Quality | 0 | +| Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(software.application)artifact(zip.archive)...host 2(local.machine)hosthost
| ### Rule #97 @@ -1393,6 +1969,8 @@ This appendix contains the deployment technology rules. | Artifact | [zip.archive](/normative#ziparchive){target=_blank} | | Technology | ansible | | Hosting | * -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 0.5 | +| Reason | 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. | | Graph |
component(software.application)artifact(zip.archive)...host 2(remote.machine)hosthost
| ### Rule #98 @@ -1403,6 +1981,8 @@ This appendix contains the deployment technology rules. | Artifact | [zip.archive](/normative#ziparchive){target=_blank} | | Technology | terraform | | Hosting | * -> [remote.machine](/normative#remotemachine){target=_blank} | +| Quality | 0 | +| Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(software.application)artifact(zip.archive)...host 2(remote.machine)hosthost
| ### Rule #99 @@ -1413,6 +1993,8 @@ This appendix contains the deployment technology rules. | Artifact | [machine.image](/normative#machineimage){target=_blank} | | Technology | ansible | | Hosting | [openstack.provider](/normative#openstackprovider){target=_blank} | +| Quality | 0.5 | +| Reason | Terraform is more specialized. | | Graph |
component(virtual.machine)artifact(machine.image)host 1(openstack.provider)host
| ### Rule #100 @@ -1423,8 +2005,19 @@ This appendix contains the deployment technology rules. | Artifact | [machine.image](/normative#machineimage){target=_blank} | | Technology | terraform | | Hosting | [openstack.provider](/normative#openstackprovider){target=_blank} | +| Quality | 1 | +| Reason | Terraform provides a declarative module. | | Graph |
component(virtual.machine)artifact(machine.image)host 1(openstack.provider)host
| +## Appendix B "YAML" + +This appendix contains the deployment technology rules as YAML. +The rules are also available as [download](technology-rules.yaml){download=technology-rules.yaml}. + +```yaml linenums="1" +--8<-- "variability4tosca/rules/technology-rules.yaml" +``` + --8<-- "vacd.md" diff --git a/docs/docs/variability4tosca/rules/technology-rules.yaml b/docs/docs/variability4tosca/rules/technology-rules.yaml index 119c433eda..e89d8d70cb 100644 --- a/docs/docs/variability4tosca/rules/technology-rules.yaml +++ b/docs/docs/variability4tosca/rules/technology-rules.yaml @@ -29,7 +29,7 @@ - technology: ansible component: gcp.service hosting: [] - weight: 1 + weight: 0 reason: Ansible provides a declarative module details: '"google.cloud.gcp_serviceusage_service" task' - technology: terraform @@ -133,14 +133,14 @@ - mysql.dbms - docker.engine - remote.machine - weight: 0.5 + weight: 0.75 reason: Terraform provides a declarative module. However, Terraform requires an SSH workaround. Ansible is more specialized. - technology: ansible component: mysql.database hosting: - mysql.dbms - gcp.cloudsql - weight: 0.5 + weight: 0 reason: 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. - technology: terraform component: mysql.database @@ -168,7 +168,7 @@ hosting: - mysql.dbms - kubernetes.cluster - weight: 0 + weight: 0.25 reason: Ansible is more specialized. - technology: ansible component: mysql.database @@ -257,7 +257,7 @@ artifact: dbms.image hosting: - gcp.cloudsql - weight: 1 + weight: 0 reason: Primary use case due to the specialization of Ansible. details: '"google.cloud.gcp_sql_instance" and "google.cloud.gcp_sql_user" tasks' - technology: terraform @@ -328,7 +328,7 @@ component: object.storage hosting: - gcp.cloudstorage - weight: 1 + weight: 0 reason: Primary use case due to the specialization of Ansible. - technology: terraform component: object.storage @@ -382,7 +382,7 @@ - minio.server - docker.engine - remote.machine - weight: 0.5 + weight: 0.75 reason: Terraform provides a declarative module. However, Terraform requires an SSH workaround. Ansible is more specialized. - technology: ansible component: object.storage @@ -403,7 +403,7 @@ hosting: - minio.server - kubernetes.cluster - weight: 0 + weight: 0.25 reason: Ansible is more specialized. - technology: ansible component: redis.server @@ -464,7 +464,7 @@ artifact: cache.image hosting: - gcp.memorystore - weight: 1 + weight: 0 reason: Primary use case due to the specialization of Ansible. - technology: terraform component: redis.server diff --git a/tasks/docs/generate/rules/template.ejs b/tasks/docs/generate/rules/template.ejs index 93a43fc6e7..de696a4b9e 100644 --- a/tasks/docs/generate/rules/template.ejs +++ b/tasks/docs/generate/rules/template.ejs @@ -9,6 +9,8 @@ tags: # Deployment Technology Rules Specification 1.0 Release Candidate +{{ autogenerated_notice('./task docs:generate:rules') }} + !!! info "Hidden Information" The document does not specify quality assignments at this stage. @@ -18,8 +20,6 @@ tags: !!! info "Quick Tip #2" You can query technology rules for your deployment scenario using `vintner utils scenarios`! -{{ autogenerated_notice('./task docs:generate:rules') }} - This document specifies the deployment technology rules. The specification is under active development and is not backwards compatible with any previous versions. @@ -57,6 +57,11 @@ The scenario does not require a specific hosting.
<%- scenario.svg %>
+<% scenario.technologies.forEach(technology => { %> +!!! <% if (technology.quality > 0.75) { -%>success<% } else if (technology.quality > 0.5) { -%>question<% } else if (technology.quality > 0.25) { -%>warning<% } else { -%>failure<% } -%> "<%= technology.name %> (Quality: <%= technology.quality %>)" + <%= technology.reason %> +<% }) %> + <% }) -%> <% }) -%> @@ -78,8 +83,19 @@ This appendix contains the deployment technology rules. <% if (rule.hosting.length !== 0) {-%> | Hosting | <%= rule.hosting.map(link).join(" -> ") %> | <% } -%> +| Quality | <%= rule.weight %> | +| Reason | <%= rule.reason %> | | Graph |
<%- svgs["rule." + rule.technology + "." + (index + 1)]%>
| <% }) %> +## Appendix B "YAML" + +This appendix contains the deployment technology rules as YAML. +The rules are also available as [download](technology-rules.yaml){download=technology-rules.yaml}. + +```yaml linenums="1" +--8<-- "variability4tosca/rules/technology-rules.yaml" +``` + --8<-- "vacd.md" From eff8814ad4769077fc1a624db6d64d4da8d8bdfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miles=20St=C3=B6tzner?= Date: Mon, 18 Nov 2024 14:08:04 +0100 Subject: [PATCH 3/4] drop details --- .../rules/technology-rules.yaml | 70 ------------------- src/controller/study/technology.ts | 2 - src/specification/technology-template.ts | 1 - .../machine/local-machine/ansible/index.ts | 1 - .../machine/local-machine/terraform/index.ts | 1 - .../machine/remote-machine/ansible/index.ts | 1 - .../machine/remote-machine/terraform/index.ts | 1 - .../generators/gcp-service/ansible/index.ts | 1 - .../generators/gcp-service/terraform/index.ts | 1 - .../kubernetes-cluster/ansible/index.ts | 1 - .../kubernetes-cluster/kubernetes/index.ts | 1 - .../kubernetes-cluster/terraform/index.ts | 1 - .../machine/local-machine/ansible/index.ts | 2 - .../machine/local-machine/terraform/index.ts | 2 - .../machine/remote-machine/ansible/index.ts | 2 - .../machine/remote-machine/terraform/index.ts | 2 - .../machine/local-machine/ansible/index.ts | 1 - .../machine/local-machine/terraform/index.ts | 1 - .../machine/remote-machine/ansible/index.ts | 1 - .../machine/remote-machine/terraform/index.ts | 1 - .../machine/local-machine/ansible/index.ts | 1 - .../machine/local-machine/compose/index.ts | 1 - .../machine/local-machine/terraform/index.ts | 1 - .../machine/remote-machine/ansible/index.ts | 1 - .../machine/remote-machine/compose/index.ts | 1 - .../machine/remote-machine/terraform/index.ts | 1 - .../dbms-image/gcp-cloudsql/ansible/index.ts | 1 - .../gcp-cloudsql/terraform/index.ts | 1 - .../kubernetes-cluster/ansible/index.ts | 1 - .../kubernetes-cluster/kubernetes/index.ts | 1 - .../kubernetes-cluster/terraform/index.ts | 1 - .../machine/local-machine/ansible/index.ts | 2 - .../machine/local-machine/terraform/index.ts | 2 - .../machine/remote-machine/ansible/index.ts | 2 - .../machine/remote-machine/terraform/index.ts | 2 - .../local-machine/ansible/index.ts | 1 - .../local-machine/compose/index.ts | 1 - .../local-machine/terraform/index.ts | 1 - .../remote-machine/ansible/index.ts | 1 - .../remote-machine/compose/index.ts | 1 - .../remote-machine/terraform/index.ts | 1 - .../kubernetes-cluster/kubernetes/index.ts | 1 - .../local-machine/ansible/index.ts | 1 - .../local-machine/compose/index.ts | 1 - .../local-machine/terraform/index.ts | 1 - .../remote-machine/ansible/index.ts | 1 - .../remote-machine/compose/index.ts | 1 - .../remote-machine/terraform/index.ts | 1 - .../gcp-cloudrun/ansible/index.ts | 1 - .../gcp-cloudrun/terraform/index.ts | 1 - .../kubernetes-cluster/ansible/index.ts | 1 - .../kubernetes-cluster/kubernetes/index.ts | 1 - .../kubernetes-cluster/terraform/index.ts | 1 - .../machine/local-machine/ansible/index.ts | 2 - .../machine/local-machine/terraform/index.ts | 1 - .../machine/remote-machine/ansible/index.ts | 2 - .../machine/remote-machine/terraform/index.ts | 1 - .../machine/local-machine/ansible/index.ts | 2 - .../machine/local-machine/terraform/index.ts | 1 - .../machine/remote-machine/ansible/index.ts | 2 - .../machine/remote-machine/terraform/index.ts | 1 - .../gcp-appengine/ansible/index.ts | 2 - .../gcp-appengine/terraform/index.ts | 2 - .../machine/local-machine/ansible/index.ts | 2 - .../machine/local-machine/terraform/index.ts | 1 - .../machine/remote-machine/ansible/index.ts | 2 - .../machine/remote-machine/terraform/index.ts | 1 - .../machine/local-machine/ansible/index.ts | 2 - .../machine/local-machine/terraform/index.ts | 1 - .../machine/remote-machine/ansible/index.ts | 2 - .../machine/remote-machine/terraform/index.ts | 1 - .../machine/local-machine/ansible/index.ts | 2 - .../machine/local-machine/terraform/index.ts | 1 - .../machine/remote-machine/ansible/index.ts | 2 - .../machine/remote-machine/terraform/index.ts | 1 - .../openstack-provider/ansible/index.ts | 2 - .../openstack-provider/terraform/index.ts | 2 - src/technologies/plugins/rules/registry.ts | 1 - src/technologies/plugins/rules/types.ts | 5 -- tasks/docs/generate/rules/task.ts | 2 - 80 files changed, 177 deletions(-) diff --git a/docs/docs/variability4tosca/rules/technology-rules.yaml b/docs/docs/variability4tosca/rules/technology-rules.yaml index e89d8d70cb..5aac5a95bb 100644 --- a/docs/docs/variability4tosca/rules/technology-rules.yaml +++ b/docs/docs/variability4tosca/rules/technology-rules.yaml @@ -4,89 +4,76 @@ - local.machine weight: 1 reason: Primary use case due to the specialization of Ansible. - details: '"ansible.builtin.shell", "ansible.builtin.group", and "ansible.builtin.user" tasks' - technology: terraform component: docker.engine hosting: - local.machine weight: 0 reason: Ansible is more specialized. Also using provisioners is a "last resort". - details: '"local-exec" provider' - technology: ansible component: docker.engine hosting: - remote.machine weight: 1 reason: Primary use case due to the specialization of Ansible. - details: '"ansible.builtin.shell", "ansible.builtin.group", and "ansible.builtin.user" tasks' - technology: terraform component: docker.engine hosting: - remote.machine weight: 0 reason: Ansible is more specialized. Also using provisioners is a "last resort". - details: '"remote-exec" provider' - technology: ansible component: gcp.service hosting: [] weight: 0 reason: Ansible provides a declarative module - details: '"google.cloud.gcp_serviceusage_service" task' - technology: terraform component: gcp.service hosting: [] weight: 1 reason: Terraform provides a declarative module. - details: '"google_project_service" resource' - technology: ansible component: ingress hosting: - kubernetes.cluster weight: 0.5 reason: Kubernetes is more specialized. - details: '"kubernetes.core.k8s" task' - technology: kubernetes component: ingress hosting: - kubernetes.cluster weight: 1 reason: Kubernetes is the underlying technology. - details: Kubernetes manifest generated and applied - technology: terraform component: ingress hosting: - kubernetes.cluster weight: 0.5 reason: Kubernetes is more specialized. - details: '"kubernetes_service_v1" resource' - technology: ansible component: ingress hosting: - local.machine weight: 1 reason: Primary use case due to the specialization of Ansible. - details: '"ansible.builtin.apt_key", "ansible.builtin.apt_repository", "ansible.builtin.apt", "ansible.builtin.copy", and "ansible.builtin.systemd" tasks' - technology: terraform component: ingress hosting: - local.machine weight: 0 reason: Ansible is more specialized. Also using provisioners is a "last resort". - details: '"local_file" resource to create the installation script and "terraform_data" to execute the script using the "local-exec" provisioner' - technology: ansible component: ingress hosting: - remote.machine weight: 1 reason: Primary use case due to the specialization of Ansible. - details: '"ansible.builtin.apt_key", "ansible.builtin.apt_repository", "ansible.builtin.apt", "ansible.builtin.copy", and "ansible.builtin.systemd" tasks' - technology: terraform component: ingress hosting: - remote.machine weight: 0 reason: Ansible is more specialized. Also using provisioners is a "last resort". - details: '"terraform_data" resource with an "ssh" connection to the virtual machine to copy the install script using the "file" provisioner on the virtual machine and to execute the script using the "remote-exec" provisioner' - technology: ansible component: mysql.database hosting: @@ -206,7 +193,6 @@ - local.machine weight: 0.5 reason: Docker Compose is more specialized - details: '"community.docker.docker_container" task' - technology: compose component: mysql.dbms artifact: dbms.image @@ -215,7 +201,6 @@ - local.machine weight: 1 reason: Docker is the underlying technology. - details: docker-compose manifest generated and applied - technology: terraform component: mysql.dbms artifact: dbms.image @@ -224,7 +209,6 @@ - local.machine weight: 0.5 reason: Docker Compose is more specialized. - details: '"docker_container" and "docker_image" resources' - technology: ansible component: mysql.dbms artifact: dbms.image @@ -233,7 +217,6 @@ - remote.machine weight: 0.5 reason: Docker Compose is more specialized - details: '"community.docker.docker_container" task' - technology: compose component: mysql.dbms artifact: dbms.image @@ -242,7 +225,6 @@ - remote.machine weight: 1 reason: Docker is the underlying technology. - details: docker-compose manifest generated and applied - technology: terraform component: mysql.dbms artifact: dbms.image @@ -251,7 +233,6 @@ - remote.machine weight: 0.5 reason: Docker Compose is more specialized. - details: '"docker_container" and "docker_image" resources' - technology: ansible component: mysql.dbms artifact: dbms.image @@ -259,7 +240,6 @@ - gcp.cloudsql weight: 0 reason: Primary use case due to the specialization of Ansible. - details: '"google.cloud.gcp_sql_instance" and "google.cloud.gcp_sql_user" tasks' - technology: terraform component: mysql.dbms artifact: dbms.image @@ -267,7 +247,6 @@ - gcp.cloudsql weight: 1 reason: Terraform provides a declarative module. - details: '"google_sql_database_instance" and "google_sql_user" resources' - technology: ansible component: mysql.dbms artifact: dbms.image @@ -275,7 +254,6 @@ - kubernetes.cluster weight: 0.5 reason: Kubernetes is more specialized. - details: '"kubernetes.core.k8s" tasks' - technology: kubernetes component: mysql.dbms artifact: dbms.image @@ -283,7 +261,6 @@ - kubernetes.cluster weight: 1 reason: Kubernetes is the underlying technology. - details: Kubernetes manifest generated and applied - technology: terraform component: mysql.dbms artifact: dbms.image @@ -291,7 +268,6 @@ - kubernetes.cluster weight: 0.5 reason: Kubernetes is more specialized. - details: '"kubernetes_deployment_v1" and "kubernetes_service_v1" resources' - technology: ansible component: mysql.dbms artifact: dbms.image @@ -299,7 +275,6 @@ - local.machine weight: 1 reason: Primary use case due to the specialization of Ansible. - details: '"ansible.builtin.apt", "ansible.builtin.systemd", "ansible.builtin.copy", "ansible.builtin.lineinfile", and "community.mysql.mysql_user" tasks' - technology: terraform component: mysql.dbms artifact: dbms.image @@ -307,7 +282,6 @@ - local.machine weight: 0 reason: Ansible is more specialized. Also using provisioners is a "last resort". - details: '"local_file" resource to create the installation script and "terraform_data" to execute the script using the "local-exec" provisioner' - technology: ansible component: mysql.dbms artifact: dbms.image @@ -315,7 +289,6 @@ - remote.machine weight: 1 reason: Primary use case due to the specialization of Ansible. - details: '"ansible.builtin.apt", "ansible.builtin.systemd", "ansible.builtin.copy", "ansible.builtin.lineinfile", and "community.mysql.mysql_user" tasks' - technology: terraform component: mysql.dbms artifact: dbms.image @@ -323,7 +296,6 @@ - remote.machine weight: 0 reason: Ansible is more specialized. Also using provisioners is a "last resort". - details: '"terraform_data" resource with an "ssh" connection to the virtual machine to copy the install script using the "file" provisioner on the virtual machine and to execute the script using the "remote-exec" provisioner' - technology: ansible component: object.storage hosting: @@ -413,7 +385,6 @@ - local.machine weight: 0.5 reason: Docker Compose is more specialized. - details: '"community.docker.docker_container" task' - technology: compose component: redis.server artifact: cache.image @@ -422,7 +393,6 @@ - local.machine weight: 1 reason: Docker is the underlying technology. - details: docker compose manifest generated and applied - technology: terraform component: redis.server artifact: cache.image @@ -431,7 +401,6 @@ - local.machine weight: 0.5 reason: Docker Compose is more specialized. - details: '"docker_container" and "docker_image" resources' - technology: ansible component: redis.server artifact: cache.image @@ -440,7 +409,6 @@ - remote.machine weight: 0.5 reason: Docker Compose is more specialized. - details: '"community.docker.docker_container" task' - technology: compose component: redis.server artifact: cache.image @@ -449,7 +417,6 @@ - remote.machine weight: 1 reason: Docker is the underlying technology. - details: docker compose manifest generated and applied - technology: terraform component: redis.server artifact: cache.image @@ -458,7 +425,6 @@ - remote.machine weight: 0.5 reason: Docker Compose is more specialized. - details: '"docker_container" and "docker_image" resources' - technology: ansible component: redis.server artifact: cache.image @@ -487,7 +453,6 @@ - kubernetes.cluster weight: 1 reason: Kubernetes is the underlying technology. - details: Kubernetes manifest generated and applied - technology: terraform component: redis.server artifact: cache.image @@ -503,7 +468,6 @@ - local.machine weight: 0.5 reason: Docker Compose is more specialized. - details: '"community.docker.docker_container" task' - technology: compose component: service.application artifact: docker.image @@ -512,7 +476,6 @@ - local.machine weight: 1 reason: Docker is the underlying technology. - details: docker compose manifest generated and applied - technology: terraform component: service.application artifact: docker.image @@ -521,7 +484,6 @@ - local.machine weight: 0.5 reason: Docker Compose is more specialized. - details: '"docker_container" and "docker_image" resources' - technology: ansible component: service.application artifact: docker.image @@ -530,7 +492,6 @@ - remote.machine weight: 0.5 reason: Docker Compose is more specialized. - details: '"community.docker.docker_container" task' - technology: compose component: service.application artifact: docker.image @@ -539,7 +500,6 @@ - remote.machine weight: 1 reason: Docker is the underlying technology. - details: docker compose manifest generated and applied - technology: terraform component: service.application artifact: docker.image @@ -548,7 +508,6 @@ - remote.machine weight: 0.5 reason: Docker Compose is more specialized. - details: '"docker_container" and "docker_image" resources' - technology: ansible component: service.application artifact: docker.image @@ -556,7 +515,6 @@ - gcp.cloudrun weight: 0 reason: Custom module with imperative parts, while Terraform provides a declarative module. - details: '"ansible.builtin.shell", "ansible.builtin.tempfile", and "ansible.builtin.copy" tasks ' - technology: terraform component: service.application artifact: docker.image @@ -564,7 +522,6 @@ - gcp.cloudrun weight: 1 reason: Terraform provides a declarative module. - details: '"google_cloud_run_v2_service" and "google_cloud_run_service_iam_binding" resources' - technology: ansible component: service.application artifact: docker.image @@ -572,7 +529,6 @@ - kubernetes.cluster weight: 0.5 reason: Kubernetes is more specialized. - details: '"kubernetes.core.k8s" tasks' - technology: kubernetes component: service.application artifact: docker.image @@ -580,7 +536,6 @@ - kubernetes.cluster weight: 1 reason: Kubernetes is the underlying technology. - details: Kubernetes manifest generated and applied - technology: terraform component: service.application artifact: docker.image @@ -588,7 +543,6 @@ - kubernetes.cluster weight: 0.5 reason: Kubernetes is more specialized. - details: '"kubernetes_deployment_v1" and "kubernetes_service_v1" resources' - technology: ansible component: service.application artifact: tar.archive @@ -597,7 +551,6 @@ - local.machine weight: 1 reason: Primary use case due to the specialization of Ansible. Special integration for systemd. - details: '"ansible.builtin.file", "ansible.builtin.unarchive", "ansible.builtin.copy", "ansible.builtin.fail", "ansible.builtin.shell", and "ansible.builtin.systemd" tasks with "when" statements' - technology: terraform component: service.application artifact: tar.archive @@ -606,7 +559,6 @@ - local.machine weight: 0 reason: Ansible is more specialized. Also using provisioners is a "last resort". - details: '"local_file" module to create scripts and artifacts and "local-exec" provisioner to execute scripts.' - technology: ansible component: service.application artifact: tar.archive @@ -615,7 +567,6 @@ - remote.machine weight: 1 reason: Primary use case due to the specialization of Ansible. Special integration for systemd. - details: '"ansible.builtin.file", "ansible.builtin.unarchive", "ansible.builtin.copy", "ansible.builtin.fail", "ansible.builtin.shell", and "ansible.builtin.systemd" tasks with "when" statements' - technology: terraform component: service.application artifact: tar.archive @@ -624,7 +575,6 @@ - remote.machine weight: 0 reason: Ansible is more specialized. Also using provisioners is a "last resort". - details: '"file" provisioner to upload artifacts and scripts and "remote-exec" to execute scripts' - technology: ansible component: service.application artifact: zip.archive @@ -633,7 +583,6 @@ - local.machine weight: 1 reason: Primary use case due to the specialization of Ansible. Special integration for systemd. - details: '"ansible.builtin.file", "ansible.builtin.unarchive", "ansible.builtin.copy", "ansible.builtin.fail", "ansible.builtin.shell", and "ansible.builtin.systemd" tasks with "when" statements' - technology: terraform component: service.application artifact: zip.archive @@ -642,7 +591,6 @@ - local.machine weight: 0 reason: Ansible is more specialized. Also using provisioners is a "last resort". - details: '"local_file" module to create scripts and artifacts and "local-exec" provisioner to execute scripts.' - technology: ansible component: service.application artifact: zip.archive @@ -651,7 +599,6 @@ - remote.machine weight: 1 reason: Primary use case due to the specialization of Ansible. Special integration for systemd. - details: '"ansible.builtin.file", "ansible.builtin.unarchive", "ansible.builtin.copy", "ansible.builtin.fail", "ansible.builtin.shell", and "ansible.builtin.systemd" tasks with "when" statements' - technology: terraform component: service.application artifact: zip.archive @@ -660,7 +607,6 @@ - remote.machine weight: 0 reason: Ansible is more specialized. Also using provisioners is a "last resort". - details: '"file" provisioner to upload artifacts and scripts and "remote-exec" to execute scripts' - technology: ansible component: service.application artifact: zip.archive @@ -668,7 +614,6 @@ - gcp.appengine weight: 0 reason: Custom module with imperative parts, while Terraform provides a declarative module. - details: '"ansible.builtin.shell", "ansible.builtin.tempfile", "ansible.builtin.unarchive", and "ansible.builtin.copy" tasks' - technology: terraform component: service.application artifact: zip.archive @@ -676,7 +621,6 @@ - gcp.appengine weight: 1 reason: Terraform provides a declarative module. - details: '"google_app_engine_standard_app_version", "google_project_iam_member", "google_service_account", "google_storage_bucket", and "google_storage_bucket_object" resources' - technology: ansible component: software.application artifact: apt.package @@ -685,7 +629,6 @@ - local.machine weight: 1 reason: Primary use case due to the specialization of Ansible. - details: '"ansible.builtin.shell", "ansible.builtin.apt_key", "ansible.builtin.apt_repository", "ansible.builtin.apt", and "ansible.builtin.copy", tasks with "when" statements' - technology: terraform component: software.application artifact: apt.package @@ -694,7 +637,6 @@ - local.machine weight: 0 reason: Ansible is more specialized. Also using provisioners is a "last resort". - details: '"local_file" module to create scripts and artifacts and "local-exec" provisioner to execute scripts' - technology: ansible component: software.application artifact: apt.package @@ -703,7 +645,6 @@ - remote.machine weight: 1 reason: Primary use case due to the specialization of Ansible. - details: '"ansible.builtin.shell", "ansible.builtin.apt_key", "ansible.builtin.apt_repository", "ansible.builtin.apt", and "ansible.builtin.copy", tasks with "when" statements' - technology: terraform component: software.application artifact: apt.package @@ -712,7 +653,6 @@ - remote.machine weight: 0 reason: Ansible is more specialized. Also using provisioners is a "last resort". - details: '"file" provisioner to upload scripts and "remote-exec" to execute scripts' - technology: ansible component: software.application artifact: tar.archive @@ -721,7 +661,6 @@ - local.machine weight: 0.5 reason: 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. - details: '"ansible.builtin.apt", "ansible.builtin.file", "ansible.builtin.unarchive", "ansible.builtin.copy", "ansible.builtin.fail", and "ansible.builtin.shell" tasks with "when" statements' - technology: terraform component: software.application artifact: tar.archive @@ -730,7 +669,6 @@ - local.machine weight: 0 reason: Ansible is more specialized. Also using provisioners is a "last resort". - details: '"local_file" module to create scripts and artifacts and "local-exec" provisioner to execute scripts' - technology: ansible component: software.application artifact: tar.archive @@ -739,7 +677,6 @@ - remote.machine weight: 0.5 reason: 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". - details: '"ansible.builtin.file", "ansible.builtin.unarchive", "ansible.builtin.copy", "ansible.builtin.fail", and "ansible.builtin.shell" tasks with "when" statements' - technology: terraform component: software.application artifact: tar.archive @@ -748,7 +685,6 @@ - remote.machine weight: 0 reason: Ansible is more specialized. Also using provisioners is a "last resort". - details: '"file" provisioner to upload artifacts and scripts and "remote-exec" to execute scripts' - technology: ansible component: software.application artifact: zip.archive @@ -757,7 +693,6 @@ - local.machine weight: 0.5 reason: 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. - details: '"ansible.builtin.apt", "ansible.builtin.file", "ansible.builtin.unarchive", "ansible.builtin.copy", "ansible.builtin.fail", and "ansible.builtin.shell" tasks with "when" statements' - technology: terraform component: software.application artifact: zip.archive @@ -766,7 +701,6 @@ - local.machine weight: 0 reason: Ansible is more specialized. Also using provisioners is a "last resort". - details: '"local_file" module to create scripts and artifacts and "local-exec" provisioner to execute scripts.' - technology: ansible component: software.application artifact: zip.archive @@ -775,7 +709,6 @@ - remote.machine weight: 0.5 reason: 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. - details: '"ansible.builtin.apt", "ansible.builtin.file", "ansible.builtin.unarchive", "ansible.builtin.copy", "ansible.builtin.fail", and "ansible.builtin.shell" tasks with "when" statements' - technology: terraform component: software.application artifact: zip.archive @@ -784,7 +717,6 @@ - remote.machine weight: 0 reason: Ansible is more specialized. Also using provisioners is a "last resort". - details: '"file" provisioner to upload artifacts and scripts and "remote-exec" to execute scripts' - technology: ansible component: virtual.machine artifact: machine.image @@ -792,7 +724,6 @@ - openstack.provider weight: 0.5 reason: Terraform is more specialized. - details: '"openstack.cloud.security_group", "openstack.cloud.security_group_rule" and "openstack.cloud.server" tasks' - technology: terraform component: virtual.machine artifact: machine.image @@ -800,4 +731,3 @@ - openstack.provider weight: 1 reason: Terraform provides a declarative module. - details: '"openstack_compute_instance_v2", "openstack_networking_secgroup_rule_v2" and "openstack_networking_secgroup_v2" resources' diff --git a/src/controller/study/technology.ts b/src/controller/study/technology.ts index b8a7268846..503599b02e 100644 --- a/src/controller/study/technology.ts +++ b/src/controller/study/technology.ts @@ -115,7 +115,6 @@ export default async function (options: StudyTechnologyOptions) { Hosting: it.hosting, Quality: it.weight, Reason: it.reason, - // Details: it.details, })) printTable('The technology rules of our case study. Qualities range from bad (0) to good (1).', ruleData) @@ -369,7 +368,6 @@ type RuleData = { Hosting?: string | string[] Quality?: number Reason?: string - Details?: string } type QualityData = { diff --git a/src/specification/technology-template.ts b/src/specification/technology-template.ts index 5119c1ebb9..66a54007da 100644 --- a/src/specification/technology-template.ts +++ b/src/specification/technology-template.ts @@ -24,5 +24,4 @@ export type TechnologyRule = { weight?: number assign?: string reason?: string - details?: string } diff --git a/src/technologies/plugins/rules/generators/docker-engine/machine/local-machine/ansible/index.ts b/src/technologies/plugins/rules/generators/docker-engine/machine/local-machine/ansible/index.ts index 5499fdcd1a..077f903bfd 100644 --- a/src/technologies/plugins/rules/generators/docker-engine/machine/local-machine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/docker-engine/machine/local-machine/ansible/index.ts @@ -17,7 +17,6 @@ const generator: ImplementationGenerator = { hosting: ['local.machine'], weight: 1, reason: 'Primary use case due to the specialization of Ansible.', - details: '"ansible.builtin.shell", "ansible.builtin.group", and "ansible.builtin.user" tasks', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/docker-engine/machine/local-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/docker-engine/machine/local-machine/terraform/index.ts index 0b8d79296c..1feb2ad005 100644 --- a/src/technologies/plugins/rules/generators/docker-engine/machine/local-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/docker-engine/machine/local-machine/terraform/index.ts @@ -17,7 +17,6 @@ const generator: ImplementationGenerator = { hosting: ['local.machine'], weight: 0, reason: 'Ansible is more specialized. Also using provisioners is a "last resort".', - details: '"local-exec" provider', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/docker-engine/machine/remote-machine/ansible/index.ts b/src/technologies/plugins/rules/generators/docker-engine/machine/remote-machine/ansible/index.ts index 9c897c42fa..7397b53c31 100644 --- a/src/technologies/plugins/rules/generators/docker-engine/machine/remote-machine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/docker-engine/machine/remote-machine/ansible/index.ts @@ -16,7 +16,6 @@ const generator: ImplementationGenerator = { hosting: ['remote.machine'], weight: 1, reason: 'Primary use case due to the specialization of Ansible.', - details: '"ansible.builtin.shell", "ansible.builtin.group", and "ansible.builtin.user" tasks', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/docker-engine/machine/remote-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/docker-engine/machine/remote-machine/terraform/index.ts index db63fa0890..7ae942338b 100644 --- a/src/technologies/plugins/rules/generators/docker-engine/machine/remote-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/docker-engine/machine/remote-machine/terraform/index.ts @@ -22,7 +22,6 @@ const generator: ImplementationGenerator = { hosting: ['remote.machine'], weight: 0, reason: 'Ansible is more specialized. Also using provisioners is a "last resort".', - details: '"remote-exec" provider', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/gcp-service/ansible/index.ts b/src/technologies/plugins/rules/generators/gcp-service/ansible/index.ts index 38ae6dca36..17742e9ae5 100644 --- a/src/technologies/plugins/rules/generators/gcp-service/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/gcp-service/ansible/index.ts @@ -8,7 +8,6 @@ const generator: ImplementationGenerator = { hosting: [], weight: 0, reason: 'Ansible provides a declarative module', - details: '"google.cloud.gcp_serviceusage_service" task', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/gcp-service/terraform/index.ts b/src/technologies/plugins/rules/generators/gcp-service/terraform/index.ts index 539f59a45c..d2ce2ebd79 100644 --- a/src/technologies/plugins/rules/generators/gcp-service/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/gcp-service/terraform/index.ts @@ -13,7 +13,6 @@ const generator: ImplementationGenerator = { hosting: [], weight: 1, reason: 'Terraform provides a declarative module.', - details: '"google_project_service" resource', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/ingress/kubernetes-cluster/ansible/index.ts b/src/technologies/plugins/rules/generators/ingress/kubernetes-cluster/ansible/index.ts index 2856bc2263..fe809652b3 100644 --- a/src/technologies/plugins/rules/generators/ingress/kubernetes-cluster/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/ingress/kubernetes-cluster/ansible/index.ts @@ -11,7 +11,6 @@ const generator: ImplementationGenerator = { hosting: ['kubernetes.cluster'], weight: 0.5, reason: 'Kubernetes is more specialized.', - details: '"kubernetes.core.k8s" task', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/ingress/kubernetes-cluster/kubernetes/index.ts b/src/technologies/plugins/rules/generators/ingress/kubernetes-cluster/kubernetes/index.ts index 13c0055bc7..06da71e771 100644 --- a/src/technologies/plugins/rules/generators/ingress/kubernetes-cluster/kubernetes/index.ts +++ b/src/technologies/plugins/rules/generators/ingress/kubernetes-cluster/kubernetes/index.ts @@ -13,7 +13,6 @@ const generator: ImplementationGenerator = { hosting: ['kubernetes.cluster'], weight: 1, reason: 'Kubernetes is the underlying technology.', - details: 'Kubernetes manifest generated and applied', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/ingress/kubernetes-cluster/terraform/index.ts b/src/technologies/plugins/rules/generators/ingress/kubernetes-cluster/terraform/index.ts index a6bf0c82a9..a30cf2e319 100644 --- a/src/technologies/plugins/rules/generators/ingress/kubernetes-cluster/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/ingress/kubernetes-cluster/terraform/index.ts @@ -13,7 +13,6 @@ const generator: ImplementationGenerator = { hosting: ['kubernetes.cluster'], weight: 0.5, reason: 'Kubernetes is more specialized.', - details: '"kubernetes_service_v1" resource', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/ingress/machine/local-machine/ansible/index.ts b/src/technologies/plugins/rules/generators/ingress/machine/local-machine/ansible/index.ts index 5ee787c68d..54d1761fb5 100644 --- a/src/technologies/plugins/rules/generators/ingress/machine/local-machine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/ingress/machine/local-machine/ansible/index.ts @@ -9,8 +9,6 @@ const generator: ImplementationGenerator = { hosting: ['local.machine'], weight: 1, reason: 'Primary use case due to the specialization of Ansible.', - details: - '"ansible.builtin.apt_key", "ansible.builtin.apt_repository", "ansible.builtin.apt", "ansible.builtin.copy", and "ansible.builtin.systemd" tasks', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/ingress/machine/local-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/ingress/machine/local-machine/terraform/index.ts index 83c9bfff13..5f00dc9e2b 100644 --- a/src/technologies/plugins/rules/generators/ingress/machine/local-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/ingress/machine/local-machine/terraform/index.ts @@ -9,8 +9,6 @@ const generator: ImplementationGenerator = { hosting: ['local.machine'], weight: 0, reason: 'Ansible is more specialized. Also using provisioners is a "last resort".', - details: - '"local_file" resource to create the installation script and "terraform_data" to execute the script using the "local-exec" provisioner', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/ingress/machine/remote-machine/ansible/index.ts b/src/technologies/plugins/rules/generators/ingress/machine/remote-machine/ansible/index.ts index 55fda09e9b..81b97ef167 100644 --- a/src/technologies/plugins/rules/generators/ingress/machine/remote-machine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/ingress/machine/remote-machine/ansible/index.ts @@ -13,8 +13,6 @@ const generator: ImplementationGenerator = { hosting: ['remote.machine'], weight: 1, reason: 'Primary use case due to the specialization of Ansible.', - details: - '"ansible.builtin.apt_key", "ansible.builtin.apt_repository", "ansible.builtin.apt", "ansible.builtin.copy", and "ansible.builtin.systemd" tasks', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/ingress/machine/remote-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/ingress/machine/remote-machine/terraform/index.ts index 2fbad1c9e3..dee1c31a82 100644 --- a/src/technologies/plugins/rules/generators/ingress/machine/remote-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/ingress/machine/remote-machine/terraform/index.ts @@ -14,8 +14,6 @@ const generator: ImplementationGenerator = { hosting: ['remote.machine'], weight: 0, reason: 'Ansible is more specialized. Also using provisioners is a "last resort".', - details: - '"terraform_data" resource with an "ssh" connection to the virtual machine to copy the install script using the "file" provisioner on the virtual machine and to execute the script using the "remote-exec" provisioner', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/machine/local-machine/ansible/index.ts b/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/machine/local-machine/ansible/index.ts index be0ae5543e..b1a6e97297 100644 --- a/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/machine/local-machine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/machine/local-machine/ansible/index.ts @@ -10,7 +10,6 @@ class Generator extends GeneratorAbstract { hosting = ['mysql.dbms', 'local.machine'] weight = 1 reason = 'Primary use case due to the specialization of Ansible.' - details = undefined generate(name: string, type: NodeType) { const user = { diff --git a/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/machine/local-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/machine/local-machine/terraform/index.ts index b0644714a6..de49323b3f 100644 --- a/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/machine/local-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/machine/local-machine/terraform/index.ts @@ -10,7 +10,6 @@ class Generator extends GeneratorAbstract { hosting = ['mysql.dbms', 'local.machine'] weight = 1 reason = 'Terraform provides a declarative module.' - details = undefined generate(name: string, type: NodeType) { return { diff --git a/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/machine/remote-machine/ansible/index.ts b/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/machine/remote-machine/ansible/index.ts index 29e47a5623..e713012785 100644 --- a/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/machine/remote-machine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/machine/remote-machine/ansible/index.ts @@ -14,7 +14,6 @@ class Generator extends GeneratorAbstract { hosting = ['mysql.dbms', 'remote.machine'] weight = 1 reason = 'Primary use case due to the specialization of Ansible.' - details = undefined generate(name: string, type: NodeType) { const user = { diff --git a/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/machine/remote-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/machine/remote-machine/terraform/index.ts index f83ea5b32e..fe8c160420 100644 --- a/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/machine/remote-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-database/mysql-dbms/machine/remote-machine/terraform/index.ts @@ -16,7 +16,6 @@ class Generator extends GeneratorAbstract { weight = 0.5 reason = 'Terraform provides a declarative module. However, Terraform requires an SSH workaround. Ansible is more specialized.' - details = undefined generate(name: string, type: NodeType) { return { diff --git a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/docker-engine/machine/local-machine/ansible/index.ts b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/docker-engine/machine/local-machine/ansible/index.ts index 94b04ab9b7..c84ea19964 100644 --- a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/docker-engine/machine/local-machine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/docker-engine/machine/local-machine/ansible/index.ts @@ -9,7 +9,6 @@ const generator: ImplementationGenerator = { hosting: ['docker.engine', 'local.machine'], weight: 0.5, reason: 'Docker Compose is more specialized', - details: '"community.docker.docker_container" task', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/docker-engine/machine/local-machine/compose/index.ts b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/docker-engine/machine/local-machine/compose/index.ts index e992cb71ce..a90e73c5a5 100644 --- a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/docker-engine/machine/local-machine/compose/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/docker-engine/machine/local-machine/compose/index.ts @@ -17,7 +17,6 @@ const generator: ImplementationGenerator = { hosting: ['docker.engine', 'local.machine'], weight: 1, reason: 'Docker is the underlying technology.', - details: 'docker-compose manifest generated and applied', generate: (name, type) => { const suffix = '{{ SELF.dbms_name }}' diff --git a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/docker-engine/machine/local-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/docker-engine/machine/local-machine/terraform/index.ts index b44d040e68..6ce15234e4 100644 --- a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/docker-engine/machine/local-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/docker-engine/machine/local-machine/terraform/index.ts @@ -14,7 +14,6 @@ const generator: ImplementationGenerator = { hosting: ['docker.engine', 'local.machine'], weight: 0.5, reason: 'Docker Compose is more specialized.', - details: '"docker_container" and "docker_image" resources', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/docker-engine/machine/remote-machine/ansible/index.ts b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/docker-engine/machine/remote-machine/ansible/index.ts index c07c4e2cfb..b33a8d2e57 100644 --- a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/docker-engine/machine/remote-machine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/docker-engine/machine/remote-machine/ansible/index.ts @@ -19,7 +19,6 @@ const generator: ImplementationGenerator = { hosting: ['docker.engine', 'remote.machine'], weight: 0.5, reason: 'Docker Compose is more specialized', - details: '"community.docker.docker_container" task', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/docker-engine/machine/remote-machine/compose/index.ts b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/docker-engine/machine/remote-machine/compose/index.ts index c2c4d023bc..6a75240fb3 100644 --- a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/docker-engine/machine/remote-machine/compose/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/docker-engine/machine/remote-machine/compose/index.ts @@ -18,7 +18,6 @@ const generator: ImplementationGenerator = { hosting: ['docker.engine', 'remote.machine'], weight: 1, reason: 'Docker is the underlying technology.', - details: 'docker-compose manifest generated and applied', generate: (name, type) => { const suffix = '{{ SELF.dbms_name }}' diff --git a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/docker-engine/machine/remote-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/docker-engine/machine/remote-machine/terraform/index.ts index b246d551d3..9282369748 100644 --- a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/docker-engine/machine/remote-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/docker-engine/machine/remote-machine/terraform/index.ts @@ -21,7 +21,6 @@ const generator: ImplementationGenerator = { hosting: ['docker.engine', 'remote.machine'], weight: 0.5, reason: 'Docker Compose is more specialized.', - details: '"docker_container" and "docker_image" resources', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/gcp-cloudsql/ansible/index.ts b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/gcp-cloudsql/ansible/index.ts index 3279e06548..06c924293d 100644 --- a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/gcp-cloudsql/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/gcp-cloudsql/ansible/index.ts @@ -10,7 +10,6 @@ const generator: ImplementationGenerator = { hosting: ['gcp.cloudsql'], weight: 0, reason: 'Primary use case due to the specialization of Ansible.', - details: '"google.cloud.gcp_sql_instance" and "google.cloud.gcp_sql_user" tasks', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/gcp-cloudsql/terraform/index.ts b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/gcp-cloudsql/terraform/index.ts index d9e50d32ee..cf7ee5d7e8 100644 --- a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/gcp-cloudsql/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/gcp-cloudsql/terraform/index.ts @@ -9,7 +9,6 @@ const generator: ImplementationGenerator = { hosting: ['gcp.cloudsql'], weight: 1, reason: 'Terraform provides a declarative module.', - details: '"google_sql_database_instance" and "google_sql_user" resources', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/kubernetes-cluster/ansible/index.ts b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/kubernetes-cluster/ansible/index.ts index d9df5eaf72..4e58e4ccac 100644 --- a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/kubernetes-cluster/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/kubernetes-cluster/ansible/index.ts @@ -12,7 +12,6 @@ const generator: ImplementationGenerator = { hosting: ['kubernetes.cluster'], weight: 0.5, reason: 'Kubernetes is more specialized.', - details: '"kubernetes.core.k8s" tasks', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/kubernetes-cluster/kubernetes/index.ts b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/kubernetes-cluster/kubernetes/index.ts index 9b1f6f97d4..9c86c94939 100644 --- a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/kubernetes-cluster/kubernetes/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/kubernetes-cluster/kubernetes/index.ts @@ -14,7 +14,6 @@ const generator: ImplementationGenerator = { hosting: ['kubernetes.cluster'], weight: 1, reason: 'Kubernetes is the underlying technology.', - details: 'Kubernetes manifest generated and applied', generate: (name, type) => { const AnsibleTouchManifestTask = { diff --git a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/kubernetes-cluster/terraform/index.ts b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/kubernetes-cluster/terraform/index.ts index 4099949bce..79d2d4617f 100644 --- a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/kubernetes-cluster/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/kubernetes-cluster/terraform/index.ts @@ -9,7 +9,6 @@ const generator: ImplementationGenerator = { hosting: ['kubernetes.cluster'], weight: 0.5, reason: 'Kubernetes is more specialized.', - details: '"kubernetes_deployment_v1" and "kubernetes_service_v1" resources', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/machine/local-machine/ansible/index.ts b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/machine/local-machine/ansible/index.ts index f3442409da..d6bce10a70 100644 --- a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/machine/local-machine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/machine/local-machine/ansible/index.ts @@ -13,8 +13,6 @@ const generator: ImplementationGenerator = { hosting: ['local.machine'], weight: 1, reason: 'Primary use case due to the specialization of Ansible.', - details: - '"ansible.builtin.apt", "ansible.builtin.systemd", "ansible.builtin.copy", "ansible.builtin.lineinfile", and "community.mysql.mysql_user" tasks', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/machine/local-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/machine/local-machine/terraform/index.ts index f73fbbb814..f570061a75 100644 --- a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/machine/local-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/machine/local-machine/terraform/index.ts @@ -14,8 +14,6 @@ const generator: ImplementationGenerator = { hosting: ['local.machine'], weight: 0, reason: 'Ansible is more specialized. Also using provisioners is a "last resort".', - details: - '"local_file" resource to create the installation script and "terraform_data" to execute the script using the "local-exec" provisioner', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/machine/remote-machine/ansible/index.ts b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/machine/remote-machine/ansible/index.ts index 0c6eeed8ac..e7612288f4 100644 --- a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/machine/remote-machine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/machine/remote-machine/ansible/index.ts @@ -18,8 +18,6 @@ const generator: ImplementationGenerator = { hosting: ['remote.machine'], weight: 1, reason: 'Primary use case due to the specialization of Ansible.', - details: - '"ansible.builtin.apt", "ansible.builtin.systemd", "ansible.builtin.copy", "ansible.builtin.lineinfile", and "community.mysql.mysql_user" tasks', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/machine/remote-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/machine/remote-machine/terraform/index.ts index b65a11b29d..bf0ead90df 100644 --- a/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/machine/remote-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-dbms/dbms-image/machine/remote-machine/terraform/index.ts @@ -19,8 +19,6 @@ const generator: ImplementationGenerator = { hosting: ['remote.machine'], weight: 0, reason: 'Ansible is more specialized. Also using provisioners is a "last resort".', - details: - '"terraform_data" resource with an "ssh" connection to the virtual machine to copy the install script using the "file" provisioner on the virtual machine and to execute the script using the "remote-exec" provisioner', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/redis-server/cache-image/docker-engine/local-machine/ansible/index.ts b/src/technologies/plugins/rules/generators/redis-server/cache-image/docker-engine/local-machine/ansible/index.ts index 6c36049b3a..54d73f2539 100644 --- a/src/technologies/plugins/rules/generators/redis-server/cache-image/docker-engine/local-machine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/redis-server/cache-image/docker-engine/local-machine/ansible/index.ts @@ -14,7 +14,6 @@ const generator: ImplementationGenerator = { hosting: ['docker.engine', 'local.machine'], weight: 0.5, reason: 'Docker Compose is more specialized.', - details: '"community.docker.docker_container" task', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/redis-server/cache-image/docker-engine/local-machine/compose/index.ts b/src/technologies/plugins/rules/generators/redis-server/cache-image/docker-engine/local-machine/compose/index.ts index fb6152f386..e64bdb695c 100644 --- a/src/technologies/plugins/rules/generators/redis-server/cache-image/docker-engine/local-machine/compose/index.ts +++ b/src/technologies/plugins/rules/generators/redis-server/cache-image/docker-engine/local-machine/compose/index.ts @@ -21,7 +21,6 @@ const generator: ImplementationGenerator = { hosting: ['docker.engine', 'local.machine'], weight: 1, reason: 'Docker is the underlying technology.', - details: 'docker compose manifest generated and applied', generate: (name, type) => { const suffix = '{{ SELF.cache_name }}' diff --git a/src/technologies/plugins/rules/generators/redis-server/cache-image/docker-engine/local-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/redis-server/cache-image/docker-engine/local-machine/terraform/index.ts index 7a5c3e600a..6896a1040e 100644 --- a/src/technologies/plugins/rules/generators/redis-server/cache-image/docker-engine/local-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/redis-server/cache-image/docker-engine/local-machine/terraform/index.ts @@ -14,7 +14,6 @@ const generator: ImplementationGenerator = { hosting: ['docker.engine', 'local.machine'], weight: 0.5, reason: 'Docker Compose is more specialized.', - details: '"docker_container" and "docker_image" resources', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/redis-server/cache-image/docker-engine/remote-machine/ansible/index.ts b/src/technologies/plugins/rules/generators/redis-server/cache-image/docker-engine/remote-machine/ansible/index.ts index 5ef1349277..761143c232 100644 --- a/src/technologies/plugins/rules/generators/redis-server/cache-image/docker-engine/remote-machine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/redis-server/cache-image/docker-engine/remote-machine/ansible/index.ts @@ -20,7 +20,6 @@ const generator: ImplementationGenerator = { hosting: ['docker.engine', 'remote.machine'], weight: 0.5, reason: 'Docker Compose is more specialized.', - details: '"community.docker.docker_container" task', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/redis-server/cache-image/docker-engine/remote-machine/compose/index.ts b/src/technologies/plugins/rules/generators/redis-server/cache-image/docker-engine/remote-machine/compose/index.ts index 5de90def63..d2b6119273 100644 --- a/src/technologies/plugins/rules/generators/redis-server/cache-image/docker-engine/remote-machine/compose/index.ts +++ b/src/technologies/plugins/rules/generators/redis-server/cache-image/docker-engine/remote-machine/compose/index.ts @@ -23,7 +23,6 @@ const generator: ImplementationGenerator = { hosting: ['docker.engine', 'remote.machine'], weight: 1, reason: 'Docker is the underlying technology.', - details: 'docker compose manifest generated and applied', generate: (name, type) => { const suffix = '{{ SELF.cache_name }}' diff --git a/src/technologies/plugins/rules/generators/redis-server/cache-image/docker-engine/remote-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/redis-server/cache-image/docker-engine/remote-machine/terraform/index.ts index 7b2ae86a08..9f79b92e66 100644 --- a/src/technologies/plugins/rules/generators/redis-server/cache-image/docker-engine/remote-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/redis-server/cache-image/docker-engine/remote-machine/terraform/index.ts @@ -15,7 +15,6 @@ const generator: ImplementationGenerator = { hosting: ['docker.engine', 'remote.machine'], weight: 0.5, reason: 'Docker Compose is more specialized.', - details: '"docker_container" and "docker_image" resources', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/redis-server/cache-image/kubernetes-cluster/kubernetes/index.ts b/src/technologies/plugins/rules/generators/redis-server/cache-image/kubernetes-cluster/kubernetes/index.ts index 9f9f7038f2..2b7a6a93f9 100644 --- a/src/technologies/plugins/rules/generators/redis-server/cache-image/kubernetes-cluster/kubernetes/index.ts +++ b/src/technologies/plugins/rules/generators/redis-server/cache-image/kubernetes-cluster/kubernetes/index.ts @@ -14,7 +14,6 @@ const generator: ImplementationGenerator = { hosting: ['kubernetes.cluster'], weight: 1, reason: 'Kubernetes is the underlying technology.', - details: 'Kubernetes manifest generated and applied', generate: (name, type) => { const AnsibleTouchManifestTask = { diff --git a/src/technologies/plugins/rules/generators/service-application/docker-image/docker-engine/local-machine/ansible/index.ts b/src/technologies/plugins/rules/generators/service-application/docker-image/docker-engine/local-machine/ansible/index.ts index e2bde285d3..af9b537fea 100644 --- a/src/technologies/plugins/rules/generators/service-application/docker-image/docker-engine/local-machine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/service-application/docker-image/docker-engine/local-machine/ansible/index.ts @@ -9,7 +9,6 @@ const generator: ImplementationGenerator = { hosting: ['docker.engine', 'local.machine'], weight: 0.5, reason: 'Docker Compose is more specialized.', - details: '"community.docker.docker_container" task', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/service-application/docker-image/docker-engine/local-machine/compose/index.ts b/src/technologies/plugins/rules/generators/service-application/docker-image/docker-engine/local-machine/compose/index.ts index 44d876a093..7231139046 100644 --- a/src/technologies/plugins/rules/generators/service-application/docker-image/docker-engine/local-machine/compose/index.ts +++ b/src/technologies/plugins/rules/generators/service-application/docker-image/docker-engine/local-machine/compose/index.ts @@ -16,7 +16,6 @@ const generator: ImplementationGenerator = { hosting: ['docker.engine', 'local.machine'], weight: 1, reason: 'Docker is the underlying technology.', - details: 'docker compose manifest generated and applied', generate: (name, type) => { const suffix = '{{ SELF.application_name }}' diff --git a/src/technologies/plugins/rules/generators/service-application/docker-image/docker-engine/local-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/service-application/docker-image/docker-engine/local-machine/terraform/index.ts index 52823ca062..a9d1991992 100644 --- a/src/technologies/plugins/rules/generators/service-application/docker-image/docker-engine/local-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/service-application/docker-image/docker-engine/local-machine/terraform/index.ts @@ -14,7 +14,6 @@ const generator: ImplementationGenerator = { hosting: ['docker.engine', 'local.machine'], weight: 0.5, reason: 'Docker Compose is more specialized.', - details: '"docker_container" and "docker_image" resources', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/service-application/docker-image/docker-engine/remote-machine/ansible/index.ts b/src/technologies/plugins/rules/generators/service-application/docker-image/docker-engine/remote-machine/ansible/index.ts index d77656e681..189a179a82 100644 --- a/src/technologies/plugins/rules/generators/service-application/docker-image/docker-engine/remote-machine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/service-application/docker-image/docker-engine/remote-machine/ansible/index.ts @@ -20,7 +20,6 @@ const generator: ImplementationGenerator = { hosting: ['docker.engine', 'remote.machine'], weight: 0.5, reason: 'Docker Compose is more specialized.', - details: '"community.docker.docker_container" task', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/service-application/docker-image/docker-engine/remote-machine/compose/index.ts b/src/technologies/plugins/rules/generators/service-application/docker-image/docker-engine/remote-machine/compose/index.ts index 6e2f35fda2..b027d26f95 100644 --- a/src/technologies/plugins/rules/generators/service-application/docker-image/docker-engine/remote-machine/compose/index.ts +++ b/src/technologies/plugins/rules/generators/service-application/docker-image/docker-engine/remote-machine/compose/index.ts @@ -23,7 +23,6 @@ const generator: ImplementationGenerator = { hosting: ['docker.engine', 'remote.machine'], weight: 1, reason: 'Docker is the underlying technology.', - details: 'docker compose manifest generated and applied', generate: (name, type) => { const suffix = '{{ SELF.application_name }}' diff --git a/src/technologies/plugins/rules/generators/service-application/docker-image/docker-engine/remote-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/service-application/docker-image/docker-engine/remote-machine/terraform/index.ts index afec2f996a..f89128156f 100644 --- a/src/technologies/plugins/rules/generators/service-application/docker-image/docker-engine/remote-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/service-application/docker-image/docker-engine/remote-machine/terraform/index.ts @@ -15,7 +15,6 @@ const generator: ImplementationGenerator = { hosting: ['docker.engine', 'remote.machine'], weight: 0.5, reason: 'Docker Compose is more specialized.', - details: '"docker_container" and "docker_image" resources', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/service-application/docker-image/gcp-cloudrun/ansible/index.ts b/src/technologies/plugins/rules/generators/service-application/docker-image/gcp-cloudrun/ansible/index.ts index bc5537a761..bab63a841b 100644 --- a/src/technologies/plugins/rules/generators/service-application/docker-image/gcp-cloudrun/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/service-application/docker-image/gcp-cloudrun/ansible/index.ts @@ -17,7 +17,6 @@ const generator: ImplementationGenerator = { hosting: ['gcp.cloudrun'], weight: 0, reason: 'Custom module with imperative parts, while Terraform provides a declarative module.', - details: '"ansible.builtin.shell", "ansible.builtin.tempfile", and "ansible.builtin.copy" tasks ', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/service-application/docker-image/gcp-cloudrun/terraform/index.ts b/src/technologies/plugins/rules/generators/service-application/docker-image/gcp-cloudrun/terraform/index.ts index 3e6296417e..fdaee4e5d3 100644 --- a/src/technologies/plugins/rules/generators/service-application/docker-image/gcp-cloudrun/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/service-application/docker-image/gcp-cloudrun/terraform/index.ts @@ -18,7 +18,6 @@ const generator: ImplementationGenerator = { hosting: ['gcp.cloudrun'], weight: 1, reason: 'Terraform provides a declarative module.', - details: '"google_cloud_run_v2_service" and "google_cloud_run_service_iam_binding" resources', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/service-application/docker-image/kubernetes-cluster/ansible/index.ts b/src/technologies/plugins/rules/generators/service-application/docker-image/kubernetes-cluster/ansible/index.ts index e8bf8b9e87..8c2995fb73 100644 --- a/src/technologies/plugins/rules/generators/service-application/docker-image/kubernetes-cluster/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/service-application/docker-image/kubernetes-cluster/ansible/index.ts @@ -17,7 +17,6 @@ const generator: ImplementationGenerator = { hosting: ['kubernetes.cluster'], weight: 0.5, reason: 'Kubernetes is more specialized.', - details: '"kubernetes.core.k8s" tasks', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/service-application/docker-image/kubernetes-cluster/kubernetes/index.ts b/src/technologies/plugins/rules/generators/service-application/docker-image/kubernetes-cluster/kubernetes/index.ts index aefd4a9693..6d04a2be33 100644 --- a/src/technologies/plugins/rules/generators/service-application/docker-image/kubernetes-cluster/kubernetes/index.ts +++ b/src/technologies/plugins/rules/generators/service-application/docker-image/kubernetes-cluster/kubernetes/index.ts @@ -14,7 +14,6 @@ const generator: ImplementationGenerator = { hosting: ['kubernetes.cluster'], weight: 1, reason: 'Kubernetes is the underlying technology.', - details: 'Kubernetes manifest generated and applied', generate: (name, type) => { const AnsibleTouchManifestTask = { diff --git a/src/technologies/plugins/rules/generators/service-application/docker-image/kubernetes-cluster/terraform/index.ts b/src/technologies/plugins/rules/generators/service-application/docker-image/kubernetes-cluster/terraform/index.ts index 63e2960e03..5664614850 100644 --- a/src/technologies/plugins/rules/generators/service-application/docker-image/kubernetes-cluster/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/service-application/docker-image/kubernetes-cluster/terraform/index.ts @@ -14,7 +14,6 @@ const generator: ImplementationGenerator = { hosting: ['kubernetes.cluster'], weight: 0.5, reason: 'Kubernetes is more specialized.', - details: '"kubernetes_deployment_v1" and "kubernetes_service_v1" resources', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/service-application/tar-archive/asterisk/machine/local-machine/ansible/index.ts b/src/technologies/plugins/rules/generators/service-application/tar-archive/asterisk/machine/local-machine/ansible/index.ts index 402239dae5..b4b2a9e281 100644 --- a/src/technologies/plugins/rules/generators/service-application/tar-archive/asterisk/machine/local-machine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/service-application/tar-archive/asterisk/machine/local-machine/ansible/index.ts @@ -25,8 +25,6 @@ class Generator extends GeneratorAbstract { hosting = ['*', 'local.machine'] weight = 1 reason = 'Primary use case due to the specialization of Ansible. Special integration for systemd.' - details = - '"ansible.builtin.file", "ansible.builtin.unarchive", "ansible.builtin.copy", "ansible.builtin.fail", "ansible.builtin.shell", and "ansible.builtin.systemd" tasks with "when" statements' generate(name: string, type: NodeType) { return { diff --git a/src/technologies/plugins/rules/generators/service-application/tar-archive/asterisk/machine/local-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/service-application/tar-archive/asterisk/machine/local-machine/terraform/index.ts index d41b53f175..eb6b3b0c63 100644 --- a/src/technologies/plugins/rules/generators/service-application/tar-archive/asterisk/machine/local-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/service-application/tar-archive/asterisk/machine/local-machine/terraform/index.ts @@ -27,7 +27,6 @@ class Generator extends GeneratorAbstract { hosting = ['*', 'local.machine'] weight = 0 reason = 'Ansible is more specialized. Also using provisioners is a "last resort".' - details = '"local_file" module to create scripts and artifacts and "local-exec" provisioner to execute scripts.' generate(name: string, type: NodeType) { return { diff --git a/src/technologies/plugins/rules/generators/service-application/tar-archive/asterisk/machine/remote-machine/ansible/index.ts b/src/technologies/plugins/rules/generators/service-application/tar-archive/asterisk/machine/remote-machine/ansible/index.ts index 3d10c8e444..337c020227 100644 --- a/src/technologies/plugins/rules/generators/service-application/tar-archive/asterisk/machine/remote-machine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/service-application/tar-archive/asterisk/machine/remote-machine/ansible/index.ts @@ -32,8 +32,6 @@ class Generator extends GeneratorAbstract { hosting = ['*', 'remote.machine'] weight = 1 reason = 'Primary use case due to the specialization of Ansible. Special integration for systemd.' - details = - '"ansible.builtin.file", "ansible.builtin.unarchive", "ansible.builtin.copy", "ansible.builtin.fail", "ansible.builtin.shell", and "ansible.builtin.systemd" tasks with "when" statements' generate(name: string, type: NodeType) { return { diff --git a/src/technologies/plugins/rules/generators/service-application/tar-archive/asterisk/machine/remote-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/service-application/tar-archive/asterisk/machine/remote-machine/terraform/index.ts index 9fbec0532f..6737b4fb2d 100644 --- a/src/technologies/plugins/rules/generators/service-application/tar-archive/asterisk/machine/remote-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/service-application/tar-archive/asterisk/machine/remote-machine/terraform/index.ts @@ -29,7 +29,6 @@ class Generator extends GeneratorAbstract { hosting = ['*', 'remote.machine'] weight = 0 reason = 'Ansible is more specialized. Also using provisioners is a "last resort".' - details = '"file" provisioner to upload artifacts and scripts and "remote-exec" to execute scripts' generate(name: string, type: NodeType) { return { diff --git a/src/technologies/plugins/rules/generators/service-application/zip-archive/asterisk/machine/local-machine/ansible/index.ts b/src/technologies/plugins/rules/generators/service-application/zip-archive/asterisk/machine/local-machine/ansible/index.ts index 7b029c5ac9..3452c46c35 100644 --- a/src/technologies/plugins/rules/generators/service-application/zip-archive/asterisk/machine/local-machine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/service-application/zip-archive/asterisk/machine/local-machine/ansible/index.ts @@ -25,8 +25,6 @@ class Generator extends GeneratorAbstract { hosting = ['*', 'local.machine'] weight = 1 reason = 'Primary use case due to the specialization of Ansible. Special integration for systemd.' - details = - '"ansible.builtin.file", "ansible.builtin.unarchive", "ansible.builtin.copy", "ansible.builtin.fail", "ansible.builtin.shell", and "ansible.builtin.systemd" tasks with "when" statements' generate(name: string, type: NodeType) { return { diff --git a/src/technologies/plugins/rules/generators/service-application/zip-archive/asterisk/machine/local-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/service-application/zip-archive/asterisk/machine/local-machine/terraform/index.ts index bbae234023..b67c182180 100644 --- a/src/technologies/plugins/rules/generators/service-application/zip-archive/asterisk/machine/local-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/service-application/zip-archive/asterisk/machine/local-machine/terraform/index.ts @@ -27,7 +27,6 @@ class Generator extends GeneratorAbstract { hosting = ['*', 'local.machine'] weight = 0 reason = 'Ansible is more specialized. Also using provisioners is a "last resort".' - details = '"local_file" module to create scripts and artifacts and "local-exec" provisioner to execute scripts.' generate(name: string, type: NodeType) { return { diff --git a/src/technologies/plugins/rules/generators/service-application/zip-archive/asterisk/machine/remote-machine/ansible/index.ts b/src/technologies/plugins/rules/generators/service-application/zip-archive/asterisk/machine/remote-machine/ansible/index.ts index 11f2a3d973..9b010358c4 100644 --- a/src/technologies/plugins/rules/generators/service-application/zip-archive/asterisk/machine/remote-machine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/service-application/zip-archive/asterisk/machine/remote-machine/ansible/index.ts @@ -32,8 +32,6 @@ class Generator extends GeneratorAbstract { hosting = ['*', 'remote.machine'] weight = 1 reason = 'Primary use case due to the specialization of Ansible. Special integration for systemd.' - details = - '"ansible.builtin.file", "ansible.builtin.unarchive", "ansible.builtin.copy", "ansible.builtin.fail", "ansible.builtin.shell", and "ansible.builtin.systemd" tasks with "when" statements' generate(name: string, type: NodeType) { return { diff --git a/src/technologies/plugins/rules/generators/service-application/zip-archive/asterisk/machine/remote-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/service-application/zip-archive/asterisk/machine/remote-machine/terraform/index.ts index 324bcc946e..5db6e3a398 100644 --- a/src/technologies/plugins/rules/generators/service-application/zip-archive/asterisk/machine/remote-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/service-application/zip-archive/asterisk/machine/remote-machine/terraform/index.ts @@ -29,7 +29,6 @@ class Generator extends GeneratorAbstract { hosting = ['*', 'remote.machine'] weight = 0 reason = 'Ansible is more specialized. Also using provisioners is a "last resort".' - details = '"file" provisioner to upload artifacts and scripts and "remote-exec" to execute scripts' generate(name: string, type: NodeType) { return { diff --git a/src/technologies/plugins/rules/generators/service-application/zip-archive/gcp-appengine/ansible/index.ts b/src/technologies/plugins/rules/generators/service-application/zip-archive/gcp-appengine/ansible/index.ts index dba4ee487e..74739a252f 100644 --- a/src/technologies/plugins/rules/generators/service-application/zip-archive/gcp-appengine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/service-application/zip-archive/gcp-appengine/ansible/index.ts @@ -22,8 +22,6 @@ const generator: ImplementationGenerator = { hosting: ['gcp.appengine'], weight: 0, reason: 'Custom module with imperative parts, while Terraform provides a declarative module.', - details: - '"ansible.builtin.shell", "ansible.builtin.tempfile", "ansible.builtin.unarchive", and "ansible.builtin.copy" tasks', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/service-application/zip-archive/gcp-appengine/terraform/index.ts b/src/technologies/plugins/rules/generators/service-application/zip-archive/gcp-appengine/terraform/index.ts index d895da68ee..d3bd40346c 100644 --- a/src/technologies/plugins/rules/generators/service-application/zip-archive/gcp-appengine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/service-application/zip-archive/gcp-appengine/terraform/index.ts @@ -23,8 +23,6 @@ const generator: ImplementationGenerator = { hosting: ['gcp.appengine'], weight: 1, reason: 'Terraform provides a declarative module.', - details: - '"google_app_engine_standard_app_version", "google_project_iam_member", "google_service_account", "google_storage_bucket", and "google_storage_bucket_object" resources', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/software-application/apt-package/asterisk/machine/local-machine/ansible/index.ts b/src/technologies/plugins/rules/generators/software-application/apt-package/asterisk/machine/local-machine/ansible/index.ts index 9396975642..580627946f 100644 --- a/src/technologies/plugins/rules/generators/software-application/apt-package/asterisk/machine/local-machine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/software-application/apt-package/asterisk/machine/local-machine/ansible/index.ts @@ -18,8 +18,6 @@ class Generator extends GeneratorAbstract { hosting = ['*', 'local.machine'] weight = 1 reason = 'Primary use case due to the specialization of Ansible.' - details = - '"ansible.builtin.shell", "ansible.builtin.apt_key", "ansible.builtin.apt_repository", "ansible.builtin.apt", and "ansible.builtin.copy", tasks with "when" statements' generate(name: string, type: NodeType) { return { diff --git a/src/technologies/plugins/rules/generators/software-application/apt-package/asterisk/machine/local-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/software-application/apt-package/asterisk/machine/local-machine/terraform/index.ts index fc964b7843..259ebe884d 100644 --- a/src/technologies/plugins/rules/generators/software-application/apt-package/asterisk/machine/local-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/software-application/apt-package/asterisk/machine/local-machine/terraform/index.ts @@ -19,7 +19,6 @@ class Generator extends GeneratorAbstract { hosting = ['*', 'local.machine'] weight = 0 reason = 'Ansible is more specialized. Also using provisioners is a "last resort".' - details = '"local_file" module to create scripts and artifacts and "local-exec" provisioner to execute scripts' generate(name: string, type: NodeType) { return { diff --git a/src/technologies/plugins/rules/generators/software-application/apt-package/asterisk/machine/remote-machine/ansible/index.ts b/src/technologies/plugins/rules/generators/software-application/apt-package/asterisk/machine/remote-machine/ansible/index.ts index a4ad339610..f7c11e3bfa 100644 --- a/src/technologies/plugins/rules/generators/software-application/apt-package/asterisk/machine/remote-machine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/software-application/apt-package/asterisk/machine/remote-machine/ansible/index.ts @@ -27,8 +27,6 @@ class Generator extends GeneratorAbstract { hosting = ['*', 'remote.machine'] weight = 1 reason = 'Primary use case due to the specialization of Ansible.' - details = - '"ansible.builtin.shell", "ansible.builtin.apt_key", "ansible.builtin.apt_repository", "ansible.builtin.apt", and "ansible.builtin.copy", tasks with "when" statements' generate(name: string, type: NodeType) { return { diff --git a/src/technologies/plugins/rules/generators/software-application/apt-package/asterisk/machine/remote-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/software-application/apt-package/asterisk/machine/remote-machine/terraform/index.ts index a447a93421..6518219e06 100644 --- a/src/technologies/plugins/rules/generators/software-application/apt-package/asterisk/machine/remote-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/software-application/apt-package/asterisk/machine/remote-machine/terraform/index.ts @@ -24,7 +24,6 @@ class Generator extends GeneratorAbstract { hosting = ['*', 'remote.machine'] weight = 0 reason = 'Ansible is more specialized. Also using provisioners is a "last resort".' - details = '"file" provisioner to upload scripts and "remote-exec" to execute scripts' generate(name: string, type: NodeType) { return { diff --git a/src/technologies/plugins/rules/generators/software-application/tar-archive/asterisk/machine/local-machine/ansible/index.ts b/src/technologies/plugins/rules/generators/software-application/tar-archive/asterisk/machine/local-machine/ansible/index.ts index c234bf2d85..0a4bc1bf87 100644 --- a/src/technologies/plugins/rules/generators/software-application/tar-archive/asterisk/machine/local-machine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/software-application/tar-archive/asterisk/machine/local-machine/ansible/index.ts @@ -18,8 +18,6 @@ class Generator extends GeneratorAbstract { weight = 0.5 reason = '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.' - details = - '"ansible.builtin.apt", "ansible.builtin.file", "ansible.builtin.unarchive", "ansible.builtin.copy", "ansible.builtin.fail", and "ansible.builtin.shell" tasks with "when" statements' generate(name: string, type: NodeType) { return { diff --git a/src/technologies/plugins/rules/generators/software-application/tar-archive/asterisk/machine/local-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/software-application/tar-archive/asterisk/machine/local-machine/terraform/index.ts index 0f3281bb29..7740bcbb86 100644 --- a/src/technologies/plugins/rules/generators/software-application/tar-archive/asterisk/machine/local-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/software-application/tar-archive/asterisk/machine/local-machine/terraform/index.ts @@ -22,7 +22,6 @@ class Generator extends GeneratorAbstract { hosting = ['*', 'local.machine'] weight = 0 reason = 'Ansible is more specialized. Also using provisioners is a "last resort".' - details = '"local_file" module to create scripts and artifacts and "local-exec" provisioner to execute scripts' generate(name: string, type: NodeType) { return { diff --git a/src/technologies/plugins/rules/generators/software-application/tar-archive/asterisk/machine/remote-machine/ansible/index.ts b/src/technologies/plugins/rules/generators/software-application/tar-archive/asterisk/machine/remote-machine/ansible/index.ts index b61413c66e..67a55b08df 100644 --- a/src/technologies/plugins/rules/generators/software-application/tar-archive/asterisk/machine/remote-machine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/software-application/tar-archive/asterisk/machine/remote-machine/ansible/index.ts @@ -27,8 +27,6 @@ class Generator extends GeneratorAbstract { weight = 0.5 reason = '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".' - details = - '"ansible.builtin.file", "ansible.builtin.unarchive", "ansible.builtin.copy", "ansible.builtin.fail", and "ansible.builtin.shell" tasks with "when" statements' generate(name: string, type: NodeType) { return { diff --git a/src/technologies/plugins/rules/generators/software-application/tar-archive/asterisk/machine/remote-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/software-application/tar-archive/asterisk/machine/remote-machine/terraform/index.ts index bd28ce6b46..f593052f47 100644 --- a/src/technologies/plugins/rules/generators/software-application/tar-archive/asterisk/machine/remote-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/software-application/tar-archive/asterisk/machine/remote-machine/terraform/index.ts @@ -24,7 +24,6 @@ class Generator extends GeneratorAbstract { hosting = ['*', 'remote.machine'] weight = 0 reason = 'Ansible is more specialized. Also using provisioners is a "last resort".' - details = '"file" provisioner to upload artifacts and scripts and "remote-exec" to execute scripts' generate(name: string, type: NodeType) { return { diff --git a/src/technologies/plugins/rules/generators/software-application/zip-archive/asterisk/machine/local-machine/ansible/index.ts b/src/technologies/plugins/rules/generators/software-application/zip-archive/asterisk/machine/local-machine/ansible/index.ts index 56b3425a46..6a8ed98f02 100644 --- a/src/technologies/plugins/rules/generators/software-application/zip-archive/asterisk/machine/local-machine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/software-application/zip-archive/asterisk/machine/local-machine/ansible/index.ts @@ -18,8 +18,6 @@ class Generator extends GeneratorAbstract { weight = 0.5 reason = '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.' - details = - '"ansible.builtin.apt", "ansible.builtin.file", "ansible.builtin.unarchive", "ansible.builtin.copy", "ansible.builtin.fail", and "ansible.builtin.shell" tasks with "when" statements' generate(name: string, type: NodeType) { return { diff --git a/src/technologies/plugins/rules/generators/software-application/zip-archive/asterisk/machine/local-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/software-application/zip-archive/asterisk/machine/local-machine/terraform/index.ts index 3f2c6fcaf9..71850ab8e5 100644 --- a/src/technologies/plugins/rules/generators/software-application/zip-archive/asterisk/machine/local-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/software-application/zip-archive/asterisk/machine/local-machine/terraform/index.ts @@ -22,7 +22,6 @@ class Generator extends GeneratorAbstract { hosting = ['*', 'local.machine'] weight = 0 reason = 'Ansible is more specialized. Also using provisioners is a "last resort".' - details = '"local_file" module to create scripts and artifacts and "local-exec" provisioner to execute scripts.' generate(name: string, type: NodeType) { return { diff --git a/src/technologies/plugins/rules/generators/software-application/zip-archive/asterisk/machine/remote-machine/ansible/index.ts b/src/technologies/plugins/rules/generators/software-application/zip-archive/asterisk/machine/remote-machine/ansible/index.ts index 6d4bfd1509..5cb1a5d31c 100644 --- a/src/technologies/plugins/rules/generators/software-application/zip-archive/asterisk/machine/remote-machine/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/software-application/zip-archive/asterisk/machine/remote-machine/ansible/index.ts @@ -27,8 +27,6 @@ class Generator extends GeneratorAbstract { weight = 0.5 reason = '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.' - details = - '"ansible.builtin.apt", "ansible.builtin.file", "ansible.builtin.unarchive", "ansible.builtin.copy", "ansible.builtin.fail", and "ansible.builtin.shell" tasks with "when" statements' generate(name: string, type: NodeType) { return { diff --git a/src/technologies/plugins/rules/generators/software-application/zip-archive/asterisk/machine/remote-machine/terraform/index.ts b/src/technologies/plugins/rules/generators/software-application/zip-archive/asterisk/machine/remote-machine/terraform/index.ts index 0431044bf7..b2e55fbf02 100644 --- a/src/technologies/plugins/rules/generators/software-application/zip-archive/asterisk/machine/remote-machine/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/software-application/zip-archive/asterisk/machine/remote-machine/terraform/index.ts @@ -24,7 +24,6 @@ class Generator extends GeneratorAbstract { hosting = ['*', 'remote.machine'] weight = 0 reason = 'Ansible is more specialized. Also using provisioners is a "last resort".' - details = '"file" provisioner to upload artifacts and scripts and "remote-exec" to execute scripts' generate(name: string, type: NodeType) { return { diff --git a/src/technologies/plugins/rules/generators/virtual-machine/openstack-provider/ansible/index.ts b/src/technologies/plugins/rules/generators/virtual-machine/openstack-provider/ansible/index.ts index 4106df5a32..29833490a8 100644 --- a/src/technologies/plugins/rules/generators/virtual-machine/openstack-provider/ansible/index.ts +++ b/src/technologies/plugins/rules/generators/virtual-machine/openstack-provider/ansible/index.ts @@ -15,8 +15,6 @@ const generator: ImplementationGenerator = { hosting: ['openstack.provider'], weight: 0.5, reason: 'Terraform is more specialized.', - details: - '"openstack.cloud.security_group", "openstack.cloud.security_group_rule" and "openstack.cloud.server" tasks', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/generators/virtual-machine/openstack-provider/terraform/index.ts b/src/technologies/plugins/rules/generators/virtual-machine/openstack-provider/terraform/index.ts index 7d38cbcc90..b5a7c03774 100644 --- a/src/technologies/plugins/rules/generators/virtual-machine/openstack-provider/terraform/index.ts +++ b/src/technologies/plugins/rules/generators/virtual-machine/openstack-provider/terraform/index.ts @@ -14,8 +14,6 @@ const generator: ImplementationGenerator = { hosting: ['openstack.provider'], weight: 1, reason: 'Terraform provides a declarative module.', - details: - '"openstack_compute_instance_v2", "openstack_networking_secgroup_rule_v2" and "openstack_networking_secgroup_v2" resources', generate: (name, type) => { return { diff --git a/src/technologies/plugins/rules/registry.ts b/src/technologies/plugins/rules/registry.ts index cd7262b3d9..84d8853340 100644 --- a/src/technologies/plugins/rules/registry.ts +++ b/src/technologies/plugins/rules/registry.ts @@ -39,7 +39,6 @@ class Registry { hosting: generator.hosting, weight: generator.weight, reason: generator.reason, - details: generator.details, }) ) } diff --git a/src/technologies/plugins/rules/types.ts b/src/technologies/plugins/rules/types.ts index 400dbb54e3..d1f4ba6a0c 100644 --- a/src/technologies/plugins/rules/types.ts +++ b/src/technologies/plugins/rules/types.ts @@ -26,8 +26,6 @@ export type ImplementationGenerator = { hosting: string[] generate: (name: string, type: NodeType) => NodeType weight: number - // TODO: make this mandatory - details?: string reason: string } @@ -48,8 +46,5 @@ export abstract class GeneratorAbstract implements ImplementationGenerator { abstract weight: number abstract reason: string - // TODO: make this mandatory - abstract details?: string - abstract generate(name: string, type: NodeType): NodeType } diff --git a/tasks/docs/generate/rules/task.ts b/tasks/docs/generate/rules/task.ts index e0408605d2..5ccf1260d6 100644 --- a/tasks/docs/generate/rules/task.ts +++ b/tasks/docs/generate/rules/task.ts @@ -64,7 +64,6 @@ async function main() { name: description.name, quality: rule.weight, reason: rule.reason, - details: rule.details!, } const found = scenarios.find(it => it.key === key) @@ -122,7 +121,6 @@ type TechnologyRuleScenario = { name: string quality: number reason: string - details: string }[] } From f34aca6fc356a535503448a41a986539f6ef1352 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miles=20St=C3=B6tzner?= Date: Mon, 18 Nov 2024 14:17:16 +0100 Subject: [PATCH 4/4] some renmaing --- .github/workflows/release.yaml | 2 +- .../{rules => quality}/index.md | 220 +++++++++++++++++- .../{rules => quality}/technology-rules.yaml | 0 docs/mkdocs.yaml | 2 +- .../docs/generate/{rules => quality}/summary | 0 .../docs/generate/{rules => quality}/task.ts | 2 +- .../{rules => quality}/technologies.ts | 0 .../generate/{rules => quality}/template.ejs | 22 +- tasks/docs/generate/task.sh | 2 +- 9 files changed, 226 insertions(+), 24 deletions(-) rename docs/docs/variability4tosca/{rules => quality}/index.md (99%) rename docs/docs/variability4tosca/{rules => quality}/technology-rules.yaml (100%) rename tasks/docs/generate/{rules => quality}/summary (100%) rename tasks/docs/generate/{rules => quality}/task.ts (99%) rename tasks/docs/generate/{rules => quality}/technologies.ts (100%) rename tasks/docs/generate/{rules => quality}/template.ejs (78%) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 1efa369157..c2ffb3a3ba 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -199,7 +199,7 @@ jobs: run: ./task docs:generate:normative - name: (DOCS) Generate Technology Rules - run: ./task docs:generate:rules + run: ./task docs:generate:quality - name: (DOCS) Build and Deploy Docs run: ./task docs:deploy diff --git a/docs/docs/variability4tosca/rules/index.md b/docs/docs/variability4tosca/quality/index.md similarity index 99% rename from docs/docs/variability4tosca/rules/index.md rename to docs/docs/variability4tosca/quality/index.md index 903f20864c..7f78ec4eb0 100644 --- a/docs/docs/variability4tosca/rules/index.md +++ b/docs/docs/variability4tosca/quality/index.md @@ -1,5 +1,5 @@ --- -title: Technology Rules +title: Deployment Quality tags: - Vintner - Specification @@ -7,9 +7,9 @@ tags: --8<-- "enumerate.html" -# Deployment Technology Rules Specification 1.0 Release Candidate +# Deployment Quality Specification 1.0 Release Candidate -{{ autogenerated_notice('./task docs:generate:rules') }} +{{ autogenerated_notice('./task docs:generate:quality') }} !!! info "Hidden Information" The document does not specify quality assignments at this stage. @@ -18,14 +18,14 @@ tags: Elements in graphs can be clicked to open their type definition! !!! info "Quick Tip #2" - You can query technology rules for your deployment scenario using `vintner utils scenarios`! + You can query deployment qualities for your deployment scenario using `vintner utils scenarios`! -This document specifies the deployment technology rules. +This document specifies the deployment qualities. The specification is under active development and is not backwards compatible with any previous versions. ## Deployment Technologies -Technology rules are defined in the context of the following deployment technologies. +Deployment qualities are defined in the context of the following deployment technologies. ### Ansible @@ -846,1166 +846,1366 @@ The node template is hosted on the node template "host 1" of node type [openstac -## Appendix A "Rules" +## Appendix A "Cards" -This appendix contains the deployment technology rules. +This appendix contains the deployment quality cards. ### Rule #1 | Attribute | Value | | --- | --- | +| Number | 1 | | Identifier | docker.engine::ansible@local.machine | | Component | [docker.engine](/normative#dockerengine){target=_blank} | | Technology | ansible | | Hosting | [local.machine](/normative#localmachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(docker.engine)host 1(local.machine)host
| ### Rule #2 | Attribute | Value | | --- | --- | +| Number | 2 | | Identifier | docker.engine::terraform@local.machine | | Component | [docker.engine](/normative#dockerengine){target=_blank} | | Technology | terraform | | Hosting | [local.machine](/normative#localmachine){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(docker.engine)host 1(local.machine)host
| ### Rule #3 | Attribute | Value | | --- | --- | +| Number | 3 | | Identifier | docker.engine::ansible@remote.machine | | Component | [docker.engine](/normative#dockerengine){target=_blank} | | Technology | ansible | | Hosting | [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(docker.engine)host 1(remote.machine)host
| ### Rule #4 | Attribute | Value | | --- | --- | +| Number | 4 | | Identifier | docker.engine::terraform@remote.machine | | Component | [docker.engine](/normative#dockerengine){target=_blank} | | Technology | terraform | | Hosting | [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(docker.engine)host 1(remote.machine)host
| ### Rule #5 | Attribute | Value | | --- | --- | +| Number | 5 | | Identifier | gcp.service::ansible | | Component | [gcp.service](/normative#gcpservice){target=_blank} | | Technology | ansible | | Quality | 0 | +| Label | bad | | Reason | Ansible provides a declarative module | | Graph |
component(gcp.service)
| ### Rule #6 | Attribute | Value | | --- | --- | +| Number | 6 | | Identifier | gcp.service::terraform | | Component | [gcp.service](/normative#gcpservice){target=_blank} | | Technology | terraform | | Quality | 1 | +| Label | good | | Reason | Terraform provides a declarative module. | | Graph |
component(gcp.service)
| ### Rule #7 | Attribute | Value | | --- | --- | +| Number | 7 | | Identifier | ingress::ansible@kubernetes.cluster | | Component | [ingress](/normative#ingress){target=_blank} | | Technology | ansible | | Hosting | [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | Kubernetes is more specialized. | | Graph |
component(ingress)host 1(kubernetes.cluster)host
| ### Rule #8 | Attribute | Value | | --- | --- | +| Number | 8 | | Identifier | ingress::kubernetes@kubernetes.cluster | | Component | [ingress](/normative#ingress){target=_blank} | | Technology | kubernetes | | Hosting | [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Kubernetes is the underlying technology. | | Graph |
component(ingress)host 1(kubernetes.cluster)host
| ### Rule #9 | Attribute | Value | | --- | --- | +| Number | 9 | | Identifier | ingress::terraform@kubernetes.cluster | | Component | [ingress](/normative#ingress){target=_blank} | | Technology | terraform | | Hosting | [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | Kubernetes is more specialized. | | Graph |
component(ingress)host 1(kubernetes.cluster)host
| ### Rule #10 | Attribute | Value | | --- | --- | +| Number | 10 | | Identifier | ingress::ansible@local.machine | | Component | [ingress](/normative#ingress){target=_blank} | | Technology | ansible | | Hosting | [local.machine](/normative#localmachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(ingress)host 1(local.machine)host
| ### Rule #11 | Attribute | Value | | --- | --- | +| Number | 11 | | Identifier | ingress::terraform@local.machine | | Component | [ingress](/normative#ingress){target=_blank} | | Technology | terraform | | Hosting | [local.machine](/normative#localmachine){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(ingress)host 1(local.machine)host
| ### Rule #12 | Attribute | Value | | --- | --- | +| Number | 12 | | Identifier | ingress::ansible@remote.machine | | Component | [ingress](/normative#ingress){target=_blank} | | Technology | ansible | | Hosting | [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(ingress)host 1(remote.machine)host
| ### Rule #13 | Attribute | Value | | --- | --- | +| Number | 13 | | Identifier | ingress::terraform@remote.machine | | Component | [ingress](/normative#ingress){target=_blank} | | Technology | terraform | | Hosting | [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(ingress)host 1(remote.machine)host
| ### Rule #14 | Attribute | Value | | --- | --- | +| Number | 14 | | Identifier | mysql.database::ansible@mysql.dbms->docker.engine->local.machine | | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | ansible | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(docker.engine)host 3(local.machine)hosthosthost
| ### Rule #15 | Attribute | Value | | --- | --- | +| Number | 15 | | Identifier | mysql.database::compose@mysql.dbms->docker.engine->local.machine | | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | compose | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | One-time use docker container ("fake Kubernetes job") with imperative parts, while other technologies provide declarative modules. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(docker.engine)host 3(local.machine)hosthosthost
| ### Rule #16 | Attribute | Value | | --- | --- | +| Number | 16 | | Identifier | mysql.database::terraform@mysql.dbms->docker.engine->local.machine | | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | terraform | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Terraform provides a declarative module. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(docker.engine)host 3(local.machine)hosthosthost
| ### Rule #17 | Attribute | Value | | --- | --- | +| Number | 17 | | Identifier | mysql.database::ansible@mysql.dbms->docker.engine->remote.machine | | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | ansible | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(docker.engine)host 3(remote.machine)hosthosthost
| ### Rule #18 | Attribute | Value | | --- | --- | +| Number | 18 | | Identifier | mysql.database::compose@mysql.dbms->docker.engine->remote.machine | | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | compose | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | One-time use docker container ("fake Kubernetes job") with imperative parts, while other technologies provide declarative modules. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(docker.engine)host 3(remote.machine)hosthosthost
| ### Rule #19 | Attribute | Value | | --- | --- | +| Number | 19 | | Identifier | mysql.database::terraform@mysql.dbms->docker.engine->remote.machine | | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | terraform | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 0.75 | +| Label | caution | | Reason | Terraform provides a declarative module. However, Terraform requires an SSH workaround. Ansible is more specialized. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(docker.engine)host 3(remote.machine)hosthosthost
| ### Rule #20 | Attribute | Value | | --- | --- | +| Number | 20 | | Identifier | mysql.database::ansible@mysql.dbms->gcp.cloudsql | | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | ansible | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [gcp.cloudsql](/normative#gcpcloudsql){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | 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. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(gcp.cloudsql)hosthost
| ### Rule #21 | Attribute | Value | | --- | --- | +| Number | 21 | | Identifier | mysql.database::terraform@mysql.dbms->gcp.cloudsql | | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | terraform | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [gcp.cloudsql](/normative#gcpcloudsql){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Terraform provides a declarative module. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(gcp.cloudsql)hosthost
| ### Rule #22 | Attribute | Value | | --- | --- | +| Number | 22 | | Identifier | mysql.database::ansible@mysql.dbms->kubernetes.cluster | | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | ansible | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(kubernetes.cluster)hosthost
| ### Rule #23 | Attribute | Value | | --- | --- | +| Number | 23 | | Identifier | mysql.database::kubernetes@mysql.dbms->kubernetes.cluster | | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | kubernetes | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | Kubernetes Job with imperative parts, while declarative other technologies provide declarative modules. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(kubernetes.cluster)hosthost
| ### Rule #24 | Attribute | Value | | --- | --- | +| Number | 24 | | Identifier | mysql.database::terraform@mysql.dbms->kubernetes.cluster | | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | terraform | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | | Quality | 0.25 | +| Label | bad | | Reason | Ansible is more specialized. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(kubernetes.cluster)hosthost
| ### Rule #25 | Attribute | Value | | --- | --- | +| Number | 25 | | Identifier | mysql.database::ansible@mysql.dbms->local.machine | | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | ansible | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(local.machine)hosthost
| ### Rule #26 | Attribute | Value | | --- | --- | +| Number | 26 | | Identifier | mysql.database::terraform@mysql.dbms->local.machine | | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | terraform | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Terraform provides a declarative module. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(local.machine)hosthost
| ### Rule #27 | Attribute | Value | | --- | --- | +| Number | 27 | | Identifier | mysql.database::ansible@mysql.dbms->remote.machine | | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | ansible | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(remote.machine)hosthost
| ### Rule #28 | Attribute | Value | | --- | --- | +| Number | 28 | | Identifier | mysql.database::terraform@mysql.dbms->remote.machine | | Component | [mysql.database](/normative#mysqldatabase){target=_blank} | | Technology | terraform | | Hosting | [mysql.dbms](/normative#mysqldbms){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | Terraform provides a declarative module. However, Terraform requires an SSH workaround. Ansible is more specialized. | | Graph |
component(mysql.database)host 1(mysql.dbms)host 2(remote.machine)hosthost
| ### Rule #29 | Attribute | Value | | --- | --- | +| Number | 29 | | Identifier | mysql.dbms#dbms.image::ansible@docker.engine->local.machine | | Component | [mysql.dbms](/normative#mysqldbms){target=_blank} | | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | ansible | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | Docker Compose is more specialized | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(docker.engine)host 2(local.machine)hosthost
| ### Rule #30 | Attribute | Value | | --- | --- | +| Number | 30 | | Identifier | mysql.dbms#dbms.image::compose@docker.engine->local.machine | | Component | [mysql.dbms](/normative#mysqldbms){target=_blank} | | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | compose | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Docker is the underlying technology. | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(docker.engine)host 2(local.machine)hosthost
| ### Rule #31 | Attribute | Value | | --- | --- | +| Number | 31 | | Identifier | mysql.dbms#dbms.image::terraform@docker.engine->local.machine | | Component | [mysql.dbms](/normative#mysqldbms){target=_blank} | | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | terraform | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | Docker Compose is more specialized. | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(docker.engine)host 2(local.machine)hosthost
| ### Rule #32 | Attribute | Value | | --- | --- | +| Number | 32 | | Identifier | mysql.dbms#dbms.image::ansible@docker.engine->remote.machine | | Component | [mysql.dbms](/normative#mysqldbms){target=_blank} | | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | ansible | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | Docker Compose is more specialized | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(docker.engine)host 2(remote.machine)hosthost
| ### Rule #33 | Attribute | Value | | --- | --- | +| Number | 33 | | Identifier | mysql.dbms#dbms.image::compose@docker.engine->remote.machine | | Component | [mysql.dbms](/normative#mysqldbms){target=_blank} | | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | compose | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Docker is the underlying technology. | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(docker.engine)host 2(remote.machine)hosthost
| ### Rule #34 | Attribute | Value | | --- | --- | +| Number | 34 | | Identifier | mysql.dbms#dbms.image::terraform@docker.engine->remote.machine | | Component | [mysql.dbms](/normative#mysqldbms){target=_blank} | | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | terraform | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | Docker Compose is more specialized. | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(docker.engine)host 2(remote.machine)hosthost
| ### Rule #35 | Attribute | Value | | --- | --- | +| Number | 35 | | Identifier | mysql.dbms#dbms.image::ansible@gcp.cloudsql | | Component | [mysql.dbms](/normative#mysqldbms){target=_blank} | | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | ansible | | Hosting | [gcp.cloudsql](/normative#gcpcloudsql){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(gcp.cloudsql)host
| ### Rule #36 | Attribute | Value | | --- | --- | +| Number | 36 | | Identifier | mysql.dbms#dbms.image::terraform@gcp.cloudsql | | Component | [mysql.dbms](/normative#mysqldbms){target=_blank} | | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | terraform | | Hosting | [gcp.cloudsql](/normative#gcpcloudsql){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Terraform provides a declarative module. | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(gcp.cloudsql)host
| ### Rule #37 | Attribute | Value | | --- | --- | +| Number | 37 | | Identifier | mysql.dbms#dbms.image::ansible@kubernetes.cluster | | Component | [mysql.dbms](/normative#mysqldbms){target=_blank} | | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | ansible | | Hosting | [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | Kubernetes is more specialized. | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(kubernetes.cluster)host
| ### Rule #38 | Attribute | Value | | --- | --- | +| Number | 38 | | Identifier | mysql.dbms#dbms.image::kubernetes@kubernetes.cluster | | Component | [mysql.dbms](/normative#mysqldbms){target=_blank} | | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | kubernetes | | Hosting | [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Kubernetes is the underlying technology. | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(kubernetes.cluster)host
| ### Rule #39 | Attribute | Value | | --- | --- | +| Number | 39 | | Identifier | mysql.dbms#dbms.image::terraform@kubernetes.cluster | | Component | [mysql.dbms](/normative#mysqldbms){target=_blank} | | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | terraform | | Hosting | [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | Kubernetes is more specialized. | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(kubernetes.cluster)host
| ### Rule #40 | Attribute | Value | | --- | --- | +| Number | 40 | | Identifier | mysql.dbms#dbms.image::ansible@local.machine | | Component | [mysql.dbms](/normative#mysqldbms){target=_blank} | | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | ansible | | Hosting | [local.machine](/normative#localmachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(local.machine)host
| ### Rule #41 | Attribute | Value | | --- | --- | +| Number | 41 | | Identifier | mysql.dbms#dbms.image::terraform@local.machine | | Component | [mysql.dbms](/normative#mysqldbms){target=_blank} | | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | terraform | | Hosting | [local.machine](/normative#localmachine){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(local.machine)host
| ### Rule #42 | Attribute | Value | | --- | --- | +| Number | 42 | | Identifier | mysql.dbms#dbms.image::ansible@remote.machine | | Component | [mysql.dbms](/normative#mysqldbms){target=_blank} | | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | ansible | | Hosting | [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(remote.machine)host
| ### Rule #43 | Attribute | Value | | --- | --- | +| Number | 43 | | Identifier | mysql.dbms#dbms.image::terraform@remote.machine | | Component | [mysql.dbms](/normative#mysqldbms){target=_blank} | | Artifact | [dbms.image](/normative#dbmsimage){target=_blank} | | Technology | terraform | | Hosting | [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(mysql.dbms)artifact(dbms.image)host 1(remote.machine)host
| ### Rule #44 | Attribute | Value | | --- | --- | +| Number | 44 | | Identifier | object.storage::ansible@gcp.cloudstorage | | Component | [object.storage](/normative#objectstorage){target=_blank} | | Technology | ansible | | Hosting | [gcp.cloudstorage](/normative#gcpcloudstorage){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(object.storage)host 1(gcp.cloudstorage)host
| ### Rule #45 | Attribute | Value | | --- | --- | +| Number | 45 | | Identifier | object.storage::terraform@gcp.cloudstorage | | Component | [object.storage](/normative#objectstorage){target=_blank} | | Technology | terraform | | Hosting | [gcp.cloudstorage](/normative#gcpcloudstorage){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Terraform provides a declarative module. | | Graph |
component(object.storage)host 1(gcp.cloudstorage)host
| ### Rule #46 | Attribute | Value | | --- | --- | +| Number | 46 | | Identifier | object.storage::ansible@minio.server->docker.engine->local.machine | | Component | [object.storage](/normative#objectstorage){target=_blank} | | Technology | ansible | | Hosting | [minio.server](/normative#minioserver){target=_blank} -> [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(object.storage)host 1(minio.server)host 2(docker.engine)host 3(local.machine)hosthosthost
| ### Rule #47 | Attribute | Value | | --- | --- | +| Number | 47 | | Identifier | object.storage::compose@minio.server->docker.engine->local.machine | | Component | [object.storage](/normative#objectstorage){target=_blank} | | Technology | compose | | Hosting | [minio.server](/normative#minioserver){target=_blank} -> [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | One-time use docker container ("fake Kubernetes job") with imperative parts, while other technologies provide declarative modules. | | Graph |
component(object.storage)host 1(minio.server)host 2(docker.engine)host 3(local.machine)hosthosthost
| ### Rule #48 | Attribute | Value | | --- | --- | +| Number | 48 | | Identifier | object.storage::terraform@minio.server->docker.engine->local.machine | | Component | [object.storage](/normative#objectstorage){target=_blank} | | Technology | terraform | | Hosting | [minio.server](/normative#minioserver){target=_blank} -> [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Terraform provides a declarative module. | | Graph |
component(object.storage)host 1(minio.server)host 2(docker.engine)host 3(local.machine)hosthosthost
| ### Rule #49 | Attribute | Value | | --- | --- | +| Number | 49 | | Identifier | object.storage::ansible@minio.server->docker.engine->remote.machine | | Component | [object.storage](/normative#objectstorage){target=_blank} | | Technology | ansible | | Hosting | [minio.server](/normative#minioserver){target=_blank} -> [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(object.storage)host 1(minio.server)host 2(docker.engine)host 3(remote.machine)hosthosthost
| ### Rule #50 | Attribute | Value | | --- | --- | +| Number | 50 | | Identifier | object.storage::compose@minio.server->docker.engine->remote.machine | | Component | [object.storage](/normative#objectstorage){target=_blank} | | Technology | compose | | Hosting | [minio.server](/normative#minioserver){target=_blank} -> [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | One-time use docker container ("fake Kubernetes job") with imperative parts, while other technologies provide declarative modules. | | Graph |
component(object.storage)host 1(minio.server)host 2(docker.engine)host 3(remote.machine)hosthosthost
| ### Rule #51 | Attribute | Value | | --- | --- | +| Number | 51 | | Identifier | object.storage::terraform@minio.server->docker.engine->remote.machine | | Component | [object.storage](/normative#objectstorage){target=_blank} | | Technology | terraform | | Hosting | [minio.server](/normative#minioserver){target=_blank} -> [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 0.75 | +| Label | caution | | Reason | Terraform provides a declarative module. However, Terraform requires an SSH workaround. Ansible is more specialized. | | Graph |
component(object.storage)host 1(minio.server)host 2(docker.engine)host 3(remote.machine)hosthosthost
| ### Rule #52 | Attribute | Value | | --- | --- | +| Number | 52 | | Identifier | object.storage::ansible@minio.server->kubernetes.cluster | | Component | [object.storage](/normative#objectstorage){target=_blank} | | Technology | ansible | | Hosting | [minio.server](/normative#minioserver){target=_blank} -> [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(object.storage)host 1(minio.server)host 2(kubernetes.cluster)hosthost
| ### Rule #53 | Attribute | Value | | --- | --- | +| Number | 53 | | Identifier | object.storage::kubernetes@minio.server->kubernetes.cluster | | Component | [object.storage](/normative#objectstorage){target=_blank} | | Technology | kubernetes | | Hosting | [minio.server](/normative#minioserver){target=_blank} -> [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | Kubernetes Job with imperative parts, while declarative other technologies provide declarative modules. | | Graph |
component(object.storage)host 1(minio.server)host 2(kubernetes.cluster)hosthost
| ### Rule #54 | Attribute | Value | | --- | --- | +| Number | 54 | | Identifier | object.storage::terraform@minio.server->kubernetes.cluster | | Component | [object.storage](/normative#objectstorage){target=_blank} | | Technology | terraform | | Hosting | [minio.server](/normative#minioserver){target=_blank} -> [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | | Quality | 0.25 | +| Label | bad | | Reason | Ansible is more specialized. | | Graph |
component(object.storage)host 1(minio.server)host 2(kubernetes.cluster)hosthost
| ### Rule #55 | Attribute | Value | | --- | --- | +| Number | 55 | | Identifier | redis.server#cache.image::ansible@docker.engine->local.machine | | Component | [redis.server](/normative#redisserver){target=_blank} | | Artifact | [cache.image](/normative#cacheimage){target=_blank} | | Technology | ansible | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | Docker Compose is more specialized. | | Graph |
component(redis.server)artifact(cache.image)host 1(docker.engine)host 2(local.machine)hosthost
| ### Rule #56 | Attribute | Value | | --- | --- | +| Number | 56 | | Identifier | redis.server#cache.image::compose@docker.engine->local.machine | | Component | [redis.server](/normative#redisserver){target=_blank} | | Artifact | [cache.image](/normative#cacheimage){target=_blank} | | Technology | compose | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Docker is the underlying technology. | | Graph |
component(redis.server)artifact(cache.image)host 1(docker.engine)host 2(local.machine)hosthost
| ### Rule #57 | Attribute | Value | | --- | --- | +| Number | 57 | | Identifier | redis.server#cache.image::terraform@docker.engine->local.machine | | Component | [redis.server](/normative#redisserver){target=_blank} | | Artifact | [cache.image](/normative#cacheimage){target=_blank} | | Technology | terraform | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | Docker Compose is more specialized. | | Graph |
component(redis.server)artifact(cache.image)host 1(docker.engine)host 2(local.machine)hosthost
| ### Rule #58 | Attribute | Value | | --- | --- | +| Number | 58 | | Identifier | redis.server#cache.image::ansible@docker.engine->remote.machine | | Component | [redis.server](/normative#redisserver){target=_blank} | | Artifact | [cache.image](/normative#cacheimage){target=_blank} | | Technology | ansible | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | Docker Compose is more specialized. | | Graph |
component(redis.server)artifact(cache.image)host 1(docker.engine)host 2(remote.machine)hosthost
| ### Rule #59 | Attribute | Value | | --- | --- | +| Number | 59 | | Identifier | redis.server#cache.image::compose@docker.engine->remote.machine | | Component | [redis.server](/normative#redisserver){target=_blank} | | Artifact | [cache.image](/normative#cacheimage){target=_blank} | | Technology | compose | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Docker is the underlying technology. | | Graph |
component(redis.server)artifact(cache.image)host 1(docker.engine)host 2(remote.machine)hosthost
| ### Rule #60 | Attribute | Value | | --- | --- | +| Number | 60 | | Identifier | redis.server#cache.image::terraform@docker.engine->remote.machine | | Component | [redis.server](/normative#redisserver){target=_blank} | | Artifact | [cache.image](/normative#cacheimage){target=_blank} | | Technology | terraform | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | Docker Compose is more specialized. | | Graph |
component(redis.server)artifact(cache.image)host 1(docker.engine)host 2(remote.machine)hosthost
| ### Rule #61 | Attribute | Value | | --- | --- | +| Number | 61 | | Identifier | redis.server#cache.image::ansible@gcp.memorystore | | Component | [redis.server](/normative#redisserver){target=_blank} | | Artifact | [cache.image](/normative#cacheimage){target=_blank} | | Technology | ansible | | Hosting | [gcp.memorystore](/normative#gcpmemorystore){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(redis.server)artifact(cache.image)host 1(gcp.memorystore)host
| ### Rule #62 | Attribute | Value | | --- | --- | +| Number | 62 | | Identifier | redis.server#cache.image::terraform@gcp.memorystore | | Component | [redis.server](/normative#redisserver){target=_blank} | | Artifact | [cache.image](/normative#cacheimage){target=_blank} | | Technology | terraform | | Hosting | [gcp.memorystore](/normative#gcpmemorystore){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Terraform provides a declarative module. | | Graph |
component(redis.server)artifact(cache.image)host 1(gcp.memorystore)host
| ### Rule #63 | Attribute | Value | | --- | --- | +| Number | 63 | | Identifier | redis.server#cache.image::ansible@kubernetes.cluster | | Component | [redis.server](/normative#redisserver){target=_blank} | | Artifact | [cache.image](/normative#cacheimage){target=_blank} | | Technology | ansible | | Hosting | [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | Kubernetes is more specialized. | | Graph |
component(redis.server)artifact(cache.image)host 1(kubernetes.cluster)host
| ### Rule #64 | Attribute | Value | | --- | --- | +| Number | 64 | | Identifier | redis.server#cache.image::kubernetes@kubernetes.cluster | | Component | [redis.server](/normative#redisserver){target=_blank} | | Artifact | [cache.image](/normative#cacheimage){target=_blank} | | Technology | kubernetes | | Hosting | [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Kubernetes is the underlying technology. | | Graph |
component(redis.server)artifact(cache.image)host 1(kubernetes.cluster)host
| ### Rule #65 | Attribute | Value | | --- | --- | +| Number | 65 | | Identifier | redis.server#cache.image::terraform@kubernetes.cluster | | Component | [redis.server](/normative#redisserver){target=_blank} | | Artifact | [cache.image](/normative#cacheimage){target=_blank} | | Technology | terraform | | Hosting | [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | Kubernetes is more specialized. | | Graph |
component(redis.server)artifact(cache.image)host 1(kubernetes.cluster)host
| ### Rule #66 | Attribute | Value | | --- | --- | +| Number | 66 | | Identifier | service.application#docker.image::ansible@docker.engine->local.machine | | Component | [service.application](/normative#serviceapplication){target=_blank} | | Artifact | [docker.image](/normative#dockerimage){target=_blank} | | Technology | ansible | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | Docker Compose is more specialized. | | Graph |
component(service.application)artifact(docker.image)host 1(docker.engine)host 2(local.machine)hosthost
| ### Rule #67 | Attribute | Value | | --- | --- | +| Number | 67 | | Identifier | service.application#docker.image::compose@docker.engine->local.machine | | Component | [service.application](/normative#serviceapplication){target=_blank} | | Artifact | [docker.image](/normative#dockerimage){target=_blank} | | Technology | compose | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Docker is the underlying technology. | | Graph |
component(service.application)artifact(docker.image)host 1(docker.engine)host 2(local.machine)hosthost
| ### Rule #68 | Attribute | Value | | --- | --- | +| Number | 68 | | Identifier | service.application#docker.image::terraform@docker.engine->local.machine | | Component | [service.application](/normative#serviceapplication){target=_blank} | | Artifact | [docker.image](/normative#dockerimage){target=_blank} | | Technology | terraform | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | Docker Compose is more specialized. | | Graph |
component(service.application)artifact(docker.image)host 1(docker.engine)host 2(local.machine)hosthost
| ### Rule #69 | Attribute | Value | | --- | --- | +| Number | 69 | | Identifier | service.application#docker.image::ansible@docker.engine->remote.machine | | Component | [service.application](/normative#serviceapplication){target=_blank} | | Artifact | [docker.image](/normative#dockerimage){target=_blank} | | Technology | ansible | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | Docker Compose is more specialized. | | Graph |
component(service.application)artifact(docker.image)host 1(docker.engine)host 2(remote.machine)hosthost
| ### Rule #70 | Attribute | Value | | --- | --- | +| Number | 70 | | Identifier | service.application#docker.image::compose@docker.engine->remote.machine | | Component | [service.application](/normative#serviceapplication){target=_blank} | | Artifact | [docker.image](/normative#dockerimage){target=_blank} | | Technology | compose | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Docker is the underlying technology. | | Graph |
component(service.application)artifact(docker.image)host 1(docker.engine)host 2(remote.machine)hosthost
| ### Rule #71 | Attribute | Value | | --- | --- | +| Number | 71 | | Identifier | service.application#docker.image::terraform@docker.engine->remote.machine | | Component | [service.application](/normative#serviceapplication){target=_blank} | | Artifact | [docker.image](/normative#dockerimage){target=_blank} | | Technology | terraform | | Hosting | [docker.engine](/normative#dockerengine){target=_blank} -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | Docker Compose is more specialized. | | Graph |
component(service.application)artifact(docker.image)host 1(docker.engine)host 2(remote.machine)hosthost
| ### Rule #72 | Attribute | Value | | --- | --- | +| Number | 72 | | Identifier | service.application#docker.image::ansible@gcp.cloudrun | | Component | [service.application](/normative#serviceapplication){target=_blank} | | Artifact | [docker.image](/normative#dockerimage){target=_blank} | | Technology | ansible | | Hosting | [gcp.cloudrun](/normative#gcpcloudrun){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | Custom module with imperative parts, while Terraform provides a declarative module. | | Graph |
component(service.application)artifact(docker.image)host 1(gcp.cloudrun)host
| ### Rule #73 | Attribute | Value | | --- | --- | +| Number | 73 | | Identifier | service.application#docker.image::terraform@gcp.cloudrun | | Component | [service.application](/normative#serviceapplication){target=_blank} | | Artifact | [docker.image](/normative#dockerimage){target=_blank} | | Technology | terraform | | Hosting | [gcp.cloudrun](/normative#gcpcloudrun){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Terraform provides a declarative module. | | Graph |
component(service.application)artifact(docker.image)host 1(gcp.cloudrun)host
| ### Rule #74 | Attribute | Value | | --- | --- | +| Number | 74 | | Identifier | service.application#docker.image::ansible@kubernetes.cluster | | Component | [service.application](/normative#serviceapplication){target=_blank} | | Artifact | [docker.image](/normative#dockerimage){target=_blank} | | Technology | ansible | | Hosting | [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | Kubernetes is more specialized. | | Graph |
component(service.application)artifact(docker.image)host 1(kubernetes.cluster)host
| ### Rule #75 | Attribute | Value | | --- | --- | +| Number | 75 | | Identifier | service.application#docker.image::kubernetes@kubernetes.cluster | | Component | [service.application](/normative#serviceapplication){target=_blank} | | Artifact | [docker.image](/normative#dockerimage){target=_blank} | | Technology | kubernetes | | Hosting | [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Kubernetes is the underlying technology. | | Graph |
component(service.application)artifact(docker.image)host 1(kubernetes.cluster)host
| ### Rule #76 | Attribute | Value | | --- | --- | +| Number | 76 | | Identifier | service.application#docker.image::terraform@kubernetes.cluster | | Component | [service.application](/normative#serviceapplication){target=_blank} | | Artifact | [docker.image](/normative#dockerimage){target=_blank} | | Technology | terraform | | Hosting | [kubernetes.cluster](/normative#kubernetescluster){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | Kubernetes is more specialized. | | Graph |
component(service.application)artifact(docker.image)host 1(kubernetes.cluster)host
| ### Rule #77 | Attribute | Value | | --- | --- | +| Number | 77 | | Identifier | service.application#tar.archive::ansible@*->local.machine | | Component | [service.application](/normative#serviceapplication){target=_blank} | | Artifact | [tar.archive](/normative#tararchive){target=_blank} | | Technology | ansible | | Hosting | * -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Primary use case due to the specialization of Ansible. Special integration for systemd. | | Graph |
component(service.application)artifact(tar.archive)...host 2(local.machine)hosthost
| ### Rule #78 | Attribute | Value | | --- | --- | +| Number | 78 | | Identifier | service.application#tar.archive::terraform@*->local.machine | | Component | [service.application](/normative#serviceapplication){target=_blank} | | Artifact | [tar.archive](/normative#tararchive){target=_blank} | | Technology | terraform | | Hosting | * -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(service.application)artifact(tar.archive)...host 2(local.machine)hosthost
| ### Rule #79 | Attribute | Value | | --- | --- | +| Number | 79 | | Identifier | service.application#tar.archive::ansible@*->remote.machine | | Component | [service.application](/normative#serviceapplication){target=_blank} | | Artifact | [tar.archive](/normative#tararchive){target=_blank} | | Technology | ansible | | Hosting | * -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Primary use case due to the specialization of Ansible. Special integration for systemd. | | Graph |
component(service.application)artifact(tar.archive)...host 2(remote.machine)hosthost
| ### Rule #80 | Attribute | Value | | --- | --- | +| Number | 80 | | Identifier | service.application#tar.archive::terraform@*->remote.machine | | Component | [service.application](/normative#serviceapplication){target=_blank} | | Artifact | [tar.archive](/normative#tararchive){target=_blank} | | Technology | terraform | | Hosting | * -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(service.application)artifact(tar.archive)...host 2(remote.machine)hosthost
| ### Rule #81 | Attribute | Value | | --- | --- | +| Number | 81 | | Identifier | service.application#zip.archive::ansible@*->local.machine | | Component | [service.application](/normative#serviceapplication){target=_blank} | | Artifact | [zip.archive](/normative#ziparchive){target=_blank} | | Technology | ansible | | Hosting | * -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Primary use case due to the specialization of Ansible. Special integration for systemd. | | Graph |
component(service.application)artifact(zip.archive)...host 2(local.machine)hosthost
| ### Rule #82 | Attribute | Value | | --- | --- | +| Number | 82 | | Identifier | service.application#zip.archive::terraform@*->local.machine | | Component | [service.application](/normative#serviceapplication){target=_blank} | | Artifact | [zip.archive](/normative#ziparchive){target=_blank} | | Technology | terraform | | Hosting | * -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(service.application)artifact(zip.archive)...host 2(local.machine)hosthost
| ### Rule #83 | Attribute | Value | | --- | --- | +| Number | 83 | | Identifier | service.application#zip.archive::ansible@*->remote.machine | | Component | [service.application](/normative#serviceapplication){target=_blank} | | Artifact | [zip.archive](/normative#ziparchive){target=_blank} | | Technology | ansible | | Hosting | * -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Primary use case due to the specialization of Ansible. Special integration for systemd. | | Graph |
component(service.application)artifact(zip.archive)...host 2(remote.machine)hosthost
| ### Rule #84 | Attribute | Value | | --- | --- | +| Number | 84 | | Identifier | service.application#zip.archive::terraform@*->remote.machine | | Component | [service.application](/normative#serviceapplication){target=_blank} | | Artifact | [zip.archive](/normative#ziparchive){target=_blank} | | Technology | terraform | | Hosting | * -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(service.application)artifact(zip.archive)...host 2(remote.machine)hosthost
| ### Rule #85 | Attribute | Value | | --- | --- | +| Number | 85 | | Identifier | service.application#zip.archive::ansible@gcp.appengine | | Component | [service.application](/normative#serviceapplication){target=_blank} | | Artifact | [zip.archive](/normative#ziparchive){target=_blank} | | Technology | ansible | | Hosting | [gcp.appengine](/normative#gcpappengine){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | Custom module with imperative parts, while Terraform provides a declarative module. | | Graph |
component(service.application)artifact(zip.archive)host 1(gcp.appengine)host
| ### Rule #86 | Attribute | Value | | --- | --- | +| Number | 86 | | Identifier | service.application#zip.archive::terraform@gcp.appengine | | Component | [service.application](/normative#serviceapplication){target=_blank} | | Artifact | [zip.archive](/normative#ziparchive){target=_blank} | | Technology | terraform | | Hosting | [gcp.appengine](/normative#gcpappengine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Terraform provides a declarative module. | | Graph |
component(service.application)artifact(zip.archive)host 1(gcp.appengine)host
| ### Rule #87 | Attribute | Value | | --- | --- | +| Number | 87 | | Identifier | software.application#apt.package::ansible@*->local.machine | | Component | [software.application](/normative#softwareapplication){target=_blank} | | Artifact | [apt.package](/normative#aptpackage){target=_blank} | | Technology | ansible | | Hosting | * -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(software.application)artifact(apt.package)...host 2(local.machine)hosthost
| ### Rule #88 | Attribute | Value | | --- | --- | +| Number | 88 | | Identifier | software.application#apt.package::terraform@*->local.machine | | Component | [software.application](/normative#softwareapplication){target=_blank} | | Artifact | [apt.package](/normative#aptpackage){target=_blank} | | Technology | terraform | | Hosting | * -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(software.application)artifact(apt.package)...host 2(local.machine)hosthost
| ### Rule #89 | Attribute | Value | | --- | --- | +| Number | 89 | | Identifier | software.application#apt.package::ansible@*->remote.machine | | Component | [software.application](/normative#softwareapplication){target=_blank} | | Artifact | [apt.package](/normative#aptpackage){target=_blank} | | Technology | ansible | | Hosting | * -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Primary use case due to the specialization of Ansible. | | Graph |
component(software.application)artifact(apt.package)...host 2(remote.machine)hosthost
| ### Rule #90 | Attribute | Value | | --- | --- | +| Number | 90 | | Identifier | software.application#apt.package::terraform@*->remote.machine | | Component | [software.application](/normative#softwareapplication){target=_blank} | | Artifact | [apt.package](/normative#aptpackage){target=_blank} | | Technology | terraform | | Hosting | * -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(software.application)artifact(apt.package)...host 2(remote.machine)hosthost
| ### Rule #91 | Attribute | Value | | --- | --- | +| Number | 91 | | Identifier | software.application#tar.archive::ansible@*->local.machine | | Component | [software.application](/normative#softwareapplication){target=_blank} | | Artifact | [tar.archive](/normative#tararchive){target=_blank} | | Technology | ansible | | Hosting | * -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | 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. | | Graph |
component(software.application)artifact(tar.archive)...host 2(local.machine)hosthost
| ### Rule #92 | Attribute | Value | | --- | --- | +| Number | 92 | | Identifier | software.application#tar.archive::terraform@*->local.machine | | Component | [software.application](/normative#softwareapplication){target=_blank} | | Artifact | [tar.archive](/normative#tararchive){target=_blank} | | Technology | terraform | | Hosting | * -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(software.application)artifact(tar.archive)...host 2(local.machine)hosthost
| ### Rule #93 | Attribute | Value | | --- | --- | +| Number | 93 | | Identifier | software.application#tar.archive::ansible@*->remote.machine | | Component | [software.application](/normative#softwareapplication){target=_blank} | | Artifact | [tar.archive](/normative#tararchive){target=_blank} | | Technology | ansible | | Hosting | * -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | 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". | | Graph |
component(software.application)artifact(tar.archive)...host 2(remote.machine)hosthost
| ### Rule #94 | Attribute | Value | | --- | --- | +| Number | 94 | | Identifier | software.application#tar.archive::terraform@*->remote.machine | | Component | [software.application](/normative#softwareapplication){target=_blank} | | Artifact | [tar.archive](/normative#tararchive){target=_blank} | | Technology | terraform | | Hosting | * -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(software.application)artifact(tar.archive)...host 2(remote.machine)hosthost
| ### Rule #95 | Attribute | Value | | --- | --- | +| Number | 95 | | Identifier | software.application#zip.archive::ansible@*->local.machine | | Component | [software.application](/normative#softwareapplication){target=_blank} | | Artifact | [zip.archive](/normative#ziparchive){target=_blank} | | Technology | ansible | | Hosting | * -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | 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. | | Graph |
component(software.application)artifact(zip.archive)...host 2(local.machine)hosthost
| ### Rule #96 | Attribute | Value | | --- | --- | +| Number | 96 | | Identifier | software.application#zip.archive::terraform@*->local.machine | | Component | [software.application](/normative#softwareapplication){target=_blank} | | Artifact | [zip.archive](/normative#ziparchive){target=_blank} | | Technology | terraform | | Hosting | * -> [local.machine](/normative#localmachine){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(software.application)artifact(zip.archive)...host 2(local.machine)hosthost
| ### Rule #97 | Attribute | Value | | --- | --- | +| Number | 97 | | Identifier | software.application#zip.archive::ansible@*->remote.machine | | Component | [software.application](/normative#softwareapplication){target=_blank} | | Artifact | [zip.archive](/normative#ziparchive){target=_blank} | | Technology | ansible | | Hosting | * -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | 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. | | Graph |
component(software.application)artifact(zip.archive)...host 2(remote.machine)hosthost
| ### Rule #98 | Attribute | Value | | --- | --- | +| Number | 98 | | Identifier | software.application#zip.archive::terraform@*->remote.machine | | Component | [software.application](/normative#softwareapplication){target=_blank} | | Artifact | [zip.archive](/normative#ziparchive){target=_blank} | | Technology | terraform | | Hosting | * -> [remote.machine](/normative#remotemachine){target=_blank} | | Quality | 0 | +| Label | bad | | Reason | Ansible is more specialized. Also using provisioners is a "last resort". | | Graph |
component(software.application)artifact(zip.archive)...host 2(remote.machine)hosthost
| ### Rule #99 | Attribute | Value | | --- | --- | +| Number | 99 | | Identifier | virtual.machine#machine.image::ansible@openstack.provider | | Component | [virtual.machine](/normative#virtualmachine){target=_blank} | | Artifact | [machine.image](/normative#machineimage){target=_blank} | | Technology | ansible | | Hosting | [openstack.provider](/normative#openstackprovider){target=_blank} | | Quality | 0.5 | +| Label | poor | | Reason | Terraform is more specialized. | | Graph |
component(virtual.machine)artifact(machine.image)host 1(openstack.provider)host
| ### Rule #100 | Attribute | Value | | --- | --- | +| Number | 100 | | Identifier | virtual.machine#machine.image::terraform@openstack.provider | | Component | [virtual.machine](/normative#virtualmachine){target=_blank} | | Artifact | [machine.image](/normative#machineimage){target=_blank} | | Technology | terraform | | Hosting | [openstack.provider](/normative#openstackprovider){target=_blank} | | Quality | 1 | +| Label | good | | Reason | Terraform provides a declarative module. | | Graph |
component(virtual.machine)artifact(machine.image)host 1(openstack.provider)host
| @@ -2013,11 +2213,11 @@ This appendix contains the deployment technology rules. ## Appendix B "YAML" -This appendix contains the deployment technology rules as YAML. +This appendix contains the deployment qualities as YAML. The rules are also available as [download](technology-rules.yaml){download=technology-rules.yaml}. ```yaml linenums="1" ---8<-- "variability4tosca/rules/technology-rules.yaml" +--8<-- "variability4tosca/quality/technology-rules.yaml" ``` --8<-- "vacd.md" diff --git a/docs/docs/variability4tosca/rules/technology-rules.yaml b/docs/docs/variability4tosca/quality/technology-rules.yaml similarity index 100% rename from docs/docs/variability4tosca/rules/technology-rules.yaml rename to docs/docs/variability4tosca/quality/technology-rules.yaml diff --git a/docs/mkdocs.yaml b/docs/mkdocs.yaml index 5893439b67..c344e3bd0e 100644 --- a/docs/mkdocs.yaml +++ b/docs/mkdocs.yaml @@ -114,7 +114,7 @@ nav: - Variability4TOSCA: - variability4tosca/motivation - variability4tosca/specification - - variability4tosca/rules + - variability4tosca/quality - variability4tosca/testing.md - Conformance Tests: variability4tosca/tests - variability4tosca/dynamic.md diff --git a/tasks/docs/generate/rules/summary b/tasks/docs/generate/quality/summary similarity index 100% rename from tasks/docs/generate/rules/summary rename to tasks/docs/generate/quality/summary diff --git a/tasks/docs/generate/rules/task.ts b/tasks/docs/generate/quality/task.ts similarity index 99% rename from tasks/docs/generate/rules/task.ts rename to tasks/docs/generate/quality/task.ts index 5ccf1260d6..faf78b2dc6 100644 --- a/tasks/docs/generate/rules/task.ts +++ b/tasks/docs/generate/quality/task.ts @@ -19,7 +19,7 @@ async function main() { /** * Directory */ - const dir = path.join('docs', 'docs', 'variability4tosca', 'rules') + const dir = path.join('docs', 'docs', 'variability4tosca', 'quality') files.removeDirectory(dir) files.createDirectory(dir) diff --git a/tasks/docs/generate/rules/technologies.ts b/tasks/docs/generate/quality/technologies.ts similarity index 100% rename from tasks/docs/generate/rules/technologies.ts rename to tasks/docs/generate/quality/technologies.ts diff --git a/tasks/docs/generate/rules/template.ejs b/tasks/docs/generate/quality/template.ejs similarity index 78% rename from tasks/docs/generate/rules/template.ejs rename to tasks/docs/generate/quality/template.ejs index de696a4b9e..9eba8758e0 100644 --- a/tasks/docs/generate/rules/template.ejs +++ b/tasks/docs/generate/quality/template.ejs @@ -1,5 +1,5 @@ --- -title: Technology Rules +title: Deployment Quality tags: - Vintner - Specification @@ -7,9 +7,9 @@ tags: --8<-- "enumerate.html" -# Deployment Technology Rules Specification 1.0 Release Candidate +# Deployment Quality Specification 1.0 Release Candidate -{{ autogenerated_notice('./task docs:generate:rules') }} +{{ autogenerated_notice('./task docs:generate:quality') }} !!! info "Hidden Information" The document does not specify quality assignments at this stage. @@ -18,14 +18,14 @@ tags: Elements in graphs can be clicked to open their type definition! !!! info "Quick Tip #2" - You can query technology rules for your deployment scenario using `vintner utils scenarios`! + You can query deployment qualities for your deployment scenario using `vintner utils scenarios`! -This document specifies the deployment technology rules. +This document specifies the deployment qualities. The specification is under active development and is not backwards compatible with any previous versions. ## Deployment Technologies -Technology rules are defined in the context of the following deployment technologies. +Deployment qualities are defined in the context of the following deployment technologies. <% for(const description of descriptions) { -%> ### <%- description.name %> @@ -66,14 +66,15 @@ The scenario does not require a specific hosting. <% }) -%> -## Appendix A "Rules" +## Appendix A "Cards" -This appendix contains the deployment technology rules. +This appendix contains the deployment quality cards. <% data.forEach((rule, index) => { -%> ### Rule #<%= index + 1 %> | Attribute | Value | | --- | --- | +| Number | <%= index + 1 %> | | Identifier | <%= constructRuleName(rule) %> | | Component | <%= link(rule.component) %> | <% if (rule.artifact) {-%> @@ -84,6 +85,7 @@ This appendix contains the deployment technology rules. | Hosting | <%= rule.hosting.map(link).join(" -> ") %> | <% } -%> | Quality | <%= rule.weight %> | +| Label | <% if (rule.weight > 0.75) { -%>good<% } else if (rule.weight > 0.5) { -%>caution<% } else if (rule.weight > 0.25) { -%>poor<% } else { -%>bad<% } -%> | | Reason | <%= rule.reason %> | | Graph |
<%- svgs["rule." + rule.technology + "." + (index + 1)]%>
| @@ -91,11 +93,11 @@ This appendix contains the deployment technology rules. ## Appendix B "YAML" -This appendix contains the deployment technology rules as YAML. +This appendix contains the deployment qualities as YAML. The rules are also available as [download](technology-rules.yaml){download=technology-rules.yaml}. ```yaml linenums="1" ---8<-- "variability4tosca/rules/technology-rules.yaml" +--8<-- "variability4tosca/quality/technology-rules.yaml" ``` --8<-- "vacd.md" diff --git a/tasks/docs/generate/task.sh b/tasks/docs/generate/task.sh index ee1fb75693..98872a06c1 100755 --- a/tasks/docs/generate/task.sh +++ b/tasks/docs/generate/task.sh @@ -8,4 +8,4 @@ echo "Generating docs ..." ./task docs:generate:query ./task docs:generate:sofdcar ./task docs:generate:normative -./task docs:generate:rules +./task docs:generate:quality