Store version within SUPPORTED_API_GROUPS hash
This removes the ability to pass in a different version. We can instead create a new entry in the SUPPORTED_API_GROUPS hash for a different version if need be.
This commit is contained in:
parent
170071e365
commit
a5419138fd
|
@ -136,7 +136,7 @@ module Clusters
|
||||||
Gitlab::NamespaceSanitizer.sanitize(slug)
|
Gitlab::NamespaceSanitizer.sanitize(slug)
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_kube_client!(api_version: 'v1')
|
def build_kube_client!
|
||||||
raise "Incomplete settings" unless api_url && actual_namespace
|
raise "Incomplete settings" unless api_url && actual_namespace
|
||||||
|
|
||||||
unless (username && password) || token
|
unless (username && password) || token
|
||||||
|
@ -145,7 +145,6 @@ module Clusters
|
||||||
|
|
||||||
Gitlab::Kubernetes::KubeClient.new(
|
Gitlab::Kubernetes::KubeClient.new(
|
||||||
api_url,
|
api_url,
|
||||||
api_version,
|
|
||||||
auth_options: kubeclient_auth_options,
|
auth_options: kubeclient_auth_options,
|
||||||
ssl_options: kubeclient_ssl_options,
|
ssl_options: kubeclient_ssl_options,
|
||||||
http_proxy_uri: ENV['http_proxy']
|
http_proxy_uri: ENV['http_proxy']
|
||||||
|
|
|
@ -182,12 +182,11 @@ class KubernetesService < DeploymentService
|
||||||
slug.gsub(/[^-a-z0-9]/, '-').gsub(/^-+/, '')
|
slug.gsub(/[^-a-z0-9]/, '-').gsub(/^-+/, '')
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_kube_client!(api_version: 'v1')
|
def build_kube_client!
|
||||||
raise "Incomplete settings" unless api_url && actual_namespace && token
|
raise "Incomplete settings" unless api_url && actual_namespace && token
|
||||||
|
|
||||||
Gitlab::Kubernetes::KubeClient.new(
|
Gitlab::Kubernetes::KubeClient.new(
|
||||||
api_url,
|
api_url,
|
||||||
api_version,
|
|
||||||
auth_options: kubeclient_auth_options,
|
auth_options: kubeclient_auth_options,
|
||||||
ssl_options: kubeclient_ssl_options,
|
ssl_options: kubeclient_ssl_options,
|
||||||
http_proxy_uri: ENV['http_proxy']
|
http_proxy_uri: ENV['http_proxy']
|
||||||
|
|
|
@ -64,12 +64,11 @@ module Clusters
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_kube_client!(api_url, ca_pem, username, password, api_version: 'v1')
|
def build_kube_client!(api_url, ca_pem, username, password)
|
||||||
raise "Incomplete settings" unless api_url && username && password
|
raise "Incomplete settings" unless api_url && username && password
|
||||||
|
|
||||||
Gitlab::Kubernetes::KubeClient.new(
|
Gitlab::Kubernetes::KubeClient.new(
|
||||||
api_url,
|
api_url,
|
||||||
api_version,
|
|
||||||
auth_options: { username: username, password: password },
|
auth_options: { username: username, password: password },
|
||||||
ssl_options: kubeclient_ssl_options(ca_pem),
|
ssl_options: kubeclient_ssl_options(ca_pem),
|
||||||
http_proxy_uri: ENV['http_proxy']
|
http_proxy_uri: ENV['http_proxy']
|
||||||
|
|
|
@ -14,12 +14,20 @@ module Gitlab
|
||||||
include Gitlab::Utils::StrongMemoize
|
include Gitlab::Utils::StrongMemoize
|
||||||
|
|
||||||
SUPPORTED_API_GROUPS = {
|
SUPPORTED_API_GROUPS = {
|
||||||
core: 'api',
|
core: { group: 'api', version: 'v1' },
|
||||||
rbac: 'apis/rbac.authorization.k8s.io',
|
rbac: { group: 'apis/rbac.authorization.k8s.io', version: 'v1' },
|
||||||
extensions: 'apis/extensions'
|
extensions: { group: 'apis/extensions', version: 'v1beta1' }
|
||||||
}.freeze
|
}.freeze
|
||||||
|
|
||||||
LATEST_EXTENSIONS_VERSION = 'v1beta1'
|
SUPPORTED_API_GROUPS.each do |name, params|
|
||||||
|
client_method_name = "#{name}_client".to_sym
|
||||||
|
|
||||||
|
define_method(client_method_name) do
|
||||||
|
strong_memoize(client_method_name) do
|
||||||
|
build_kubeclient(params[:group], params[:version])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Core API methods delegates to the core api group client
|
# Core API methods delegates to the core api group client
|
||||||
delegate :get_pods,
|
delegate :get_pods,
|
||||||
|
@ -57,39 +65,16 @@ module Gitlab
|
||||||
:watch_pod_log,
|
:watch_pod_log,
|
||||||
to: :core_client
|
to: :core_client
|
||||||
|
|
||||||
attr_reader :api_prefix, :kubeclient_options, :default_api_version
|
attr_reader :api_prefix, :kubeclient_options
|
||||||
|
|
||||||
def initialize(api_prefix, default_api_version = 'v1', **kubeclient_options)
|
def initialize(api_prefix, **kubeclient_options)
|
||||||
@api_prefix = api_prefix
|
@api_prefix = api_prefix
|
||||||
@kubeclient_options = kubeclient_options
|
@kubeclient_options = kubeclient_options
|
||||||
@default_api_version = default_api_version
|
|
||||||
end
|
|
||||||
|
|
||||||
def core_client(api_version: default_api_version)
|
|
||||||
core_clients[api_version]
|
|
||||||
end
|
|
||||||
|
|
||||||
def rbac_client(api_version: default_api_version)
|
|
||||||
rbac_clients[api_version]
|
|
||||||
end
|
|
||||||
|
|
||||||
def extensions_client(api_version: LATEST_EXTENSIONS_VERSION)
|
|
||||||
extensions_clients[api_version]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def build_client(cache_name, api_group)
|
|
||||||
strong_memoize(cache_name) do
|
|
||||||
Hash.new do |hash, api_version|
|
|
||||||
hash[api_version] = build_kubeclient(api_group, api_version)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def build_kubeclient(api_group, api_version)
|
def build_kubeclient(api_group, api_version)
|
||||||
raise ArgumentError, "Unknown api group #{api_group}" unless SUPPORTED_API_GROUPS.values.include?(api_group)
|
|
||||||
|
|
||||||
::Kubeclient::Client.new(
|
::Kubeclient::Client.new(
|
||||||
join_api_url(api_prefix, api_group),
|
join_api_url(api_prefix, api_group),
|
||||||
api_version,
|
api_version,
|
||||||
|
@ -105,18 +90,6 @@ module Gitlab
|
||||||
|
|
||||||
url.to_s
|
url.to_s
|
||||||
end
|
end
|
||||||
|
|
||||||
SUPPORTED_API_GROUPS.each do |name, api_group|
|
|
||||||
clients_method_name = "#{name}_clients".to_sym
|
|
||||||
|
|
||||||
define_method(clients_method_name) do
|
|
||||||
strong_memoize(clients_method_name.to_sym) do
|
|
||||||
Hash.new do |hash, api_version|
|
|
||||||
hash[api_version] = build_kubeclient(api_group, api_version)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,10 +6,9 @@ describe Gitlab::Kubernetes::KubeClient do
|
||||||
include KubernetesHelpers
|
include KubernetesHelpers
|
||||||
|
|
||||||
let(:api_url) { 'https://kubernetes.example.com/prefix' }
|
let(:api_url) { 'https://kubernetes.example.com/prefix' }
|
||||||
let(:api_version) { 'v1' }
|
|
||||||
let(:kubeclient_options) { { auth_options: { bearer_token: 'xyz' } } }
|
let(:kubeclient_options) { { auth_options: { bearer_token: 'xyz' } } }
|
||||||
|
|
||||||
let(:client) { described_class.new(api_url, api_version, kubeclient_options) }
|
let(:client) { described_class.new(api_url, kubeclient_options) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
stub_kubeclient_discover(api_url)
|
stub_kubeclient_discover(api_url)
|
||||||
|
@ -37,14 +36,6 @@ describe Gitlab::Kubernetes::KubeClient do
|
||||||
it 'has the api_version' do
|
it 'has the api_version' do
|
||||||
expect(subject.instance_variable_get(:@api_version)).to eq('v1')
|
expect(subject.instance_variable_get(:@api_version)).to eq('v1')
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'different api version' do
|
|
||||||
subject { client.core_client(api_version: 'v2') }
|
|
||||||
|
|
||||||
it 'has the api_version' do
|
|
||||||
expect(subject.instance_variable_get(:@api_version)).to eq('v2')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#rbac_client' do
|
describe '#rbac_client' do
|
||||||
|
@ -59,14 +50,6 @@ describe Gitlab::Kubernetes::KubeClient do
|
||||||
it 'has the api_version' do
|
it 'has the api_version' do
|
||||||
expect(subject.instance_variable_get(:@api_version)).to eq('v1')
|
expect(subject.instance_variable_get(:@api_version)).to eq('v1')
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'different api version' do
|
|
||||||
subject { client.rbac_client(api_version: 'v2') }
|
|
||||||
|
|
||||||
it 'has the api_version' do
|
|
||||||
expect(subject.instance_variable_get(:@api_version)).to eq('v2')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#extensions_client' do
|
describe '#extensions_client' do
|
||||||
|
@ -81,14 +64,6 @@ describe Gitlab::Kubernetes::KubeClient do
|
||||||
it 'has the api_version' do
|
it 'has the api_version' do
|
||||||
expect(subject.instance_variable_get(:@api_version)).to eq('v1beta1')
|
expect(subject.instance_variable_get(:@api_version)).to eq('v1beta1')
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'different api version' do
|
|
||||||
subject { client.extensions_client(api_version: 'v2') }
|
|
||||||
|
|
||||||
it 'has the api_version' do
|
|
||||||
expect(subject.instance_variable_get(:@api_version)).to eq('v2')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'core API' do
|
describe 'core API' do
|
||||||
|
@ -146,7 +121,6 @@ describe Gitlab::Kubernetes::KubeClient do
|
||||||
|
|
||||||
describe 'extensions API group' do
|
describe 'extensions API group' do
|
||||||
let(:api_groups) { ['apis/extensions'] }
|
let(:api_groups) { ['apis/extensions'] }
|
||||||
let(:api_version) { 'v1beta1' }
|
|
||||||
let(:extensions_client) { client.extensions_client }
|
let(:extensions_client) { client.extensions_client }
|
||||||
|
|
||||||
describe '#get_deployments' do
|
describe '#get_deployments' do
|
||||||
|
|
Loading…
Reference in New Issue