Skip to content

Commit

Permalink
Support GKE's weird 10+ versions
Browse files Browse the repository at this point in the history
Signed-off-by: liz <liz@heptio.com>
  • Loading branch information
liztio committed Jul 24, 2018
1 parent a534ae0 commit 76c6ca7
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 7 deletions.
20 changes: 14 additions & 6 deletions cmd/sonobuoy/app/imageversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,11 @@ func (c *ConformanceImageVersion) Set(str string) error {
case ConformanceImageVersionLatest:
*c = ConformanceImageVersionLatest
default:
if err := validateVersion(str); err != nil {
version, err := validateVersion(str)
if err != nil {
return err
}
*c = ConformanceImageVersion(str)
*c = ConformanceImageVersion(version.String())
}

return nil
Expand All @@ -77,19 +78,25 @@ func (c *ConformanceImageVersion) Get(client discovery.ServerVersionInterface) (
return "", errors.Wrap(err, "couldn't retrieve server version")
}

if err := validateVersion(version.GitVersion); err != nil {
parsedVersion, err := validateVersion(version.GitVersion)
if err != nil {
return "", err
}

segments := parsedVersion.Segments()
if len(segments) < 2 {
return "", fmt.Errorf("version %q only has %d segments, need at least 2", version.GitVersion, len(segments))
}

// NOTE: Until the kube-conformance container is pushed upstream we can't
// guarantee alignment with exact versioning see https://github.com/heptio/kube-conformance/issues/25
// for more details
return fmt.Sprintf("v%s.%s", version.Major, version.Minor), nil
return fmt.Sprintf("v%d.%d", segments[0], segments[1]), nil
}
return string(*c), nil
}

func validateVersion(v string) error {
func validateVersion(v string) (*version.Version, error) {
version, err := version.NewVersion(v)
if err == nil {
if version.Metadata() != "" || version.Prerelease() != "" {
Expand All @@ -98,5 +105,6 @@ func validateVersion(v string) error {
err = errors.New("version must start with v")
}
}
return errors.Wrapf(err, "version %q is invalid", v)

return version, errors.Wrapf(err, "version %q is invalid", v)
}
21 changes: 20 additions & 1 deletion cmd/sonobuoy/app/imageversion_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,11 @@ func TestSetConformanceImageVersion(t *testing.T) {
version: "v1.11.0-beta.2.78+e0b33dbc2bde88",
error: false,
},
{
name: "version with plus",
version: "v1.10+",
error: true,
},
}

for _, test := range tests {
Expand Down Expand Up @@ -106,6 +111,14 @@ func TestGetConformanceImageVersion(t *testing.T) {
},
}

gkeServerVersion := &fakeServerVersionInterface{
version: version.Info{
Major: "1",
Minor: "10+",
GitVersion: "v1.10.5-gke.3",
},
}

brokenServerVersion := &fakeServerVersionInterface{
err: errors.New("can't connect"),
}
Expand All @@ -131,12 +144,18 @@ func TestGetConformanceImageVersion(t *testing.T) {
error: true,
},
{
name: "beta server version throws error",
name: "beta server version throws warning",
version: "auto",
serverVersion: betaServerVersion,
warning: true,
expected: "v1.11",
},
{
name: "gke server strips plus sign",
version: "auto",
serverVersion: gkeServerVersion,
expected: "v1.10",
},
{
name: "set version ignores server version",
version: "v1.10.2",
Expand Down

0 comments on commit 76c6ca7

Please sign in to comment.