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  }