diff options
Diffstat (limited to 'app/models/clusters')
-rw-r--r-- | app/models/clusters/applications/cert_manager.rb | 6 | ||||
-rw-r--r-- | app/models/clusters/applications/crossplane.rb | 3 | ||||
-rw-r--r-- | app/models/clusters/applications/elastic_stack.rb | 12 | ||||
-rw-r--r-- | app/models/clusters/applications/fluentd.rb | 3 | ||||
-rw-r--r-- | app/models/clusters/applications/helm.rb | 6 | ||||
-rw-r--r-- | app/models/clusters/applications/ingress.rb | 3 | ||||
-rw-r--r-- | app/models/clusters/applications/jupyter.rb | 3 | ||||
-rw-r--r-- | app/models/clusters/applications/knative.rb | 6 | ||||
-rw-r--r-- | app/models/clusters/applications/prometheus.rb | 11 | ||||
-rw-r--r-- | app/models/clusters/applications/runner.rb | 5 | ||||
-rw-r--r-- | app/models/clusters/cluster.rb | 22 | ||||
-rw-r--r-- | app/models/clusters/concerns/application_core.rb | 2 | ||||
-rw-r--r-- | app/models/clusters/concerns/application_data.rb | 5 | ||||
-rw-r--r-- | app/models/clusters/concerns/application_status.rb | 22 |
14 files changed, 78 insertions, 31 deletions
diff --git a/app/models/clusters/applications/cert_manager.rb b/app/models/clusters/applications/cert_manager.rb index 1efa44c39c5..53c90fa56d5 100644 --- a/app/models/clusters/applications/cert_manager.rb +++ b/app/models/clusters/applications/cert_manager.rb @@ -38,7 +38,8 @@ module Clusters chart: chart, files: files.merge(cluster_issuer_file), preinstall: pre_install_script, - postinstall: post_install_script + postinstall: post_install_script, + local_tiller_enabled: cluster.local_tiller_enabled? ) end @@ -47,7 +48,8 @@ module Clusters name: 'certmanager', rbac: cluster.platform_kubernetes_rbac?, files: files, - postdelete: post_delete_script + postdelete: post_delete_script, + local_tiller_enabled: cluster.local_tiller_enabled? ) end diff --git a/app/models/clusters/applications/crossplane.rb b/app/models/clusters/applications/crossplane.rb index 420e56c1742..2e5a8210b3c 100644 --- a/app/models/clusters/applications/crossplane.rb +++ b/app/models/clusters/applications/crossplane.rb @@ -35,7 +35,8 @@ module Clusters version: VERSION, rbac: cluster.platform_kubernetes_rbac?, chart: chart, - files: files + files: files, + local_tiller_enabled: cluster.local_tiller_enabled? ) end diff --git a/app/models/clusters/applications/elastic_stack.rb b/app/models/clusters/applications/elastic_stack.rb index 0d029aabc3b..58ac0c1f188 100644 --- a/app/models/clusters/applications/elastic_stack.rb +++ b/app/models/clusters/applications/elastic_stack.rb @@ -34,7 +34,8 @@ module Clusters repository: repository, files: files, preinstall: migrate_to_3_script, - postinstall: post_install_script + postinstall: post_install_script, + local_tiller_enabled: cluster.local_tiller_enabled? ) end @@ -43,7 +44,8 @@ module Clusters name: 'elastic-stack', rbac: cluster.platform_kubernetes_rbac?, files: files, - postdelete: post_delete_script + postdelete: post_delete_script, + local_tiller_enabled: cluster.local_tiller_enabled? ) end @@ -51,7 +53,7 @@ module Clusters super.merge('wait-for-elasticsearch.sh': File.read("#{Rails.root}/vendor/elastic_stack/wait-for-elasticsearch.sh")) end - def elasticsearch_client + def elasticsearch_client(timeout: nil) strong_memoize(:elasticsearch_client) do next unless kube_client @@ -63,6 +65,7 @@ module Clusters # ensure TLS certs are properly verified faraday.ssl[:verify] = kube_client.ssl_options[:verify_ssl] faraday.ssl[:cert_store] = kube_client.ssl_options[:cert_store] + faraday.options.timeout = timeout unless timeout.nil? end rescue Kubeclient::HttpError => error @@ -118,7 +121,8 @@ module Clusters Gitlab::Kubernetes::Helm::DeleteCommand.new( name: 'elastic-stack', rbac: cluster.platform_kubernetes_rbac?, - files: files + files: files, + local_tiller_enabled: cluster.local_tiller_enabled? ).delete_command, Gitlab::Kubernetes::KubectlCmd.delete("pvc", "--selector", "release=elastic-stack", "--namespace", Gitlab::Kubernetes::Helm::NAMESPACE) ] diff --git a/app/models/clusters/applications/fluentd.rb b/app/models/clusters/applications/fluentd.rb index 3fd6e870edc..1bcd39618f6 100644 --- a/app/models/clusters/applications/fluentd.rb +++ b/app/models/clusters/applications/fluentd.rb @@ -32,7 +32,8 @@ module Clusters version: VERSION, rbac: cluster.platform_kubernetes_rbac?, chart: chart, - files: files + files: files, + local_tiller_enabled: cluster.local_tiller_enabled? ) end diff --git a/app/models/clusters/applications/helm.rb b/app/models/clusters/applications/helm.rb index 4a1bcac4bb7..226a9c26db0 100644 --- a/app/models/clusters/applications/helm.rb +++ b/app/models/clusters/applications/helm.rb @@ -52,7 +52,8 @@ module Clusters Gitlab::Kubernetes::Helm::InitCommand.new( name: name, files: files, - rbac: cluster.platform_kubernetes_rbac? + rbac: cluster.platform_kubernetes_rbac?, + local_tiller_enabled: cluster.local_tiller_enabled? ) end @@ -60,7 +61,8 @@ module Clusters Gitlab::Kubernetes::Helm::ResetCommand.new( name: name, files: files, - rbac: cluster.platform_kubernetes_rbac? + rbac: cluster.platform_kubernetes_rbac?, + local_tiller_enabled: cluster.local_tiller_enabled? ) end diff --git a/app/models/clusters/applications/ingress.rb b/app/models/clusters/applications/ingress.rb index dd354198910..a44450ec7a9 100644 --- a/app/models/clusters/applications/ingress.rb +++ b/app/models/clusters/applications/ingress.rb @@ -63,7 +63,8 @@ module Clusters version: VERSION, rbac: cluster.platform_kubernetes_rbac?, chart: chart, - files: files + files: files, + local_tiller_enabled: cluster.local_tiller_enabled? ) end diff --git a/app/models/clusters/applications/jupyter.rb b/app/models/clusters/applications/jupyter.rb index 056ea355de6..b737f0f962f 100644 --- a/app/models/clusters/applications/jupyter.rb +++ b/app/models/clusters/applications/jupyter.rb @@ -45,7 +45,8 @@ module Clusters rbac: cluster.platform_kubernetes_rbac?, chart: chart, files: files, - repository: repository + repository: repository, + local_tiller_enabled: cluster.local_tiller_enabled? ) end diff --git a/app/models/clusters/applications/knative.rb b/app/models/clusters/applications/knative.rb index 3047da12dd9..b55fc3c45fc 100644 --- a/app/models/clusters/applications/knative.rb +++ b/app/models/clusters/applications/knative.rb @@ -77,7 +77,8 @@ module Clusters chart: chart, files: files, repository: REPOSITORY, - postinstall: install_knative_metrics + postinstall: install_knative_metrics, + local_tiller_enabled: cluster.local_tiller_enabled? ) end @@ -99,7 +100,8 @@ module Clusters rbac: cluster.platform_kubernetes_rbac?, files: files, predelete: delete_knative_services_and_metrics, - postdelete: delete_knative_istio_leftovers + postdelete: delete_knative_istio_leftovers, + local_tiller_enabled: cluster.local_tiller_enabled? ) end diff --git a/app/models/clusters/applications/prometheus.rb b/app/models/clusters/applications/prometheus.rb index 3183318690c..24bb1df6d22 100644 --- a/app/models/clusters/applications/prometheus.rb +++ b/app/models/clusters/applications/prometheus.rb @@ -37,7 +37,7 @@ module Clusters end after_transition any => :updating do |application| - application.update(last_update_started_at: Time.now) + application.update(last_update_started_at: Time.current) end end @@ -66,7 +66,8 @@ module Clusters rbac: cluster.platform_kubernetes_rbac?, chart: chart, files: files, - postinstall: install_knative_metrics + postinstall: install_knative_metrics, + local_tiller_enabled: cluster.local_tiller_enabled? ) end @@ -76,7 +77,8 @@ module Clusters version: version, rbac: cluster.platform_kubernetes_rbac?, chart: chart, - files: files_with_replaced_values(values) + files: files_with_replaced_values(values), + local_tiller_enabled: cluster.local_tiller_enabled? ) end @@ -85,7 +87,8 @@ module Clusters name: name, rbac: cluster.platform_kubernetes_rbac?, files: files, - predelete: delete_knative_istio_metrics + predelete: delete_knative_istio_metrics, + local_tiller_enabled: cluster.local_tiller_enabled? ) end diff --git a/app/models/clusters/applications/runner.rb b/app/models/clusters/applications/runner.rb index a861126908f..6d3b6c4ed8f 100644 --- a/app/models/clusters/applications/runner.rb +++ b/app/models/clusters/applications/runner.rb @@ -3,7 +3,7 @@ module Clusters module Applications class Runner < ApplicationRecord - VERSION = '0.16.1' + VERSION = '0.17.1' self.table_name = 'clusters_applications_runners' @@ -36,7 +36,8 @@ module Clusters rbac: cluster.platform_kubernetes_rbac?, chart: chart, files: files, - repository: repository + repository: repository, + local_tiller_enabled: cluster.local_tiller_enabled? ) end diff --git a/app/models/clusters/cluster.rb b/app/models/clusters/cluster.rb index 83f558af1a1..bde7a2104ba 100644 --- a/app/models/clusters/cluster.rb +++ b/app/models/clusters/cluster.rb @@ -36,6 +36,8 @@ module Clusters has_one :cluster_project, -> { order(id: :desc) }, class_name: 'Clusters::Project' has_many :deployment_clusters has_many :deployments, inverse_of: :cluster + has_many :successful_deployments, -> { success }, class_name: 'Deployment' + has_many :environments, -> { distinct }, through: :deployments has_many :cluster_groups, class_name: 'Clusters::Group' has_many :groups, through: :cluster_groups, class_name: '::Group' @@ -125,12 +127,23 @@ module Clusters scope :gcp_installed, -> { gcp_provided.joins(:provider_gcp).merge(Clusters::Providers::Gcp.with_status(:created)) } scope :aws_installed, -> { aws_provided.joins(:provider_aws).merge(Clusters::Providers::Aws.with_status(:created)) } + scope :with_enabled_modsecurity, -> { joins(:application_ingress).merge(::Clusters::Applications::Ingress.modsecurity_enabled) } + scope :with_available_elasticstack, -> { joins(:application_elastic_stack).merge(::Clusters::Applications::ElasticStack.available) } + scope :distinct_with_deployed_environments, -> { joins(:environments).merge(::Deployment.success).distinct } + scope :preload_elasticstack, -> { preload(:application_elastic_stack) } + scope :preload_environments, -> { preload(:environments) } + scope :managed, -> { where(managed: true) } scope :with_persisted_applications, -> { eager_load(*APPLICATIONS_ASSOCIATIONS) } scope :default_environment, -> { where(environment_scope: DEFAULT_ENVIRONMENT) } scope :with_management_project, -> { where.not(management_project: nil) } scope :for_project_namespace, -> (namespace_id) { joins(:projects).where(projects: { namespace_id: namespace_id }) } + scope :with_application_prometheus, -> { includes(:application_prometheus).joins(:application_prometheus) } + scope :with_project_alert_service_data, -> (project_ids) do + conditions = { projects: { alerts_service: [:data] } } + includes(conditions).joins(conditions).where(projects: { id: project_ids }) + end def self.ancestor_clusters_for_clusterable(clusterable, hierarchy_order: :asc) return [] if clusterable.is_a?(Instance) @@ -321,6 +334,10 @@ module Clusters end end + def local_tiller_enabled? + Feature.enabled?(:managed_apps_local_tiller, clusterable, default_enabled: false) + end + private def unique_management_project_environment_scope @@ -368,7 +385,10 @@ module Clusters def retrieve_nodes result = ::Gitlab::Kubernetes::KubeClient.graceful_request(id) { kubeclient.get_nodes } - cluster_nodes = result[:response].to_a + + return unless result[:response] + + cluster_nodes = result[:response] result = ::Gitlab::Kubernetes::KubeClient.graceful_request(id) { kubeclient.metrics_client.get_nodes } nodes_metrics = result[:response].to_a diff --git a/app/models/clusters/concerns/application_core.rb b/app/models/clusters/concerns/application_core.rb index 297d00aa281..c1f63758906 100644 --- a/app/models/clusters/concerns/application_core.rb +++ b/app/models/clusters/concerns/application_core.rb @@ -15,7 +15,7 @@ module Clusters def set_initial_status return unless not_installable? - self.status = status_states[:installable] if cluster&.application_helm_available? || ::Gitlab::Kubernetes::Helm.local_tiller_enabled? + self.status = status_states[:installable] if cluster&.application_helm_available? || cluster&.local_tiller_enabled? end def can_uninstall? diff --git a/app/models/clusters/concerns/application_data.rb b/app/models/clusters/concerns/application_data.rb index 77c606553d2..ade27e69642 100644 --- a/app/models/clusters/concerns/application_data.rb +++ b/app/models/clusters/concerns/application_data.rb @@ -7,7 +7,8 @@ module Clusters Gitlab::Kubernetes::Helm::DeleteCommand.new( name: name, rbac: cluster.platform_kubernetes_rbac?, - files: files + files: files, + local_tiller_enabled: cluster.local_tiller_enabled? ) end @@ -32,7 +33,7 @@ module Clusters private def use_tiller_ssl? - return false if ::Gitlab::Kubernetes::Helm.local_tiller_enabled? + return false if cluster.local_tiller_enabled? cluster.application_helm.has_ssl? end diff --git a/app/models/clusters/concerns/application_status.rb b/app/models/clusters/concerns/application_status.rb index 0b915126f8a..86d74ed7b1c 100644 --- a/app/models/clusters/concerns/application_status.rb +++ b/app/models/clusters/concerns/application_status.rb @@ -97,13 +97,21 @@ module Clusters application.status_reason = status_reason if status_reason end - before_transition any => [:installed, :updated] do |application, _| - # When installing any application we are also performing an update - # of tiller (see Gitlab::Kubernetes::Helm::ClientCommand) so - # therefore we need to reflect that in the database. - - unless ::Gitlab::Kubernetes::Helm.local_tiller_enabled? - application.cluster.application_helm.update!(version: Gitlab::Kubernetes::Helm::HELM_VERSION) + before_transition any => [:installed, :updated] do |application, transition| + unless application.cluster.local_tiller_enabled? || application.is_a?(Clusters::Applications::Helm) + if transition.event == :make_externally_installed + # If an application is externally installed + # We assume the helm application is externally installed too + helm = application.cluster.application_helm || application.cluster.build_application_helm + + helm.make_externally_installed! + else + # When installing any application we are also performing an update + # of tiller (see Gitlab::Kubernetes::Helm::ClientCommand) so + # therefore we need to reflect that in the database. + + application.cluster.application_helm.update!(version: Gitlab::Kubernetes::Helm::HELM_VERSION) + end end end |