mirror of https://github.com/docker/docs.git
add getter/setter for namespaced labels
Signed-off-by: Victor Vieux <victorvieux@gmail.com>
This commit is contained in:
parent
90251c050d
commit
f7a49591a0
|
@ -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
|
||||
|
|
|
@ -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")
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue