From c6d53250de7f439bc25740913d85ada6e3b2fed4 Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Wed, 4 Oct 2017 00:20:47 +0200 Subject: Specify defaults, fix policies, fix db columns --- app/models/gcp/cluster.rb | 52 +++++++++++++++++++--------- app/policies/gcp/cluster_policy.rb | 6 +--- app/services/ci/integrate_cluster_service.rb | 2 +- app/views/projects/clusters/_form.html.haml | 2 +- app/views/projects/clusters/show.html.haml | 19 +++++----- app/workers/concerns/cluster_queue.rb | 2 +- 6 files changed, 51 insertions(+), 32 deletions(-) (limited to 'app') diff --git a/app/models/gcp/cluster.rb b/app/models/gcp/cluster.rb index 543505c24c2..74644207afd 100644 --- a/app/models/gcp/cluster.rb +++ b/app/models/gcp/cluster.rb @@ -6,6 +6,10 @@ module Gcp belongs_to :user belongs_to :service + default_value_for :gcp_cluster_zone, 'us-central1-a' + default_value_for :gcp_cluster_size, 3 + default_value_for :gcp_machine_type, 'n1-standard-4' + attr_encrypted :password, mode: :per_attribute_iv, key: Gitlab::Application.secrets.db_key_base, @@ -28,6 +32,35 @@ module Gcp errored: 4 } + validates :gcp_project_id, + length: 1..63, + format: { + with: Gitlab::Regex.kubernetes_namespace_regex, + message: Gitlab::Regex.kubernetes_namespace_regex_message + } + + validates :gcp_cluster_name, + length: 1..63, + format: { + with: Gitlab::Regex.kubernetes_namespace_regex, + message: Gitlab::Regex.kubernetes_namespace_regex_message + } + + validates :gcp_cluster_zone, presence: true + validates :gcp_cluster_size, presence: true, + numericality: { only_integer: true, greater_than: 0 } + + validates :project_namespace, + allow_blank: true, + length: 1..63, + format: { + with: Gitlab::Regex.kubernetes_namespace_regex, + message: Gitlab::Regex.kubernetes_namespace_regex_message + } + + # if we do not do status transition we prevent change + validate :restrict_modification, on: :update, unless: :status_changed? + state_machine :status, initial: :scheduled do event :creating do transition any - [:creating] => :creating @@ -52,22 +85,9 @@ module Gcp end end - validates :gcp_project_id, presence: true - validates :gcp_cluster_zone, presence: true - validates :gcp_cluster_name, presence: true - validates :gcp_cluster_size, presence: true, - numericality: { only_integer: true, greater_than: 0 } - - validates :project_namespace, - allow_blank: true, - length: 1..63, - format: { - with: Gitlab::Regex.kubernetes_namespace_regex, - message: Gitlab::Regex.kubernetes_namespace_regex_message - } - - # if we do not do status transition we prevent change - validate :restrict_modification, on: :update, unless: :status_changed? + def project_namespace_placeholder + "#{project.path}-#{project.id}" + end def on_creation? scheduled? || creating? diff --git a/app/policies/gcp/cluster_policy.rb b/app/policies/gcp/cluster_policy.rb index dd0a5bff146..e77173ea6e1 100644 --- a/app/policies/gcp/cluster_policy.rb +++ b/app/policies/gcp/cluster_policy.rb @@ -4,11 +4,7 @@ module Gcp delegate { @subject.project } - condition(:safe_to_change) do - can?(:master_access) && !cluster.on_creation? - end - - rule { safe_to_change }.policy do + rule { can?(:master_access) }.policy do enable :update_cluster enable :admin_cluster end diff --git a/app/services/ci/integrate_cluster_service.rb b/app/services/ci/integrate_cluster_service.rb index 959c425fe74..ae7dccb0f42 100644 --- a/app/services/ci/integrate_cluster_service.rb +++ b/app/services/ci/integrate_cluster_service.rb @@ -9,7 +9,7 @@ module Ci kubernetes_token: token, username: username, password: password, - service: project.find_or_initialize_service('kubernetes'), + service: cluster.project.find_or_initialize_service('kubernetes'), status_event: :created) cluster.service.update!( diff --git a/app/views/projects/clusters/_form.html.haml b/app/views/projects/clusters/_form.html.haml index a59c48b2c68..c9ec25d2072 100644 --- a/app/views/projects/clusters/_form.html.haml +++ b/app/views/projects/clusters/_form.html.haml @@ -26,7 +26,7 @@ .form-group = field.label :project_namespace - = field.text_field :project_namespace, class: 'form-control' + = field.text_field :project_namespace, class: 'form-control', placeholder: @cluster.project_namespace_placeholder .form-group = field.label :gcp_machine_type diff --git a/app/views/projects/clusters/show.html.haml b/app/views/projects/clusters/show.html.haml index 3643ba40ee7..d7839504f32 100644 --- a/app/views/projects/clusters/show.html.haml +++ b/app/views/projects/clusters/show.html.haml @@ -29,7 +29,7 @@ = s_('ClusterIntegration|Save changes') - - if can?(current_user, :update_cluster, @cluster) && @cluster.on_creation? + - if can?(current_user, :admin_cluster, @cluster) .form_group %label = s_('ClusterIntegration|Google container engine') @@ -37,15 +37,18 @@ - link_gke = link_to(s_('ClusterIntegration|Google Container Engine'), '', target: '_blank', rel: 'noopener noreferrer') = s_('ClusterIntegration|Manage your cluster by visiting %{link_gke}').html_safe % { link_gke: link_gke } - .hidden.js-cluster-error.alert.alert-danger{ role: 'alert' } - = s_('ClusterIntegration|Something went wrong while creating your cluster on Google Container Engine.') - %code.js-error-reason + - if @cluster.errored? + .js-cluster-error.alert.alert-danger{ role: 'alert' } + = s_('ClusterIntegration|Something went wrong while creating your cluster on Google Container Engine.') + %code.js-error-reason - .hidden.js-cluster-success.alert.alert-info{ role: 'alert' } - = s_('ClusterIntegration|Cluster was successfully created on Google Container Engine.') + - if @cluster.on_creation? + .js-cluster-creating.alert.alert-info{ role: 'alert' } + = s_('ClusterIntegration|Cluster is being created on Google Container Engine...') - .hidden.js-cluster-creating.alert.alert-info{ role: 'alert' } - = s_('ClusterIntegration|Cluster is being created on Google Container Engine...') + - if @cluster.created? + .js-cluster-success.alert.alert-info{ role: 'alert' } + = s_('ClusterIntegration|Cluster was successfully created on Google Container Engine.') .form_group %label diff --git a/app/workers/concerns/cluster_queue.rb b/app/workers/concerns/cluster_queue.rb index 736ae90303c..a5074d13220 100644 --- a/app/workers/concerns/cluster_queue.rb +++ b/app/workers/concerns/cluster_queue.rb @@ -5,6 +5,6 @@ module ClusterQueue extend ActiveSupport::Concern included do - sidekiq_options queue: :manage_cluster + sidekiq_options queue: :gcp_cluster end end -- cgit v1.2.1