diff options
author | Kamil Trzcinski <ayufan@ayufan.eu> | 2017-11-06 10:10:06 +0100 |
---|---|---|
committer | Kamil Trzcinski <ayufan@ayufan.eu> | 2017-11-06 10:10:06 +0100 |
commit | 4274418733c75198c38df5745c2827c6009bbc65 (patch) | |
tree | 574c4d2286cdd8462bb31869124ff02ee5ed3a81 /db | |
parent | 9e2b996f32b47c4714543d7c74fc815893da68cf (diff) | |
parent | eba27fe022562e6e5cdae81a08addff6ec152826 (diff) | |
download | gitlab-ce-4274418733c75198c38df5745c2827c6009bbc65.tar.gz |
Merge remote-tracking branch 'origin/refactor-clusters' into 36629-35958-add-cluster-application-section
Diffstat (limited to 'db')
3 files changed, 104 insertions, 87 deletions
diff --git a/db/migrate/20150827121444_add_fast_forward_option_to_project.rb b/db/migrate/20150827121444_add_fast_forward_option_to_project.rb index 6f22641077d..35df121519e 100644 --- a/db/migrate/20150827121444_add_fast_forward_option_to_project.rb +++ b/db/migrate/20150827121444_add_fast_forward_option_to_project.rb @@ -8,7 +8,11 @@ class AddFastForwardOptionToProject < ActiveRecord::Migration disable_ddl_transaction! def up - add_column_with_default(:projects, :merge_requests_ff_only_enabled, :boolean, default: false) + # We put condition here because of a mistake we made a couple of years ago + # see https://gitlab.com/gitlab-org/gitlab-ce/issues/39382#note_45716103 + unless column_exists?(:projects, :merge_requests_ff_only_enabled) + add_column_with_default(:projects, :merge_requests_ff_only_enabled, :boolean, default: false) + end end def down 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 6ff98899bcb..00000000000 --- a/db/migrate/20171013104327_migrate_gcp_clusters_to_new_clusters_architectures.rb +++ /dev/null @@ -1,86 +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: 'https://' + 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 -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..4758c694563 --- /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 |