Skip to content

Instantly share code, notes, and snippets.

@jtopjian
Created July 28, 2017 05:49
Show Gist options
  • Save jtopjian/bf12ebcd5b10ed02871e2a1913ec6ca0 to your computer and use it in GitHub Desktop.
Save jtopjian/bf12ebcd5b10ed02871e2a1913ec6ca0 to your computer and use it in GitHub Desktop.
example microversion functions
package main
import (
"fmt"
"regexp"
"strconv"
"strings"
)
func validMicroversion(mv string) (err error) {
if mv == "latest" {
return
}
mvRe := regexp.MustCompile("^\\d+\\.\\d+$")
if v := mvRe.MatchString(mv); v {
return
}
err = fmt.Errorf("Invalid microversion specified")
return
}
func splitMicroversion(mv string) (major, minor int) {
if err := validMicroversion(mv); err != nil {
return
}
mvParts := strings.Split(mv, ".")
major, _ = strconv.Atoi(mvParts[0])
minor, _ = strconv.Atoi(mvParts[1])
return
}
func compatibleMicroversion(minimumMV, requestedMV string) (err error) {
if requestedMV == "latest" {
return
}
err = validMicroversion(requestedMV)
if err != nil {
return
}
minimumMajor, minimumMinor := splitMicroversion(minimumMV)
requestedMajor, requestedMinor := splitMicroversion(requestedMV)
if requestedMajor >= minimumMajor && requestedMinor >= minimumMinor {
return
}
err = fmt.Errorf("Incompatible microversion")
return
}
func main() {
min := "2.5"
versions := []string{"2.1", "2.37", "2.4.2", "2.5", "v2.5", "latest"}
for _, v := range versions {
err := compatibleMicroversion(min, v)
fmt.Println(v, err)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment