@hashgraph/solo
Version:
An opinionated CLI tool to deploy and manage private Hedera Networks.
73 lines • 3.01 kB
JavaScript
// SPDX-License-Identifier: Apache-2.0
import { PatchStrategy, setHeaderOptions, } from '@kubernetes/client-node';
import { container } from 'tsyringe-neo';
import { ResourceType } from '../../../resources/resource-type.js';
import { SoloError } from '../../../../../core/errors/solo-error.js';
import { InjectTokens } from '../../../../../core/dependency-injection/inject-tokens.js';
import { KubeApiResponse } from '../../../kube-api-response.js';
import { ResourceOperation } from '../../../resources/resource-operation.js';
export class K8ClientIngresses {
networkingApi;
logger;
constructor(networkingApi) {
this.networkingApi = networkingApi;
this.logger = container.resolve(InjectTokens.SoloLogger);
}
async listForAllNamespaces() {
let result;
try {
result = await this.networkingApi.listIngressForAllNamespaces();
}
catch (error) {
if (KubeApiResponse.isNotFound(error)) {
return [];
}
KubeApiResponse.throwError(error, ResourceOperation.LIST, ResourceType.INGRESS, undefined, '');
}
if (result?.items) {
const ingressNames = [];
for (const ingress of result.items) {
ingressNames.push(ingress.metadata?.name ?? '');
}
return ingressNames;
}
else {
return [];
}
}
async update(namespace, name, patch) {
const ingresses = [];
try {
const result = await this.networkingApi.listIngressForAllNamespaces();
for (const ingress of result.items) {
const currentIngressName = ingress.metadata.name;
if (currentIngressName.includes(name)) {
ingresses.push(currentIngressName);
}
}
}
catch (error) {
if (!KubeApiResponse.isNotFound(error)) {
KubeApiResponse.throwError(error, ResourceOperation.UPDATE, ResourceType.INGRESS, namespace, name);
}
}
for (const ingressName of ingresses) {
let result;
try {
result = await this.networkingApi.patchNamespacedIngress({
name: ingressName,
namespace: namespace.name,
body: patch,
}, setHeaderOptions('Content-Type', PatchStrategy.MergePatch));
this.logger.info(`Patched Ingress ${ingressName} in namespace ${namespace}, patch: ${JSON.stringify(patch)}`);
}
catch (error) {
KubeApiResponse.throwError(error, ResourceOperation.UPDATE, ResourceType.INGRESS, namespace, ingressName);
}
if (!result) {
throw new SoloError(`Failed to update Ingress ${ingressName} in namespace ${namespace}, received no ingress in response to patch`);
}
}
}
}
//# sourceMappingURL=k8-client-ingresses.js.map