UNPKG

@hashgraph/solo

Version:

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

61 lines 2.2 kB
// 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