github.com/jenkins-x/jx/v2@v2.1.155/pkg/cloud/openshift/cli.go (about) 1 package openshift 2 3 import ( 4 "fmt" 5 "os" 6 "path/filepath" 7 "runtime" 8 9 "github.com/google/uuid" 10 "github.com/jenkins-x/jx/v2/pkg/packages" 11 "github.com/jenkins-x/jx/v2/pkg/util" 12 ) 13 14 // InstallOc installs oc cli 15 func InstallOc() error { 16 // need to fix the version we download as not able to work out the oc sha in the URL yet 17 sha := "191fece" 18 latestVersion := "3.9.0" 19 20 binDir, err := util.JXBinLocation() 21 if err != nil { 22 return err 23 } 24 binary := "oc" 25 flag, err := packages.ShouldInstallBinary(binary) 26 if err != nil || !flag { 27 return err 28 } 29 30 var arch string 31 clientURL := fmt.Sprintf("https://github.com/openshift/origin/releases/download/v%s/openshift-origin-client-tools-v%s-%s", latestVersion, latestVersion, sha) 32 33 extension := ".zip" 34 switch runtime.GOOS { 35 case "windows": 36 clientURL += "-windows.zip" 37 case "darwin": 38 clientURL += "-mac.zip" 39 default: 40 switch runtime.GOARCH { 41 case "amd64": 42 arch = "64bit" 43 case "386": 44 arch = "32bit" 45 } 46 extension = ".tar.gz" 47 clientURL += fmt.Sprintf("-%s-%s.tar.gz", runtime.GOOS, arch) 48 } 49 50 fullPath := filepath.Join(binDir, binary) 51 tarFile := filepath.Join(binDir, "oc.tgz") 52 if extension == ".zip" { 53 tarFile = filepath.Join(binDir, "oc.zip") 54 } 55 err = packages.DownloadFile(clientURL, tarFile) 56 if err != nil { 57 return err 58 } 59 60 if extension == ".zip" { 61 zipDir := filepath.Join(binDir, "oc-tmp-"+uuid.New().String()) 62 err = os.MkdirAll(zipDir, util.DefaultWritePermissions) 63 if err != nil { 64 return err 65 } 66 err = util.Unzip(tarFile, zipDir) 67 if err != nil { 68 return err 69 } 70 f := filepath.Join(zipDir, binary) 71 exists, err := util.FileExists(f) 72 if err != nil { 73 return err 74 } 75 if !exists { 76 return fmt.Errorf("Could not find file %s inside the downloaded oc.zip!", f) 77 } 78 err = os.Rename(f, fullPath) 79 if err != nil { 80 return err 81 } 82 err = os.RemoveAll(zipDir) 83 } else { 84 err = util.UnTargz(tarFile, binDir, []string{binary, binary}) 85 } 86 if err != nil { 87 return err 88 } 89 err = os.Remove(tarFile) 90 if err != nil { 91 return err 92 } 93 return os.Chmod(fullPath, 0755) 94 }