multi cluster
This commit is contained in:
56
app.py
56
app.py
@@ -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:
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
connexion
|
connexion
|
||||||
gevent
|
gevent
|
||||||
|
stups-tokens
|
||||||
|
|||||||
Reference in New Issue
Block a user