mirror of
https://github.com/ipedrazas/drone-helm.git
synced 2026-06-16 14:49:45 +08:00
86 lines
1.9 KiB
Go
86 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"strings"
|
|
|
|
"github.com/alecthomas/template"
|
|
)
|
|
|
|
var HELM_BIN = "/bin/helm"
|
|
var KUBECONFIG = "/root/.kube/kubeconfig"
|
|
var CONFIG = "/root/.kube/config"
|
|
|
|
type (
|
|
// Config maps the params we need to run Helm
|
|
Config struct {
|
|
APIServer string `json:"api_server"`
|
|
Token string `json:"token"`
|
|
HelmCommand []string `json:"helm_command"`
|
|
SkipTLSVerify bool `json:"tls_skip_verify"`
|
|
Namespace string `json:"namespace"`
|
|
Release string `json:"release"`
|
|
Chart string `json:"chart"`
|
|
Values string `json:"values"`
|
|
}
|
|
// Plugin default
|
|
Plugin struct {
|
|
Config Config
|
|
}
|
|
)
|
|
|
|
// Exec default method
|
|
func (p Plugin) Exec() error {
|
|
if p.Config.APIServer == "" {
|
|
return fmt.Errorf("Error: API Server is needed to deploy.")
|
|
}
|
|
if p.Config.Token == "" {
|
|
return fmt.Errorf("Error: Token is needed to deploy.")
|
|
}
|
|
initialiseKubeconfig(&p.Config, KUBECONFIG, CONFIG)
|
|
fmt.Println(p)
|
|
init := make([]string, 1)
|
|
init[0] = "init"
|
|
err := runCommand(init)
|
|
if err != nil {
|
|
return fmt.Errorf("Error running helm comand: " + strings.Join(init[:], " "))
|
|
}
|
|
upgrade := make([]string, 7)
|
|
upgrade[0] = "upgrade"
|
|
upgrade[1] = "--install"
|
|
upgrade[2] = p.Config.Release
|
|
upgrade[3] = p.Config.Chart
|
|
upgrade[4] = "--debug"
|
|
if p.Config.Values != "" {
|
|
upgrade[5] = "--set"
|
|
upgrade[6] = p.Config.Values
|
|
}
|
|
|
|
err = runCommand(upgrade)
|
|
if err != nil {
|
|
return fmt.Errorf("Error running helm comand: " + strings.Join(upgrade[:], " "))
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func initialiseKubeconfig(params *Config, source string, target string) error {
|
|
t, _ := template.ParseFiles(source)
|
|
f, err := os.Create(target)
|
|
err = t.Execute(f, params)
|
|
f.Close()
|
|
return err
|
|
}
|
|
|
|
func runCommand(params []string) error {
|
|
cmd := new(exec.Cmd)
|
|
cmd = exec.Command(HELM_BIN, params...)
|
|
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
|
|
err := cmd.Run()
|
|
return err
|
|
}
|