summaryrefslogtreecommitdiff
path: root/app/models/serverless
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-02-20 15:08:44 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-02-20 15:08:44 +0000
commitb9bac6dbf78a5a7976fba14aaeef96bdeb0da612 (patch)
treeffe277b562256f718b0818e8fd3c8fd8766d0269 /app/models/serverless
parent8c4198cbe631278e87fee04157d23494fbb80cdb (diff)
downloadgitlab-ce-b9bac6dbf78a5a7976fba14aaeef96bdeb0da612.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/models/serverless')
-rw-r--r--app/models/serverless/domain.rb44
-rw-r--r--app/models/serverless/domain_cluster.rb11
2 files changed, 53 insertions, 2 deletions
diff --git a/app/models/serverless/domain.rb b/app/models/serverless/domain.rb
new file mode 100644
index 00000000000..2fef3b66b08
--- /dev/null
+++ b/app/models/serverless/domain.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+module Serverless
+ class Domain
+ include ActiveModel::Model
+
+ REGEXP = %r{^(?<scheme>https?://)?(?<function_name>[^.]+)-(?<cluster_left>\h{2})a1(?<cluster_middle>\h{10})f2(?<cluster_right>\h{2})(?<environment_id>\h+)-(?<environment_slug>[^.]+)\.(?<pages_domain_name>.+)}.freeze
+ UUID_LENGTH = 14
+
+ attr_accessor :function_name, :serverless_domain_cluster, :environment
+
+ validates :function_name, presence: true, allow_blank: false
+ validates :serverless_domain_cluster, presence: true
+ validates :environment, presence: true
+
+ def self.generate_uuid
+ SecureRandom.hex(UUID_LENGTH / 2)
+ end
+
+ def uri
+ URI("https://#{function_name}-#{serverless_domain_cluster_uuid}#{"%x" % environment.id}-#{environment.slug}.#{serverless_domain_cluster.domain}")
+ end
+
+ def knative_uri
+ URI("http://#{function_name}.#{namespace}.#{serverless_domain_cluster.knative.hostname}")
+ end
+
+ private
+
+ def namespace
+ serverless_domain_cluster.cluster.kubernetes_namespace_for(environment)
+ end
+
+ def serverless_domain_cluster_uuid
+ [
+ serverless_domain_cluster.uuid[0..1],
+ 'a1',
+ serverless_domain_cluster.uuid[2..-3],
+ 'f2',
+ serverless_domain_cluster.uuid[-2..-1]
+ ].join
+ end
+ end
+end
diff --git a/app/models/serverless/domain_cluster.rb b/app/models/serverless/domain_cluster.rb
index 94d90d3e305..9f914d5c3f8 100644
--- a/app/models/serverless/domain_cluster.rb
+++ b/app/models/serverless/domain_cluster.rb
@@ -16,11 +16,18 @@ module Serverless
algorithm: 'aes-256-gcm'
validates :pages_domain, :knative, presence: true
- validates :uuid, presence: true, uniqueness: true, length: { is: Gitlab::Serverless::Domain::UUID_LENGTH },
+ validates :uuid, presence: true, uniqueness: true, length: { is: ::Serverless::Domain::UUID_LENGTH },
format: { with: HEX_REGEXP, message: 'only allows hex characters' }
- default_value_for(:uuid, allows_nil: false) { Gitlab::Serverless::Domain.generate_uuid }
+ default_value_for(:uuid, allows_nil: false) { ::Serverless::Domain.generate_uuid }
delegate :domain, to: :pages_domain
+ delegate :cluster, to: :knative
+
+ def self.for_uuid(uuid)
+ joins(:pages_domain, :knative)
+ .includes(:pages_domain, :knative)
+ .find_by(uuid: uuid)
+ end
end
end