add getter/setter for namespaced labels

Signed-off-by: Victor Vieux <victorvieux@gmail.com>
This commit is contained in:
Victor Vieux 2015-05-21 16:09:27 -07:00
parent 90251c050d
commit f7a49591a0
2 changed files with 11 additions and 9 deletions

View File

@ -7,7 +7,8 @@ import (
"github.com/samalba/dockerclient" "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 // ContainerConfig is exported
// TODO store affinities and constraints in their own fields // 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"]') // 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) json.Unmarshal([]byte(labels), &affinities)
} }
// parse contraints from labels (ex. docker run --label 'com.docker.swarm.constraints=["region==us-east","storage==ssd"]') // 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) json.Unmarshal([]byte(labels), &constraints)
} }
@ -63,14 +64,14 @@ func BuildContainerConfig(c dockerclient.ContainerConfig) *ContainerConfig {
// store affinities in labels // store affinities in labels
if len(affinities) > 0 { if len(affinities) > 0 {
if labels, err := json.Marshal(affinities); err == nil { if labels, err := json.Marshal(affinities); err == nil {
c.Labels[namespace+".affinities"] = string(labels) c.Labels[SwarmLabelNamespace+".affinities"] = string(labels)
} }
} }
// store contraints in labels // store contraints in labels
if len(constraints) > 0 { if len(constraints) > 0 {
if labels, err := json.Marshal(constraints); err == nil { 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 { func (c *ContainerConfig) extractExprs(key string) []string {
var exprs []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) json.Unmarshal([]byte(labels), &exprs)
} }
@ -90,12 +91,12 @@ func (c *ContainerConfig) extractExprs(key string) []string {
// SwarmID extracts the Swarm ID from the Config. // SwarmID extracts the Swarm ID from the Config.
// May return an empty string if not set. // May return an empty string if not set.
func (c *ContainerConfig) SwarmID() string { 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. // SetSwarmID sets or overrides the Swarm ID in the Config.
func (c *ContainerConfig) SetSwarmID(id string) { func (c *ContainerConfig) SetSwarmID(id string) {
c.Labels[namespace+".id"] = id c.Labels[SwarmLabelNamespace+".id"] = id
} }
// Affinities returns all the affinities from the ContainerConfig // Affinities returns all the affinities from the ContainerConfig

View File

@ -35,9 +35,10 @@ func TestSwarmID(t *testing.T) {
assert.Empty(t, config.SwarmID()) assert.Empty(t, config.SwarmID())
config.SetSwarmID("foo") config.SetSwarmID("foo")
assert.Equal(t, config.SwarmID(), "foo") assert.Equal(t, config.SwarmID(), "foo")
assert.Equal(t, config.Labels[SwarmLabelNamespace+".id"], "foo")
// Retrieve an existing ID. // 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") assert.Equal(t, config.SwarmID(), "test")
} }