portainer/portainer

View on GitHub
pkg/libhelm/binary/install.go

Summary

Maintainability
A
0 mins
Test Coverage
package binary

import (
    "github.com/portainer/portainer/pkg/libhelm/options"
    "github.com/portainer/portainer/pkg/libhelm/release"

    "github.com/pkg/errors"
    "github.com/segmentio/encoding/json"
)

// Install runs `helm install` with specified install options.
// The install options translate to CLI arguments which are passed in to the helm binary when executing install.
func (hbpm *helmBinaryPackageManager) Install(installOpts options.InstallOptions) (*release.Release, error) {
    if installOpts.Name == "" {
        installOpts.Name = "--generate-name"
    }
    args := []string{
        installOpts.Name,
        installOpts.Chart,
        "--repo", installOpts.Repo,
        "--output", "json",
    }
    if installOpts.Namespace != "" {
        args = append(args, "--namespace", installOpts.Namespace)
    }
    if installOpts.ValuesFile != "" {
        args = append(args, "--values", installOpts.ValuesFile)
    }
    if installOpts.Wait {
        args = append(args, "--wait")
    }
    if installOpts.PostRenderer != "" {
        args = append(args, "--post-renderer", installOpts.PostRenderer)
    }

    result, err := hbpm.runWithKubeConfig("install", args, installOpts.KubernetesClusterAccess, installOpts.Env)
    if err != nil {
        return nil, errors.Wrap(err, "failed to run helm install on specified args")
    }

    response := &release.Release{}
    err = json.Unmarshal(result, &response)
    if err != nil {
        return nil, errors.Wrap(err, "failed to unmarshal helm install response to Release struct")
    }

    return response, nil
}