multi cluster

This commit is contained in:
Henning Jacobs
2016-12-19 13:27:36 +01:00
parent a7fa8aeb75
commit bb1f1ad05d
2 changed files with 35 additions and 22 deletions

56
app.py
View File

@@ -8,11 +8,19 @@ import flask
import logging import logging
import os import os
import requests import requests
import tokens
from urllib.parse import urljoin
DEFAULT_CLUSTERS = 'http://localhost:8001/'
app = connexion.App(__name__) app = connexion.App(__name__)
session = requests.Session() session = requests.Session()
tokens.configure(from_file_only=True)
tokens.manage('read-only')
@app.app.route('/') @app.app.route('/')
def index(): def index():
@@ -20,36 +28,40 @@ def index():
def get_clusters(): def get_clusters():
api_server_url = 'http://localhost:8001/' clusters = []
response = session.get('{}/api/v1/nodes'.format(api_server_url), timeout=5) for api_server_url in os.getenv('CLUSTERS', DEFAULT_CLUSTERS).split(','):
response.raise_for_status() session.headers['Authorization'] = 'Bearer {}'.format(tokens.get('read-only'))
nodes = [] response = session.get(urljoin(api_server_url, '/api/v1/nodes'), timeout=5)
nodes_by_name = {}
for node in response.json()['items']:
obj = {'name': node['metadata']['name'], 'labels': node['metadata']['labels'], 'status': node['status'], 'pods': []}
nodes.append(obj)
nodes_by_name[obj['name']] = obj
response = session.get('http://localhost:8001/api/v1/pods', timeout=5)
response.raise_for_status()
for pod in response.json()['items']:
if 'nodeName' in pod['spec']:
nodes_by_name[pod['spec']['nodeName']]['pods'].append(pod)
try:
response = session.get('{}/api/v1/namespaces/kube-system/services/heapster/proxy/apis/metrics/v1alpha1/nodes'.format(api_server_url), timeout=5)
response.raise_for_status() response.raise_for_status()
for metrics in response.json()['items']: nodes = []
nodes_by_name[metrics['metadata']['name']]['usage'] = metrics['usage'] nodes_by_name = {}
except: for node in response.json()['items']:
logging.exception('Failed to get metrics') obj = {'name': node['metadata']['name'], 'labels': node['metadata']['labels'], 'status': node['status'], 'pods': []}
nodes.append(obj)
nodes_by_name[obj['name']] = obj
response = session.get(urljoin(api_server_url, '/api/v1/pods'), timeout=5)
response.raise_for_status()
for pod in response.json()['items']:
if 'nodeName' in pod['spec']:
nodes_by_name[pod['spec']['nodeName']]['pods'].append(pod)
return {'kubernetes_clusters': [{'nodes': nodes}]} try:
response = session.get(urljoin(api_server_url, '/api/v1/namespaces/kube-system/services/heapster/proxy/apis/metrics/v1alpha1/nodes'), timeout=5)
response.raise_for_status()
for metrics in response.json()['items']:
nodes_by_name[metrics['metadata']['name']]['usage'] = metrics['usage']
except:
logging.exception('Failed to get metrics')
clusters.append({'api_server_url': api_server_url, 'nodes': nodes})
return {'kubernetes_clusters': clusters}
app.add_api('swagger.yaml') app.add_api('swagger.yaml')
if __name__ == '__main__': if __name__ == '__main__':
logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.INFO)
if os.getenv('DEBUG', False): if os.getenv('DEBUG', False):
kwargs = {'debug': True} kwargs = {'debug': True}
else: else:

View File

@@ -1,2 +1,3 @@
connexion connexion
gevent gevent
stups-tokens