diff options
author | Mayra Cabrera <mcabrera@gitlab.com> | 2017-12-22 17:23:43 +0000 |
---|---|---|
committer | Kamil TrzciĆski <ayufan@ayufan.eu> | 2017-12-22 17:23:43 +0000 |
commit | 0d4548026f3060ca0a8f7aa8d8fc89838bc66130 (patch) | |
tree | c6282c19a6f57b605ae7854a1de0779caaeb24fe /app/models/clusters | |
parent | 79cbfedf670bfc446b64bb74e36d1c93f3180235 (diff) | |
download | gitlab-ce-0d4548026f3060ca0a8f7aa8d8fc89838bc66130.tar.gz |
Extend Cluster Applications to allow installation of Prometheus
Diffstat (limited to 'app/models/clusters')
-rw-r--r-- | app/models/clusters/applications/helm.rb | 17 | ||||
-rw-r--r-- | app/models/clusters/applications/ingress.rb | 23 | ||||
-rw-r--r-- | app/models/clusters/applications/prometheus.rb | 26 | ||||
-rw-r--r-- | app/models/clusters/cluster.rb | 7 | ||||
-rw-r--r-- | app/models/clusters/concerns/application_core.rb | 29 |
5 files changed, 64 insertions, 38 deletions
diff --git a/app/models/clusters/applications/helm.rb b/app/models/clusters/applications/helm.rb index c7949d11ef8..193bb48e54d 100644 --- a/app/models/clusters/applications/helm.rb +++ b/app/models/clusters/applications/helm.rb @@ -3,32 +3,19 @@ module Clusters class Helm < ActiveRecord::Base self.table_name = 'clusters_applications_helm' + include ::Clusters::Concerns::ApplicationCore include ::Clusters::Concerns::ApplicationStatus - belongs_to :cluster, class_name: 'Clusters::Cluster', foreign_key: :cluster_id - default_value_for :version, Gitlab::Kubernetes::Helm::HELM_VERSION - validates :cluster, presence: true - - after_initialize :set_initial_status - - def self.application_name - self.to_s.demodulize.underscore - end - def set_initial_status return unless not_installable? self.status = 'installable' if cluster&.platform_kubernetes_active? end - def name - self.class.application_name - end - def install_command - Gitlab::Kubernetes::Helm::InstallCommand.new(name, true) + Gitlab::Kubernetes::Helm::InstallCommand.new(name, install_helm: true) end end end diff --git a/app/models/clusters/applications/ingress.rb b/app/models/clusters/applications/ingress.rb index 44bd979741e..9024f1df1cd 100644 --- a/app/models/clusters/applications/ingress.rb +++ b/app/models/clusters/applications/ingress.rb @@ -3,41 +3,22 @@ module Clusters class Ingress < ActiveRecord::Base self.table_name = 'clusters_applications_ingress' + include ::Clusters::Concerns::ApplicationCore include ::Clusters::Concerns::ApplicationStatus - belongs_to :cluster, class_name: 'Clusters::Cluster', foreign_key: :cluster_id - - validates :cluster, presence: true - default_value_for :ingress_type, :nginx default_value_for :version, :nginx - after_initialize :set_initial_status - enum ingress_type: { nginx: 1 } - def self.application_name - self.to_s.demodulize.underscore - end - - def set_initial_status - return unless not_installable? - - self.status = 'installable' if cluster&.application_helm_installed? - end - - def name - self.class.application_name - end - def chart 'stable/nginx-ingress' end def install_command - Gitlab::Kubernetes::Helm::InstallCommand.new(name, false, chart) + Gitlab::Kubernetes::Helm::InstallCommand.new(name, chart: chart) end end end diff --git a/app/models/clusters/applications/prometheus.rb b/app/models/clusters/applications/prometheus.rb new file mode 100644 index 00000000000..9b0787ee6ca --- /dev/null +++ b/app/models/clusters/applications/prometheus.rb @@ -0,0 +1,26 @@ +module Clusters + module Applications + class Prometheus < ActiveRecord::Base + VERSION = "2.0.0".freeze + + self.table_name = 'clusters_applications_prometheus' + + include ::Clusters::Concerns::ApplicationCore + include ::Clusters::Concerns::ApplicationStatus + + default_value_for :version, VERSION + + def chart + 'stable/prometheus' + end + + def chart_values_file + "#{Rails.root}/vendor/#{name}/values.yaml" + end + + def install_command + Gitlab::Kubernetes::Helm::InstallCommand.new(name, chart: chart, chart_values_file: chart_values_file) + end + end + end +end diff --git a/app/models/clusters/cluster.rb b/app/models/clusters/cluster.rb index 55419189282..5ecbd4cbceb 100644 --- a/app/models/clusters/cluster.rb +++ b/app/models/clusters/cluster.rb @@ -6,7 +6,8 @@ module Clusters APPLICATIONS = { Applications::Helm.application_name => Applications::Helm, - Applications::Ingress.application_name => Applications::Ingress + Applications::Ingress.application_name => Applications::Ingress, + Applications::Prometheus.application_name => Applications::Prometheus }.freeze belongs_to :user @@ -21,6 +22,7 @@ module Clusters has_one :application_helm, class_name: 'Clusters::Applications::Helm' has_one :application_ingress, class_name: 'Clusters::Applications::Ingress' + has_one :application_prometheus, class_name: 'Clusters::Applications::Prometheus' accepts_nested_attributes_for :provider_gcp, update_only: true accepts_nested_attributes_for :platform_kubernetes, update_only: true @@ -62,7 +64,8 @@ module Clusters def applications [ application_helm || build_application_helm, - application_ingress || build_application_ingress + application_ingress || build_application_ingress, + application_prometheus || build_application_prometheus ] end diff --git a/app/models/clusters/concerns/application_core.rb b/app/models/clusters/concerns/application_core.rb new file mode 100644 index 00000000000..a98fa85a5ff --- /dev/null +++ b/app/models/clusters/concerns/application_core.rb @@ -0,0 +1,29 @@ +module Clusters + module Concerns + module ApplicationCore + extend ActiveSupport::Concern + + included do + belongs_to :cluster, class_name: 'Clusters::Cluster', foreign_key: :cluster_id + + validates :cluster, presence: true + + after_initialize :set_initial_status + + def set_initial_status + return unless not_installable? + + self.status = 'installable' if cluster&.application_helm_installed? + end + + def self.application_name + self.to_s.demodulize.underscore + end + + def name + self.class.application_name + end + end + end + end +end |