From a3a9e84a028f0fe7c9af7dcaa0de398320d7bee2 Mon Sep 17 00:00:00 2001 From: simonzhangsz Date: Wed, 17 Jan 2024 16:49:54 +0800 Subject: [PATCH] fix: active and rollback package issue --- features/cm/software.go | 120 +++++++++++++++++++++++++--------------- misc/rbkpkg.sh | 30 ++++++++++ 2 files changed, 105 insertions(+), 45 deletions(-) create mode 100644 misc/rbkpkg.sh diff --git a/features/cm/software.go b/features/cm/software.go index 5cdc2e9e..0de5921c 100644 --- a/features/cm/software.go +++ b/features/cm/software.go @@ -542,7 +542,7 @@ func DistributeSoftwareToNF(w http.ResponseWriter, r *http.Request) { mkdirCmd := fmt.Sprintf("sudo mkdir -p %s/software/%s", config.GetYamlConfig().NE.OmcDir, neTypeLower) cmd := exec.Command("ssh", sshHost, mkdirCmd) out, err := cmd.CombinedOutput() - log.Debugf("Exec output: %v", string(out)) + log.Tracef("Exec output: %v", string(out)) if err != nil { log.Error("Faile to mkdir:", err) services.ResponseInternalServerError500ProcessError(w, err) @@ -557,7 +557,7 @@ func DistributeSoftwareToNF(w http.ResponseWriter, r *http.Request) { neInfo.Ip, config.GetYamlConfig().NE.ScpDir) cmd = exec.Command("scp", "-r", srcFile, scpDir) out, err = cmd.CombinedOutput() - log.Debugf("Exec output: %v", string(out)) + log.Tracef("Exec output: %v", string(out)) if err != nil { log.Errorf("Faile to scp NF: neType=%s, neId=%s, ip=%s", neType, neId, neInfo.Ip) services.ResponseInternalServerError500ProcessError(w, err) @@ -568,7 +568,7 @@ func DistributeSoftwareToNF(w http.ResponseWriter, r *http.Request) { config.GetYamlConfig().NE.OmcDir, neTypeLower) cmd = exec.Command("ssh", sshHost, cpCmd) out, err = cmd.CombinedOutput() - log.Debugf("Exec output: %v", string(out)) + log.Tracef("Exec output: %v", string(out)) if err != nil { log.Error("Faile to execute cp command:", err) services.ResponseInternalServerError500ProcessError(w, err) @@ -698,11 +698,16 @@ func ActiveSoftwareToNF(w http.ResponseWriter, r *http.Request) { return } - dpkgCmd := fmt.Sprintf("sudo %s/actpkg.sh '%s'", + runCmd := fmt.Sprintf("sudo %s/actpkg.sh '%s'", config.GetYamlConfig().NE.ScpDir, filePath) - err = RunSSHCmd(sshHost, dpkgCmd) + if neTypeLower == "omc" { + services.ResponseStatusOK201Accepted(w) + RunSSHCmd(sshHost, runCmd) + return + } + err = RunSSHCmd(sshHost, runCmd) if err != nil { - log.Errorf("Faile to execute dpkg command: %s, error: %v", dpkgCmd, err) + log.Errorf("Faile to execute command: %s, error: %v", runCmd, err) services.ResponseInternalServerError500ProcessError(w, err) return } @@ -761,7 +766,7 @@ func ActiveSoftwareToNF(w http.ResponseWriter, r *http.Request) { restartCmd := fmt.Sprintf("sudo %s/bin/omcsvc.sh restart", config.GetYamlConfig().NE.OmcDir) cmd := exec.Command("ssh", sshHost, restartCmd) out, err := cmd.CombinedOutput() - log.Debugf("Exec output: %v", string(out)) + log.Tracef("Exec output: %v", string(out)) if err != nil { log.Error("Faile to execute ssh restart omc:", err) services.ResponseInternalServerError500ProcessError(w, err) @@ -771,7 +776,7 @@ func ActiveSoftwareToNF(w http.ResponseWriter, r *http.Request) { restartCmd := "sudo ims-stop && sudo ims-start" cmd := exec.Command("ssh", sshHost, restartCmd) out, err := cmd.CombinedOutput() - log.Debugf("Exec output: %v", string(out)) + log.Tracef("Exec output: %v", string(out)) if err != nil { log.Error("Faile to execute ssh command: %s, error: %v", restartCmd, err) services.ResponseInternalServerError500ProcessError(w, err) @@ -781,7 +786,7 @@ func ActiveSoftwareToNF(w http.ResponseWriter, r *http.Request) { restartCmd := fmt.Sprintf("sudo systemctl restart %s.service", neTypeLower) cmd := exec.Command("ssh", sshHost, restartCmd) out, err := cmd.CombinedOutput() - log.Debugf("Exec output: %v", string(out)) + log.Tracef("Exec output: %v", string(out)) if err != nil { log.Error("Faile to execute ssh sudo systemctl command:", err) services.ResponseInternalServerError500ProcessError(w, err) @@ -869,46 +874,71 @@ func RollBackSoftwareToNF(w http.ResponseWriter, r *http.Request) { if !config.GetYamlConfig().OMC.TestMode { sshHost := fmt.Sprintf("%s@%s", config.GetYamlConfig().NE.User, neInfo.Ip) - fileType := global.IsRpmOrDebPackage(filePath) - if fileType == 1 { - rpmCmd := fmt.Sprintf("sudo rpm -Uvh --oldpackage '%s'", filePath) - cmd := exec.Command("ssh", sshHost, rpmCmd) - _, err := cmd.CombinedOutput() - if err != nil { - log.Error("Faile to execute rpm command:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - } else if fileType == 2 { - srcFile := fmt.Sprintf("%s/spawndpkg.sh", config.GetYamlConfig().OMC.BinDir) + srcFile := fmt.Sprintf("%s/rbkpkg.sh", config.GetYamlConfig().OMC.BinDir) - scpDir := fmt.Sprintf("%s@%s:%s", config.GetYamlConfig().NE.User, - neInfo.Ip, config.GetYamlConfig().NE.ScpDir) - cmd := exec.Command("scp", "-r", srcFile, scpDir) - _, err := cmd.CombinedOutput() - if err != nil { - log.Errorf("Faile to scp NF: neType=%s, neId=%s, ip=%s", neType, neId, neInfo.Ip) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - var inputStr string = "n" - if config.GetYamlConfig().NE.DpkgOverwrite { - inputStr = "y" - } - dpkgCmd := fmt.Sprintf("sudo %s/spawndpkg.sh %s '%s'", - config.GetYamlConfig().NE.ScpDir, inputStr, filePath) - err = RunSSHCmd(sshHost, dpkgCmd) - if err != nil { - log.Errorf("Faile to execute dpkg command: %s, error: %v", dpkgCmd, err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - } else { - err := global.ErrCMUnknownSoftwareFormat - log.Error(err) + scpDir := fmt.Sprintf("%s@%s:%s", config.GetYamlConfig().NE.User, + neInfo.Ip, config.GetYamlConfig().NE.ScpDir) + cmd := exec.Command("scp", "-r", srcFile, scpDir) + _, err := cmd.CombinedOutput() + if err != nil { + log.Errorf("Faile to scp NF: neType=%s, neId=%s, ip=%s", neType, neId, neInfo.Ip) services.ResponseInternalServerError500ProcessError(w, err) return } + + runCmd := fmt.Sprintf("sudo %s/rbkpkg.sh '%s'", + config.GetYamlConfig().NE.ScpDir, filePath) + if neTypeLower == "omc" { + services.ResponseStatusOK201Accepted(w) + RunSSHCmd(sshHost, runCmd) + return + } + err = RunSSHCmd(sshHost, runCmd) + if err != nil { + log.Errorf("Faile to execute command: %s, error: %v", runCmd, err) + services.ResponseInternalServerError500ProcessError(w, err) + return + } + // fileType := global.IsRpmOrDebPackage(filePath) + // if fileType == 1 { + // rpmCmd := fmt.Sprintf("sudo rpm -Uvh --oldpackage '%s'", filePath) + // cmd := exec.Command("ssh", sshHost, rpmCmd) + // _, err := cmd.CombinedOutput() + // if err != nil { + // log.Error("Faile to execute rpm command:", err) + // services.ResponseInternalServerError500ProcessError(w, err) + // return + // } + // } else if fileType == 2 { + // srcFile := fmt.Sprintf("%s/spawndpkg.sh", config.GetYamlConfig().OMC.BinDir) + + // scpDir := fmt.Sprintf("%s@%s:%s", config.GetYamlConfig().NE.User, + // neInfo.Ip, config.GetYamlConfig().NE.ScpDir) + // cmd := exec.Command("scp", "-r", srcFile, scpDir) + // _, err := cmd.CombinedOutput() + // if err != nil { + // log.Errorf("Faile to scp NF: neType=%s, neId=%s, ip=%s", neType, neId, neInfo.Ip) + // services.ResponseInternalServerError500ProcessError(w, err) + // return + // } + // var inputStr string = "n" + // if config.GetYamlConfig().NE.DpkgOverwrite { + // inputStr = "y" + // } + // dpkgCmd := fmt.Sprintf("sudo %s/spawndpkg.sh %s '%s'", + // config.GetYamlConfig().NE.ScpDir, inputStr, filePath) + // err = RunSSHCmd(sshHost, dpkgCmd) + // if err != nil { + // log.Errorf("Faile to execute dpkg command: %s, error: %v", dpkgCmd, err) + // services.ResponseInternalServerError500ProcessError(w, err) + // return + // } + // } else { + // err := global.ErrCMUnknownSoftwareFormat + // log.Error(err) + // services.ResponseInternalServerError500ProcessError(w, err) + // return + // } switch neTypeLower { case "omc": restartCmd := fmt.Sprintf("sudo %s/bin/omcsvc.sh restart", config.GetYamlConfig().NE.OmcDir) diff --git a/misc/rbkpkg.sh b/misc/rbkpkg.sh new file mode 100644 index 00000000..f742bc6e --- /dev/null +++ b/misc/rbkpkg.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +filename="$1" +extension=$(basename "${1}" | awk -F . '{print $NF}') + +case "${extension}" in + deb) + expect <