gitlab-org--gitlab-foss/app/models/clusters/cluster.rb

103 lines
2.9 KiB
Ruby
Raw Normal View History

module Clusters
class Cluster < ActiveRecord::Base
include Presentable
2017-10-23 04:36:35 -04:00
self.table_name = 'clusters'
2017-11-02 10:10:46 -04:00
APPLICATIONS = {
2017-11-06 04:41:27 -05:00
Applications::Helm.application_name => Applications::Helm,
Applications::Ingress.application_name => Applications::Ingress
2017-11-02 12:08:56 -04:00
}.freeze
2017-11-02 10:10:46 -04:00
belongs_to :user
2017-10-23 04:36:35 -04:00
has_many :cluster_projects, class_name: 'Clusters::Project'
has_many :projects, through: :cluster_projects, class_name: '::Project'
# we force autosave to happen when we save `Cluster` model
has_one :provider_gcp, class_name: 'Clusters::Providers::Gcp', autosave: true
# We have to ":destroy" it today to ensure that we clean also the Kubernetes Integration
has_one :platform_kubernetes, class_name: 'Clusters::Platforms::Kubernetes', autosave: true, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
2017-11-02 10:10:46 -04:00
has_one :application_helm, class_name: 'Clusters::Applications::Helm'
2017-11-06 04:41:27 -05:00
has_one :application_ingress, class_name: 'Clusters::Applications::Ingress'
2017-11-02 10:10:46 -04:00
accepts_nested_attributes_for :provider_gcp, update_only: true
2017-10-30 08:55:18 -04:00
accepts_nested_attributes_for :platform_kubernetes, update_only: true
2017-10-23 04:36:35 -04:00
validates :name, cluster_name: true
validate :restrict_modification, on: :update
# TODO: Move back this into Clusters::Platforms::Kubernetes in 10.3
# We need callback here because `enabled` belongs to Clusters::Cluster
# Callbacks in Clusters::Platforms::Kubernetes will not be called after update
after_save :update_kubernetes_integration!
2017-11-03 04:22:11 -04:00
delegate :status, to: :provider, allow_nil: true
delegate :status_reason, to: :provider, allow_nil: true
2017-10-23 04:36:35 -04:00
delegate :on_creation?, to: :provider, allow_nil: true
delegate :update_kubernetes_integration!, to: :platform, allow_nil: true
delegate :active?, to: :platform_kubernetes, prefix: true, allow_nil: true
delegate :installed?, to: :application_helm, prefix: true, allow_nil: true
2017-10-29 14:48:45 -04:00
enum platform_type: {
kubernetes: 1
}
enum provider_type: {
user: 0,
gcp: 1
}
scope :enabled, -> { where(enabled: true) }
scope :disabled, -> { where(enabled: false) }
2017-11-02 10:10:46 -04:00
def status_name
if provider
provider.status_name
else
:created
end
end
2017-11-02 12:57:50 -04:00
def applications
[
2017-11-06 04:41:27 -05:00
application_helm || build_application_helm,
application_ingress || build_application_ingress
2017-11-02 12:57:50 -04:00
]
end
def provider
2017-10-23 04:36:35 -04:00
return provider_gcp if gcp?
end
def platform
2017-10-23 04:36:35 -04:00
return platform_kubernetes if kubernetes?
end
def first_project
return @first_project if defined?(@first_project)
@first_project = projects.first
end
2017-10-29 14:48:45 -04:00
alias_method :project, :first_project
2017-10-23 04:36:35 -04:00
2017-11-02 10:10:46 -04:00
def kubeclient
platform_kubernetes.kubeclient if kubernetes?
end
2017-10-23 04:36:35 -04:00
private
def restrict_modification
if provider&.on_creation?
errors.add(:base, "cannot modify during creation")
return false
end
true
end
end
end