blob: d47670c8ce30067a1535009eb8ebc4519f617ccf [file] [log] [blame]
// Copyright Istio Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package helm
import (
"fmt"
"strings"
"time"
)
import (
"github.com/apache/dubbo-go-pixiu/pkg/test/scopes"
"github.com/apache/dubbo-go-pixiu/pkg/test/shell"
)
// Helm allows clients to interact with helm commands in their cluster
type Helm struct {
kubeConfig string
}
// New returns a new instance of a helm object.
func New(kubeConfig string) *Helm {
return &Helm{
kubeConfig: kubeConfig,
}
}
// InstallChartWithValues installs the specified chart with its given name to the given namespace
func (h *Helm) InstallChartWithValues(name, chartPath, namespace string, values []string, timeout time.Duration) error {
command := fmt.Sprintf("helm install %s %s --namespace %s --kubeconfig %s --timeout %s %s",
name, chartPath, namespace, h.kubeConfig, timeout, strings.Join(values, " "))
_, err := execCommand(command)
return err
}
// InstallChart installs the specified chart with its given name to the given namespace
func (h *Helm) InstallChart(name, chartPath, namespace, overridesFile string, timeout time.Duration) error {
command := fmt.Sprintf("helm install %s %s --namespace %s -f %s --kubeconfig %s --timeout %s",
name, chartPath, namespace, overridesFile, h.kubeConfig, timeout)
_, err := execCommand(command)
return err
}
// UpgradeChart upgrades the specified chart with its given name to the given namespace; does not use baseWorkDir
// but the full path passed
func (h *Helm) UpgradeChart(name, chartPath, namespace, overridesFile string, timeout time.Duration, args ...string) error {
command := fmt.Sprintf("helm upgrade %s %s --namespace %s -f %s --kubeconfig %s --timeout %s %v",
name, chartPath, namespace, overridesFile, h.kubeConfig, timeout, strings.Join(args, " "))
_, err := execCommand(command)
return err
}
// DeleteChart deletes the specified chart with its given name in the given namespace
func (h *Helm) DeleteChart(name, namespace string) error {
command := fmt.Sprintf("helm delete %s --namespace %s --kubeconfig %s", name, namespace, h.kubeConfig)
_, err := execCommand(command)
return err
}
// Template runs the template command and applies the generated file with kubectl
func (h *Helm) Template(name, chartPath, namespace, templateFile string, timeout time.Duration, args ...string) (string, error) {
command := fmt.Sprintf("helm template %s %s --namespace %s -s %s --kubeconfig %s --timeout %s %s ",
name, chartPath, namespace, templateFile, h.kubeConfig, timeout, strings.Join(args, " "))
return execCommand(command)
}
func execCommand(cmd string) (string, error) {
scopes.Framework.Infof("Applying helm command: %s", cmd)
s, err := shell.Execute(true, cmd)
if err != nil {
scopes.Framework.Infof("(FAILED) Executing helm: %s (err: %v): %s", cmd, err, s)
return "", fmt.Errorf("%v: %s", err, s)
}
return s, nil
}