File

src/providers/helm/helm.provider.ts

Index

Properties
Methods

Constructor

constructor(kubernetesProvider: KubernetesProvider)
Parameters :
Name Type Optional
kubernetesProvider KubernetesProvider No

Methods

Async createService
createService(spec: any)
Parameters :
Name Type Optional
spec any No
Returns : Promise<literal type>
Async deleteService
deleteService(name: string, namespace: string)
Parameters :
Name Type Optional
name string No
namespace string No
Returns : Promise<literal type>
getService
getService(group: string, version: string, namespace: string, plural: string, name: string)
Parameters :
Name Type Optional
group string No
version string No
namespace string No
plural string No
name string No
Returns : Promise<literal type>
Async getServiceStatus
getServiceStatus(name: string, namespace: string)
Parameters :
Name Type Optional
name string No
namespace string No
Returns : Promise<object>
Async updateService
updateService(spec: any)
Parameters :
Name Type Optional
spec any No
Returns : Promise<literal type>

Properties

Private HELM_CRD_GROUP
Type : string
Default value : "helm.cattle.io"
Private HELM_CRD_PLURAL
Type : string
Default value : "helmcharts"
Private HELM_CRD_VERSION
Type : string
Default value : "v1"
import {
  HttpException,
  Injectable,
  InternalServerErrorException,
} from "@nestjs/common";
import { KubernetesProvider } from "../kubernetes/kubernetes.provider";
import { KubernetesResourceSpecDto } from "../kubernetes/dto/resource-spec.dto";
import { IncomingMessage } from "http";

@Injectable()
export class HelmProvider {
  private HELM_CRD_GROUP = "helm.cattle.io";
  private HELM_CRD_VERSION = "v1";
  private HELM_CRD_PLURAL = "helmcharts";

  constructor(private readonly kubernetesProvider: KubernetesProvider) {}

  async getServiceStatus(name: string, namespace: string): Promise<object> {
    try {
      const deployment = await this.kubernetesProvider.getDeployment(
        name,
        namespace,
      );
      return deployment.body.status;
    } catch (error) {
      if (error.body) {
        throw new HttpException(error.body.message, error.statusCode);
      } else {
        throw new InternalServerErrorException(error.message);
      }
    }
  }

  getService(
    group: string,
    version: string,
    namespace: string,
    plural: string,
    name: string,
  ): Promise<{
    response: IncomingMessage;
    body: object;
  }> {
    return this.kubernetesProvider.getCRDObject(
      group,
      version,
      namespace,
      plural,
      name,
    );
  }

  async createService(spec: any): Promise<{
    response: IncomingMessage;
    body: object;
  }> {
    try {
      return await this.kubernetesProvider.createCRDObject(
        this.HELM_CRD_GROUP,
        this.HELM_CRD_VERSION,
        spec.metadata.namespace,
        this.HELM_CRD_PLURAL,
        spec,
      );
    } catch (error) {
      if (error.body) {
        throw new HttpException(error.body.message, error.statusCode);
      } else {
        throw new InternalServerErrorException(error.message);
      }
    }
  }

  async updateService(spec: any): Promise<{
    response: IncomingMessage;
    body: object;
  }> {
    try {
      const service = await this.getService(
        this.HELM_CRD_GROUP,
        this.HELM_CRD_VERSION,
        spec.metadata.namespace,
        this.HELM_CRD_PLURAL,
        spec.metadata.name,
      ).then((response) => {
        return response.body as KubernetesResourceSpecDto;
      });
      // metadata.resourceVersion is required when we do replace kubernetes object using api
      spec.metadata.resourceVersion = service.metadata.resourceVersion;
      return await this.kubernetesProvider.updateCRDObject(
        this.HELM_CRD_GROUP,
        this.HELM_CRD_VERSION,
        spec.metadata.namespace,
        this.HELM_CRD_PLURAL,
        spec.metadata.name,
        spec,
      );
    } catch (error) {
      if (error.body) {
        throw new HttpException(error.body.message, error.statusCode);
      } else {
        throw new InternalServerErrorException(error.message);
      }
    }
  }

  async deleteService(
    name: string,
    namespace: string,
  ): Promise<{
    response: IncomingMessage;
    body: object;
  }> {
    try {
      return await this.kubernetesProvider.deleteCRDObject(
        this.HELM_CRD_GROUP,
        this.HELM_CRD_VERSION,
        namespace,
        this.HELM_CRD_VERSION,
        name,
      );
    } catch (error) {
      if (error.body) {
        throw new HttpException(error.body.message, error.statusCode);
      } else {
        throw new InternalServerErrorException(error.message);
      }
    }
  }
}

results matching ""

    No results matching ""