diff --git a/CHANGELOG.md b/CHANGELOG.md index de39032..51b19a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ **Date**: Tue Mar 19 2019 16:01:20 CET 2019 * [FEATURE] Change servicegroup definition #17 +* Enable provisioning on a resource basis #14 ## 2.0.1 diff --git a/README.md b/README.md index 29332f0..d822590 100644 --- a/README.md +++ b/README.md @@ -163,6 +163,7 @@ You may use the following annotations: | Name | Description | |-------|------------| +| `kube-icinga/discover` | Disable icinga2 monitoring deployment for the given object. Set `kube-icinga/discover` to `"false"`. Note that by default all objects get deployed to icinga if discovery for the resource type is enabled. | | `kube-icinga/check_command` | Use a custom icinga check command. | | `kube-icinga/host` | Use a custom hostname (to which icinga host a service gets bound to). | | `kube-icinga/template` | Use a custom icinga template. | diff --git a/src/kube/ingress.ts b/src/kube/ingress.ts index 72389f6..7736ed8 100644 --- a/src/kube/ingress.ts +++ b/src/kube/ingress.ts @@ -163,6 +163,11 @@ export default class Ingress extends Resource { this.logger.error('skip invalid ingress object', {object: object}); return; } + + if (object.object.metadata.annotations && object.object.metadata.annotations['kube-icinga/discover'] === 'false') { + this.logger.info('skip ingress object, kube-icinga/discover===false', {object: object}); + return; + } if (object.type == 'MODIFIED' || object.type == 'DELETED') { await this.deleteObject(object.object).catch((err) => { diff --git a/src/kube/node.ts b/src/kube/node.ts index ed7c759..5ed7adf 100644 --- a/src/kube/node.ts +++ b/src/kube/node.ts @@ -77,6 +77,11 @@ export default class Node extends Resource { return; } + if (object.object.metadata.annotations && object.object.metadata.annotations['kube-icinga/discover'] === 'false') { + this.logger.info('skip node object, kube-icinga/discover===false', {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 193ea3a..d5d1561 100644 --- a/src/kube/service.ts +++ b/src/kube/service.ts @@ -222,11 +222,16 @@ export default class Service extends Resource { this.logger.error('skip invalid service object', {object: object}); return; } - + + if (object.object.metadata.annotations && object.object.metadata.annotations['kube-icinga/discover'] === 'false') { + this.logger.info('skip service object, kube-icinga/discover===false', {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 discover', {object: object}); return; - } + } if (object.type == 'MODIFIED' || object.type == 'DELETED') { await this.deleteObject(object.object).catch((err) => { diff --git a/src/kube/volume.ts b/src/kube/volume.ts index c61d048..df41353 100644 --- a/src/kube/volume.ts +++ b/src/kube/volume.ts @@ -148,13 +148,18 @@ export default class Volume extends Resource { this.logger.debug('received kubernetes persistent volume resource', {object}); if (object.object.kind !== 'PersistentVolume') { - this.logger.error('skip invalid object', {object: object}); + this.logger.error('skip invalid persistent volume object', {object: object}); return; } + if (object.object.metadata.annotations && object.object.metadata.annotations['kube-icinga/discover'] === 'false') { + this.logger.info('skip persistent volume object, kube-icinga/discover===false', {object: object}); + return; + } + if (object.type == 'MODIFIED' || object.type == 'DELETED') { await this.deleteObject(object.object).catch((err) => { - this.logger.error('failed to remove objects', {error: err}); + this.logger.error('failed to remove persistent objects', {error: err}); }); }