Skip to content

Commit 8b27de8

Browse files
authored
Merge pull request #11 from vmware-labs/drivers-tools
Add drivers_tools, custom_isos and addons
2 parents 9fbc1fd + 7502995 commit 8b27de8

27 files changed

+246
-70
lines changed

.github/workflows/tests.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ jobs:
2222
- name: Set up Go
2323
uses: actions/setup-go@v3
2424
with:
25-
go-version: 1.19.3
25+
go-version: 1.21.4
2626

2727
- name: Checkout Code
2828
uses: actions/checkout@v3

api/download.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ import (
77
"github.com/vmware-labs/vmware-customer-connect-sdk/sdk"
88
)
99

10-
func FetchDownloadPayload(slug, subProduct, version, fileName, username, password string, acceptEula bool) (data []sdk.DownloadPayload, err error) {
10+
func FetchDownloadPayload(slug, subProduct, version, fileName, username, password, dlgType string, acceptEula bool) (data []sdk.DownloadPayload, err error) {
1111
if err = EnsureLogin(username, password); err != nil {
1212
return
1313
}
1414

15-
data, err = authenticatedClient.GenerateDownloadPayload(slug, subProduct, version, fileName, acceptEula)
15+
data, err = authenticatedClient.GenerateDownloadPayload(slug, subProduct, version, fileName, dlgType, acceptEula)
1616
if err != nil {
1717
return
1818
}

api/download_test.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414

1515
func TestFetchDownloadLinkVersionGlob(t *testing.T) {
1616
var downloadPayload []sdk.DownloadPayload
17-
downloadPayload, err = FetchDownloadPayload("vmware_tools", "vmtools", "11.*", "VMware-Tools-darwin-*.tar.gz", testing_user, testing_pass, true)
17+
downloadPayload, err = FetchDownloadPayload("vmware_tools", "vmtools", "11.*", "VMware-Tools-darwin-*.tar.gz", testing_user, testing_pass, "PRODUCT_BINARY", true)
1818
require.Nil(t, err)
1919
require.NotEmpty(t, downloadPayload)
2020
assert.NotEmpty(t, downloadPayload[0].DlgType, "Expected response not to be empty")
@@ -29,7 +29,7 @@ func TestFetchDownloadLinkVersionGlob(t *testing.T) {
2929

3030
func TestFetchDownloadPayloadVersionGlobMultiple(t *testing.T) {
3131
var downloadPayload []sdk.DownloadPayload
32-
downloadPayload, err = FetchDownloadPayload("vmware_tools", "vmtools", "11.*", "VMware-Tools-*", testing_user, testing_pass, true)
32+
downloadPayload, err = FetchDownloadPayload("vmware_tools", "vmtools", "11.*", "VMware-Tools-*", testing_user, testing_pass, "PRODUCT_BINARY", true)
3333
require.Nil(t, err)
3434
require.NotEmpty(t, downloadPayload)
3535
assert.NotEmpty(t, downloadPayload[0].DlgType, "Expected response not to be empty")
@@ -38,35 +38,35 @@ func TestFetchDownloadPayloadVersionGlobMultiple(t *testing.T) {
3838

3939
func TestFetchDownloadLinkInvalidVersion(t *testing.T) {
4040
var downloadPayload []sdk.DownloadPayload
41-
downloadPayload, err = FetchDownloadPayload("vmware_tools", "vmtools", "666", "VMware-Tools-darwin-*.tar.gz", testing_user, testing_pass, true)
41+
downloadPayload, err = FetchDownloadPayload("vmware_tools", "vmtools", "666", "VMware-Tools-darwin-*.tar.gz", testing_user, testing_pass, "PRODUCT_BINARY", true)
4242
assert.ErrorIs(t, err, sdk.ErrorInvalidVersion)
4343
assert.Empty(t, downloadPayload, "Expected response to be empty")
4444
}
4545

4646
func TestFetchDownloadLinkNeedEula(t *testing.T) {
4747
var downloadPayload []sdk.DownloadPayload
48-
downloadPayload, err = FetchDownloadPayload("vmware_tools", "vmtools", "11.1.0", "VMware-Tools-darwin-*.tar.gz", testing_user, testing_pass, false)
48+
downloadPayload, err = FetchDownloadPayload("vmware_tools", "vmtools", "11.1.0", "VMware-Tools-darwin-*.tar.gz", testing_user, testing_pass, "PRODUCT_BINARY", false)
4949
assert.ErrorIs(t, err, sdk.ErrorEulaUnaccepted)
5050
assert.Empty(t, downloadPayload, "Expected response to be empty")
5151
}
5252

5353
func TestFetchDownloadLinkNotEntitled(t *testing.T) {
5454
var downloadPayload []sdk.DownloadPayload
55-
downloadPayload, err = FetchDownloadPayload("vmware_nsx_t_data_center", "nsx-t", "3.2.3.1", "nsx-unified-appliance-secondary-*.qcow2", testing_user, testing_pass, true)
55+
downloadPayload, err = FetchDownloadPayload("vmware_nsx_t_data_center", "nsx-t", "3.2.3.1", "nsx-unified-appliance-secondary-*.qcow2", testing_user, testing_pass, "PRODUCT_BINARY", true)
5656
assert.ErrorIs(t, err, sdk.ErrorNotEntitled)
5757
assert.Empty(t, downloadPayload, "Expected response to be empty")
5858
}
5959

6060
func TestGenerateDownloadInvalidVersionGlob(t *testing.T) {
6161
var downloadPayload []sdk.DownloadPayload
62-
downloadPayload, err = FetchDownloadPayload("vmware_tools", "vmtools", "666.*", "VMware-Tools-darwin-*.tar.gz", testing_user, testing_pass, true)
62+
downloadPayload, err = FetchDownloadPayload("vmware_tools", "vmtools", "666.*", "VMware-Tools-darwin-*.tar.gz", testing_user, testing_pass, "PRODUCT_BINARY", true)
6363
assert.ErrorIs(t, err, sdk.ErrorNoMatchingVersions)
6464
assert.Empty(t, downloadPayload, "Expected response to be empty")
6565
}
6666

6767
func TestGenerateDownloadDoubleVersion(t *testing.T) {
6868
var downloadPayload []sdk.DownloadPayload
69-
downloadPayload, err = FetchDownloadPayload("vmware_tools", "vmtools", "*.*", "VMware-Tools-darwin-*.tar.gz", testing_user, testing_pass, true)
69+
downloadPayload, err = FetchDownloadPayload("vmware_tools", "vmtools", "*.*", "VMware-Tools-darwin-*.tar.gz", testing_user, testing_pass, "PRODUCT_BINARY", true)
7070
assert.ErrorIs(t, err, sdk.ErrorMultipleVersionGlob)
7171
assert.Empty(t, downloadPayload, "Expected response to be empty")
7272
}

api/eula.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ import (
88
)
99

1010

11-
func GetEula(slug, subProduct, version, username, password string) (data string, err error) {
11+
func GetEula(slug, subProduct, version, username, password, dlgType string) (data string, err error) {
1212
var productID string
1313
var apiVersions sdk.APIVersions
14-
productID, apiVersions, err = basicClient.GetDlgProduct(slug, subProduct, version)
14+
productID, apiVersions, err = basicClient.GetDlgProduct(slug, subProduct, version, dlgType)
1515
if err != nil {
1616
return
1717
}

api/eula_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -11,25 +11,25 @@ import (
1111
)
1212

1313
func TestGetEula(t *testing.T) {
14-
eulaUrl, err := GetEula("vmware_tools", "vmtools", "11.1.1", testing_user, testing_pass)
14+
eulaUrl, err := GetEula("vmware_tools", "vmtools", "11.1.1", testing_user, testing_pass, "PRODUCT_BINARY")
1515
assert.Nil(t, err)
1616
assert.NotEmpty(t, eulaUrl)
1717
}
1818

1919
func TestGetEulaInvalidSlug(t *testing.T) {
20-
eulaUrl, err := GetEula("tools", "vmtools", "", testing_user, testing_pass)
20+
eulaUrl, err := GetEula("tools", "vmtools", "", testing_user, testing_pass, "PRODUCT_BINARY")
2121
assert.ErrorIs(t, err, sdk.ErrorInvalidSlug)
2222
assert.Empty(t, eulaUrl)
2323
}
2424

2525
func TestGetEulaInvalidSubProduct(t *testing.T) {
26-
eulaUrl, err := GetEula("vmware_tools", "tools", "", testing_user, testing_pass)
26+
eulaUrl, err := GetEula("vmware_tools", "tools", "", testing_user, testing_pass, "PRODUCT_BINARY")
2727
assert.ErrorIs(t, err, sdk.ErrorInvalidSubProduct)
2828
assert.Empty(t, eulaUrl)
2929
}
3030

3131
func TestGetEulaInvalidVersion(t *testing.T) {
32-
eulaUrl, err := GetEula("vmware_tools", "vmtools", "666", testing_user, testing_pass)
32+
eulaUrl, err := GetEula("vmware_tools", "vmtools", "666", testing_user, testing_pass, "PRODUCT_BINARY")
3333
assert.ErrorIs(t, err, sdk.ErrorInvalidVersion)
3434
assert.Empty(t, eulaUrl)
3535
}

api/files.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ type Availability struct {
1515
EligibleToDownload bool
1616
}
1717

18-
func ListFiles(slug, subProduct, version, username, password string) (dlgDetails sdk.DlgDetails, apiVersions sdk.APIVersions, err error) {
18+
func ListFiles(slug, subProduct, version, username, password, dlgType string) (dlgDetails sdk.DlgDetails, apiVersions sdk.APIVersions, err error) {
1919
if err = EnsureLogin(username, password); err != nil {
2020
return
2121
}
2222

2323
var productID string
24-
productID, apiVersions, err = authenticatedClient.GetDlgProduct(slug, subProduct, version)
24+
productID, apiVersions, err = authenticatedClient.GetDlgProduct(slug, subProduct, version, dlgType)
2525
if err != nil {
2626
return
2727
}
@@ -35,8 +35,8 @@ func ListFiles(slug, subProduct, version, username, password string) (dlgDetails
3535
return
3636
}
3737

38-
func ListFilesArray(slug, subProduct, version, username, password string) (data [][]string, availability Availability, apiVersions sdk.APIVersions, err error) {
39-
dlgDetails, apiVersions, err := ListFiles(slug, subProduct, version, username, password)
38+
func ListFilesArray(slug, subProduct, version, username, password, dlgType string) (data [][]string, availability Availability, apiVersions sdk.APIVersions, err error) {
39+
dlgDetails, apiVersions, err := ListFiles(slug, subProduct, version, username, password, dlgType)
4040
if err != nil {
4141
return
4242
}

api/files_test.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -14,33 +14,33 @@ var testing_user = mustEnv("VCC_USER")
1414
var testing_pass = mustEnv("VCC_PASS")
1515

1616
func TestGetFiles(t *testing.T) {
17-
files, availability, apiVersions, err := ListFilesArray("vmware_tools", "vmtools", "11.1.1", testing_user, testing_pass)
17+
files, availability, apiVersions, err := ListFilesArray("vmware_tools", "vmtools", "11.1.1", testing_user, testing_pass, "PRODUCT_BINARY")
1818
assert.Nil(t, err)
1919
assert.Greater(t, len(files), 5, "Expected response to contain at least 5 items")
2020
assert.Equal(t, apiVersions.MinorVersion, "11.1.1")
2121
assert.True(t, availability.EligibleToDownload)
2222
}
2323

2424
func TestGetFilesInvalidSlug(t *testing.T) {
25-
files, _, _, err := ListFilesArray("tools", "vmtools", "", testing_user, testing_pass)
25+
files, _, _, err := ListFilesArray("tools", "vmtools", "", testing_user, testing_pass, "PRODUCT_BINARY")
2626
assert.ErrorIs(t, err, sdk.ErrorInvalidSlug)
2727
assert.Empty(t, files, "Expected response to be empty")
2828
}
2929

3030
func TestGetFilesInvalidSubProduct(t *testing.T) {
31-
files, _, _, err := ListFilesArray("vmware_tools", "tools", "", testing_user, testing_pass)
31+
files, _, _, err := ListFilesArray("vmware_tools", "tools", "", testing_user, testing_pass, "PRODUCT_BINARY")
3232
assert.ErrorIs(t, err, sdk.ErrorInvalidSubProduct)
3333
assert.Empty(t, files, "Expected response to be empty")
3434
}
3535

3636
func TestGetFilesInvalidVersion(t *testing.T) {
37-
files, _, _, err := ListFilesArray("vmware_tools", "vmtools", "666", testing_user, testing_pass)
37+
files, _, _, err := ListFilesArray("vmware_tools", "vmtools", "666", testing_user, testing_pass, "PRODUCT_BINARY")
3838
assert.ErrorIs(t, err, sdk.ErrorInvalidVersion)
3939
assert.Empty(t, files, "Expected response to be empty")
4040
}
4141

4242
func TestGetFilesNotEntitled(t *testing.T) {
43-
files, availability, apiVersions, err := ListFilesArray("vmware_nsx_t_data_center", "nsx-t", "3.2.3.1", testing_user, testing_pass)
43+
files, availability, apiVersions, err := ListFilesArray("vmware_nsx_t_data_center", "nsx-t", "3.2.3.1", testing_user, testing_pass, "PRODUCT_BINARY")
4444
assert.Nil(t, err)
4545
assert.Greater(t, len(files), 5, "Expected response to contain at least 5 items")
4646
assert.Equal(t, apiVersions.MinorVersion, "3.2.3.1")

api/major_versions.go

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// Copyright 2022 VMware, Inc.
2+
// SPDX-License-Identifier: Apache 2.0
3+
4+
package api
5+
6+
import (
7+
"fmt"
8+
"strings"
9+
)
10+
11+
func GetMajorVersionsString(slug string) (majorVersionString string, err error) {
12+
var majorVersionSlice []string
13+
majorVersionSlice, err = basicClient.GetMajorVersionsSlice(slug)
14+
if err != nil {
15+
return
16+
}
17+
majorVersionString = fmt.Sprintf("'%s'", strings.Join(majorVersionSlice,"', '"))
18+
return
19+
}

api/major_versions_test.go

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// Copyright 2022 VMware, Inc.
2+
// SPDX-License-Identifier: Apache 2.0
3+
4+
package api
5+
6+
import (
7+
"testing"
8+
9+
"github.com/stretchr/testify/assert"
10+
"github.com/stretchr/testify/require"
11+
// "github.com/vmware-labs/vmware-customer-connect-sdk/sdk"
12+
)
13+
14+
func TestGetGetMajorVersionsString(t *testing.T) {
15+
var majorVersions string
16+
majorVersions, err := GetMajorVersionsString("vmware_vsphere")
17+
require.Nil(t, err)
18+
assert.Contains(t, majorVersions, "8_0")
19+
}

api/subproducts.go

+3-6
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,12 @@
44
package api
55

66
import (
7-
// "fmt"
8-
// "os"
9-
107
"github.com/vmware-labs/vmware-customer-connect-sdk/sdk"
118
)
129

13-
func ListSubProducts(slug string) (data [][]string, err error) {
10+
func ListSubProducts(slug, dlgType, majorVersion string) (data [][]string, err error) {
1411
var subProducts []sdk.SubProductDetails
15-
subProducts, err = basicClient.GetSubProductsSlice(slug)
12+
subProducts, err = basicClient.GetSubProductsSlice(slug, dlgType, majorVersion)
1613
if err != nil {
1714
return
1815
}
@@ -22,4 +19,4 @@ func ListSubProducts(slug string) (data [][]string, err error) {
2219
}
2320

2421
return
25-
}
22+
}

api/subproducts_test.go

+11-3
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,21 @@ import (
1313

1414
func TestGetSubProducts(t *testing.T) {
1515
var products [][]string
16-
products, err := ListSubProducts("vmware_tools")
16+
products, err := ListSubProducts("vmware_tools", "PRODUCT_BINARY", "")
1717
require.Nil(t, err)
1818
assert.NotEmpty(t, products)
1919
}
2020

21+
func TestGetSubProductsDriversMajorVersion(t *testing.T) {
22+
var products [][]string
23+
products, err := ListSubProducts("vmware_vsphere", "DRIVERS_TOOLS", "8_0")
24+
require.Nil(t, err)
25+
assert.NotEmpty(t, products)
26+
assert.LessOrEqual(t, len(products), 400)
27+
}
28+
2129
func TestGetSubProductsInvalidSlug(t *testing.T) {
22-
versions, err := ListVersions("tools", "vmtools")
30+
products, err := ListSubProducts("tools", "PRODUCT_BINARY", "")
2331
assert.ErrorIs(t, err, sdk.ErrorInvalidSlug)
24-
assert.Empty(t, versions, "Expected response to be empty")
32+
assert.Empty(t, products, "Expected response to be empty")
2533
}

api/versions.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import (
88
"strings"
99
)
1010

11-
func ListVersions(slug, subProduct string) (data string, err error) {
12-
versionArray, err := basicClient.GetVersionSlice(slug, subProduct)
11+
func ListVersions(slug, subProduct, dlgType string) (data string, err error) {
12+
versionArray, err := basicClient.GetVersionSlice(slug, subProduct, dlgType)
1313
if err != nil {
1414
return
1515
}

api/versions_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,19 @@ import (
1212
)
1313

1414
func TestGetVersions(t *testing.T) {
15-
versions, err := ListVersions("vmware_tools", "vmtools")
15+
versions, err := ListVersions("vmware_tools", "vmtools", "PRODUCT_BINARY")
1616
require.Nil(t, err)
1717
assert.Greater(t, len(versions), 10, "Expected response to contain at least 10 items")
1818
}
1919

2020
func TestGetVersionsInvalidSlug(t *testing.T) {
21-
versions, err := ListVersions("tools", "vmtools")
21+
versions, err := ListVersions("tools", "vmtools", "PRODUCT_BINARY")
2222
assert.ErrorIs(t, err, sdk.ErrorInvalidSlug)
2323
assert.Empty(t, versions, "Expected response to be empty")
2424
}
2525

2626
func TestGetVersionsInvalidSubProduct(t *testing.T) {
27-
versions, err := ListVersions("vmware_tools", "tools")
27+
versions, err := ListVersions("vmware_tools", "tools", "PRODUCT_BINARY")
2828
assert.ErrorIs(t, err, sdk.ErrorInvalidSubProduct)
2929
assert.Empty(t, versions, "Expected response to be empty")
3030
}

cmd/docs.go

+3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ const (
1414
getVersions = ` # List of available versions of sub-products vmtools of vmware_tools
1515
vcc get versions -p vmware_tools -s vmtools`
1616

17+
getMajorVersions = ` # List of available major versions of product vmware_tools
18+
vcc get versions -p vmware_tools`
19+
1720
getFiles = ` # List of available files of version 11.3.0 of vmware_tools
1821
vcc get files -p vmware_tools -s vmtools -v 11.3.0`
1922

cmd/download.go

+7-5
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ import (
1818
)
1919

2020
var (
21-
manifestFile string
22-
fileName string
2321
acceptEula bool
24-
outputDir string
22+
fileName string
2523
forceDownload bool
24+
outputDir string
25+
manifestFile string
2626
)
2727

2828
// downloadCmd represents the download command
@@ -36,6 +36,7 @@ Either VCC_USER and VCC_PASS environment variable must be set
3636
or the --user and --pass flags should be added`,
3737
Example: downloadUsage,
3838
Run: func(cmd *cobra.Command, args []string) {
39+
dlgType = validateDlgType(dlgType)
3940
validateCredentials(cmd)
4041
validateOutputDir()
4142
manifestWorkflow := validateDownloadFlags(cmd)
@@ -45,7 +46,7 @@ or the --user and --pass flags should be added`,
4546
downloadFromManifest()
4647
} else {
4748
fmt.Println("Collecting download payload")
48-
downloadPayloads, err := api.FetchDownloadPayload(slug, subProduct, version, fileName, username, password, acceptEula)
49+
downloadPayloads, err := api.FetchDownloadPayload(slug, subProduct, version, fileName, username, password, dlgType, acceptEula)
4950
handleErrors(err)
5051
downloadFiles(downloadPayloads)
5152
}
@@ -71,7 +72,7 @@ func downloadFromManifest() {
7172
fmt.Printf("Collecting download payload for [%s] [%s] [%s] [%s]\n", manifestSpec.Slug, manifestSpec.SubProduct,
7273
manifestSpec.Version, glob)
7374
downloadPayloads, err := api.FetchDownloadPayload(manifestSpec.Slug, manifestSpec.SubProduct, manifestSpec.Version,
74-
glob, username, password, acceptEula)
75+
glob, username, password, dlgType, acceptEula)
7576
handleErrors(err)
7677
allPayloads = append(allPayloads, downloadPayloads)
7778
}
@@ -138,4 +139,5 @@ func init() {
138139
downloadCmd.Flags().StringVarP(&outputDir, "output", "o", "", "Directory to download files to")
139140
downloadCmd.Flags().BoolVarP(&acceptEula, "accepteula", "a", false, "Filename string")
140141
downloadCmd.Flags().BoolVarP(&forceDownload, "forcedownload", "d", false, "(optional) Force a file to be re-downloaded even if it already exists")
142+
downloadCmd.Flags().StringVarP(&dlgType, "type", "t", "product_binary", "(optional) Download type. One of: (product_binary, drivers_tools, custom_iso, addons). Default: product_binary")
141143
}

cmd/eula.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@ Either VCC_USER and VCC_PASS environment variable must be set
2121
or the --user and --pass flags should be added`,
2222
Example: getFiles,
2323
Run: func(cmd *cobra.Command, args []string) {
24+
dlgType = validateDlgType(dlgType)
2425
validateCredentials(cmd)
25-
eula, err := api.GetEula(slug, subProduct, version, username, password)
26+
eula, err := api.GetEula(slug, subProduct, version, username, password, dlgType)
2627
handleErrors(err)
2728
fmt.Printf("Open the URL in your browser: %s\n", eula)
2829
},
@@ -36,4 +37,5 @@ func init() {
3637
eulaCmd.MarkFlagRequired("product")
3738
eulaCmd.MarkFlagRequired("sub-product")
3839
eulaCmd.MarkFlagRequired("version")
40+
eulaCmd.Flags().StringVarP(&dlgType, "type", "t", "product_binary", "(optional) Download type. One of: (product_binary, drivers_tools, custom_iso, addons). Default: product_binary")
3941
}

0 commit comments

Comments
 (0)