def __init__(self, api_server_urls: list): self._clusters = [] if not api_server_urls: try: config = KubeConfig.from_service_account() except FileNotFoundError: # we are not running inside a cluster # => assume default kubectl proxy URL config = KubeConfig.from_url(DEFAULT_CLUSTERS) client = HTTPClient(config) cluster = Cluster( generate_cluster_id(DEFAULT_CLUSTERS), DEFAULT_CLUSTER_NAME, DEFAULT_CLUSTERS, client, ) else: client = HTTPClient(config) cluster = Cluster( generate_cluster_id(config.cluster["server"]), DEFAULT_CLUSTER_NAME, config.cluster["server"], client, ) self._clusters.append(cluster) else: for api_server_url in api_server_urls: config = KubeConfig.from_url(api_server_url) client = HTTPClient(config) generated_id = generate_cluster_id(api_server_url) self._clusters.append( Cluster(generated_id, generated_id, api_server_url, client) )
def refresh(self): try: response = self._session.get(urljoin(self._url, "/kubernetes-clusters"), timeout=10) response.raise_for_status() clusters = [] for row in response.json()["items"]: # only consider "ready" clusters if row.get("lifecycle_status", "ready") == "ready": config = KubeConfig.from_url(row["api_server_url"]) client = HTTPClient(config) client.session.auth = OAuth2BearerTokenAuth( self._oauth2_bearer_token_path) labels = {} for key in ( "id", "channel", "environment", "infrastructure_account", "region", ): if key in row: labels[key.replace("_", "-")] = row[key] clusters.append(Cluster(row["alias"], client, labels)) self._clusters = clusters self._last_cache_refresh = time.time() except: logger.exception( f"Failed to refresh from cluster registry {self._url}")
def __init__(self): logging.info('Getting Kubernetes HTTPClient') try: #if not os.path.exists('/var/run/secrets/kubernetes.io/serviceaccount/ca.crt'): # logging.debug('Stat Kube Config from /serviceaccount') # shutil.copytree('/var/run/secrets/kubernetes.io/serviceaccount', '/serviceaccount') # shutil.copyfile('/ca.crt', '/serviceaccount/ca.crt') # self.api = HTTPClient(KubeConfig.from_service_account('/serviceaccount')) #else: # logging.debug('Staty Kube Config from /var/run/secrets/kubernetes.io/serviceaccount') self.api = HTTPClient(KubeConfig.from_service_account()) except Exception as ex: logging.exception( 'Error Getting Kubernetes HTTPClient using ServiceAccount') logging.info('Trying with URL') kube_host = os.getenv('KUBERNETES_PROXY_API_HOST', '127.0.0.1') kube_port = os.getenv('KUBERNETES_PROXY_API_PORT', '8080') logging.info('Kubernetes Host: {}, Kubernetes Port: {}'.format( kube_host, kube_port)) try: self.api = HTTPClient( KubeConfig.from_url('http://{}:{}'.format( kube_host, kube_port))) except Exception as ex: logging.exception( 'Error Getting Kubernetes HTTPClient using URL') self.api = None self.kube_objects = {}
def __init__(self, clusters: dict): self._clusters = [] for cluster_name, url in clusters.items(): config = KubeConfig.from_url(url) client = HTTPClient(config) cluster = Cluster(cluster_name, client) self._clusters.append(cluster)
def refresh(self): try: response = self._session.get( urljoin(self._url, "/kubernetes-clusters"), timeout=10 ) response.raise_for_status() clusters = [] for row in response.json()["items"]: # only consider "ready" clusters if row.get("lifecycle_status", "ready") == "ready": config = KubeConfig.from_url(row["api_server_url"]) client = HTTPClient(config) client.session.auth = OAuthTokenAuth("read-only") clusters.append( Cluster(row["id"], row["alias"], row["api_server_url"], client) ) self._clusters = clusters self._last_cache_refresh = time.time() except: logger.exception(f"Failed to refresh from cluster registry {self._url}")