From 43bc660981bd6847818914546ff927dd2b9d54a5 Mon Sep 17 00:00:00 2001 From: Henning Jacobs Date: Mon, 19 Dec 2016 20:59:15 +0100 Subject: [PATCH] draw unassigned pods --- app.py | 18 ++++++++++-------- app/src/cluster.js | 13 +++++++++++++ examples/unassigned-pod.yaml | 12 ++++++++++++ 3 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 examples/unassigned-pod.yaml diff --git a/app.py b/app.py index 77c47b4..c0cba6d 100755 --- a/app.py +++ b/app.py @@ -43,6 +43,7 @@ def get_clusters(): response.raise_for_status() nodes = [] nodes_by_name = {} + unassigned_pods = [] for node in response.json()['items']: obj = {'name': node['metadata']['name'], 'labels': node['metadata']['labels'], 'status': node['status'], 'pods': []} nodes.append(obj) @@ -50,14 +51,15 @@ def get_clusters(): 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']: - obj = {'name': pod['metadata']['name'], - 'namespace': pod['metadata']['namespace'], - 'labels': pod['metadata']['labels'], 'status': pod['status'], 'containers': []} - for cont in pod['spec']['containers']: - obj['containers'].append({'name': cont['name'], 'image': cont['image'], 'resources': cont['resources']}) - # TODO: filter pod attributes + obj = {'name': pod['metadata']['name'], + 'namespace': pod['metadata']['namespace'], + 'labels': pod['metadata'].get('labels', {}), 'status': pod['status'], 'containers': []} + for cont in pod['spec']['containers']: + obj['containers'].append({'name': cont['name'], 'image': cont['image'], 'resources': cont['resources']}) + if 'nodeName' in pod['spec'] and pod['spec']['nodeName'] in nodes_by_name: nodes_by_name[pod['spec']['nodeName']]['pods'].append(obj) + else: + unassigned_pods.append(obj) try: response = session.get(urljoin(api_server_url, '/api/v1/namespaces/kube-system/services/heapster/proxy/apis/metrics/v1alpha1/nodes'), timeout=5) @@ -66,7 +68,7 @@ def get_clusters(): 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}) + clusters.append({'api_server_url': api_server_url, 'nodes': nodes, 'unassigned_pods': unassigned_pods}) return json.dumps({'kubernetes_clusters': clusters}, separators=(',',':')) diff --git a/app/src/cluster.js b/app/src/cluster.js index 9f135d6..4d5e6b1 100644 --- a/app/src/cluster.js +++ b/app/src/cluster.js @@ -1,4 +1,5 @@ import Node from './node.js' +import Pod from './pod.js' const PIXI = require('pixi.js') export default class Cluster extends PIXI.Graphics { @@ -24,6 +25,18 @@ export default class Cluster extends PIXI.Graphics { } this.addChild(nodeBox) } + + + for (var pod of this.cluster.unassigned_pods) { + console.log(pod) + var podBox = new Pod(pod, this.tooltip) + podBox.x = rows[0] + podBox.y = 20 + podBox.draw() + this.addChild(podBox) + rows[0] += 20 + } + this.lineStyle(2, 0xaaaaff, 1); const width = Math.max(rows[0], rows[1]) this.drawRect(0, 0, width, nodeBox.height * 2 + 30); diff --git a/examples/unassigned-pod.yaml b/examples/unassigned-pod.yaml new file mode 100644 index 0000000..44ff962 --- /dev/null +++ b/examples/unassigned-pod.yaml @@ -0,0 +1,12 @@ +# example Pod which cannot be assigned to any node +apiVersion: v1 +kind: Pod +metadata: + name: unassigned-test +spec: + # use a node selector which will never match.. + nodeSelector: + stuff: x + containers: + - name: test + image: foo