1. Deploy the devlake helm chart on Opensshift


    To deploy the DevLake Helm chart on an OpenShift cluster using Pulumi, you first need to ensure that you have access to an OpenShift cluster and the necessary permissions to deploy Helm charts. Once you have that, you can proceed with writing a Pulumi program to handle the deployment.

    Below is a detailed explanation and a Pulumi TypeScript program that demonstrates how you can deploy a Helm chart on OpenShift. We'll be using the kubernetes.helm.v3.Chart resource from the Pulumi Kubernetes provider which is designed to work with Helm charts.

    The kubernetes.helm.v3.Chart resource is a high-level abstraction that deploys a Helm chart from either a local path, a remote chart repository, or a Helm Chart archive. This resource is great for managing Helm-based applications in a declarative manner using Pulumi and TypeScript.

    Let's go through the Pulumi TypeScript program that deploys the DevLake Helm chart to OpenShift:

    1. We will begin with importing the required Pulumi Kubernetes package.
    2. Next, we'll create a new Helm chart resource using new kubernetes.helm.v3.Chart.
    3. We will specify the chart details such as chart, version, repo, and any values we want to override in the values argument.

    Note: Make sure to replace YOUR_NAMESPACE with the actual namespace you wish to deploy to in your OpenShift cluster. In addition, provide the correct chart repository URL or name to the repo parameter if the DevLake chart is published in a specific Helm repository. You might also need to adjust the chart version or override specific values according to your deployment needs.

    import * as kubernetes from "@pulumi/kubernetes"; const devlakeHelmChart = new kubernetes.helm.v3.Chart("devlake", { namespace: "YOUR_NAMESPACE", repo: "YOUR_CHART_REPO", // Specify the repository URL or name where the DevLake Helm chart is located. chart: "devlake", // This should be the name of the chart in the repository. version: "CHART_VERSION", // Specify the version of the chart you wish to deploy. // Specify any custom values you want to override in the Helm chart. Replace this with actual values. values: { key1: "value1", key2: "value2", // More custom values as needed... }, }); // Export the base URL for the deployed DevLake application // This assumes the Helm chart exposes such a detail; you may need to adjust based on actual chart details. export const devlakeBaseUrl = devlakeHelmChart.getResourceProperty("v1/Service", "devlake-service", "status").apply(status => status.loadBalancer.ingress[0].hostname || status.loadBalancer.ingress[0].ip);

    To run this program, make sure you have Pulumi installed and configured for use with your OpenShift cluster. You will need to have Node.js installed to execute this TypeScript program, and then perform the following steps:

    • Initialize a new Pulumi project with pulumi new kubernetes-typescript.
    • Replace the contents of index.ts with the above code.
    • Run npm install to install the required dependencies.
    • Run pulumi up to preview and deploy the changes.

    This program declares a new Helm chart resource, which Pulumi will translate into the necessary commands to pull and install the Helm chart onto your OpenShift cluster in the specified namespace with the given values. By default, if you do not provide custom values, Helm will use the values defined in the chart's values.yaml file.

    The devlakeBaseUrl exported at the end is a Pulumi Output which represents a computed value (such as the public URL to access the deployed application), after the service is successfully deployed. getResourceProperty is used to acquire runtime information about the Kubernetes resources created by the Helm chart – this code assumes there's a Service with an assigned external IP or hostname by your cluster's LoadBalancer.

    Remember to consult the documentation of your specific Helm chart for details on what values can and should be set (Pulumi Kubernetes provider documentation).