Skip to content

Commit

Permalink
Fix getmesh fetchistioctl darwin arm64 (#66)
Browse files Browse the repository at this point in the history
Signed-off-by: morfeo8marc@gmail.com <marcnavarro@tetrate.io>
  • Loading branch information
toffentoffen authored Aug 25, 2021
1 parent f3e9ba3 commit 45d8fb3
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 12 deletions.
29 changes: 19 additions & 10 deletions internal/istioctl/istioctl.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,8 @@ import (
const IstioVersionNoPodRunningMsg = "no running Istio pods in \"istio-system\""

var (
istioDirSuffix = "istio"
istioctlPathFormat = filepath.Join(istioDirSuffix, "%s/bin/istioctl")
istioctlDownloadURLFormatWithArch = "https://istio.tetratelabs.io/getmesh/files/istio-%s-%s-%s.tar.gz"
istioctlDownloadURLFormatWithoutArch = "https://istio.tetratelabs.io/getmesh/files/istio-%s-%s.tar.gz"
istioDirSuffix = "istio"
istioctlPathFormat = filepath.Join(istioDirSuffix, "%s/bin/istioctl")
)

func GetIstioctlPath(homeDir string, distribution *manifest.IstioDistribution) string {
Expand Down Expand Up @@ -238,12 +236,7 @@ func fetchIstioctl(homeDir string, targetDistribution *manifest.IstioDistributio
}

// Construct URL from GOOS,GOARCH
var url string
if runtime.GOOS == "darwin" {
url = fmt.Sprintf(istioctlDownloadURLFormatWithoutArch, targetDistribution.String(), "osx")
} else {
url = fmt.Sprintf(istioctlDownloadURLFormatWithArch, targetDistribution.String(), runtime.GOOS, runtime.GOARCH)
}
url := fetchIstioctlURL(targetDistribution, runtime.GOOS, runtime.GOARCH)

// Download
resp, err := http.Get(url)
Expand Down Expand Up @@ -286,3 +279,19 @@ func fetchIstioctl(homeDir string, targetDistribution *manifest.IstioDistributio
}
return nil
}

func fetchIstioctlURL(targetDistribution *manifest.IstioDistribution, runtimeGOOS string, runtimeGOARCH string) string {
const (
istioctlDownloadURLFormatWithArch = "https://istio.tetratelabs.io/getmesh/files/istio-%s-%s-%s.tar.gz"
istioctlDownloadURLFormatWithoutArch = "https://istio.tetratelabs.io/getmesh/files/istio-%s-%s.tar.gz"
)

if runtimeGOOS != "darwin" {
return fmt.Sprintf(istioctlDownloadURLFormatWithArch, targetDistribution.String(), runtimeGOOS, runtimeGOARCH)
}

if runtimeGOARCH == "arm64" {
return fmt.Sprintf(istioctlDownloadURLFormatWithArch, targetDistribution.String(), "osx", runtimeGOARCH)
}
return fmt.Sprintf(istioctlDownloadURLFormatWithoutArch, targetDistribution.String(), "osx")
}
66 changes: 64 additions & 2 deletions internal/istioctl/istioctl_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,16 @@ func TestFetch(t *testing.T) {
defer os.RemoveAll(dir)
ms := &manifest.Manifest{
IstioDistributions: []*manifest.IstioDistribution{
{
Version: "1.10.3",
Flavor: manifest.IstioDistributionFlavorTetrate,
FlavorVersion: 0,
},
{
Version: "1.10.3",
Flavor: manifest.IstioDistributionFlavorTetrateFIPS,
FlavorVersion: 0,
},
{
Version: "1.7.6",
Flavor: manifest.IstioDistributionFlavorTetrate,
Expand Down Expand Up @@ -407,8 +417,8 @@ func TestFetch(t *testing.T) {

t.Run("supported", func(t *testing.T) {
for _, c := range []*manifest.IstioDistribution{
{Version: "1.7.5", Flavor: manifest.IstioDistributionFlavorTetrate, FlavorVersion: 0},
{Version: "1.7.6", Flavor: manifest.IstioDistributionFlavorTetrate, FlavorVersion: 0},
{Version: "1.10.3", Flavor: manifest.IstioDistributionFlavorTetrate, FlavorVersion: 0},
{Version: "1.10.3", Flavor: manifest.IstioDistributionFlavorTetrateFIPS, FlavorVersion: 0},
} {
require.Error(t, checkExist(dir, c))
err = Fetch(dir, c, ms)
Expand Down Expand Up @@ -461,3 +471,55 @@ func TestFetch(t *testing.T) {
}
})
}

func TestFetchIstioctlURL(t *testing.T) {
istioDistribution := &manifest.IstioDistribution{
Version: "1.7.6",
Flavor: manifest.IstioDistributionFlavorTetrate,
FlavorVersion: 0,
}

tests := map[string]struct {
istioDistribution *manifest.IstioDistribution
goos string
goarch string
want string
}{
"linux-amd64": {
istioDistribution: istioDistribution,
goos: "linux",
goarch: "amd64",
want: "https://istio.tetratelabs.io/getmesh/files/istio-1.7.6-tetrate-v0-linux-amd64.tar.gz",
},
"linux-arm64": {
istioDistribution: istioDistribution,
goos: "linux",
goarch: "arm64",
want: "https://istio.tetratelabs.io/getmesh/files/istio-1.7.6-tetrate-v0-linux-arm64.tar.gz",
},
"darwin-arm64": {
istioDistribution: istioDistribution,
goos: "darwin",
goarch: "arm64",
want: "https://istio.tetratelabs.io/getmesh/files/istio-1.7.6-tetrate-v0-osx-arm64.tar.gz",
},
"darwin-amd64": {
istioDistribution: istioDistribution,
goos: "darwin",
goarch: "amd64",
want: "https://istio.tetratelabs.io/getmesh/files/istio-1.7.6-tetrate-v0-osx.tar.gz", // No arch
},
"madeupoos-madeuparch": { // Check that follows os-arch convention
istioDistribution: istioDistribution,
goos: "madeupoos",
goarch: "madeuparch",
want: "https://istio.tetratelabs.io/getmesh/files/istio-1.7.6-tetrate-v0-madeupoos-madeuparch.tar.gz",
},
}
for name, tc := range tests {
t.Run(name, func(t *testing.T) {
got := fetchIstioctlURL(tc.istioDistribution, tc.goos, tc.goarch)
require.Equal(t, tc.want, got)
})
}
}

0 comments on commit 45d8fb3

Please sign in to comment.