From f7a49591a0416f65bc0765a891fd2b40a19f6d4d Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Thu, 21 May 2015 16:09:27 -0700 Subject: [PATCH] add getter/setter for namespaced labels Signed-off-by: Victor Vieux --- cluster/config.go | 17 +++++++++-------- cluster/config_test.go | 3 ++- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/cluster/config.go b/cluster/config.go index c0381dd261..6046621fde 100644 --- a/cluster/config.go +++ b/cluster/config.go @@ -7,7 +7,8 @@ import ( "github.com/samalba/dockerclient" ) -const namespace = "com.docker.swarm" +// SwarmLabelNamespace defines the key prefix in all custom labels +const SwarmLabelNamespace = "com.docker.swarm" // ContainerConfig is exported // TODO store affinities and constraints in their own fields @@ -37,12 +38,12 @@ func BuildContainerConfig(c dockerclient.ContainerConfig) *ContainerConfig { } // parse affinities from labels (ex. docker run --label 'com.docker.swarm.affinities=["container==redis","image==nginx"]') - if labels, ok := c.Labels[namespace+".affinities"]; ok { + if labels, ok := c.Labels[SwarmLabelNamespace+".affinities"]; ok { json.Unmarshal([]byte(labels), &affinities) } // parse contraints from labels (ex. docker run --label 'com.docker.swarm.constraints=["region==us-east","storage==ssd"]') - if labels, ok := c.Labels[namespace+".constraints"]; ok { + if labels, ok := c.Labels[SwarmLabelNamespace+".constraints"]; ok { json.Unmarshal([]byte(labels), &constraints) } @@ -63,14 +64,14 @@ func BuildContainerConfig(c dockerclient.ContainerConfig) *ContainerConfig { // store affinities in labels if len(affinities) > 0 { if labels, err := json.Marshal(affinities); err == nil { - c.Labels[namespace+".affinities"] = string(labels) + c.Labels[SwarmLabelNamespace+".affinities"] = string(labels) } } // store contraints in labels if len(constraints) > 0 { if labels, err := json.Marshal(constraints); err == nil { - c.Labels[namespace+".constraints"] = string(labels) + c.Labels[SwarmLabelNamespace+".constraints"] = string(labels) } } @@ -80,7 +81,7 @@ func BuildContainerConfig(c dockerclient.ContainerConfig) *ContainerConfig { func (c *ContainerConfig) extractExprs(key string) []string { var exprs []string - if labels, ok := c.Labels[namespace+"."+key]; ok { + if labels, ok := c.Labels[SwarmLabelNamespace+"."+key]; ok { json.Unmarshal([]byte(labels), &exprs) } @@ -90,12 +91,12 @@ func (c *ContainerConfig) extractExprs(key string) []string { // SwarmID extracts the Swarm ID from the Config. // May return an empty string if not set. func (c *ContainerConfig) SwarmID() string { - return c.Labels[namespace+".id"] + return c.Labels[SwarmLabelNamespace+".id"] } // SetSwarmID sets or overrides the Swarm ID in the Config. func (c *ContainerConfig) SetSwarmID(id string) { - c.Labels[namespace+".id"] = id + c.Labels[SwarmLabelNamespace+".id"] = id } // Affinities returns all the affinities from the ContainerConfig diff --git a/cluster/config_test.go b/cluster/config_test.go index 9348deae26..8d8f1d6aa6 100644 --- a/cluster/config_test.go +++ b/cluster/config_test.go @@ -35,9 +35,10 @@ func TestSwarmID(t *testing.T) { assert.Empty(t, config.SwarmID()) config.SetSwarmID("foo") assert.Equal(t, config.SwarmID(), "foo") + assert.Equal(t, config.Labels[SwarmLabelNamespace+".id"], "foo") // Retrieve an existing ID. - config = BuildContainerConfig(dockerclient.ContainerConfig{Labels: map[string]string{namespace + ".id": "test"}}) + config = BuildContainerConfig(dockerclient.ContainerConfig{Labels: map[string]string{SwarmLabelNamespace + ".id": "test"}}) assert.Equal(t, config.SwarmID(), "test") }