@hashgraph/solo
Version:
An opinionated CLI tool to deploy and manage private Hedera Networks.
61 lines • 2.2 kB
JavaScript
// SPDX-License-Identifier: Apache-2.0
import { PatchStrategy } from '@kubernetes/client-node';
import yaml from 'yaml';
import fs from 'node:fs';
export class K8ClientManifests {
k8sObjectApi;
constructor(k8sObjectApi) {
this.k8sObjectApi = k8sObjectApi;
}
/**
* Apply a CRD manifest file (like `kubectl apply -f <file>`).
* Uses server-side apply (Content-Type: application/apply-patch+yaml)
* via KubernetesObjectApi.
*/
async applyManifest(filePath) {
const yamlText = fs.readFileSync(filePath, 'utf8');
const documents = yaml
.parseAllDocuments(yamlText)
.map((document) => document.toJSON());
for (const document of documents) {
if (!document || !document.metadata) {
continue;
}
await this.k8sObjectApi.create(document);
}
}
/**
* Patch an existing Kubernetes object (including custom resources) using a merge patch.
* @param spec - a partial Kubernetes object with apiVersion, kind, metadata.name, metadata.namespace, and the fields to patch
*/
async patchObject(spec) {
await this.k8sObjectApi.patch(spec, undefined, undefined, undefined, undefined, PatchStrategy.MergePatch);
}
async scaleStatefulSet(namespace, statefulSetName, replicas) {
await this.k8sObjectApi.patch({
apiVersion: 'apps/v1',
kind: 'StatefulSet',
metadata: {
namespace,
name: statefulSetName,
},
spec: {
replicas,
},
}, undefined, undefined, undefined, undefined, PatchStrategy.StrategicMergePatch);
}
async scaleDeployment(namespace, deploymentName, replicas) {
await this.k8sObjectApi.patch({
apiVersion: 'apps/v1',
kind: 'Deployment',
metadata: {
namespace,
name: deploymentName,
},
spec: {
replicas,
},
}, undefined, undefined, undefined, undefined, PatchStrategy.StrategicMergePatch);
}
}
//# sourceMappingURL=k8-client-manifests.js.map