diff --git a/app/models/clusters/cluster.rb b/app/models/clusters/cluster.rb index 7a10b07ee9dea8b528cf4e1c6ad3ef11508e2fba..4262c03498d0f7255ecda30b256beb9b2a32d5a7 100644 --- a/app/models/clusters/cluster.rb +++ b/app/models/clusters/cluster.rb @@ -8,15 +8,17 @@ class Cluster < ApplicationRecord self.table_name = 'clusters' + PROJECT_ONLY_APPLICATIONS = { + Applications::Jupyter.application_name => Applications::Jupyter, + Applications::Knative.application_name => Applications::Knative, + Applications::Prometheus.application_name => Applications::Prometheus + }.freeze APPLICATIONS = { Applications::Helm.application_name => Applications::Helm, Applications::Ingress.application_name => Applications::Ingress, Applications::CertManager.application_name => Applications::CertManager, - Applications::Prometheus.application_name => Applications::Prometheus, - Applications::Runner.application_name => Applications::Runner, - Applications::Jupyter.application_name => Applications::Jupyter, - Applications::Knative.application_name => Applications::Knative - }.freeze + Applications::Runner.application_name => Applications::Runner + }.merge(PROJECT_ONLY_APPLICATIONS).freeze DEFAULT_ENVIRONMENT = '*'.freeze KUBE_INGRESS_BASE_DOMAIN = 'KUBE_INGRESS_BASE_DOMAIN'.freeze diff --git a/app/services/clusters/applications/base_service.rb b/app/services/clusters/applications/base_service.rb index cbd1cf03ae1407e4f67a61e148df91c0f684900e..14a454372874bf060cd0165653d0b18dc72d00d1 100644 --- a/app/services/clusters/applications/base_service.rb +++ b/app/services/clusters/applications/base_service.rb @@ -41,7 +41,7 @@ def worker_class(application) raise NotImplementedError end - def builders + def builder raise NotImplementedError end @@ -50,11 +50,27 @@ def project_builders end def instantiate_application - builder.call(@cluster) || raise(InvalidApplicationError, "invalid application: #{application_name}") + raise_invalid_application_error if invalid_application? + + builder || raise(InvalidApplicationError, "invalid application: #{application_name}") end - def builder - builders[application_name] || raise(InvalidApplicationError, "invalid application: #{application_name}") + def raise_invalid_application_error + raise(InvalidApplicationError, "invalid application: #{application_name}") + end + + def invalid_application? + unknown_application? || (!cluster.project_type? && project_only_application?) + end + + def unknown_application? + Clusters::Cluster::APPLICATIONS.keys.exclude?(application_name) + end + + # These applications will need extra configuration to enable them to work + # with groups of projects + def project_only_application? + Clusters::Cluster::PROJECT_ONLY_APPLICATIONS.include?(application_name) end def application_name diff --git a/app/services/clusters/applications/create_service.rb b/app/services/clusters/applications/create_service.rb index c6f729aaa8aa6485a3129d5045f8dcaa912948cf..ae36da7b3ddeda222b78dd817c95e88af2550bf7 100644 --- a/app/services/clusters/applications/create_service.rb +++ b/app/services/clusters/applications/create_service.rb @@ -9,25 +9,9 @@ def worker_class(application) application.updateable? ? ClusterUpgradeAppWorker : ClusterInstallAppWorker end - def builders - { - "helm" => -> (cluster) { cluster.application_helm || cluster.build_application_helm }, - "ingress" => -> (cluster) { cluster.application_ingress || cluster.build_application_ingress }, - "cert_manager" => -> (cluster) { cluster.application_cert_manager || cluster.build_application_cert_manager }, - "runner" => -> (cluster) { cluster.application_runner || cluster.build_application_runner } - }.tap do |hash| - hash.merge!(project_builders) if cluster.project_type? - end - end - - # These applications will need extra configuration to enable them to work - # with groups of projects - def project_builders - { - "prometheus" => -> (cluster) { cluster.application_prometheus || cluster.build_application_prometheus }, - "jupyter" => -> (cluster) { cluster.application_jupyter || cluster.build_application_jupyter }, - "knative" => -> (cluster) { cluster.application_knative || cluster.build_application_knative } - } + def builder + cluster.method("application_#{application_name}").call || + cluster.method("build_application_#{application_name}").call end end end diff --git a/app/services/clusters/applications/update_service.rb b/app/services/clusters/applications/update_service.rb index a9d4e60999263f6251f261d567dfd1fc7959090a..5071c31839c00c8782531449a345268b849d2643 100644 --- a/app/services/clusters/applications/update_service.rb +++ b/app/services/clusters/applications/update_service.rb @@ -9,25 +9,8 @@ def worker_class(application) ClusterPatchAppWorker end - def builders - { - "helm" => -> (cluster) { cluster.application_helm }, - "ingress" => -> (cluster) { cluster.application_ingress }, - "cert_manager" => -> (cluster) { cluster.application_cert_manager } - }.tap do |hash| - hash.merge!(project_builders) if cluster.project_type? - end - end - - # These applications will need extra configuration to enable them to work - # with groups of projects - def project_builders - { - "prometheus" => -> (cluster) { cluster.application_prometheus }, - "runner" => -> (cluster) { cluster.application_runner }, - "jupyter" => -> (cluster) { cluster.application_jupyter }, - "knative" => -> (cluster) { cluster.application_knative } - } + def builder + cluster.method("application_#{application_name}").call end end end