class Scaltainer::KubeResource
Public Class Methods
new(name, namespace)
click to toggle source
Calls superclass method
Scaltainer::ReplicaSetBase::new
# File lib/scaltainer/orchestrators/kubernetes.rb, line 5 def initialize(name, namespace) @@client ||= self.class.get_client type = ENV['KUBERNETES_CONTROLLER_KIND'] || 'deployment' # if namespace not specified, use the one found in configuration namespace ||= @@namespace || 'default' super(name, type, namespace) @resource = @@client.send("get_#{@type}", normalize_name(@name), @namespace) @id = @resource.metadata.uid end
Private Class Methods
get_api_url(default_server)
click to toggle source
# File lib/scaltainer/orchestrators/kubernetes.rb, line 66 def self.get_api_url(default_server) server = ENV['KUBERNETES_API_SERVER'] || default_server endpoint = ENV['KUBERNETES_API_ENDPOINT'] || '/api' "#{server}#{endpoint}" end
get_api_version(default_version)
click to toggle source
# File lib/scaltainer/orchestrators/kubernetes.rb, line 72 def self.get_api_version(default_version) ENV['KUBERNETES_API_VERSION'] || default_version end
get_client()
click to toggle source
# File lib/scaltainer/orchestrators/kubernetes.rb, line 25 def self.get_client if ENV['KUBECONFIG'] get_client_from_kubeconfig ENV['KUBECONFIG'] else get_client_from_serviceaccount '/var/run/secrets/kubernetes.io/serviceaccount' end end
get_client_from_kubeconfig(kubeconfig)
click to toggle source
# File lib/scaltainer/orchestrators/kubernetes.rb, line 33 def self.get_client_from_kubeconfig(kubeconfig) config = Kubeclient::Config.read(kubeconfig) url = get_api_url(config.context.api_endpoint) version = get_api_version(config.context.api_version) # @@namespace = config.context.namespace # wait till PR#308 merged into kubeclient Kubeclient::Client.new( url, version, ssl_options: config.context.ssl_options, auth_options: config.context.auth_options ) end
get_client_from_serviceaccount(serviceaccount)
click to toggle source
# File lib/scaltainer/orchestrators/kubernetes.rb, line 45 def self.get_client_from_serviceaccount(serviceaccount) ssl_verify = if ENV['KUBERNETES_SKIP_SSL_VERIFY'] OpenSSL::SSL::VERIFY_NONE else OpenSSL::SSL::VERIFY_PEER end ssl_options = { client_cert: OpenSSL::X509::Certificate.new(read_secret(serviceaccount, 'ca.crt')), verify_ssl: ssl_verify } auth_options = {bearer_token: read_secret(serviceaccount, 'token')} @@namespace = read_secret(serviceaccount, 'namespace') url = get_api_url('https://kubernetes.default:443') version = get_api_version('v1') Kubeclient::Client.new( url, version, ssl_options: ssl_options, auth_options: auth_options ) end
read_secret(serviceaccount, secret)
click to toggle source
# File lib/scaltainer/orchestrators/kubernetes.rb, line 76 def self.read_secret(serviceaccount, secret) File.read("#{serviceaccount}/#{secret}") end
Public Instance Methods
get_replicas()
click to toggle source
# File lib/scaltainer/orchestrators/kubernetes.rb, line 15 def get_replicas @resource.spec.replicas end
set_replicas(replicas)
click to toggle source
# File lib/scaltainer/orchestrators/kubernetes.rb, line 19 def set_replicas(replicas) @@client.send("patch_#{@type}", normalize_name(@name), {spec: {replicas: replicas}}, @namespace) end
Private Instance Methods
normalize_name(name)
click to toggle source
# File lib/scaltainer/orchestrators/kubernetes.rb, line 80 def normalize_name(name) name.gsub(/_/, '-') end