@hashgraph/solo
Version:
An opinionated CLI tool to deploy and manage private Hedera Networks.
41 lines (36 loc) • 1.38 kB
text/typescript
// SPDX-License-Identifier: Apache-2.0
import {container} from 'tsyringe-neo';
import {InjectTokens} from '../../../../../core/dependency-injection/inject-tokens.js';
import {type SoloLogger} from '../../../../../core/logging/solo-logger.js';
import {type ApiextensionsV1Api} from '@kubernetes/client-node';
import {type Crds} from '../../../resources/crd/crds.js';
import {KubeApiResponse} from '../../../kube-api-response.js';
import {ResourceOperation} from '../../../resources/resource-operation.js';
import {ResourceType} from '../../../resources/resource-type.js';
export class K8ClientCrds implements Crds {
private readonly logger: SoloLogger;
public constructor(private readonly networkingApi: ApiextensionsV1Api) {
this.logger = container.resolve(InjectTokens.SoloLogger);
}
public async ifExists(crdName: string): Promise<boolean> {
try {
await this.networkingApi.readCustomResourceDefinition({
name: crdName,
});
this.logger.debug(`CRD ${crdName} exists.`);
} catch (error) {
if (KubeApiResponse.isNotFound(error)) {
this.logger.info(`CRD ${crdName} does not exist.`);
return false;
}
KubeApiResponse.throwError(
error,
ResourceOperation.READ,
ResourceType.CLUSTER_ROLE_DEFINITION,
undefined,
crdName,
);
}
return true;
}
}