UNPKG

@hashgraph/solo

Version:

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

57 lines (49 loc) 2.11 kB
// SPDX-License-Identifier: Apache-2.0 import {type IngressClasses} from '../../../resources/ingress-class/ingress-classes.js'; import {type IngressClass} from '../../../resources/ingress-class/ingress-class.js'; import {type NetworkingV1Api, type V1IngressClass, type V1IngressClassList} from '@kubernetes/client-node'; import {K8ClientIngressClass} from './k8-client-ingress-class.js'; import {SoloError} from '../../../../../core/errors/solo-error.js'; import {ResourceCreateError, ResourceDeleteError} from '../../../errors/resource-operation-errors.js'; import {ResourceType} from '../../../resources/resource-type.js'; export class K8ClientIngressClasses implements IngressClasses { public constructor(private readonly networkingApi: NetworkingV1Api) {} public async list(): Promise<IngressClass[]> { try { const response: V1IngressClassList = await this.networkingApi.listIngressClass(); const ingressClasses: IngressClass[] = []; if (response?.items?.length > 0) { for (const item of response.items) { ingressClasses.push(new K8ClientIngressClass(item.metadata?.name)); } } return ingressClasses; } catch (error) { throw new SoloError('Failed to list IngressClasses:', error); } } public async create(ingressClassName: string, controllerName: string): Promise<void> { const ingressClass: V1IngressClass = { apiVersion: 'networking.k8s.io/v1', kind: 'IngressClass', metadata: { name: ingressClassName, }, spec: { controller: controllerName, }, }; try { await this.networkingApi.createIngressClass({body: ingressClass}); } catch (error) { throw new ResourceCreateError(ResourceType.INGRESS_CLASS, undefined, ingressClassName, error); } } public async delete(ingressClassName: string): Promise<void> { try { await this.networkingApi.deleteIngressClass({name: ingressClassName}); } catch (error) { throw new ResourceDeleteError(ResourceType.INGRESS_CLASS, undefined, ingressClassName, error); } } }