return stdout.Bytes(), errors.New(stderr.String())
}
-var HelmExec = func(args string) (out []byte, err error) {
+func HelmExec(args string) (out []byte, err error) {
return Exec(strings.Join([]string{"helm", args}, " "))
}
-var KubectlExec = func(args string) (out []byte, err error) {
+func KubectlExec(args string) (out []byte, err error) {
return Exec(strings.Join([]string{"kubectl", args}, " "))
}
-func (h *Helm) SetCM(cm ConfigMapper) {
- h.cm = cm
-}
-
func (h *Helm) Initialize() {
if h.initDone == true {
return
// API functions
func (h *Helm) Init() (out []byte, err error) {
+
// Add Tiller address as environment variable
if err := addTillerEnv(); err != nil {
return out, err
}
func (h *Helm) AddRepo() (out []byte, err error) {
+
// Get helm repo user name and password from files mounted by secret object
credFile, err := ioutil.ReadFile(viper.GetString("helm.helm-username-file"))
if err != nil {
return HelmExec(strings.Join([]string{"repo add ", rname, " ", repo, username, pwd}, ""))
}
-func (h *Helm) Install(m XappDeploy) (xapp Xapp, err error) {
+func (h *Helm) Install(m ConfigMetadata) (xapp Xapp, err error) {
out, err := h.Run(strings.Join([]string{"repo update "}, ""))
if err != nil {
return
}
- var cm interface{}
- if err = h.cm.ReadConfigMap(m.Name, m.Namespace, &cm); err != nil {
- out, err = h.Run(getInstallArgs(m, false))
- if err != nil {
- return
- }
- return h.ParseStatus(m.Name, string(out))
- }
-
- // ConfigMap exists, try to override
- out, err = h.Run(getInstallArgs(m, true))
- if err == nil {
- return h.ParseStatus(m.Name, string(out))
- }
+ m.Namespace = getNamespace(m.Namespace)
+ cm, cmErr := PurgeConfigMap(m)
- cm, cmErr := h.cm.PurgeConfigMap(m)
- out, err = h.Run(getInstallArgs(m, false))
+ ns := " --namespace=" + m.Namespace
+ rname := viper.GetString("helm.repo-name")
+ out, err = h.Run(strings.Join([]string{"install ", rname, "/", m.Name, " --name ", m.Name, ns}, ""))
if err != nil {
return
}
if cmErr == nil {
- cmErr = h.cm.RestoreConfigMap(m, cm)
+ cmErr = RestoreConfigMap(m, cm)
}
return h.ParseStatus(m.Name, string(out))
}
func (h *Helm) Status(name string) (xapp Xapp, err error) {
+
out, err := h.Run(strings.Join([]string{"status ", name}, ""))
if err != nil {
mdclog(MdclogErr, formatLog("Getting xapps status", "", err.Error()))
}
func (h *Helm) List() (names []string, err error) {
+
ns := getNamespace("")
out, err := h.Run(strings.Join([]string{"list --all --output yaml --namespace=", ns}, ""))
if err != nil {
// Helper functions
func (h *Helm) GetVersion(name string) (version string) {
+
ns := getNamespace("")
out, err := h.Run(strings.Join([]string{"list --output yaml --namespace=", ns, " ", name}, ""))
if err != nil {
return
}
- re := regexp.MustCompile(name + "-(\\w+-\\w+).*")
+ re := regexp.MustCompile(name + "-(\\d+).*")
resources := re.FindAllStringSubmatch(string(result[0]), -1)
if resources != nil {
for _, v := range resources {
}
func (h *Helm) ParseStatus(name string, out string) (xapp Xapp, err error) {
+
xapp.Name = name
xapp.Version = h.GetVersion(name)
xapp.Status = h.GetState(out)
- h.FillInstanceData(name, out, &xapp, h.cm.GetMessages(name))
+ types, err := GetMessages(name)
+ if err != nil {
+ // xAPP can still be deployed if the msg_type file is missing.
+ mdclog(MdclogWarn, formatLog("GetMessages Failed....", "", err.Error()))
+
+ //Set err back to nil, so it does not cause issues in called functions.
+ err = nil
+ }
+
+ h.FillInstanceData(name, out, &xapp, types)
return
}
}
func addTillerEnv() (err error) {
+
service := viper.GetString("helm.tiller-service")
namespace := viper.GetString("helm.tiller-namespace")
port := viper.GetString("helm.tiller-port")
return ns
}
-func getInstallArgs(x XappDeploy, cmOverride bool) (args string) {
- x.Namespace = getNamespace(x.Namespace)
- args = args + " --namespace=" + x.Namespace
-
- if x.ImageRepo != "" {
- args = args + " --set image.repository=" + x.ImageRepo
- }
-
- if x.ServiceName != "" {
- args = args + " --set service.name=" + x.ServiceName
- }
-
- if x.Hostname != "" {
- args = args + " --set hostname=" + x.Hostname
- }
-
- if cmOverride == true {
- args = args + " --set appconfig.override=true"
- }
-
- rname := viper.GetString("helm.repo-name")
- return fmt.Sprintf("install %s/%s --name=%s %s", rname, x.Name, x.Name, args)
-}
-
func formatLog(text string, args string, err string) string {
return fmt.Sprintf("Helm: %s: args=%s err=%s\n", text, args, err)
}