diff options
author | Shinya Maeda <shinya@gitlab.com> | 2017-11-03 21:22:04 +0300 |
---|---|---|
committer | Shinya Maeda <shinya@gitlab.com> | 2017-11-03 21:22:04 +0300 |
commit | 8fb7e87806e8ae94ee40e56400625886cbcf411e (patch) | |
tree | 84eb0cdf9a18bd23b17b413f2a812abead6c5d7b /db | |
parent | 8d8a860fbbdfffea7c5e53ac299ca4f91d8cc11d (diff) |
Move migration file to post-migration. Use EachBatch. batch_size 1
Diffstat (limited to 'db')
-rw-r--r-- | db/migrate/20171013104327_migrate_gcp_clusters_to_new_clusters_architectures.rb | 90 | ||||
-rw-r--r-- | db/post_migrate/20171013104327_migrate_gcp_clusters_to_new_clusters_architectures.rb | 99 |
2 files changed, 99 insertions, 90 deletions
diff --git a/db/migrate/20171013104327_migrate_gcp_clusters_to_new_clusters_architectures.rb b/db/migrate/20171013104327_migrate_gcp_clusters_to_new_clusters_architectures.rb deleted file mode 100644 index eaf6ac062d8..00000000000 --- a/db/migrate/20171013104327_migrate_gcp_clusters_to_new_clusters_architectures.rb +++ /dev/null @@ -1,90 +0,0 @@ -class MigrateGcpClustersToNewClustersArchitectures < ActiveRecord::Migration - DOWNTIME = false - - def up - gcp_clusters = ActiveRecord::Base.connection.select_all('SELECT * from gcp_clusters;') - - rows_for_clusters = Array.new - rows_for_cluster_projects = Array.new - rows_for_cluster_providers_gcp = Array.new - rows_for_cluster_platforms_kubernetes = Array.new - - gcp_clusters.each do |gcp_cluster| - rows_for_clusters << params_for_clusters(gcp_cluster) - rows_for_cluster_projects << params_for_cluster_projects(gcp_cluster) - rows_for_cluster_providers_gcp << params_for_cluster_providers_gcp(gcp_cluster) - rows_for_cluster_platforms_kubernetes << params_for_cluster_platforms_kubernetes(gcp_cluster) - end - - Gitlab::Database.bulk_insert('clusters', rows_for_clusters) - Gitlab::Database.bulk_insert('cluster_projects', rows_for_cluster_projects) - Gitlab::Database.bulk_insert('cluster_providers_gcp', rows_for_cluster_providers_gcp) - Gitlab::Database.bulk_insert('cluster_platforms_kubernetes', rows_for_cluster_platforms_kubernetes) - end - - def down - execute('DELETE FROM clusters') - end - - private - - def params_for_clusters(gcp_cluster) - { - id: gcp_cluster['id'], - user_id: gcp_cluster['user_id'], - enabled: gcp_cluster['enabled'], - name: gcp_cluster['gcp_cluster_name'], - provider_type: Clusters::Cluster.provider_types[:gcp], - platform_type: Clusters::Cluster.platform_types[:kubernetes], - created_at: gcp_cluster['created_at'], - updated_at: gcp_cluster['updated_at'] - } - end - - def params_for_cluster_projects(gcp_cluster) - { - cluster_id: gcp_cluster['id'], - project_id: gcp_cluster['project_id'], - created_at: gcp_cluster['created_at'], - updated_at: gcp_cluster['updated_at'] - } - end - - def params_for_cluster_providers_gcp(gcp_cluster) - { - cluster_id: gcp_cluster['id'], - status: gcp_cluster['status'], - status_reason: gcp_cluster['status_reason'], - gcp_project_id: gcp_cluster['gcp_project_id'], - zone: gcp_cluster['gcp_cluster_zone'], - num_nodes: gcp_cluster['gcp_cluster_size'], - machine_type: gcp_cluster['gcp_machine_type'], - operation_id: gcp_cluster['gcp_operation_id'], - endpoint: gcp_cluster['endpoint'], - encrypted_access_token: gcp_cluster['encrypted_gcp_token'], - encrypted_access_token_iv: gcp_cluster['encrypted_gcp_token_iv'], - created_at: gcp_cluster['created_at'], - updated_at: gcp_cluster['updated_at'] - } - end - - def params_for_cluster_platforms_kubernetes(gcp_cluster) - { - cluster_id: gcp_cluster['id'], - api_url: api_url(gcp_cluster['endpoint']), - ca_cert: gcp_cluster['ca_cert'], - namespace: gcp_cluster['project_namespace'], - username: gcp_cluster['username'], - encrypted_password: gcp_cluster['encrypted_password'], - encrypted_password_iv: gcp_cluster['encrypted_password_iv'], - encrypted_token: gcp_cluster['encrypted_kubernetes_token'], - encrypted_token_iv: gcp_cluster['encrypted_kubernetes_token_iv'], - created_at: gcp_cluster['created_at'], - updated_at: gcp_cluster['updated_at'] - } - end - - def api_url(endpoint) - endpoint ? 'https://' + endpoint : nil - end -end diff --git a/db/post_migrate/20171013104327_migrate_gcp_clusters_to_new_clusters_architectures.rb b/db/post_migrate/20171013104327_migrate_gcp_clusters_to_new_clusters_architectures.rb new file mode 100644 index 00000000000..7b8b8d703a2 --- /dev/null +++ b/db/post_migrate/20171013104327_migrate_gcp_clusters_to_new_clusters_architectures.rb @@ -0,0 +1,99 @@ +class MigrateGcpClustersToNewClustersArchitectures < ActiveRecord::Migration + DOWNTIME = false + + class GcpCluster < ActiveRecord::Base + self.table_name = 'gcp_clusters' + + belongs_to :project, class_name: 'Project' + + include EachBatch + end + + class Cluster < ActiveRecord::Base + self.table_name = 'clusters' + + has_many :cluster_projects, class_name: 'ClustersProject' + has_many :projects, through: :cluster_projects, class_name: 'Project' + has_one :provider_gcp, class_name: 'ProvidersGcp' + has_one :platform_kubernetes, class_name: 'PlatformsKubernetes' + + accepts_nested_attributes_for :provider_gcp + accepts_nested_attributes_for :platform_kubernetes + + enum platform_type: { + kubernetes: 1 + } + + enum provider_type: { + user: 0, + gcp: 1 + } + end + + class Project < ActiveRecord::Base + self.table_name = 'projects' + + has_one :cluster_project, class_name: 'ClustersProject' + has_one :cluster, through: :cluster_project, class_name: 'Cluster' + end + + class ClustersProject < ActiveRecord::Base + self.table_name = 'cluster_projects' + + belongs_to :cluster, class_name: 'Cluster' + belongs_to :project, class_name: 'Project' + end + + class ProvidersGcp < ActiveRecord::Base + self.table_name = 'cluster_providers_gcp' + end + + class PlatformsKubernetes < ActiveRecord::Base + self.table_name = 'cluster_platforms_kubernetes' + end + + def up + GcpCluster.all.find_each(batch_size: 1) do |gcp_cluster| + Cluster.create( + enabled: gcp_cluster.enabled, + user_id: gcp_cluster.user_id, + name: gcp_cluster.gcp_cluster_name, + provider_type: Cluster.provider_types[:gcp], + platform_type: Cluster.platform_types[:kubernetes], + projects: [gcp_cluster.project], + provider_gcp_attributes: { + status: gcp_cluster.status, + status_reason: gcp_cluster.status_reason, + gcp_project_id: gcp_cluster.gcp_project_id, + zone: gcp_cluster.gcp_cluster_zone, + num_nodes: gcp_cluster.gcp_cluster_size, + machine_type: gcp_cluster.gcp_machine_type, + operation_id: gcp_cluster.gcp_operation_id, + endpoint: gcp_cluster.endpoint, + encrypted_access_token: gcp_cluster.encrypted_gcp_token, + encrypted_access_token_iv: gcp_cluster.encrypted_gcp_token_iv, + }, + platform_kubernetes_attributes: { + cluster_id: gcp_cluster.id, + api_url: api_url(gcp_cluster.endpoint), + ca_cert: gcp_cluster.ca_cert, + namespace: gcp_cluster.project_namespace, + username: gcp_cluster.username, + encrypted_password: gcp_cluster.encrypted_password, + encrypted_password_iv: gcp_cluster.encrypted_password_iv, + encrypted_token: gcp_cluster.encrypted_kubernetes_token, + encrypted_token_iv: gcp_cluster.encrypted_kubernetes_token_iv + } ) + end + end + + def down + execute('DELETE FROM clusters') + end + + private + + def api_url(endpoint) + endpoint ? 'https://' + endpoint : nil + end +end |