This commit is contained in:
admju 2024-09-09 07:38:43 +00:00
parent da9aab90eb
commit 53a614bd7e
9 changed files with 123 additions and 45 deletions

View File

@ -55,13 +55,13 @@ func Execute() {
Example: "oc-deploy generate --version 1.0 --context ex1", Example: "oc-deploy generate --version 1.0 --context ex1",
} }
cmdInstall.Flags().StringVarP(&context, "context", "p", "opencloud", "Nom du projet") cmdInstall.Flags().StringVarP(&context, "context", "c", "opencloud", "Nom du context")
cmdInstall.Flags().StringVarP(&version, "version", "v", "latest", "Version") cmdInstall.Flags().StringVarP(&version, "version", "v", "latest", "Version")
cmdInstall.Flags().StringArrayVarP(&modules, "modules", "m", []string{}, "modules, ...") cmdInstall.Flags().StringArrayVarP(&modules, "modules", "m", []string{}, "modules, ...")
cmdUninstall.Flags().StringVarP(&context, "context", "p", "opencloud", "Nom du projet") cmdUninstall.Flags().StringVarP(&context, "context", "c", "opencloud", "Nom du context")
cmdGenerate.Flags().StringVarP(&context, "context", "p", "opencloud", "Nom du projet") cmdGenerate.Flags().StringVarP(&context, "context", "c", "opencloud", "Nom du context")
cmdGenerate.Flags().StringVarP(&version, "version", "v", "latest", "Version") cmdGenerate.Flags().StringVarP(&version, "version", "v", "latest", "Version")
rootCmd.AddCommand(cmdInstall) rootCmd.AddCommand(cmdInstall)

View File

@ -30,6 +30,8 @@ func InstallCmd(context string, version string, modules []string) {
log.Log().Fatal().Msg(" >> " + err.Error()) log.Log().Fatal().Msg(" >> " + err.Error())
} }
obj.SetCommands()
err = obj.ChartRepo() err = obj.ChartRepo()
if err != nil { if err != nil {
log.Log().Fatal().Msg(" >> " + err.Error()) log.Log().Fatal().Msg(" >> " + err.Error())

View File

@ -1,38 +1,16 @@
package helm package helm
import ( import (
"fmt"
"strings"
"errors"
"os/exec"
log "oc-deploy/log_wrapper"
) )
type HelmCommandInterface interface { type HelmCommandInterface interface {
Status(string) (string, error) Status(string) (string, error)
AddRepository(HelmRepo) (string, error)
} }
type HelmCommandData struct { type HelmCommandData struct {
bin string Bin string
// name string
} }
type RealHelmCommandStatus HelmCommandData type RealHelmCommand HelmCommandData
func (this RealHelmCommandStatus) Status(name string) (string, error) {
msg := fmt.Sprintf("%s status %s --show-resources -o json", this.bin, name)
log.Log().Debug().Msg(msg)
cmd_args := strings.Split(msg, " ")
cmd := exec.Command(cmd_args[0], cmd_args[1:]...)
stdout, err := cmd.CombinedOutput()
if err != nil {
log.Log().Debug().Msg(string(stdout))
return "", errors.New(string(stdout))
}
return string(stdout), nil
}

View File

@ -4,30 +4,39 @@ import (
"fmt" "fmt"
"strings" "strings"
"os/exec" "os/exec"
"encoding/json"
log "oc-deploy/log_wrapper" log "oc-deploy/log_wrapper"
"oc-deploy/utils"
) )
type HelmRepo struct { type HelmRepo struct {
Bin string // Chemin vers le binaire
Name string Name string
Repository string // Url du dépôt Repository string // Url du dépôt
ForceUpdate bool ForceUpdate bool
Opts string Opts string
} }
func (this HelmRepo) AddRepository() (string, error) { func (this RealHelmCommand) AddRepository(repo HelmRepo) (string, error) {
helm_bin := this.Bin helm_bin := this.Bin
force_update := "--force-update=false" force_update := "--force-update=false"
if this.ForceUpdate { if repo.ForceUpdate {
force_update = "--force-update=true" force_update = "--force-update=true"
} else {
list, _ := this.ListRepository()
if utils.StringInSlice(repo.Name, list) {
return "Existe déjà", nil
}
} }
msg := fmt.Sprintf("%s repo add %s %s %s %s", helm_bin, this.Name, this.Repository, force_update, this.Opts) msg := fmt.Sprintf("%s repo add %s %s %s %s", helm_bin, repo.Name, repo.Repository, force_update, repo.Opts)
log.Log().Debug().Msg(msg) log.Log().Debug().Msg(msg)
cmd := exec.Command(helm_bin, "repo", "add", this.Name, this.Repository, force_update) cmd_args := strings.Split(msg, " ")
cmd := exec.Command(cmd_args[0], cmd_args[1:]...)
stdout, err := cmd.CombinedOutput() stdout, err := cmd.CombinedOutput()
res := string(stdout) res := string(stdout)
@ -36,14 +45,48 @@ func (this HelmRepo) AddRepository() (string, error) {
return res, err return res, err
} }
type parseList struct {
Name string `json:"name"`
}
func (this RealHelmCommand) ListRepository() ([]string, error) {
helm_bin := this.Bin
res := make([]string, 0, 0)
msg := fmt.Sprintf("%s repo list -o json", helm_bin)
log.Log().Debug().Msg(msg)
cmd_args := strings.Split(msg, " ")
cmd := exec.Command(cmd_args[0], cmd_args[1:]...)
stdout, err := cmd.CombinedOutput()
if err != nil {
return res, err
}
var objmap []parseList
err = json.Unmarshal([]byte(stdout), &objmap)
if err != nil {
return res, err
}
for _, ele := range objmap {
res = append(res, ele.Name)
}
return res, err
}
// helm repo remove [NAME] // helm repo remove [NAME]
func (this HelmRepo) RemoveRepository() (string, error) { func (this RealHelmCommand) RemoveRepository(repo HelmRepo) (string, error) {
helm_bin := this.Bin helm_bin := this.Bin
msg := fmt.Sprintf("%s repo remove %s", helm_bin, this.Name) msg := fmt.Sprintf("%s repo remove %s", helm_bin, repo.Name)
log.Log().Debug().Msg(msg) log.Log().Debug().Msg(msg)
cmd := exec.Command(helm_bin, "repo", "remove", this.Name) cmd := exec.Command(helm_bin, "repo", "remove", repo.Name)
stdout, err := cmd.CombinedOutput() stdout, err := cmd.CombinedOutput()
res := string(stdout) res := string(stdout)

View File

@ -11,7 +11,7 @@ type HelmStatus struct {
} }
func (this *HelmStatus) New(bin string) { func (this *HelmStatus) New(bin string) {
this.command = RealHelmCommandStatus{bin: bin} this.command = RealHelmCommand{Bin: bin}
} }
func (this *HelmStatus) NewMock(mock HelmCommandInterface) { func (this *HelmStatus) NewMock(mock HelmCommandInterface) {

30
src/helm/status.go Normal file
View File

@ -0,0 +1,30 @@
package helm
import (
"fmt"
"strings"
"errors"
"os/exec"
log "oc-deploy/log_wrapper"
)
func (this RealHelmCommand) Status(name string) (string, error) {
helm_bin := this.Bin
msg := fmt.Sprintf("%s status %s --show-resources -o json", helm_bin, name)
log.Log().Debug().Msg(msg)
cmd_args := strings.Split(msg, " ")
cmd := exec.Command(cmd_args[0], cmd_args[1:]...)
stdout, err := cmd.CombinedOutput()
if err != nil {
log.Log().Debug().Msg(string(stdout))
return "", errors.New(string(stdout))
}
return string(stdout), nil
}

View File

@ -7,6 +7,7 @@ import (
log "oc-deploy/log_wrapper" log "oc-deploy/log_wrapper"
"oc-deploy/tool" "oc-deploy/tool"
"oc-deploy/kubectl" "oc-deploy/kubectl"
"oc-deploy/helm"
) )
func (this *InstallClass) Tools() (error) { func (this *InstallClass) Tools() (error) {
@ -48,6 +49,18 @@ func (this *InstallClass) Tools() (error) {
return nil return nil
} }
func (this *InstallClass) SetCommands() {
helm_bin, _ := this.getToolBin("helm")
this.commandHelm = helm.RealHelmCommand{Bin: helm_bin}
// kubectl_bin, _ := this.getToolBin("kubectl")
// this.commandKubectl = helm.RealHelmCommand{Bin: kubectl_bin}
}
func (this *InstallClass) SetCommandsMock(mock helm.HelmCommandInterface) {
this.commandHelm = mock
}
func (this *InstallClass) getToolBin(name string) (string, error) { func (this *InstallClass) getToolBin(name string) (string, error) {
for key, value := range this.toolsBin { for key, value := range this.toolsBin {
if key == name { if key == name {

View File

@ -21,6 +21,8 @@ type InstallClass struct {
tools []tool.ToolData tools []tool.ToolData
toolsBin map[string]string toolsBin map[string]string
charts []chart.ChartRepoData charts []chart.ChartRepoData
commandHelm helm.HelmCommandInterface
} }
func (this *InstallClass) NewInstall() (string, error) { func (this *InstallClass) NewInstall() (string, error) {
@ -61,22 +63,22 @@ func (this *InstallClass) NewInstall() (string, error) {
return dst, err return dst, err
} }
bin_path, _ := this.getToolBin("helm")
fmt.Println("Install 67 bin_path", bin_path)
return dst, nil return dst, nil
} }
func (this *InstallClass) ChartRepo() (error) { func (this *InstallClass) ChartRepo() (error) {
bin_path, _ := this.getToolBin("helm")
for _, v := range this.charts { for _, v := range this.charts {
if v.Repository.Name != "" { if v.Repository.Name != "" {
log.Log().Info().Msg(fmt.Sprintf(" >> Helm Repo : %s", v.Repository.Name)) log.Log().Info().Msg(fmt.Sprintf(" >> Helm Repo : %s", v.Repository.Name))
repo := helm.HelmRepo{Bin: bin_path, repo := helm.HelmRepo{Name: v.Repository.Name,
Name: v.Repository.Name,
Repository: v.Repository.Url, Repository: v.Repository.Url,
ForceUpdate: v.Repository.ForceUpdate} ForceUpdate: v.Repository.ForceUpdate}
res, err := repo.AddRepository() res, err := this.commandHelm.AddRepository(repo)
if err != nil { if err != nil {
log.Log().Info().Msg(fmt.Sprintf(" << %s ", err)) log.Log().Info().Msg(fmt.Sprintf(" << %s ", err))
return err return err

10
src/utils/slice.go Normal file
View File

@ -0,0 +1,10 @@
package utils
func StringInSlice(a string, list []string) bool {
for _, b := range list {
if b == a {
return true
}
}
return false
}