nix-kubernetes
Version:
Kubernetes deployment manager written in nix
45 lines (37 loc) • 1.37 kB
JavaScript
;
const _ = require('lodash');
const Promise = require('bluebird');
class GarbageCollector {
constructor(namespace, kubectl) {
this.namespace = namespace;
this.kubectl = kubectl;
}
run() {
return this.kubectl.listAllNamespaces(['all']).map(resource => {
const name = `${resource.metadata.namespace}/${resource.kind}/${resource.metadata.name}`;
if (
_.includes(resource.metadata.namespace, this.namespace.gcNamespaces) &&
!_.find(this.namespace.resources, name => {
const resourceSpec = this.namespace.getResource(name).data;
const result = (
resource.metadata.annotations['x-truder.net/kind'] === 'nix-kubernetes' &&
resource.metadata.annotations['x-truder.net/version'] === 'v1' &&
resourceSpec.kind === resource.kind &&
resourceSpec.metadata.namespace === resource.metadata.namespace &&
resourceSpec.metadata.name === resource.metadata.name
) || resource.metadata.ownerReferences;
return result;
})
) {
console.log(`deleting resource ${name}`);
return this.kubectl.delete(
resource.metadata.namespace,
resource.kind,
resource.metadata.name
);
}
return Promise.resolve();
});
}
}
module.exports = GarbageCollector;