From d54791e0942ae774876db22675cde1b54f35109d Mon Sep 17 00:00:00 2001 From: Thong Kuah Date: Thu, 15 Nov 2018 22:17:41 +1300 Subject: Create k8s namespace for project in group clusters AFAIK the only relevant place is Projects::CreateService, this gets called when user creates a new project, forks a new project and does those things via the api. Also create k8s namespace for new group hierarchy when transferring project between groups Uses new Refresh service to create k8s namespaces - Ensure we use Cluster#cluster_project If a project has multiple clusters (EE), using Project#cluster_project is not guaranteed to return the cluster_project for this cluster. So switch to using Cluster#cluster_project - at this stage a cluster can only have 1 cluster_project. Also, remove rescue so that sidekiq can retry --- app/services/clusters/refresh_service.rb | 33 ++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 app/services/clusters/refresh_service.rb (limited to 'app/services/clusters/refresh_service.rb') diff --git a/app/services/clusters/refresh_service.rb b/app/services/clusters/refresh_service.rb new file mode 100644 index 00000000000..51859a002c0 --- /dev/null +++ b/app/services/clusters/refresh_service.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +module Clusters + class RefreshService + def create_or_update_namespaces_for_cluster(cluster) + cluster_namespaces = cluster.kubernetes_namespaces + + # Create all namespaces that are missing for each project + cluster.all_projects.missing_kubernetes_namespace(cluster_namespaces).each do |project| + kubernetes_namespace = cluster.find_or_initialize_kubernetes_namespace_for_project(project) + + ::Clusters::Gcp::Kubernetes::CreateOrUpdateNamespaceService.new( + cluster: cluster, + kubernetes_namespace: kubernetes_namespace + ).execute + end + end + + def create_or_update_namespaces_for_project(project) + project_namespaces = project.kubernetes_namespaces + + # Create all namespaces that are missing for each cluster + project.all_clusters.missing_kubernetes_namespace(project_namespaces).each do |cluster| + kubernetes_namespace = cluster.find_or_initialize_kubernetes_namespace_for_project(project) + + ::Clusters::Gcp::Kubernetes::CreateOrUpdateNamespaceService.new( + cluster: cluster, + kubernetes_namespace: kubernetes_namespace + ).execute + end + end + end +end -- cgit v1.2.1 From 9c140b7d26faaaa939dc3f2461fafc8cc434e47c Mon Sep 17 00:00:00 2001 From: Thong Kuah Date: Tue, 4 Dec 2018 23:47:27 +1300 Subject: DRY up refresh service The two pieces of code are identical so use a private method --- app/services/clusters/refresh_service.rb | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) (limited to 'app/services/clusters/refresh_service.rb') diff --git a/app/services/clusters/refresh_service.rb b/app/services/clusters/refresh_service.rb index 51859a002c0..c203f495b7c 100644 --- a/app/services/clusters/refresh_service.rb +++ b/app/services/clusters/refresh_service.rb @@ -7,12 +7,7 @@ module Clusters # Create all namespaces that are missing for each project cluster.all_projects.missing_kubernetes_namespace(cluster_namespaces).each do |project| - kubernetes_namespace = cluster.find_or_initialize_kubernetes_namespace_for_project(project) - - ::Clusters::Gcp::Kubernetes::CreateOrUpdateNamespaceService.new( - cluster: cluster, - kubernetes_namespace: kubernetes_namespace - ).execute + create_or_update_namespace(cluster, project) end end @@ -21,13 +16,19 @@ module Clusters # Create all namespaces that are missing for each cluster project.all_clusters.missing_kubernetes_namespace(project_namespaces).each do |cluster| - kubernetes_namespace = cluster.find_or_initialize_kubernetes_namespace_for_project(project) - - ::Clusters::Gcp::Kubernetes::CreateOrUpdateNamespaceService.new( - cluster: cluster, - kubernetes_namespace: kubernetes_namespace - ).execute + create_or_update_namespace(cluster, project) end end + + private + + def create_or_update_namespace(cluster, project) + kubernetes_namespace = cluster.find_or_initialize_kubernetes_namespace_for_project(project) + + ::Clusters::Gcp::Kubernetes::CreateOrUpdateNamespaceService.new( + cluster: cluster, + kubernetes_namespace: kubernetes_namespace + ).execute + end end end -- cgit v1.2.1 From e3188eb13e3145e9bd4b123c304e43b18eeb1154 Mon Sep 17 00:00:00 2001 From: Thong Kuah Date: Wed, 5 Dec 2018 11:57:02 +1300 Subject: Shift to class methods for RefreshService As we don't use any instance attributes and we don't seem to have any commonalities between the cluster and the project variant. --- app/services/clusters/refresh_service.rb | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) (limited to 'app/services/clusters/refresh_service.rb') diff --git a/app/services/clusters/refresh_service.rb b/app/services/clusters/refresh_service.rb index c203f495b7c..7c82b98a33f 100644 --- a/app/services/clusters/refresh_service.rb +++ b/app/services/clusters/refresh_service.rb @@ -2,27 +2,31 @@ module Clusters class RefreshService - def create_or_update_namespaces_for_cluster(cluster) - cluster_namespaces = cluster.kubernetes_namespaces - - # Create all namespaces that are missing for each project - cluster.all_projects.missing_kubernetes_namespace(cluster_namespaces).each do |project| + def self.create_or_update_namespaces_for_cluster(cluster) + projects_with_missing_kubernetes_namespaces_for_cluster(cluster).each do |project| create_or_update_namespace(cluster, project) end end - def create_or_update_namespaces_for_project(project) - project_namespaces = project.kubernetes_namespaces - - # Create all namespaces that are missing for each cluster - project.all_clusters.missing_kubernetes_namespace(project_namespaces).each do |cluster| + def self.create_or_update_namespaces_for_project(project) + clusters_with_missing_kubernetes_namespaces_for_project(project).each do |cluster| create_or_update_namespace(cluster, project) end end - private + def self.projects_with_missing_kubernetes_namespaces_for_cluster(cluster) + cluster.all_projects.missing_kubernetes_namespace(cluster.kubernetes_namespaces) + end + + private_class_method :projects_with_missing_kubernetes_namespaces_for_cluster - def create_or_update_namespace(cluster, project) + def self.clusters_with_missing_kubernetes_namespaces_for_project(project) + project.all_clusters.missing_kubernetes_namespace(project.kubernetes_namespaces) + end + + private_class_method :clusters_with_missing_kubernetes_namespaces_for_project + + def self.create_or_update_namespace(cluster, project) kubernetes_namespace = cluster.find_or_initialize_kubernetes_namespace_for_project(project) ::Clusters::Gcp::Kubernetes::CreateOrUpdateNamespaceService.new( @@ -30,5 +34,7 @@ module Clusters kubernetes_namespace: kubernetes_namespace ).execute end + + private_class_method :create_or_update_namespace end end -- cgit v1.2.1