@hashgraph/solo
Version:
An opinionated CLI tool to deploy and manage private Hedera Networks.
57 lines (49 loc) • 2.11 kB
text/typescript
// 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);
}
}
}