summaryrefslogtreecommitdiff
path: root/db
diff options
context:
space:
mode:
authorTiger <twatson@gitlab.com>2019-06-06 16:45:00 +1000
committerTiger <twatson@gitlab.com>2019-06-14 10:05:42 +1000
commit8a8ddec661eb7a4bca740285622bb3f8419732fd (patch)
treeedf3a8cf0a958641aeeed1850f44de2c1969f32f /db
parentc6152f3d28fd609600eeea10fbd38202b33af2d9 (diff)
downloadgitlab-ce-8a8ddec661eb7a4bca740285622bb3f8419732fd.tar.gz
Migrate project level clusters with no Kubernetes namespace to unmanaged62772-migrate-managed-clusters-to-unmanaged
These clusters were created before we introduced the option to manage your own cluster, and not having a Kubernetes namespace present means that we have tried and failed to create one - and therefore we cannot manage your cluster for you. The 5 minute window should prevent a race condition where a cluster has only just been created and we haven't had a chance to create any resources for it yet.
Diffstat (limited to 'db')
-rw-r--r--db/post_migrate/20190606163724_migrate_legacy_managed_clusters_to_unmanaged.rb48
1 files changed, 48 insertions, 0 deletions
diff --git a/db/post_migrate/20190606163724_migrate_legacy_managed_clusters_to_unmanaged.rb b/db/post_migrate/20190606163724_migrate_legacy_managed_clusters_to_unmanaged.rb
new file mode 100644
index 00000000000..759ab939f7d
--- /dev/null
+++ b/db/post_migrate/20190606163724_migrate_legacy_managed_clusters_to_unmanaged.rb
@@ -0,0 +1,48 @@
+# frozen_string_literal: true
+
+# See http://doc.gitlab.com/ce/development/migration_style_guide.html
+# for more information on how to write migrations for GitLab.
+
+class MigrateLegacyManagedClustersToUnmanaged < ActiveRecord::Migration[5.1]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ class Cluster < ActiveRecord::Base
+ include EachBatch
+
+ self.table_name = 'clusters'
+
+ has_many :kubernetes_namespaces, class_name: 'MigrateLegacyManagedClustersToUnmanaged::KubernetesNamespace'
+
+ scope :managed, -> { where(managed: true) }
+
+ enum cluster_type: {
+ instance_type: 1,
+ group_type: 2,
+ project_type: 3
+ }
+ end
+
+ class KubernetesNamespace < ActiveRecord::Base
+ self.table_name = 'clusters_kubernetes_namespaces'
+
+ belongs_to :cluster, class_name: 'MigrateLegacyManagedClustersToUnmanaged::Cluster'
+ end
+
+ def up
+ Cluster.managed
+ .project_type
+ .left_joins(:kubernetes_namespaces)
+ .where(clusters_kubernetes_namespaces: { cluster_id: nil })
+ .where('clusters.created_at < ?', 5.minutes.ago)
+ .each_batch do |batch|
+ batch.update_all(managed: false)
+ end
+ end
+
+ def down
+ end
+end