Skip to content

Commit 45d8fb3

Browse files
authored
Fix getmesh fetchistioctl darwin arm64 (#66)
Signed-off-by: [email protected] <[email protected]>
1 parent f3e9ba3 commit 45d8fb3

File tree

2 files changed

+83
-12
lines changed

2 files changed

+83
-12
lines changed

internal/istioctl/istioctl.go

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,8 @@ import (
4040
const IstioVersionNoPodRunningMsg = "no running Istio pods in \"istio-system\""
4141

4242
var (
43-
istioDirSuffix = "istio"
44-
istioctlPathFormat = filepath.Join(istioDirSuffix, "%s/bin/istioctl")
45-
istioctlDownloadURLFormatWithArch = "https://istio.tetratelabs.io/getmesh/files/istio-%s-%s-%s.tar.gz"
46-
istioctlDownloadURLFormatWithoutArch = "https://istio.tetratelabs.io/getmesh/files/istio-%s-%s.tar.gz"
43+
istioDirSuffix = "istio"
44+
istioctlPathFormat = filepath.Join(istioDirSuffix, "%s/bin/istioctl")
4745
)
4846

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

240238
// Construct URL from GOOS,GOARCH
241-
var url string
242-
if runtime.GOOS == "darwin" {
243-
url = fmt.Sprintf(istioctlDownloadURLFormatWithoutArch, targetDistribution.String(), "osx")
244-
} else {
245-
url = fmt.Sprintf(istioctlDownloadURLFormatWithArch, targetDistribution.String(), runtime.GOOS, runtime.GOARCH)
246-
}
239+
url := fetchIstioctlURL(targetDistribution, runtime.GOOS, runtime.GOARCH)
247240

248241
// Download
249242
resp, err := http.Get(url)
@@ -286,3 +279,19 @@ func fetchIstioctl(homeDir string, targetDistribution *manifest.IstioDistributio
286279
}
287280
return nil
288281
}
282+
283+
func fetchIstioctlURL(targetDistribution *manifest.IstioDistribution, runtimeGOOS string, runtimeGOARCH string) string {
284+
const (
285+
istioctlDownloadURLFormatWithArch = "https://istio.tetratelabs.io/getmesh/files/istio-%s-%s-%s.tar.gz"
286+
istioctlDownloadURLFormatWithoutArch = "https://istio.tetratelabs.io/getmesh/files/istio-%s-%s.tar.gz"
287+
)
288+
289+
if runtimeGOOS != "darwin" {
290+
return fmt.Sprintf(istioctlDownloadURLFormatWithArch, targetDistribution.String(), runtimeGOOS, runtimeGOARCH)
291+
}
292+
293+
if runtimeGOARCH == "arm64" {
294+
return fmt.Sprintf(istioctlDownloadURLFormatWithArch, targetDistribution.String(), "osx", runtimeGOARCH)
295+
}
296+
return fmt.Sprintf(istioctlDownloadURLFormatWithoutArch, targetDistribution.String(), "osx")
297+
}

internal/istioctl/istioctl_test.go

Lines changed: 64 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,16 @@ func TestFetch(t *testing.T) {
377377
defer os.RemoveAll(dir)
378378
ms := &manifest.Manifest{
379379
IstioDistributions: []*manifest.IstioDistribution{
380+
{
381+
Version: "1.10.3",
382+
Flavor: manifest.IstioDistributionFlavorTetrate,
383+
FlavorVersion: 0,
384+
},
385+
{
386+
Version: "1.10.3",
387+
Flavor: manifest.IstioDistributionFlavorTetrateFIPS,
388+
FlavorVersion: 0,
389+
},
380390
{
381391
Version: "1.7.6",
382392
Flavor: manifest.IstioDistributionFlavorTetrate,
@@ -407,8 +417,8 @@ func TestFetch(t *testing.T) {
407417

408418
t.Run("supported", func(t *testing.T) {
409419
for _, c := range []*manifest.IstioDistribution{
410-
{Version: "1.7.5", Flavor: manifest.IstioDistributionFlavorTetrate, FlavorVersion: 0},
411-
{Version: "1.7.6", Flavor: manifest.IstioDistributionFlavorTetrate, FlavorVersion: 0},
420+
{Version: "1.10.3", Flavor: manifest.IstioDistributionFlavorTetrate, FlavorVersion: 0},
421+
{Version: "1.10.3", Flavor: manifest.IstioDistributionFlavorTetrateFIPS, FlavorVersion: 0},
412422
} {
413423
require.Error(t, checkExist(dir, c))
414424
err = Fetch(dir, c, ms)
@@ -461,3 +471,55 @@ func TestFetch(t *testing.T) {
461471
}
462472
})
463473
}
474+
475+
func TestFetchIstioctlURL(t *testing.T) {
476+
istioDistribution := &manifest.IstioDistribution{
477+
Version: "1.7.6",
478+
Flavor: manifest.IstioDistributionFlavorTetrate,
479+
FlavorVersion: 0,
480+
}
481+
482+
tests := map[string]struct {
483+
istioDistribution *manifest.IstioDistribution
484+
goos string
485+
goarch string
486+
want string
487+
}{
488+
"linux-amd64": {
489+
istioDistribution: istioDistribution,
490+
goos: "linux",
491+
goarch: "amd64",
492+
want: "https://istio.tetratelabs.io/getmesh/files/istio-1.7.6-tetrate-v0-linux-amd64.tar.gz",
493+
},
494+
"linux-arm64": {
495+
istioDistribution: istioDistribution,
496+
goos: "linux",
497+
goarch: "arm64",
498+
want: "https://istio.tetratelabs.io/getmesh/files/istio-1.7.6-tetrate-v0-linux-arm64.tar.gz",
499+
},
500+
"darwin-arm64": {
501+
istioDistribution: istioDistribution,
502+
goos: "darwin",
503+
goarch: "arm64",
504+
want: "https://istio.tetratelabs.io/getmesh/files/istio-1.7.6-tetrate-v0-osx-arm64.tar.gz",
505+
},
506+
"darwin-amd64": {
507+
istioDistribution: istioDistribution,
508+
goos: "darwin",
509+
goarch: "amd64",
510+
want: "https://istio.tetratelabs.io/getmesh/files/istio-1.7.6-tetrate-v0-osx.tar.gz", // No arch
511+
},
512+
"madeupoos-madeuparch": { // Check that follows os-arch convention
513+
istioDistribution: istioDistribution,
514+
goos: "madeupoos",
515+
goarch: "madeuparch",
516+
want: "https://istio.tetratelabs.io/getmesh/files/istio-1.7.6-tetrate-v0-madeupoos-madeuparch.tar.gz",
517+
},
518+
}
519+
for name, tc := range tests {
520+
t.Run(name, func(t *testing.T) {
521+
got := fetchIstioctlURL(tc.istioDistribution, tc.goos, tc.goarch)
522+
require.Equal(t, tc.want, got)
523+
})
524+
}
525+
}

0 commit comments

Comments
 (0)