UNPKG

@hashgraph/solo

Version:

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

76 lines 3.08 kB
// SPDX-License-Identifier: Apache-2.0 import { V1ObjectMeta, V1Service, V1ServicePort, V1ServiceSpec, } from '@kubernetes/client-node'; import { K8ClientBase } from '../../k8-client-base.js'; import { K8ClientService } from './k8-client-service.js'; import { KubeApiResponse } from '../../../kube-api-response.js'; import { ResourceOperation } from '../../../resources/resource-operation.js'; import { ResourceType } from '../../../resources/resource-type.js'; export class K8ClientServices extends K8ClientBase { kubeClient; constructor(kubeClient) { super(); this.kubeClient = kubeClient; } async list(namespace, labels) { const labelSelector = labels ? labels.join(',') : undefined; let serviceList; try { serviceList = await this.kubeClient.listNamespacedService({ namespace: namespace.name, labelSelector, }); } catch (error) { KubeApiResponse.throwError(error, ResourceOperation.LIST, ResourceType.SERVICE, namespace, ''); } return serviceList.items.map((svc) => { return this.wrapService(namespace, svc); }); } async read(namespace, name) { const svc = await this.readV1Service(namespace, name); if (!svc) { return undefined; } return this.wrapService(namespace, svc); } async readV1Service(namespace, name) { let service; try { service = await this.kubeClient.readNamespacedService({ name, namespace: namespace.name }); } catch (error) { KubeApiResponse.throwError(error, ResourceOperation.READ, ResourceType.SERVICE, namespace, name); } return service; } wrapService(_namespace, svc) { return new K8ClientService(this.wrapObjectMeta(svc.metadata), svc.spec, svc.status); } async create(serviceReference, labels, servicePort, podTargetPort) { const v1SvcMetadata = new V1ObjectMeta(); v1SvcMetadata.name = serviceReference.name.toString(); v1SvcMetadata.namespace = serviceReference.namespace.toString(); v1SvcMetadata.labels = labels; const v1SvcPort = new V1ServicePort(); v1SvcPort.port = servicePort; v1SvcPort.targetPort = podTargetPort; const v1SvcSpec = new V1ServiceSpec(); v1SvcSpec.ports = [v1SvcPort]; const v1Svc = new V1Service(); v1Svc.metadata = v1SvcMetadata; v1Svc.spec = v1SvcSpec; let result; try { result = await this.kubeClient.createNamespacedService({ namespace: serviceReference.namespace.toString(), body: v1Svc, }); } catch (error) { KubeApiResponse.throwError(error, ResourceOperation.CREATE, ResourceType.SERVICE, serviceReference.namespace, serviceReference.name.toString()); } return this.wrapService(serviceReference.namespace, result); } } //# sourceMappingURL=k8-client-services.js.map