github.com/flanksource/konfigadm@v0.12.0/pkg/phases/yum.go (about) 1 package phases 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/flanksource/konfigadm/pkg/types" 8 "github.com/flanksource/konfigadm/pkg/utils" 9 log "github.com/sirupsen/logrus" 10 ) 11 12 type YumPackageManager struct{} 13 14 func (p YumPackageManager) Install(pkg ...string) types.Commands { 15 arg := strings.Join(pkg, " ") 16 // Yum versions are specified using a -, not a = 17 arg = strings.Replace(arg, "=", "-", -1) 18 return types.NewCommand(fmt.Sprintf("yum install -y %s", arg)) 19 } 20 21 func (p YumPackageManager) Update() types.Commands { 22 return types.NewCommand("yum makecache") 23 } 24 25 func (p YumPackageManager) Uninstall(pkg ...string) types.Commands { 26 return types.NewCommand(fmt.Sprintf("yum remove -y %s", strings.Join(pkg, " "))) 27 } 28 29 func (p YumPackageManager) Mark(pkg ...string) types.Commands { 30 return types.Commands{} 31 } 32 33 func (p YumPackageManager) CleanupCaches() types.Commands { 34 return types.Commands{} 35 } 36 37 func (p YumPackageManager) GetInstalledVersion(pkg string) string { 38 pkg = strings.Split(pkg, "=")[0] 39 var version, release, arch string 40 stdout, ok := utils.SafeExec("yum info " + pkg) 41 if !ok { 42 log.Debugf("Failed installation check for %s -> %s", pkg, stdout) 43 return "" 44 } 45 46 if !strings.Contains(stdout, "Installed Packages") { 47 log.Debugf("%s is in db, but is not installed", pkg) 48 return "" 49 } 50 51 for _, line := range strings.Split(stdout, "\n") { 52 if strings.HasPrefix(line, "Version") { 53 version = strings.Split(line, ": ")[1] 54 } 55 if strings.HasPrefix(line, "Release") { 56 release = fmt.Sprintf("-%s", strings.Split(line, ": ")[1]) 57 } 58 if strings.HasPrefix(line, "Arch") { 59 arch = fmt.Sprintf(".%s", strings.Split(line, ": ")[1]) 60 } 61 if strings.HasPrefix(line, "Available") { 62 break 63 } 64 } 65 retval := fmt.Sprintf("%s%s%s", version, release, arch) 66 if retval == "" { 67 log.Debugf("Unable to find version info in " + stdout) 68 } 69 return retval 70 } 71 72 func (p YumPackageManager) GetKernelPackageNames(version string) (string, string) { 73 read, ok := utils.SafeExec("rpm --eval %%{dist}") 74 if !ok { 75 return "", "" 76 } 77 dist := strings.TrimSuffix(read, "\n") 78 read, ok = utils.SafeExec("uname -p") 79 if !ok { 80 return "", "" 81 } 82 arch := strings.TrimSuffix(read, "\n") 83 kernelname := fmt.Sprintf("kernel-%s%s.%s", version, dist, arch) 84 headername := fmt.Sprintf("kernel-devel-%s%s.%s", version, dist, arch) 85 return kernelname, headername 86 } 87 88 func (p YumPackageManager) AddRepo(url string, channel string, versionCodeName string, name string, gpgKey string, extraArgs map[string]string) types.Commands { 89 repo := fmt.Sprintf( 90 `[%s] 91 name=%s 92 enabled=1 93 `, name, name) 94 95 if url != "" { 96 repo += fmt.Sprintf("baseurl = %s\n", url) 97 } 98 99 if gpgKey != "" { 100 repo += fmt.Sprintf(`gpgcheck=1 101 gpgkey=%s 102 `, gpgKey) 103 } 104 105 for k, v := range extraArgs { 106 repo += fmt.Sprintf("%s = %s\n", k, v) 107 } 108 return types.NewCommand(fmt.Sprintf(`cat <<EOF >/etc/yum.repos.d/%s.repo 109 %s 110 EOF`, name, repo)) 111 }