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"
|
"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
|
||||||
|
|
|
@ -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")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue