From 7210ecb9f5e931eb535d2833c9762cf104182e0d Mon Sep 17 00:00:00 2001 From: Raffael Sahli Date: Fri, 1 Jun 2018 14:39:30 +0200 Subject: [PATCH] v1.0.1 --- CHANGELOG.md | 8 ++++++++ src/kube/ingress.ts | 7 ++++++- src/kube/node.ts | 4 ++++ src/kube/service.ts | 15 +++++++++++---- tests/kube/ingress.test.ts | 4 ++-- 5 files changed, 31 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dcc3399..7fcfe92 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +## 1.0.1 +**Maintainer**: Raffael Sahli \ +**Date**: Fri 01 Jun 2018 01:18:20 PM CEST + +* [FIX] fixed protocol (service ports.protocol) lowercase +* [CHANGE] config logger.level => log.level +* [FIX] catch error objects from kube watchers + ## 1.0.0 **Maintainer**: Raffael Sahli \ **Date**: Thu May 24 14:52:11 CEST 2018 diff --git a/src/kube/ingress.ts b/src/kube/ingress.ts index bc98973..a0e748d 100644 --- a/src/kube/ingress.ts +++ b/src/kube/ingress.ts @@ -115,6 +115,11 @@ export default class Ingress { this.jsonStream.on('data', async (object) => { this.logger.debug('received kubernetes ingress', {object}); + if(object.object.kind !== 'Ingress') { + this.logger.error('skip invalid ingress object', {object: object}); + return; + } + if (object.type == 'MODIFIED' || object.type == 'DELETED') { await this.icinga.deleteHost(object.object.metadata.name); } @@ -128,7 +133,7 @@ export default class Ingress { this.kubeListener(); }); } catch (err) { - this.logger.emerg('failed start ingresses listener', {error: err}); + this.logger.error('failed start ingresses listener', {error: err}); } } } diff --git a/src/kube/node.ts b/src/kube/node.ts index ff95835..686953a 100644 --- a/src/kube/node.ts +++ b/src/kube/node.ts @@ -70,6 +70,10 @@ export default class Node { } this.logger.debug('received kubernetes host', {object}); + if(object.object.kind !== 'Node') { + this.logger.error('skip invalid node object', {object: object}); + return; + } if (object.type == 'DELETED') { await this.icinga.deleteHost(object.object.metadata.name); diff --git a/src/kube/service.ts b/src/kube/service.ts index 605c858..555d4f1 100644 --- a/src/kube/service.ts +++ b/src/kube/service.ts @@ -124,16 +124,17 @@ export default class Service { } if (!service) { - let name = servicePort.name || servicePort.protocol+':'+servicePort.port; + let protocol = servicePort.protocol.toLowerCase(); + let name = servicePort.name || protocol+':'+servicePort.port; service = { - 'check_command': servicePort.protocol.toLowerCase(), + 'check_command': servicePort.protocol, 'display_name': name.toLowerCase(), 'vars._kubernetes': true, 'vars.kubernetes': definition, 'groups': [definition.metadata.namespace], }; - service['vars.'+servicePort.protocol+'_port'] = servicePort.nodePort || servicePort.port; + service['vars.'+protocol+'_port'] = servicePort.nodePort || servicePort.port; } Object.assign(service, options.serviceDefinition); @@ -152,7 +153,13 @@ export default class Service { this.jsonStream.on('data', async (object) => { this.logger.debug('received kubernetes service', {object}); + if(object.object.kind !== 'Service') { + this.logger.error('skip invalid service object', {object: object}); + return; + } + if (!this.options[object.object.spec.type].discover) { + this.logger.debug('skip service object, since ['+object.object.spec.type+'] is not enabled for discovery', {object: object}); return; } @@ -169,7 +176,7 @@ export default class Service { this.kubeListener(); }); } catch (err) { - this.logger.emerg('failed start services listener', {error: err}); + this.logger.error('failed start services listener', {error: err}); } } } diff --git a/tests/kube/ingress.test.ts b/tests/kube/ingress.test.ts index 2d5b0d8..f1b88f7 100644 --- a/tests/kube/ingress.test.ts +++ b/tests/kube/ingress.test.ts @@ -2,12 +2,12 @@ import Ingress from '../../src/kube/ingress'; import Node from '../../src/kube/node'; import Icinga from '../../src/icinga'; import {LoggerInstance} from 'winston'; -import JSONStream from 'json-stream'; +import * as JSONStream from 'json-stream'; const KubeApi = require('kubernetes-client').Client; jest.mock('../../src/icinga'); jest.mock('../../src/kube/node'); jest.mock('json-stream'); -jest.mock(KubeApi.Client); +jest.mock('kubernetes-client'); const fixture = { "apiVersion": "extensions/v1beta1",