summaryrefslogtreecommitdiff
path: root/app/models
diff options
context:
space:
mode:
Diffstat (limited to 'app/models')
-rw-r--r--app/models/clusters/agent.rb13
-rw-r--r--app/models/clusters/agent_token.rb14
-rw-r--r--app/models/clusters/concerns/application_status.rb2
-rw-r--r--app/models/concerns/ci/contextable.rb10
-rw-r--r--app/models/project.rb1
5 files changed, 38 insertions, 2 deletions
diff --git a/app/models/clusters/agent.rb b/app/models/clusters/agent.rb
new file mode 100644
index 00000000000..bc5b305f2dd
--- /dev/null
+++ b/app/models/clusters/agent.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+module Clusters
+ class Agent < ApplicationRecord
+ self.table_name = 'cluster_agents'
+
+ belongs_to :project, class_name: '::Project' # Otherwise, it will load ::Clusters::Project
+
+ has_many :agent_tokens, class_name: 'Clusters::AgentToken'
+
+ validates :name, presence: true, length: { maximum: 255 }, uniqueness: { scope: :project_id }
+ end
+end
diff --git a/app/models/clusters/agent_token.rb b/app/models/clusters/agent_token.rb
new file mode 100644
index 00000000000..e9f1ee4e033
--- /dev/null
+++ b/app/models/clusters/agent_token.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+module Clusters
+ class AgentToken < ApplicationRecord
+ include TokenAuthenticatable
+ add_authentication_token_field :token, encrypted: :required
+
+ self.table_name = 'cluster_agent_tokens'
+
+ belongs_to :agent, class_name: 'Clusters::Agent'
+
+ before_save :ensure_token
+ end
+end
diff --git a/app/models/clusters/concerns/application_status.rb b/app/models/clusters/concerns/application_status.rb
index 86d74ed7b1c..ee6290e613e 100644
--- a/app/models/clusters/concerns/application_status.rb
+++ b/app/models/clusters/concerns/application_status.rb
@@ -79,7 +79,7 @@ module Clusters
transition [:scheduled] => :uninstalling
end
- before_transition any => [:scheduled] do |application, _|
+ before_transition any => [:scheduled, :installed, :uninstalled] do |application, _|
application.status_reason = nil
end
diff --git a/app/models/concerns/ci/contextable.rb b/app/models/concerns/ci/contextable.rb
index 10df5e1a8dc..fdca0ec696b 100644
--- a/app/models/concerns/ci/contextable.rb
+++ b/app/models/concerns/ci/contextable.rb
@@ -64,7 +64,7 @@ module Ci
variables.append(key: 'CI_PIPELINE_TRIGGERED', value: 'true') if trigger_request
variables.append(key: 'CI_NODE_INDEX', value: self.options[:instance].to_s) if self.options&.include?(:instance)
- variables.append(key: 'CI_NODE_TOTAL', value: (self.options&.dig(:parallel) || 1).to_s)
+ variables.append(key: 'CI_NODE_TOTAL', value: ci_node_total_value.to_s)
# legacy variables
variables.append(key: 'CI_BUILD_NAME', value: name)
@@ -96,5 +96,13 @@ module Ci
def secret_project_variables(environment: persisted_environment)
project.ci_variables_for(ref: git_ref, environment: environment)
end
+
+ private
+
+ def ci_node_total_value
+ parallel = self.options&.dig(:parallel)
+ parallel = parallel.dig(:total) if parallel.is_a?(Hash)
+ parallel || 1
+ end
end
end
diff --git a/app/models/project.rb b/app/models/project.rb
index 32f9b580b47..92d2c85e99a 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -261,6 +261,7 @@ class Project < ApplicationRecord
has_many :clusters, through: :cluster_project, class_name: 'Clusters::Cluster'
has_many :kubernetes_namespaces, class_name: 'Clusters::KubernetesNamespace'
has_many :management_clusters, class_name: 'Clusters::Cluster', foreign_key: :management_project_id, inverse_of: :management_project
+ has_many :cluster_agents, class_name: 'Clusters::Agent'
has_many :prometheus_metrics
has_many :prometheus_alerts, inverse_of: :project