UNPKG

@hashgraph/solo

Version:

An opinionated CLI tool to deploy and manage private Hedera Networks.

60 lines 2.1 kB
// SPDX-License-Identifier: Apache-2.0 import { SoloError } from '../../../../../core/errors/solo-error.js'; import { NamespaceName } from '../../../../../types/namespace/namespace-name.js'; import { sleep } from '../../../../../core/helpers.js'; import { Duration } from '../../../../../core/time/duration.js'; export class K8ClientNamespaces { kubeClient; constructor(kubeClient) { this.kubeClient = kubeClient; } async create(namespace) { const body = { metadata: { name: namespace.name, }, }; await this.kubeClient.createNamespace({ body }); return true; } async delete(namespace) { try { await this.kubeClient.deleteNamespace({ name: namespace.name }); try { let namespaceExists = true; while (namespaceExists) { const response = await this.kubeClient.readNamespace({ name: namespace.name }); if (response?.metadata?.deletionTimestamp) { await sleep(Duration.ofSeconds(1)); } else { namespaceExists = false; } } } catch { // The namespace has been deleted } return true; } catch { return false; } } async has(namespace) { const namespaces = await this.list(); return namespaces.some((namespaces) => namespaces.equals(namespace)); } async list() { const response = await this.kubeClient.listNamespace(); if (response && response.items) { const namespaces = []; for (const item of response.items) { namespaces.push(NamespaceName.of(item.metadata.name)); } return namespaces; } throw new SoloError('incorrect response received from kubernetes API. Unable to list namespaces'); } } //# sourceMappingURL=k8-client-namespaces.js.map