Merge pull request #1986 from allencloud/move-experiemental-about-rescheduling-out-of-config

move more details about rescheduling out of experimental
This commit is contained in:
Victor Vieux 2016-03-17 11:00:56 -07:00
commit 9de8f77d55
1 changed files with 20 additions and 27 deletions

View File

@ -6,7 +6,6 @@ import (
"fmt"
"strings"
"github.com/docker/swarm/experimental"
"github.com/samalba/dockerclient"
)
@ -87,19 +86,18 @@ func BuildContainerConfig(c dockerclient.ContainerConfig) *ContainerConfig {
json.Unmarshal([]byte(labels), &constraints)
}
if experimental.ENABLED {
// parse reschedule policy from labels (ex. docker run --label 'com.docker.swarm.reschedule-policies=on-node-failure')
if labels, ok := c.Labels[SwarmLabelNamespace+".reschedule-policies"]; ok {
json.Unmarshal([]byte(labels), &reschedulePolicies)
}
}
// parse affinities/constraints/reschedule policies from env (ex. docker run -e affinity:container==redis -e affinity:image==nginx -e constraint:region==us-east -e constraint:storage==ssd -e reschedule:off)
for _, e := range c.Env {
if ok, key, value := parseEnv(e); ok && key == "affinity" {
affinities = append(affinities, value)
} else if ok && key == "constraint" {
constraints = append(constraints, value)
} else if experimental.ENABLED && ok && key == "reschedule" {
} else if ok && key == "reschedule" {
reschedulePolicies = append(reschedulePolicies, value)
} else {
env = append(env, e)
@ -123,14 +121,12 @@ func BuildContainerConfig(c dockerclient.ContainerConfig) *ContainerConfig {
}
}
if experimental.ENABLED {
// store reschedule policies in labels
if len(reschedulePolicies) > 0 {
if labels, err := json.Marshal(reschedulePolicies); err == nil {
c.Labels[SwarmLabelNamespace+".reschedule-policies"] = string(labels)
}
}
}
consolidateResourceFields(&c)
@ -233,8 +229,6 @@ func (c *ContainerConfig) HasReschedulePolicy(p string) bool {
// Validate returns an error if the config isn't valid
func (c *ContainerConfig) Validate() error {
//TODO: add validation for affinities and constraints
if experimental.ENABLED {
reschedulePolicies := c.extractExprs("reschedule-policies")
if len(reschedulePolicies) > 1 {
return errors.New("too many reschedule policies")
@ -249,7 +243,6 @@ func (c *ContainerConfig) Validate() error {
return fmt.Errorf("invalid reschedule policy: %s", reschedulePolicies[0])
}
}
}
return nil
}