diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-08-19 12:08:42 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-08-19 12:08:42 +0300 |
commit | b76ae638462ab0f673e5915986070518dd3f9ad3 (patch) | |
tree | bdab0533383b52873be0ec0eb4d3c66598ff8b91 /lib/gitlab/kubernetes | |
parent | 434373eabe7b4be9593d18a585fb763f1e5f1a6f (diff) |
Add latest changes from gitlab-org/gitlab@14-2-stable-eev14.2.0-rc42
Diffstat (limited to 'lib/gitlab/kubernetes')
-rw-r--r-- | lib/gitlab/kubernetes/default_namespace.rb | 17 | ||||
-rw-r--r-- | lib/gitlab/kubernetes/kubeconfig/entry/cluster.rb | 43 | ||||
-rw-r--r-- | lib/gitlab/kubernetes/kubeconfig/entry/context.rb | 39 | ||||
-rw-r--r-- | lib/gitlab/kubernetes/kubeconfig/entry/user.rb | 29 | ||||
-rw-r--r-- | lib/gitlab/kubernetes/kubeconfig/template.rb | 59 |
5 files changed, 180 insertions, 7 deletions
diff --git a/lib/gitlab/kubernetes/default_namespace.rb b/lib/gitlab/kubernetes/default_namespace.rb index c95362b024b..c22c2fe394d 100644 --- a/lib/gitlab/kubernetes/default_namespace.rb +++ b/lib/gitlab/kubernetes/default_namespace.rb @@ -36,14 +36,17 @@ module Gitlab end end - def default_project_namespace(slug) - namespace_slug = "#{project.path}-#{project.id}".downcase - - if cluster.namespace_per_environment? - namespace_slug += "-#{slug}" - end + def default_project_namespace(environment_slug) + maybe_environment_suffix = cluster.namespace_per_environment? ? "-#{environment_slug}" : '' + suffix = "-#{project.id}#{maybe_environment_suffix}" + namespace = project_path_slug(63 - suffix.length) + suffix + Gitlab::NamespaceSanitizer.sanitize(namespace) + end - Gitlab::NamespaceSanitizer.sanitize(namespace_slug) + def project_path_slug(max_length) + Gitlab::NamespaceSanitizer + .sanitize(project.path.downcase) + .first(max_length) end ## diff --git a/lib/gitlab/kubernetes/kubeconfig/entry/cluster.rb b/lib/gitlab/kubernetes/kubeconfig/entry/cluster.rb new file mode 100644 index 00000000000..836517d4e1f --- /dev/null +++ b/lib/gitlab/kubernetes/kubeconfig/entry/cluster.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +module Gitlab + module Kubernetes + module Kubeconfig + module Entry + class Cluster + attr_reader :name + + def initialize(name:, url:, ca_pem: nil) + @name = name + @url = url + @ca_pem = ca_pem + end + + def to_h + { + name: name, + cluster: cluster + } + end + + private + + attr_reader :url, :ca_pem + + def cluster + { + server: url, + 'certificate-authority-data': certificate_authority_data + }.compact + end + + def certificate_authority_data + return unless ca_pem.present? + + Base64.strict_encode64(ca_pem) + end + end + end + end + end +end diff --git a/lib/gitlab/kubernetes/kubeconfig/entry/context.rb b/lib/gitlab/kubernetes/kubeconfig/entry/context.rb new file mode 100644 index 00000000000..8ff17ab9cff --- /dev/null +++ b/lib/gitlab/kubernetes/kubeconfig/entry/context.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +module Gitlab + module Kubernetes + module Kubeconfig + module Entry + class Context + attr_reader :name + + def initialize(name:, cluster:, user:, namespace: nil) + @name = name + @cluster = cluster + @user = user + @namespace = namespace + end + + def to_h + { + name: name, + context: context + } + end + + private + + attr_reader :cluster, :user, :namespace + + def context + { + cluster: cluster, + namespace: namespace, + user: user + }.compact + end + end + end + end + end +end diff --git a/lib/gitlab/kubernetes/kubeconfig/entry/user.rb b/lib/gitlab/kubernetes/kubeconfig/entry/user.rb new file mode 100644 index 00000000000..784f6d67802 --- /dev/null +++ b/lib/gitlab/kubernetes/kubeconfig/entry/user.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +module Gitlab + module Kubernetes + module Kubeconfig + module Entry + class User + attr_reader :name + + def initialize(name:, token:) + @name = name + @token = token + end + + def to_h + { + name: name, + user: { token: token } + } + end + + private + + attr_reader :token + end + end + end + end +end diff --git a/lib/gitlab/kubernetes/kubeconfig/template.rb b/lib/gitlab/kubernetes/kubeconfig/template.rb new file mode 100644 index 00000000000..da0861ee86a --- /dev/null +++ b/lib/gitlab/kubernetes/kubeconfig/template.rb @@ -0,0 +1,59 @@ +# frozen_string_literal: true + +module Gitlab + module Kubernetes + module Kubeconfig + class Template + ENTRIES = { + cluster: Gitlab::Kubernetes::Kubeconfig::Entry::Cluster, + user: Gitlab::Kubernetes::Kubeconfig::Entry::User, + context: Gitlab::Kubernetes::Kubeconfig::Entry::Context + }.freeze + + def initialize + @clusters = [] + @users = [] + @contexts = [] + end + + def valid? + contexts.present? + end + + def add_cluster(**args) + clusters << new_entry(:cluster, **args) + end + + def add_user(**args) + users << new_entry(:user, **args) + end + + def add_context(**args) + contexts << new_entry(:context, **args) + end + + def to_h + { + apiVersion: 'v1', + kind: 'Config', + clusters: clusters.map(&:to_h), + users: users.map(&:to_h), + contexts: contexts.map(&:to_h) + } + end + + def to_yaml + YAML.dump(to_h.deep_stringify_keys) + end + + private + + attr_reader :clusters, :users, :contexts + + def new_entry(entry, **args) + ENTRIES.fetch(entry).new(**args) + end + end + end + end +end |