mirror of https://github.com/docker/docs.git
Add support for soft constraints
Signed-off-by: sivaram mothiki <sivaram@opdemand.com>
This commit is contained in:
parent
f9e82918b7
commit
cfbbb0c9cb
|
@ -36,6 +36,9 @@ func (f *ConstraintFilter) Filter(config *dockerclient.ContainerConfig, nodes []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(candidates) == 0 {
|
if len(candidates) == 0 {
|
||||||
|
if constraint.isSoft {
|
||||||
|
return nodes, nil
|
||||||
|
}
|
||||||
return nil, fmt.Errorf("unable to find a node that satisfies %s%s%s", constraint.key, OPERATORS[constraint.operator], constraint.value)
|
return nil, fmt.Errorf("unable to find a node that satisfies %s%s%s", constraint.key, OPERATORS[constraint.operator], constraint.value)
|
||||||
}
|
}
|
||||||
nodes = candidates
|
nodes = candidates
|
||||||
|
|
|
@ -246,3 +246,35 @@ func TestUnsupportedOperators(t *testing.T) {
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
assert.Len(t, result, 0)
|
assert.Len(t, result, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFilterSoftConstraint(t *testing.T) {
|
||||||
|
var (
|
||||||
|
f = ConstraintFilter{}
|
||||||
|
nodes = testFixtures()
|
||||||
|
result []cluster.Node
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
|
||||||
|
result, err = f.Filter(&dockerclient.ContainerConfig{Env: []string{"constraint:node==~node-1-name"}}, nodes)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Len(t, result, 1)
|
||||||
|
assert.Equal(t, result[0], nodes[1])
|
||||||
|
|
||||||
|
result, err = f.Filter(&dockerclient.ContainerConfig{Env: []string{`constraint:name!=~/(?i)abc*/`}}, nodes)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Len(t, result, 4)
|
||||||
|
|
||||||
|
// Check not with globber pattern
|
||||||
|
result, err = f.Filter(&dockerclient.ContainerConfig{Env: []string{"constraint:region!=~us*"}}, nodes)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Len(t, result, 2)
|
||||||
|
|
||||||
|
result, err = f.Filter(&dockerclient.ContainerConfig{Env: []string{"constraint:region!=~can*"}}, nodes)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Len(t, result, 4)
|
||||||
|
|
||||||
|
// Check matching
|
||||||
|
result, err = f.Filter(&dockerclient.ContainerConfig{Env: []string{"constraint:region==~us~"}}, nodes)
|
||||||
|
assert.Error(t, err)
|
||||||
|
assert.Len(t, result, 0)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue