本文整理汇总了Golang中github.com/coreos/go-semver/semver.NewVersion函数的典型用法代码示例。如果您正苦于以下问题:Golang NewVersion函数的具体用法?Golang NewVersion怎么用?Golang NewVersion使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewVersion函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: checkFleetVersion
func checkFleetVersion() {
output, err := utils.ExecCmdGetOutput("fleetctl")
if err != nil {
log.Fatal("fleetctl is required in PATH")
}
scanner := bufio.NewScanner(strings.NewReader(output))
for scanner.Scan() {
line := scanner.Text()
if strings.TrimSpace(line) == "VERSION:" {
scanner.Scan()
versionString := strings.TrimSpace(scanner.Text())
version, err := semver.NewVersion(versionString)
if err != nil {
log.Error("Cannot parse version of fleetctl", versionString)
os.Exit(1)
}
supported, _ := semver.NewVersion(FLEET_SUPPORTED_VERSION)
if version.LessThan(*supported) {
log.Error("fleetctl version in your path is too old. Require >= " + FLEET_SUPPORTED_VERSION)
os.Exit(1)
}
break
}
}
}
示例2: CanUseIptablesProxier
// CanUseIptablesProxier returns true if we should use the iptables Proxier
// instead of the "classic" userspace Proxier. This is determined by checking
// the iptables version and for the existence of kernel features. It may return
// an error if it fails to get the iptables version without error, in which
// case it will also return false.
func CanUseIptablesProxier(iptver IptablesVersioner) (bool, error) {
minVersion, err := semver.NewVersion(iptablesMinVersion)
if err != nil {
return false, err
}
// returns "X.Y.Z"
versionString, err := iptver.GetVersion()
if err != nil {
return false, err
}
version, err := semver.NewVersion(versionString)
if err != nil {
return false, err
}
if version.LessThan(*minVersion) {
return false, nil
}
// Check for the required sysctls. We don't care about the value, just
// that it exists. If this Proxier is chosen, we'll iniialize it as we
// need.
// TODO: we should inject a sysctl.Interface like we do for iptables
_, err = utilsysctl.GetSysctl(sysctlRouteLocalnet)
if err != nil {
return false, err
}
return true, nil
}
示例3: decideClusterVersion
// decideClusterVersion decides the cluster version based on the versions map.
// The returned version is the min server version in the map, or nil if the min
// version in unknown.
func decideClusterVersion(vers map[string]*version.Versions) *semver.Version {
var cv *semver.Version
lv := semver.Must(semver.NewVersion(version.Version))
for mid, ver := range vers {
if ver == nil {
return nil
}
v, err := semver.NewVersion(ver.Server)
if err != nil {
plog.Errorf("cannot understand the version of member %s (%v)", mid, err)
return nil
}
if lv.LessThan(*v) {
plog.Warningf("the local etcd version %s is not up-to-date", lv.String())
plog.Warningf("member %s has a higher version %s", mid, ver.Server)
}
if cv == nil {
cv = v
} else if v.LessThan(*cv) {
cv = v
}
}
return cv
}
示例4: checkRktVersion
func checkRktVersion() {
output, err := utils.ExecCmdGetOutput("rkt")
if err != nil {
panic("rkt is required in PATH")
}
scanner := bufio.NewScanner(strings.NewReader(output))
for scanner.Scan() {
line := scanner.Text()
if strings.TrimSpace(line) == "VERSION:" {
scanner.Scan()
versionString := strings.TrimSpace(scanner.Text())
version, err := semver.NewVersion(versionString)
if err != nil {
panic("Cannot parse version of rkt" + versionString)
}
supported, _ := semver.NewVersion(RKT_SUPPORTED_VERSION)
if version.LessThan(*supported) {
panic("rkt version in your path is too old. Require >= " + RKT_SUPPORTED_VERSION)
}
break
}
}
}
示例5: getIptablesWaitFlag
// Checks if iptables version has a "wait" flag
func getIptablesWaitFlag(vstring string) []string {
version, err := semver.NewVersion(vstring)
if err != nil {
glog.Errorf("vstring (%s) is not a valid version string: %v", vstring, err)
return nil
}
minVersion, err := semver.NewVersion(MinWaitVersion)
if err != nil {
glog.Errorf("MinWaitVersion (%s) is not a valid version string: %v", MinWaitVersion, err)
return nil
}
if version.LessThan(*minVersion) {
return nil
}
minVersion, err = semver.NewVersion(MinWait2Version)
if err != nil {
glog.Errorf("MinWait2Version (%s) is not a valid version string: %v", MinWait2Version, err)
return nil
}
if version.LessThan(*minVersion) {
return []string{"-w"}
} else {
return []string{"-w2"}
}
}
示例6: TestServerVersion
func TestServerVersion(t *testing.T) {
tests := []struct {
h http.Header
wv *semver.Version
}{
// backward compatibility with etcd 2.0
{
http.Header{},
semver.Must(semver.NewVersion("2.0.0")),
},
{
http.Header{"X-Server-Version": []string{"2.1.0"}},
semver.Must(semver.NewVersion("2.1.0")),
},
{
http.Header{"X-Server-Version": []string{"2.1.0-alpha.0+git"}},
semver.Must(semver.NewVersion("2.1.0-alpha.0+git")),
},
}
for i, tt := range tests {
v := serverVersion(tt.h)
if v.String() != tt.wv.String() {
t.Errorf("#%d: version = %s, want %s", i, v, tt.wv)
}
}
}
示例7: MiddlewareFunc
func (mw *SemVerMiddleware) MiddlewareFunc(handler rest.HandlerFunc) rest.HandlerFunc {
minVersion, err := semver.NewVersion(mw.MinVersion)
if err != nil {
panic(err)
}
maxVersion, err := semver.NewVersion(mw.MaxVersion)
if err != nil {
panic(err)
}
return func(writer rest.ResponseWriter, request *rest.Request) {
version, err := semver.NewVersion(request.PathParam("version"))
if err != nil {
rest.Error(writer, "Invalid version: "+err.Error(), http.StatusBadRequest)
return
}
if version.LessThan(*minVersion) {
rest.Error(writer, "Min supported version is "+minVersion.String(), http.StatusBadRequest)
return
}
if maxVersion.LessThan(*version) {
rest.Error(writer, "Max supported version is "+maxVersion.String(), http.StatusBadRequest)
return
}
request.Env["VERSION"] = version
handler(writer, request)
}
}
示例8: TestCheckStreamSupport
func TestCheckStreamSupport(t *testing.T) {
tests := []struct {
v *semver.Version
t streamType
w bool
}{
// support
{
semver.Must(semver.NewVersion("2.1.0")),
streamTypeMsgAppV2,
true,
},
// ignore patch
{
semver.Must(semver.NewVersion("2.1.9")),
streamTypeMsgAppV2,
true,
},
// ignore prerelease
{
semver.Must(semver.NewVersion("2.1.0-alpha")),
streamTypeMsgAppV2,
true,
},
}
for i, tt := range tests {
if g := checkStreamSupport(tt.v, tt.t); g != tt.w {
t.Errorf("#%d: check = %v, want %v", i, g, tt.w)
}
}
}
示例9: ShouldUseIptablesProxier
// ShouldUseIptablesProxier returns true if we should use the iptables Proxier
// instead of the "classic" userspace Proxier. This is determined by checking
// the iptables version and for the existence of kernel features. It may return
// an error if it fails to get the itpables version without error, in which
// case it will also return false.
func ShouldUseIptablesProxier() (bool, error) {
exec := utilexec.New()
minVersion, err := semver.NewVersion(iptablesMinVersion)
if err != nil {
return false, err
}
// returns "X.X.X", err
versionString, err := utiliptables.GetIptablesVersionString(exec)
if err != nil {
return false, err
}
version, err := semver.NewVersion(versionString)
if err != nil {
return false, err
}
if version.LessThan(*minVersion) {
return false, nil
}
// Check for the required sysctls. We don't care about the value, just
// that it exists. If this Proxier is chosen, we'll iniialize it as we
// need.
_, err = utilsysctl.GetSysctl(sysctlRouteLocalnet)
if err != nil {
return false, err
}
return true, nil
}
示例10: TestDecideClusterVersion
func TestDecideClusterVersion(t *testing.T) {
tests := []struct {
vers map[string]*version.Versions
wdver *semver.Version
}{
{
map[string]*version.Versions{"a": {Server: "2.0.0"}},
semver.Must(semver.NewVersion("2.0.0")),
},
// unknown
{
map[string]*version.Versions{"a": nil},
nil,
},
{
map[string]*version.Versions{"a": {Server: "2.0.0"}, "b": {Server: "2.1.0"}, "c": {Server: "2.1.0"}},
semver.Must(semver.NewVersion("2.0.0")),
},
{
map[string]*version.Versions{"a": {Server: "2.1.0"}, "b": {Server: "2.1.0"}, "c": {Server: "2.1.0"}},
semver.Must(semver.NewVersion("2.1.0")),
},
{
map[string]*version.Versions{"a": nil, "b": {Server: "2.1.0"}, "c": {Server: "2.1.0"}},
nil,
},
}
for i, tt := range tests {
dver := decideClusterVersion(tt.vers)
if !reflect.DeepEqual(dver, tt.wdver) {
t.Errorf("#%d: ver = %+v, want %+v", i, dver, tt.wdver)
}
}
}
示例11: isCompatibleWithCluster
// isCompatibleWithCluster return true if the local member has a compatible version with
// the current running cluster.
// The version is considered as compatible when at least one of the other members in the cluster has a
// cluster version in the range of [MinClusterVersion, Version] and no known members has a cluster version
// out of the range.
// We set this rule since when the local member joins, another member might be offline.
func isCompatibleWithCluster(cl Cluster, local types.ID, rt http.RoundTripper) bool {
vers := getVersions(cl, local, rt)
minV := semver.Must(semver.NewVersion(version.MinClusterVersion))
maxV := semver.Must(semver.NewVersion(version.Version))
maxV = &semver.Version{
Major: maxV.Major,
Minor: maxV.Minor,
}
return isCompatibleWithVers(vers, local, minV, maxV)
}
示例12: checkVersionCompability
// checkVersionCompability checks whether the given version is compatible
// with the local version.
func checkVersionCompability(name string, server, minCluster *semver.Version) error {
localServer := semver.Must(semver.NewVersion(version.Version))
localMinCluster := semver.Must(semver.NewVersion(version.MinClusterVersion))
if compareMajorMinorVersion(server, localMinCluster) == -1 {
return fmt.Errorf("remote version is too low: remote[%s]=%s, local=%s", name, server, localServer)
}
if compareMajorMinorVersion(minCluster, localServer) == 1 {
return fmt.Errorf("local version is too low: remote[%s]=%s, local=%s", name, server, localServer)
}
return nil
}
示例13: GetUpdatePackage
// GetUpdatePackage returns an update package for the instance/application
// provided. The instance details and the application it's running will be
// registered in CoreRoller (or updated if it's already registered).
func (api *API) GetUpdatePackage(instanceID, instanceIP, instanceVersion, appID, groupID string) (*Package, error) {
instance, err := api.RegisterInstance(instanceID, instanceIP, instanceVersion, appID, groupID)
if err != nil {
return nil, ErrRegisterInstanceFailed
}
if instance.Application.Status.Valid {
switch int(instance.Application.Status.Int64) {
case InstanceStatusUpdateGranted, InstanceStatusDownloading, InstanceStatusDownloaded, InstanceStatusInstalled:
return nil, ErrUpdateInProgressOnInstance
}
}
group, err := api.GetGroup(groupID)
if err != nil {
return nil, err
}
if group.Channel == nil || group.Channel.Package == nil {
_ = api.newGroupActivityEntry(activityPackageNotFound, activityWarning, "0.0.0", appID, groupID)
return nil, ErrNoPackageFound
}
instanceSemver, _ := semver.NewVersion(instanceVersion)
packageSemver, _ := semver.NewVersion(group.Channel.Package.Version)
if !instanceSemver.LessThan(*packageSemver) {
return nil, ErrNoUpdatePackageAvailable
}
updatesStats, err := api.getGroupUpdatesStats(group)
if err != nil {
return nil, ErrGetUpdatesStatsFailed
}
if err := api.enforceRolloutPolicy(instance, group, updatesStats); err != nil {
return nil, err
}
if err := api.grantUpdate(instance.ID, appID, group.Channel.Package.Version); err != nil {
return nil, ErrGrantingUpdate
}
if updatesStats.UpdatesToCurrentVersionGranted == 0 {
_ = api.newGroupActivityEntry(activityRolloutStarted, activityInfo, group.Channel.Package.Version, appID, group.ID)
}
if !group.RolloutInProgress {
_ = api.setGroupRolloutInProgress(groupID, true)
}
_ = api.updateInstanceStatus(instance.ID, appID, InstanceStatusUpdateGranted)
return group.Channel.Package, nil
}
示例14: main
func main() {
vA, err := semver.NewVersion(os.Args[1])
if err != nil {
fmt.Println(err.Error())
}
vB, err := semver.NewVersion(os.Args[2])
if err != nil {
fmt.Println(err.Error())
}
fmt.Printf("%s < %s == %t\n", vA, vB, vA.LessThan(*vB))
}
示例15: init
func init() {
sv, err := semver.NewVersion(strings.TrimPrefix(Version, "v"))
if err != nil {
panic(fmt.Sprintf("bad version string: %v", err))
}
SemVersion = *sv
}