15
15
package machine
16
16
17
17
import (
18
+ "strconv"
19
+ "strings"
20
+
18
21
"github.com/coreos/fleet/log"
19
22
"github.com/coreos/fleet/pkg"
20
23
)
@@ -38,8 +41,81 @@ func HasMetadata(state *MachineState, metadata map[string]pkg.Set) bool {
38
41
if values .Contains (local ) {
39
42
log .Debugf ("Local Metadata(%s) meets requirement" , key )
40
43
} else {
41
- log .Debugf ("Local Metadata(%s) does not match requirement" , key )
42
- return false
44
+ vs := values .Values ()
45
+ for _ , v := range vs {
46
+ if index := strings .Index (v , "<=" ); strings .Contains (v , "<=" ) && (index == 0 ) {
47
+ need , err1 := strconv .Atoi (v [2 :])
48
+ have , err2 := strconv .Atoi (local )
49
+ if err1 == nil && err2 == nil {
50
+ if have <= need {
51
+ log .Debugf ("Local Metadata(%s) meets requirement" , key )
52
+ continue
53
+ } else {
54
+ log .Debugf ("Local Metadata(%s) does not match requirement" , key )
55
+ return false
56
+ }
57
+ } else {
58
+ log .Debugf ("Local Metadata(%s) does not match requirement" , key )
59
+ return false
60
+ }
61
+ } else if index := strings .Index (v , ">=" ); strings .Contains (v , ">=" ) && (index == 0 ) {
62
+ need , err1 := strconv .Atoi (v [2 :])
63
+ have , err2 := strconv .Atoi (local )
64
+ if err1 == nil && err2 == nil {
65
+ if have >= need {
66
+ log .Debugf ("Local Metadata(%s) meets requirement" , key )
67
+ continue
68
+ } else {
69
+ log .Debugf ("Local Metadata(%s) does not match requirement" , key )
70
+ return false
71
+ }
72
+ } else {
73
+ log .Debugf ("Local Metadata(%s) does not match requirement" , key )
74
+ return false
75
+ }
76
+ } else if index := strings .Index (v , ">" ); strings .Contains (v , ">" ) && (index == 0 ) {
77
+ need , err1 := strconv .Atoi (v [1 :])
78
+ have , err2 := strconv .Atoi (local )
79
+ if err1 == nil && err2 == nil {
80
+ if have > need {
81
+ log .Debugf ("Local Metadata(%s) meets requirement" , key )
82
+ continue
83
+ } else {
84
+ log .Debugf ("Local Metadata(%s) does not match requirement" , key )
85
+ return false
86
+ }
87
+ } else {
88
+ log .Debugf ("Local Metadata(%s) does not match requirement" , key )
89
+ return false
90
+ }
91
+ } else if index := strings .Index (v , "<" ); strings .Contains (v , "<" ) && (index == 0 ) {
92
+ need , err1 := strconv .Atoi (v [1 :])
93
+ have , err2 := strconv .Atoi (local )
94
+ if err1 == nil && err2 == nil {
95
+ if have < need {
96
+ log .Debugf ("Local Metadata(%s) meets requirement" , key )
97
+ continue
98
+ } else {
99
+ log .Debugf ("Local Metadata(%s) does not match requirement" , key )
100
+ return false
101
+ }
102
+ } else {
103
+ log .Debugf ("Local Metadata(%s) does not match requirement" , key )
104
+ return false
105
+ }
106
+ } else if index := strings .Index (v , "!=" ); strings .Contains (v , "!=" ) && (index == 0 ) {
107
+ if v [2 :] != local {
108
+ log .Debugf ("Local Metadata(%s) meets requirement" , key )
109
+ continue
110
+ } else {
111
+ log .Debugf ("Local Metadata(%s) does not match requirement" , key )
112
+ return false
113
+ }
114
+ } else {
115
+ log .Debugf ("Local Metadata(%s) does not match requirement" , key )
116
+ return false
117
+ }
118
+ }
43
119
}
44
120
}
45
121
0 commit comments