diff options
Diffstat (limited to 'lib/gitlab/kubernetes/kubeconfig/template.rb')
-rw-r--r-- | lib/gitlab/kubernetes/kubeconfig/template.rb | 38 |
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) |