Commit d95181fa authored by Dan Winship's avatar Dan Winship

Port iptables code to pkg/util/version, don't use semvers

parent bb60f041
...@@ -25,7 +25,7 @@ go_library( ...@@ -25,7 +25,7 @@ go_library(
"//pkg/util/sets:go_default_library", "//pkg/util/sets:go_default_library",
"//pkg/util/slice:go_default_library", "//pkg/util/slice:go_default_library",
"//pkg/util/sysctl:go_default_library", "//pkg/util/sysctl:go_default_library",
"//vendor:github.com/coreos/go-semver/semver", "//pkg/util/version:go_default_library",
"//vendor:github.com/davecgh/go-spew/spew", "//vendor:github.com/davecgh/go-spew/spew",
"//vendor:github.com/golang/glog", "//vendor:github.com/golang/glog",
], ],
......
...@@ -32,7 +32,6 @@ import ( ...@@ -32,7 +32,6 @@ import (
"sync" "sync"
"time" "time"
"github.com/coreos/go-semver/semver"
"github.com/davecgh/go-spew/spew" "github.com/davecgh/go-spew/spew"
"github.com/golang/glog" "github.com/golang/glog"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
...@@ -47,6 +46,7 @@ import ( ...@@ -47,6 +46,7 @@ import (
"k8s.io/kubernetes/pkg/util/sets" "k8s.io/kubernetes/pkg/util/sets"
"k8s.io/kubernetes/pkg/util/slice" "k8s.io/kubernetes/pkg/util/slice"
utilsysctl "k8s.io/kubernetes/pkg/util/sysctl" utilsysctl "k8s.io/kubernetes/pkg/util/sysctl"
utilversion "k8s.io/kubernetes/pkg/util/version"
) )
const ( const (
...@@ -93,20 +93,19 @@ type KernelCompatTester interface { ...@@ -93,20 +93,19 @@ type KernelCompatTester interface {
// an error if it fails to get the iptables version without error, in which // an error if it fails to get the iptables version without error, in which
// case it will also return false. // case it will also return false.
func CanUseIPTablesProxier(iptver IPTablesVersioner, kcompat KernelCompatTester) (bool, error) { func CanUseIPTablesProxier(iptver IPTablesVersioner, kcompat KernelCompatTester) (bool, error) {
minVersion, err := semver.NewVersion(iptablesMinVersion) minVersion, err := utilversion.ParseGeneric(iptablesMinVersion)
if err != nil { if err != nil {
return false, err return false, err
} }
// returns "X.Y.Z"
versionString, err := iptver.GetVersion() versionString, err := iptver.GetVersion()
if err != nil { if err != nil {
return false, err return false, err
} }
version, err := semver.NewVersion(versionString) version, err := utilversion.ParseGeneric(versionString)
if err != nil { if err != nil {
return false, err return false, err
} }
if version.LessThan(*minVersion) { if version.LessThan(minVersion) {
return false, nil return false, nil
} }
......
...@@ -20,7 +20,7 @@ go_library( ...@@ -20,7 +20,7 @@ go_library(
"//pkg/util/dbus:go_default_library", "//pkg/util/dbus:go_default_library",
"//pkg/util/exec:go_default_library", "//pkg/util/exec:go_default_library",
"//pkg/util/sets:go_default_library", "//pkg/util/sets:go_default_library",
"//vendor:github.com/coreos/go-semver/semver", "//pkg/util/version:go_default_library",
"//vendor:github.com/godbus/dbus", "//vendor:github.com/godbus/dbus",
"//vendor:github.com/golang/glog", "//vendor:github.com/golang/glog",
], ],
......
...@@ -23,12 +23,12 @@ import ( ...@@ -23,12 +23,12 @@ import (
"strings" "strings"
"sync" "sync"
"github.com/coreos/go-semver/semver"
godbus "github.com/godbus/dbus" godbus "github.com/godbus/dbus"
"github.com/golang/glog" "github.com/golang/glog"
utildbus "k8s.io/kubernetes/pkg/util/dbus" utildbus "k8s.io/kubernetes/pkg/util/dbus"
utilexec "k8s.io/kubernetes/pkg/util/exec" utilexec "k8s.io/kubernetes/pkg/util/exec"
"k8s.io/kubernetes/pkg/util/sets" "k8s.io/kubernetes/pkg/util/sets"
utilversion "k8s.io/kubernetes/pkg/util/version"
) )
type RulePosition string type RulePosition string
...@@ -40,7 +40,7 @@ const ( ...@@ -40,7 +40,7 @@ const (
// An injectable interface for running iptables commands. Implementations must be goroutine-safe. // An injectable interface for running iptables commands. Implementations must be goroutine-safe.
type Interface interface { type Interface interface {
// GetVersion returns the "X.Y.Z" semver string for iptables. // GetVersion returns the "X.Y.Z" version string for iptables.
GetVersion() (string, error) GetVersion() (string, error)
// EnsureChain checks if the specified chain exists and, if not, creates it. If the chain existed, return true. // EnsureChain checks if the specified chain exists and, if not, creates it. If the chain existed, return true.
EnsureChain(table Table, chain Chain) (bool, error) EnsureChain(table Table, chain Chain) (bool, error)
...@@ -462,45 +462,42 @@ func makeFullArgs(table Table, chain Chain, args ...string) []string { ...@@ -462,45 +462,42 @@ func makeFullArgs(table Table, chain Chain, args ...string) []string {
// Checks if iptables has the "-C" flag // Checks if iptables has the "-C" flag
func getIPTablesHasCheckCommand(vstring string) bool { func getIPTablesHasCheckCommand(vstring string) bool {
minVersion, err := semver.NewVersion(MinCheckVersion) minVersion, err := utilversion.ParseGeneric(MinCheckVersion)
if err != nil { if err != nil {
glog.Errorf("MinCheckVersion (%s) is not a valid version string: %v", MinCheckVersion, err) glog.Errorf("MinCheckVersion (%s) is not a valid version string: %v", MinCheckVersion, err)
return true return true
} }
version, err := semver.NewVersion(vstring) version, err := utilversion.ParseGeneric(vstring)
if err != nil { if err != nil {
glog.Errorf("vstring (%s) is not a valid version string: %v", vstring, err) glog.Errorf("vstring (%s) is not a valid version string: %v", vstring, err)
return true return true
} }
if version.LessThan(*minVersion) { return version.AtLeast(minVersion)
return false
}
return true
} }
// Checks if iptables version has a "wait" flag // Checks if iptables version has a "wait" flag
func getIPTablesWaitFlag(vstring string) []string { func getIPTablesWaitFlag(vstring string) []string {
version, err := semver.NewVersion(vstring) version, err := utilversion.ParseGeneric(vstring)
if err != nil { if err != nil {
glog.Errorf("vstring (%s) is not a valid version string: %v", vstring, err) glog.Errorf("vstring (%s) is not a valid version string: %v", vstring, err)
return nil return nil
} }
minVersion, err := semver.NewVersion(MinWaitVersion) minVersion, err := utilversion.ParseGeneric(MinWaitVersion)
if err != nil { if err != nil {
glog.Errorf("MinWaitVersion (%s) is not a valid version string: %v", MinWaitVersion, err) glog.Errorf("MinWaitVersion (%s) is not a valid version string: %v", MinWaitVersion, err)
return nil return nil
} }
if version.LessThan(*minVersion) { if version.LessThan(minVersion) {
return nil return nil
} }
minVersion, err = semver.NewVersion(MinWait2Version) minVersion, err = utilversion.ParseGeneric(MinWait2Version)
if err != nil { if err != nil {
glog.Errorf("MinWait2Version (%s) is not a valid version string: %v", MinWait2Version, err) glog.Errorf("MinWait2Version (%s) is not a valid version string: %v", MinWait2Version, err)
return nil return nil
} }
if version.LessThan(*minVersion) { if version.LessThan(minVersion) {
return []string{"-w"} return []string{"-w"}
} else { } else {
return []string{"-w2"} return []string{"-w2"}
...@@ -515,7 +512,7 @@ func getIPTablesVersionString(exec utilexec.Interface) (string, error) { ...@@ -515,7 +512,7 @@ func getIPTablesVersionString(exec utilexec.Interface) (string, error) {
if err != nil { if err != nil {
return "", err return "", err
} }
versionMatcher := regexp.MustCompile("v([0-9]+\\.[0-9]+\\.[0-9]+)") versionMatcher := regexp.MustCompile("v([0-9]+(\\.[0-9]+)+)")
match := versionMatcher.FindStringSubmatch(string(bytes)) match := versionMatcher.FindStringSubmatch(string(bytes))
if match == nil { if match == nil {
return "", fmt.Errorf("no iptables version found in string: %s", bytes) return "", fmt.Errorf("no iptables version found in string: %s", bytes)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment