Compare commits

..

No commits in common. "11a4d5cc9014f64f5187581ed2581c907ab4b8b1" and "4ae5926b0190878807ce6d81abe1ba64bef82ef1" have entirely different histories.

31 changed files with 1111 additions and 1242 deletions

View File

@ -35,9 +35,6 @@ help:
${BIN_DIR}/${BIN_NAME}: ${SOURCES} $(OBJS) ${BIN_DIR}/${BIN_NAME}: ${SOURCES} $(OBJS)
go build -o ${BIN_DIR}/${BIN_NAME} go build -o ${BIN_DIR}/${BIN_NAME}
get-deps:
@go mod tidy
build: ${BIN_DIR}/${BIN_NAME} build: ${BIN_DIR}/${BIN_NAME}
run: $(OBJS) run: $(OBJS)
@ -68,6 +65,7 @@ clean:
@test ! -e go.sum || rm go.sum @test ! -e go.sum || rm go.sum
@test ! -e .oc-deploy.log || rm .oc-deploy.log @test ! -e .oc-deploy.log || rm .oc-deploy.log
@rm -rf workspace_* @rm -rf workspace_*
@go mod tidy
.PHONY: test .PHONY: test
test: test:

View File

@ -19,19 +19,16 @@ type ChartData struct {
type ChartRepoData struct { type ChartRepoData struct {
Name string `yaml:"name"` Name string `yaml:"name"`
Repository string `yaml:"repository"` Repository string `yaml:"repository"`
Charts []ChartData `yaml:"charts"` Charts []ChartData `yaml:"charts"`
} }
type chartsRepoData struct { type chartsRepoData struct {
Charts []ChartRepoData `yaml:"opencloud"` Charts []ChartRepoData `yaml:"opencloud"`
} }
func FromConfigFile(filename string) ([]ChartRepoData, error) { func FromConfigFile(filename string) ([]ChartRepoData) {
yamlFile, _ := os.ReadFile(filename) yamlFile, _ := os.ReadFile(filename)
var data chartsRepoData var data chartsRepoData
err := yaml.Unmarshal(yamlFile, &data) yaml.Unmarshal(yamlFile, &data)
if err != nil { return data.Charts
return data.Charts, err
}
return data.Charts, nil
} }

View File

@ -14,7 +14,7 @@ func TestReadConfChart(t *testing.T){
assert.FileExists(t, src, "FromConfigFile error") assert.FileExists(t, src, "FromConfigFile error")
data, _ := FromConfigFile(src) data := FromConfigFile(src)
assert.Equal(t, data[0].Name, "bitnami", "FromConfigFile error") assert.Equal(t, data[0].Name, "bitnami", "FromConfigFile error")
assert.Equal(t, data[0].Repository, "https://charts.bitnami.com/bitnami", "FromConfigFile error") assert.Equal(t, data[0].Repository, "https://charts.bitnami.com/bitnami", "FromConfigFile error")

View File

@ -1,8 +1,8 @@
package chart package chart
import ( import (
"os" "os"
"testing" "testing"
"path/filepath" "path/filepath"
) )
@ -10,14 +10,14 @@ var TEST_DEST_DIR = "../wrk_chart"
var TEST_SRC_DIR = filepath.Join("../../test", "chart") var TEST_SRC_DIR = filepath.Join("../../test", "chart")
func TestMain(m *testing.M) { func TestMain(m *testing.M) {
folderPath := TEST_DEST_DIR folderPath := TEST_DEST_DIR
os.RemoveAll(folderPath) os.RemoveAll(folderPath)
os.MkdirAll(folderPath, os.ModePerm) os.MkdirAll(folderPath, os.ModePerm)
// call flag.Parse() here if TestMain uses flags // call flag.Parse() here if TestMain uses flags
exitCode := m.Run() exitCode := m.Run()
os.RemoveAll(folderPath) os.RemoveAll(folderPath)
os.Exit(exitCode) os.Exit(exitCode)
} }

View File

@ -38,7 +38,7 @@ func Execute() {
Long: `Undeploy`, Long: `Undeploy`,
Args: cobra.MaximumNArgs(0), Args: cobra.MaximumNArgs(0),
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
UninstallCmd(context) UninstallCmd(context, version)
}, },
Example: "oc-deploy uninstall --context ex1", Example: "oc-deploy uninstall --context ex1",
} }

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
log "oc-deploy/log_wrapper" log "oc-deploy/log_wrapper"
"oc-deploy/versionOc"
"oc-deploy/install" "oc-deploy/install"
) )
@ -12,15 +13,20 @@ func InstallCmd(context string, version string) {
log.Log().Info().Msg(" << Contexte : " + context) log.Log().Info().Msg(" << Contexte : " + context)
workspace := fmt.Sprintf("workspace_%s", context) version, err := versionOc.Get(version)
obj := install.InstallClass{Workspace: workspace, Version: version} log.Log().Info().Msg(" << Version : " + version)
file, err := obj.NewInstall()
if err != nil { if err != nil {
log.Log().Fatal().Msg(" >> " + err.Error()) log.Log().Fatal().Msg(" >> " + err.Error())
} }
log.Log().Info().Msg(fmt.Sprintf(" << Version : %s", obj.Version))
log.Log().Info().Msg(fmt.Sprintf(" >> Config : %s", file)) workspace := fmt.Sprintf("workspace_%s", context)
obj := install.InstallClass{Workspace: workspace, Version: version}
file, err := obj.New()
if err != nil {
log.Log().Fatal().Msg(" >> " + err.Error())
}
log.Log().Info().Msg(" >> Config : " + file )
err = obj.Tools() err = obj.Tools()
if err != nil { if err != nil {
@ -37,7 +43,7 @@ func InstallCmd(context string, version string) {
log.Log().Fatal().Msg(" >> " + err.Error()) log.Log().Fatal().Msg(" >> " + err.Error())
} }
err = obj.InstallCharts() err = obj.Charts()
if err != nil { if err != nil {
log.Log().Fatal().Msg(" >> " + err.Error()) log.Log().Fatal().Msg(" >> " + err.Error())
} }

View File

@ -1,43 +1,34 @@
package cmd package cmd
import ( import (
"fmt" // "fmt"
// "strings" // "strings"
// "github.com/spf13/cobra" // "github.com/spf13/cobra"
log "oc-deploy/log_wrapper" log "oc-deploy/log_wrapper"
// "oc-deploy/versionOc" "oc-deploy/versionOc"
"oc-deploy/install" "oc-deploy/install"
) )
func UninstallCmd(context string) { func UninstallCmd(context string, version string) {
log.Log().Info().Msg("Unnstall >> ") log.Log().Info().Msg("Install >> ")
log.Log().Info().Msg(" << Contexte : " + context) log.Log().Info().Msg(" << Contexte : " + context)
workspace := fmt.Sprintf("workspace_%s", context) version, err := versionOc.Get(version)
obj := install.InstallClass{Workspace: workspace} log.Log().Info().Msg(" << Version : " + version)
file, err := obj.NewUninstall()
if err != nil {
log.Log().Fatal().Msg(" >> " + err.Error())
}
log.Log().Info().Msg(fmt.Sprintf(" << Version : %s", obj.Version))
log.Log().Info().Msg(fmt.Sprintf(" >> Config : %s", file))
err = obj.Tools()
if err != nil { if err != nil {
log.Log().Fatal().Msg(" >> " + err.Error()) log.Log().Fatal().Msg(" >> " + err.Error())
} }
err = obj.K8s(context) obj := install.UninstallClass{Workspace: "workspace_" + context, Version: version}
if err != nil { obj.New()
log.Log().Fatal().Msg(" >> " + err.Error())
} // fic, err := obj.New()
// if err != nil {
// log.Log().Fatal().Msg(" >> " + err.Error())
// }
// log.Log().Info().Msg(" >> Value : " + fic)
err = obj.UninstallCharts()
if err != nil {
log.Log().Fatal().Msg(" >> " + err.Error())
}
} }

View File

@ -8,6 +8,7 @@ import (
type GenerateClass struct { type GenerateClass struct {
Version string Version string
Workspace string Workspace string
url string
} }
func (this GenerateClass) New() (string, error) { func (this GenerateClass) New() (string, error) {

View File

@ -1,31 +1,31 @@
package helm package helm
import ( import (
"fmt" "fmt"
"os" "os"
"os/exec" "os/exec"
"strings" "strings"
"errors" "errors"
"path/filepath" "path/filepath"
"encoding/json" "encoding/json"
log "oc-deploy/log_wrapper" log "oc-deploy/log_wrapper"
) )
type HelmChart struct { type HelmChart struct {
Bin string Bin string
Name string Name string
Chart string Chart string
Version string Version string
Workspace string Workspace string
Opts string Opts string
Values string Values string
FileValues string FileValues string
} }
type installInfoOutput struct { type installInfoOutput struct {
Description string `json:"description"` Description string `json:"description"`
Notes string `json:"notes"` Notes string `json:"notes"`
Status string `json:"status"` Status string `json:"status"`
} }
type installOutput struct { type installOutput struct {
@ -33,100 +33,89 @@ type installOutput struct {
} }
func (this HelmChart) Install() (string, error) { func (this HelmChart) Install() (string, error) {
bin := this.Bin bin := this.Bin
existe, err := this.exists() existe, err := this.exists()
if err != nil { if err != nil {
return "", err return "", err
} }
if existe { if existe {
return "Existe déjà", nil return "Existe déjà", nil
} }
msg := fmt.Sprintf("%s install %s %s %s --output json", bin, this.Name, this.Chart, this.Opts) msg := fmt.Sprintf("%s install %s %s %s --output json", bin, this.Name, this.Chart, this.Opts)
if this.Version != "" { if this.Version != "" {
msg = fmt.Sprintf("%s --version %s", msg, this.Version) msg = fmt.Sprintf("%s --version %s", msg, this.Version)
} }
if this.FileValues != "" { if this.FileValues != "" {
fic := filepath.Join(this.Workspace, this.FileValues) fic := filepath.Join(this.Workspace, this.FileValues)
if _, err := os.Stat(fic); err != nil { if _, err := os.Stat(fic); err != nil {
log.Log().Warn().Msg(fic) log.Log().Warn().Msg(fic)
} else { } else {
msg = fmt.Sprintf("%s --values %s", msg, fic) msg = fmt.Sprintf("%s --values %s", msg, fic)
} }
} }
msg = strings.Replace(msg, " ", " ", -1) msg = strings.Replace(msg, " ", " ", -1)
log.Log().Debug().Msg(msg) log.Log().Debug().Msg(msg)
cmd_args := strings.Split(msg, " ") cmd_args := strings.Split(msg, " ")
cmd := exec.Command(cmd_args[0], cmd_args[1:]...) cmd := exec.Command(cmd_args[0], cmd_args[1:]...)
stdout, err := cmd.CombinedOutput() stdout, err := cmd.CombinedOutput()
if err != nil { if err != nil {
res := string(stdout) res := string(stdout)
res = strings.TrimSuffix(res, "\n") res = strings.TrimSuffix(res, "\n")
return "", errors.New(res) return "", errors.New(res)
} }
var objmap installOutput var objmap installOutput
err = json.Unmarshal(stdout, &objmap) json.Unmarshal(stdout, &objmap)
if err != nil {
return "", err
}
res := objmap.Info.Status res := objmap.Info.Status
return res, nil return res, nil
} }
func (this HelmChart) Uninstall() (string, error) { func (this HelmChart) Uninstall() (string, error) {
bin := this.Bin bin := this.Bin
log.Log().Info().Msg(" >> Chart : " + this.Name) log.Log().Info().Msg(" >> Chart : " + this.Name)
existe, err := this.exists() msg := fmt.Sprintf("%s uninstall %s", bin, this.Name)
if err != nil { log.Log().Debug().Msg(msg)
return "", err
}
if ! existe {
return "Non présent", nil
}
msg := fmt.Sprintf("%s uninstall %s", bin, this.Name) cmd := exec.Command(bin, "uninstall", this.Name)
log.Log().Debug().Msg(msg) stdout, err := cmd.CombinedOutput()
cmd := exec.Command(bin, "uninstall", this.Name) return string(stdout), err
stdout, err := cmd.CombinedOutput()
return string(stdout), err
} }
// ../bin/helm list --filter phpmyadminm --short // ../bin/helm list --filter phpmyadminm --short
func (this HelmChart) exists() (bool, error) { func (this HelmChart) exists() (bool, error) {
bin := this.Bin bin := this.Bin
msg := fmt.Sprintf("%s list --filter %s --no-headers", bin, this.Name) msg := fmt.Sprintf("%s list --filter %s --no-headers", bin, this.Name)
log.Log().Debug().Msg(msg) log.Log().Debug().Msg(msg)
cmd_args := strings.Split(msg, " ") cmd_args := strings.Split(msg, " ")
cmd := exec.Command(cmd_args[0], cmd_args[1:]...) cmd := exec.Command(cmd_args[0], cmd_args[1:]...)
stdout, err := cmd.CombinedOutput() stdout, err := cmd.CombinedOutput()
if err != nil { if err != nil {
return false, errors.New(string(stdout)) return false, errors.New(string(stdout))
} }
res := string(stdout) res := string(stdout)
res = strings.TrimSuffix(res, "\n") res = strings.TrimSuffix(res, "\n")
log.Log().Debug().Msg(string(stdout)) log.Log().Debug().Msg(string(stdout))
return res != "", nil return res != "", nil
} }

View File

@ -1,90 +0,0 @@
package install
import (
"fmt"
"errors"
log "oc-deploy/log_wrapper"
"oc-deploy/tool"
"oc-deploy/kubectl"
)
func (this *InstallClass) Tools() (error) {
var mem []tool.ToolClass
for _, v := range this.tools {
tool2 := tool.ToolClass{}
v.Bin = this.Workspace
err := tool2.New(v)
if err != nil {
return err
}
mem = append(mem,tool2)
}
this.toolsBin = make(map[string]string)
for _, p := range mem {
data := p.Obj.Get()
log.Log().Info().Msg(fmt.Sprintf(" >> Outils : %s", data.Name))
err := p.Locate()
if err != nil {
log.Log().Info().Msg(fmt.Sprintf(" << %s ", err))
return err
}
log.Log().Info().Msg(fmt.Sprintf(" << %s ", p.Path))
version, err1 := p.Version()
if err1 != nil {
log.Log().Info().Msg(fmt.Sprintf(" << %s ", err1))
return err1
}
log.Log().Info().Msg(fmt.Sprintf(" << %s ", version))
this.toolsBin[data.Name] = p.Path
}
return nil
}
func (this *InstallClass) getToolBin(name string) (string, error) {
for key, value := range this.toolsBin {
if key == name {
return value, nil
}
}
return "", errors.New("Error")
}
func (this *InstallClass) K8s(context string) (error) {
bin_path, _ := this.getToolBin("kubectl")
kube := kubectl.KubeContext{Bin: bin_path}
err := kube.UseContext(context)
if err != nil {
log.Log().Info().Msg(fmt.Sprintf(" << Kube : %s ", err))
return err
}
currentcontext, namespace, server, err := kube.GetContext()
if err != nil {
log.Log().Info().Msg(fmt.Sprintf(" << Kube : %s ", err))
return err
}
log.Log().Info().Msg(fmt.Sprintf(" << Kube : %s ", currentcontext))
log.Log().Info().Msg(fmt.Sprintf(" << : %s ", namespace))
log.Log().Info().Msg(fmt.Sprintf(" << : %s ", server))
err = kube.Check()
if err != nil {
log.Log().Info().Msg(fmt.Sprintf(" << : %s ", err))
return err
}
log.Log().Info().Msg(fmt.Sprintf(" << : %s ", "OK"))
return nil
}

View File

@ -2,69 +2,98 @@ package install
import ( import (
"fmt" "fmt"
"errors"
"sync" "sync"
"os" // "time"
log "oc-deploy/log_wrapper" log "oc-deploy/log_wrapper"
"oc-deploy/utils" "oc-deploy/utils"
"oc-deploy/tool" "oc-deploy/tool"
"oc-deploy/chart"
"oc-deploy/helm" "oc-deploy/helm"
"oc-deploy/chart"
"oc-deploy/kubectl" "oc-deploy/kubectl"
"oc-deploy/versionOc"
) )
type InstallClass struct { type InstallClass struct {
Version string Version string
Workspace string Workspace string
// versionFile string versionFile string
tools []tool.ToolData tools []tool.ToolData
toolsBin map[string]string toolsBin map[string]string
charts []chart.ChartRepoData charts []chart.ChartRepoData
} }
func (this *InstallClass) NewInstall() (string, error) { func (this *InstallClass) New() (string, error) {
// Extraction du fichier de version // Extraction du fichier de version
log.Log().Debug().Msg("Téléchargement du fichier de version")
src := fmt.Sprintf("../offline/oc_%s.yml", this.Version)
dst := fmt.Sprintf("%s/oc.yml", this.Workspace) dst := fmt.Sprintf("%s/oc.yml", this.Workspace)
log.Log().Debug().Msg(fmt.Sprintf("Check du fichier de version : %s", dst))
if _, err := os.Stat(dst); err == nil { err := utils.CopyFile(src, dst)
log.Log().Debug().Msg("Existe déjà") if err != nil {
version, err := versionOc.GetFromFile(dst) return "", err
if err != nil {
return "", err
}
this.Version = version
} else {
log.Log().Debug().Msg("Téléchargement du fichier de version")
version, err := versionOc.Get(this.Version)
if err != nil {
return "", err
}
src := fmt.Sprintf("../offline/oc_%s.yml", version)
err = utils.CopyFile(src, dst)
if err != nil {
return "", err
}
} }
// Lecture du fichier de conf // Lecture du fichier de conf
// this.versionFile = dst this.versionFile = dst
var err error this.tools = tool.FromConfigFile(this.versionFile)
this.tools, err = tool.FromConfigFile(dst)
if err != nil { this.charts = chart.FromConfigFile(this.versionFile)
return dst, err
}
this.charts, _ = chart.FromConfigFile(dst)
if err != nil {
return dst, err
}
return dst, nil return dst, nil
} }
func (this *InstallClass) Tools() (error) {
var mem []tool.ToolClass
for _, v := range this.tools {
tool2 := tool.ToolClass{}
v.Bin = this.Workspace
err := tool2.New(v)
if err != nil {
return err
}
mem = append(mem,tool2)
}
this.toolsBin = make(map[string]string)
for _, p := range mem {
data := p.Obj.Get()
log.Log().Info().Msg(fmt.Sprintf(" >> Outils : %s", data.Name))
err := p.Locate()
if err != nil {
log.Log().Info().Msg(fmt.Sprintf(" << %s ", err))
return err
}
log.Log().Info().Msg(fmt.Sprintf(" << %s ", p.Path))
version, err1 := p.Version()
if err1 != nil {
log.Log().Info().Msg(fmt.Sprintf(" << %s ", err1))
return err1
}
log.Log().Info().Msg(fmt.Sprintf(" << %s ", version))
this.toolsBin[data.Name] = p.Path
}
return nil
}
func (this *InstallClass) getToolBin(name string) (string, error) {
for key, value := range this.toolsBin {
if key == name {
return value, nil
}
}
return "", errors.New("Error")
}
func (this *InstallClass) ChartRepo() (error) { func (this *InstallClass) ChartRepo() (error) {
@ -87,8 +116,38 @@ func (this *InstallClass) ChartRepo() (error) {
return nil return nil
} }
func (this *InstallClass) K8s(context string) (error) {
bin_path, _ := this.getToolBin("kubectl")
func (this *InstallClass) InstallCharts() (error) { kube := kubectl.KubeContext{Bin: bin_path}
err := kube.UseContext(context)
if err != nil {
log.Log().Info().Msg(fmt.Sprintf(" << Kube : %s ", err))
return err
}
currentcontext, namespace, server, err := kube.GetContext()
if err != nil {
log.Log().Info().Msg(fmt.Sprintf(" << Kube : %s ", err))
return err
}
log.Log().Info().Msg(fmt.Sprintf(" << Kube : %s ", currentcontext))
log.Log().Info().Msg(fmt.Sprintf(" << : %s ", namespace))
log.Log().Info().Msg(fmt.Sprintf(" << : %s ", server))
err = kube.Check()
if err != nil {
log.Log().Info().Msg(fmt.Sprintf(" << : %s ", err))
return err
}
log.Log().Info().Msg(fmt.Sprintf(" << : %s ", "OK"))
return nil
}
func (this *InstallClass) Charts() (error) {
helm_bin, _ := this.getToolBin("helm") helm_bin, _ := this.getToolBin("helm")
kubectl_bin, _ := this.getToolBin("kubectl") kubectl_bin, _ := this.getToolBin("kubectl")
@ -100,7 +159,7 @@ func (this *InstallClass) InstallCharts() (error) {
go func() { go func() {
defer wg.Done() defer wg.Done()
this.installChart(helm_bin, kubectl_bin, v1) this.worker(helm_bin, kubectl_bin, v1)
} () } ()
} }
@ -109,7 +168,7 @@ func (this *InstallClass) InstallCharts() (error) {
return nil return nil
} }
func (this *InstallClass) installChart(helm_bin string, kubectl_bin string, chart chart.ChartData) { func (this *InstallClass) worker(helm_bin string, kubectl_bin string, chart chart.ChartData) {
log.Log().Info().Msg(fmt.Sprintf(" << Chart : %s ", chart.Name)) log.Log().Info().Msg(fmt.Sprintf(" << Chart : %s ", chart.Name))
@ -118,7 +177,7 @@ func (this *InstallClass) installChart(helm_bin string, kubectl_bin string, char
Chart: chart.Chart, Chart: chart.Chart,
Version: chart.Version, Version: chart.Version,
Workspace: this.Workspace, Workspace: this.Workspace,
Opts: chart.Opts, Opts: chart.Opts,
Values: chart.Values, Values: chart.Values,
FileValues: chart.FileValues} FileValues: chart.FileValues}

View File

@ -1,75 +1,18 @@
package install package install
import ( import (
"fmt" // "fmt"
"os" // "os"
"sync" // "io"
// "path/filepath"
log "oc-deploy/log_wrapper" // log "oc-deploy/log_wrapper"
"oc-deploy/versionOc"
"oc-deploy/tool"
"oc-deploy/chart"
"oc-deploy/helm"
) )
func (this *InstallClass) NewUninstall() (string, error) { type UninstallClass struct {
dst := fmt.Sprintf("%s/oc.yml", this.Workspace) Version string
Workspace string
if _, err := os.Stat(dst); err != nil {
return dst, err
}
version, err := versionOc.GetFromFile(dst)
if err != nil {
return "", err
}
this.Version = version
// Lecture du fichier de conf
this.tools, err = tool.FromConfigFile(dst)
if err != nil {
return dst, err
}
this.charts, _ = chart.FromConfigFile(dst)
if err != nil {
return dst, err
}
return dst, nil
} }
func (this *InstallClass) UninstallCharts() (error) { func (this UninstallClass) New() {
helm_bin, _ := this.getToolBin("helm")
kubectl_bin, _ := this.getToolBin("kubectl")
var wg sync.WaitGroup
for _, v := range this.charts {
for _, v1 := range v.Charts {
wg.Add(1)
go func() {
defer wg.Done()
this.uninstallChart(helm_bin, kubectl_bin, v1)
} ()
}
}
wg.Wait()
return nil
}
func (this *InstallClass) uninstallChart(helm_bin string, kubectl_bin string, chart chart.ChartData) {
log.Log().Info().Msg(fmt.Sprintf(" << Chart : %s ", chart.Name))
helmchart := helm.HelmChart{Bin: helm_bin,
Name: chart.Name}
res, err := helmchart.Uninstall()
if err != nil {
log.Log().Error().Msg(fmt.Sprintf(" >> %s %s (%s)", helmchart.Name, "KO", err))
return
}
log.Log().Info().Msg(fmt.Sprintf(" >> %s (%s)", helmchart.Name, res))
} }

View File

@ -21,23 +21,23 @@ type kubeConfig struct {
} }
type kubeConfigContexts struct { type kubeConfigContexts struct {
Name string `json:"name"` Name string `json:"name"`
Context kubeConfigContext `json:"context"` Context kubeConfigContext `json:"context"`
} }
type kubeConfigContext struct { type kubeConfigContext struct {
Cluster string `json:"cluster"` Cluster string `json:"cluster"`
User string `json:"user"` User string `json:"user"`
Namespace string `json:"namespace"` Namespace string `json:"namespace"`
} }
type kubeConfigCluster struct { type kubeConfigCluster struct {
Server string `json:"server"` Server string `json:"server"`
} }
type kubeConfigClusters struct { type kubeConfigClusters struct {
Name string `json:"name"` Name string `json:"name"`
Cluster kubeConfigCluster `json:"cluster"` Cluster kubeConfigCluster `json:"cluster"`
} }
func (this KubeContext) GetCurrentContext() (string, error) { func (this KubeContext) GetCurrentContext() (string, error) {
@ -60,10 +60,7 @@ func (this KubeContext) GetContext() (string, string, string, error) {
var objmap kubeConfig var objmap kubeConfig
err := json.Unmarshal(stdout, &objmap) json.Unmarshal(stdout, &objmap)
if err != nil {
return "", "", "", err
}
currentContext := objmap.CurrentContext currentContext := objmap.CurrentContext
currentCluster := "" currentCluster := ""
@ -75,37 +72,37 @@ func (this KubeContext) GetContext() (string, string, string, error) {
} }
} }
currentServer := "" currentServer := ""
for _, v := range objmap.Clusters { for _, v := range objmap.Clusters {
if v.Name == currentCluster { if v.Name == currentCluster {
currentServer = v.Cluster.Server currentServer = v.Cluster.Server
} }
} }
return currentContext, currentNamespace, currentServer, nil return currentContext, currentNamespace, currentServer, nil
} }
func (this KubeContext) UseContext(newContext string) (error) { func (this KubeContext) UseContext(newContext string) (error) {
cmd := exec.Command(this.Bin, "config", "use-context", newContext) cmd := exec.Command(this.Bin, "config", "use-context", newContext)
stdout, err := cmd.CombinedOutput() stdout, err := cmd.CombinedOutput()
if err != nil { if err != nil {
log.Log().Debug().Msg(string(stdout)) log.Log().Debug().Msg(string(stdout))
return errors.New(string(stdout)) return errors.New(string(stdout))
} }
return nil return nil
} }
func (this KubeContext) Check() (error) { func (this KubeContext) Check() (error) {
cmd := exec.Command(this.Bin, "cluster-info") cmd := exec.Command(this.Bin, "cluster-info")
stdout, err := cmd.CombinedOutput() stdout, err := cmd.CombinedOutput()
if err != nil { if err != nil {
log.Log().Debug().Msg(string(stdout)) log.Log().Debug().Msg(string(stdout))
return errors.New("Kube non disponible") return errors.New("Kube non disponible")
} }
return nil return nil
} }

View File

@ -9,12 +9,9 @@ type toolsData struct {
Tools []ToolData `yaml:"tools"` Tools []ToolData `yaml:"tools"`
} }
func FromConfigFile(filename string) ([]ToolData, error) { func FromConfigFile(filename string) ([]ToolData) {
yamlFile, _ := os.ReadFile(filename) yamlFile, _ := os.ReadFile(filename)
var data toolsData var data toolsData
err := yaml.Unmarshal(yamlFile, &data) yaml.Unmarshal(yamlFile, &data)
if err != nil { return data.Tools
return data.Tools, nil
}
return data.Tools, nil
} }

View File

@ -4,51 +4,50 @@ import (
"fmt" "fmt"
"os" "os"
// log "oc-deploy/log_wrapper"
"oc-deploy/utils" "oc-deploy/utils"
"oc-deploy/helm" "oc-deploy/helm"
) )
type HelmInstallData struct { type HelmInstallData struct {
obj ToolData obj ToolData
tmp string tmp string
} }
func (this HelmInstallData) Get() (ToolData) { func (this HelmInstallData) Get() (ToolData) {
return this.obj return this.obj
} }
func (this HelmInstallData) Download() (error) { func (this HelmInstallData) Download() (error) {
bin_dir := this.obj.Bin bin_dir := this.obj.Bin
err2 := os.MkdirAll(bin_dir, os.ModePerm) err2 := os.MkdirAll(bin_dir, os.ModePerm)
if err2 != nil { if err2 != nil {
fmt.Println(err2) fmt.Println(err2)
return err2 return err2
} }
tmp_file := fmt.Sprintf("%s/oc-deploy-%s", this.tmp, this.obj.Name) tmp_file := fmt.Sprintf("%s/oc-deploy-%s", this.tmp, this.obj.Name)
url := fmt.Sprintf(this.obj.Url, this.obj.Version) url := fmt.Sprintf(this.obj.Url, this.obj.Version)
err := utils.DownloadFromUrl(tmp_file, url, 0777) err := utils.DownloadFromUrl(tmp_file, url, 0777)
if err != nil { if err != nil {
return err return err
} }
r, _ := os.Open(tmp_file) r, _ := os.Open(tmp_file)
err1 := utils.ExtractTarGz(bin_dir, r) err1 := utils.ExtractTarGz(bin_dir, r)
if err1 != nil {return err1}
os.Remove(tmp_file) os.Remove(tmp_file)
bin_file := fmt.Sprintf("%s/%s", bin_dir, this.obj.Name) bin_file := fmt.Sprintf("%s/%s", bin_dir, this.obj.Name)
errChmod := os.Chmod(bin_file, 0755) os.Chmod(bin_file, 0755)
if errChmod != nil {return errChmod}
return nil return err1
} }
/////////////// ///////////////
func (this HelmInstallData) Version(path string) (string, error) { func (this HelmInstallData) Version(path string) (string, error) {
return helm.Version(path) return helm.Version(path)
} }

View File

@ -11,31 +11,31 @@ import (
) )
type KubecltInstallData struct { type KubecltInstallData struct {
obj ToolData obj ToolData
} }
func (this KubecltInstallData) Get() (ToolData) { func (this KubecltInstallData) Get() (ToolData) {
return this.obj return this.obj
} }
func (this KubecltInstallData) Download() (error) { func (this KubecltInstallData) Download() (error) {
bin_dir := this.obj.Bin bin_dir := this.obj.Bin
bin := filepath.Join(bin_dir, this.obj.Name) bin := filepath.Join(bin_dir, this.obj.Name)
url := fmt.Sprintf(this.obj.Url, this.obj.Version) url := fmt.Sprintf(this.obj.Url, this.obj.Version)
log.Log().Debug().Msg(fmt.Sprintf("Téléchargement : %s, %s", bin, url)) log.Log().Debug().Msg(fmt.Sprintf("Téléchargement : %s, %s", bin, url))
os.MkdirAll(bin_dir, os.ModePerm) os.MkdirAll(bin_dir, os.ModePerm)
err := utils.DownloadFromUrl(bin, url, 0777) err := utils.DownloadFromUrl(bin, url, 0777)
if err != nil {return err} if err != nil {return err}
os.Chmod(bin, 0755) os.Chmod(bin, 0755)
return nil return nil
} }
/////////////// ///////////////
func (this KubecltInstallData) Version(path string) (string, error) { func (this KubecltInstallData) Version(path string) (string, error) {
return kubectl.Version(path) return kubectl.Version(path)
} }

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
"os/exec" "os/exec"
"errors"
"path/filepath" "path/filepath"
) )
@ -72,7 +73,7 @@ func factory(data ToolData) (Forme, error) {
case "helm": case "helm":
f = HelmInstallData{obj: data, tmp: "/tmp"} f = HelmInstallData{obj: data, tmp: "/tmp"}
default: default:
return f, fmt.Errorf("Outil Inconnu : %s", data.Name) return f, errors.New(fmt.Sprintf("Outil Inconnu : %s", data.Name))
} }
return f, nil return f, nil

View File

@ -43,7 +43,7 @@ func ExtractTarGz(dest string, gzipStream io.Reader) error {
tarReader := tar.NewReader(uncompressedStream) tarReader := tar.NewReader(uncompressedStream)
for { for true {
header, err := tarReader.Next() header, err := tarReader.Next()
if err == io.EOF { if err == io.EOF {

View File

@ -5,7 +5,7 @@ import (
"fmt" "fmt"
"os" "os"
"errors" "errors"
"io" "io/ioutil"
"gopkg.in/yaml.v2" "gopkg.in/yaml.v2"
log "oc-deploy/log_wrapper" log "oc-deploy/log_wrapper"
) )
@ -14,25 +14,6 @@ type versionInput struct {
Version string `yaml:"version"` Version string `yaml:"version"`
} }
func GetFromFile(fileversion string) (string, error) {
fin, err := os.Open(fileversion)
if err != nil {
return "", err
}
defer fin.Close()
byteValue, err := io.ReadAll(fin)
if err != nil {
return "", err
}
var objmap versionInput
yaml.Unmarshal(byteValue, &objmap)
return objmap.Version, nil
}
// Get : Retourne la version // Get : Retourne la version
func Get(version string) (string, error) { func Get(version string) (string, error) {
@ -64,14 +45,14 @@ func readLatestFile() (string, error) {
} }
defer fin.Close() defer fin.Close()
byteValue, err := io.ReadAll(fin) byteValue, err := ioutil.ReadAll(fin)
if err != nil { if err != nil {
return "", err return "", err
} }
var objmap versionInput var objmap versionInput
yaml.Unmarshal(byteValue, &objmap) yaml.Unmarshal(byteValue, &objmap)
return objmap.Version, nil return objmap.Version, nil
} }