Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/kubernetes/kubeconfig/template.rb')
-rw-r--r--lib/gitlab/kubernetes/kubeconfig/template.rb38
1 files changed, 35 insertions, 3 deletions
diff --git a/lib/gitlab/kubernetes/kubeconfig/template.rb b/lib/gitlab/kubernetes/kubeconfig/template.rb
index da0861ee86a..d40b9ce117e 100644
--- a/lib/gitlab/kubernetes/kubeconfig/template.rb
+++ b/lib/gitlab/kubernetes/kubeconfig/template.rb
@@ -14,6 +14,7 @@ module Gitlab
@clusters = []
@users = []
@contexts = []
+ @current_context = nil
end
def valid?
@@ -32,14 +33,45 @@ module Gitlab
contexts << new_entry(:context, **args)
end
+ def merge_yaml(kubeconfig_yaml)
+ return unless kubeconfig_yaml
+
+ kubeconfig_yaml = YAML.safe_load(kubeconfig_yaml, symbolize_names: true)
+ kubeconfig_yaml[:users].each do |user|
+ add_user(
+ name: user[:name],
+ token: user.dig(:user, :token)
+ )
+ end
+ kubeconfig_yaml[:clusters].each do |cluster|
+ ca_pem = cluster.dig(:cluster, :'certificate-authority-data')&.yield_self do |data|
+ Base64.strict_decode64(data)
+ end
+
+ add_cluster(
+ name: cluster[:name],
+ url: cluster.dig(:cluster, :server),
+ ca_pem: ca_pem
+ )
+ end
+ kubeconfig_yaml[:contexts].each do |context|
+ add_context(
+ name: context[:name],
+ **context[:context]&.slice(:cluster, :user, :namespace)
+ )
+ end
+ @current_context = kubeconfig_yaml[:'current-context']
+ end
+
def to_h
{
apiVersion: 'v1',
kind: 'Config',
clusters: clusters.map(&:to_h),
users: users.map(&:to_h),
- contexts: contexts.map(&:to_h)
- }
+ contexts: contexts.map(&:to_h),
+ 'current-context': current_context
+ }.compact
end
def to_yaml
@@ -48,7 +80,7 @@ module Gitlab
private
- attr_reader :clusters, :users, :contexts
+ attr_reader :clusters, :users, :contexts, :current_context
def new_entry(entry, **args)
ENTRIES.fetch(entry).new(**args)