summaryrefslogtreecommitdiff
path: root/app/models
diff options
context:
space:
mode:
authorMayra Cabrera <mcabrera@gitlab.com>2018-01-04 22:35:41 +0000
committerKamil TrzciƄski <ayufan@ayufan.eu>2018-01-04 22:35:41 +0000
commit93e9793ce38bb9b5d519f5ca86cb56201549ef19 (patch)
tree82087bc1aae9f01eea1f908bbfefe71514741a5b /app/models
parent6f1b4dc76b4619f538b7216ad3a10ca9336d0c2b (diff)
downloadgitlab-ce-93e9793ce38bb9b5d519f5ca86cb56201549ef19.tar.gz
Create Kubernetes based on Application Templates
Diffstat (limited to 'app/models')
-rw-r--r--app/models/concerns/deployment_platform.rb47
-rw-r--r--app/models/project.rb7
-rw-r--r--app/models/service.rb5
3 files changed, 53 insertions, 6 deletions
diff --git a/app/models/concerns/deployment_platform.rb b/app/models/concerns/deployment_platform.rb
new file mode 100644
index 00000000000..e1373455e98
--- /dev/null
+++ b/app/models/concerns/deployment_platform.rb
@@ -0,0 +1,47 @@
+module DeploymentPlatform
+ def deployment_platform
+ @deployment_platform ||= find_cluster_platform_kubernetes
+ @deployment_platform ||= find_kubernetes_service_integration
+ @deployment_platform ||= build_cluster_and_deployment_platform
+ end
+
+ private
+
+ def find_cluster_platform_kubernetes
+ clusters.find_by(enabled: true)&.platform_kubernetes
+ end
+
+ def find_kubernetes_service_integration
+ services.deployment.reorder(nil).find_by(active: true)
+ end
+
+ def build_cluster_and_deployment_platform
+ return unless kubernetes_service_template
+
+ cluster = ::Clusters::Cluster.create(cluster_attributes_from_service_template)
+ cluster.platform_kubernetes if cluster.persisted?
+ end
+
+ def kubernetes_service_template
+ @kubernetes_service_template ||= KubernetesService.active.find_by_template
+ end
+
+ def cluster_attributes_from_service_template
+ {
+ name: 'kubernetes-template',
+ projects: [self],
+ provider_type: :user,
+ platform_type: :kubernetes,
+ platform_kubernetes_attributes: platform_kubernetes_attributes_from_service_template
+ }
+ end
+
+ def platform_kubernetes_attributes_from_service_template
+ {
+ api_url: kubernetes_service_template.api_url,
+ ca_pem: kubernetes_service_template.ca_pem,
+ token: kubernetes_service_template.token,
+ namespace: kubernetes_service_template.namespace
+ }
+ end
+end
diff --git a/app/models/project.rb b/app/models/project.rb
index 9c0bbf697e2..5d6c1b30587 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -19,6 +19,7 @@ class Project < ActiveRecord::Base
include Routable
include GroupDescendant
include Gitlab::SQL::Pattern
+ include DeploymentPlatform
extend Gitlab::ConfigHelper
extend Gitlab::CurrentSettings
@@ -904,12 +905,6 @@ class Project < ActiveRecord::Base
@ci_service ||= ci_services.reorder(nil).find_by(active: true)
end
- # TODO: This will be extended for multiple enviroment clusters
- def deployment_platform
- @deployment_platform ||= clusters.find_by(enabled: true)&.platform_kubernetes
- @deployment_platform ||= services.where(category: :deployment).reorder(nil).find_by(active: true)
- end
-
def monitoring_services
services.where(category: :monitoring)
end
diff --git a/app/models/service.rb b/app/models/service.rb
index 176b472e724..24ba3039707 100644
--- a/app/models/service.rb
+++ b/app/models/service.rb
@@ -44,6 +44,7 @@ class Service < ActiveRecord::Base
scope :pipeline_hooks, -> { where(pipeline_events: true, active: true) }
scope :wiki_page_hooks, -> { where(wiki_page_events: true, active: true) }
scope :external_issue_trackers, -> { issue_trackers.active.without_defaults }
+ scope :deployment, -> { where(category: 'deployment') }
default_value_for :category, 'common'
@@ -271,6 +272,10 @@ class Service < ActiveRecord::Base
nil
end
+ def self.find_by_template
+ find_by(template: true)
+ end
+
private
def cache_project_has_external_issue_tracker