diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-02-20 15:08:44 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-02-20 15:08:44 +0000 |
commit | b9bac6dbf78a5a7976fba14aaeef96bdeb0da612 (patch) | |
tree | ffe277b562256f718b0818e8fd3c8fd8766d0269 /app/models/serverless | |
parent | 8c4198cbe631278e87fee04157d23494fbb80cdb (diff) | |
download | gitlab-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.rb | 44 | ||||
-rw-r--r-- | app/models/serverless/domain_cluster.rb | 11 |
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 |