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)
                )
Exemple #2
0
 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}")
Exemple #3
0
    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 = {}
Exemple #4
0
    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}")