diff --git a/libnetwork/config/config.go b/libnetwork/config/config.go index 6a8a354912..637703f1eb 100644 --- a/libnetwork/config/config.go +++ b/libnetwork/config/config.go @@ -4,6 +4,7 @@ import ( "strings" "github.com/BurntSushi/toml" + "github.com/docker/libnetwork/netlabel" ) // Config encapsulates configurations of various Libnetwork components @@ -18,6 +19,7 @@ type DaemonCfg struct { Debug bool DefaultNetwork string DefaultDriver string + Labels []string } // ClusterCfg represents cluster configuration @@ -66,6 +68,17 @@ func OptionDefaultDriver(dd string) Option { } } +// OptionLabels function returns an option setter for labels +func OptionLabels(labels []string) Option { + return func(c *Config) { + for _, label := range labels { + if strings.HasPrefix(label, netlabel.Prefix) { + c.Daemon.Labels = append(c.Daemon.Labels, label) + } + } + } +} + // OptionKVProvider function returns an option setter for kvstore provider func OptionKVProvider(provider string) Option { return func(c *Config) { diff --git a/libnetwork/config/config_test.go b/libnetwork/config/config_test.go index 8257270e2a..4820db040f 100644 --- a/libnetwork/config/config_test.go +++ b/libnetwork/config/config_test.go @@ -1,8 +1,10 @@ package config import ( + "strings" "testing" + "github.com/docker/libnetwork/netlabel" _ "github.com/docker/libnetwork/netutils" ) @@ -19,3 +21,23 @@ func TestConfig(t *testing.T) { t.Fatal("Error parsing a valid configuration file :", err) } } + +func TestOptionsLabels(t *testing.T) { + c := &Config{} + l := []string{ + "com.docker.network.key1=value1", + "com.docker.storage.key1=value1", + "com.docker.network.driver.key1=value1", + "com.docker.network.driver.key2=value2", + } + f := OptionLabels(l) + f(c) + if len(c.Daemon.Labels) != 3 { + t.Fatalf("Expecting 3 labels, seen %d", len(c.Daemon.Labels)) + } + for _, l := range c.Daemon.Labels { + if !strings.HasPrefix(l, netlabel.Prefix) { + t.Fatalf("config must accept only libnetwork labels. Not : %s", l) + } + } +} diff --git a/libnetwork/netlabel/labels.go b/libnetwork/netlabel/labels.go index adbabbc475..799ef5a08a 100644 --- a/libnetwork/netlabel/labels.go +++ b/libnetwork/netlabel/labels.go @@ -1,18 +1,24 @@ package netlabel const ( + // Prefix constant marks the reserved label space for libnetwork + Prefix = "com.docker.network" + + // DriverPrefix constant marks the reserved label space for libnetwork drivers + DriverPrefix = Prefix + ".driver" + // GenericData constant that helps to identify an option as a Generic constant - GenericData = "io.docker.network.generic" + GenericData = Prefix + ".generic" // PortMap constant represents Port Mapping - PortMap = "io.docker.network.endpoint.portmap" + PortMap = Prefix + ".portmap" // MacAddress constant represents Mac Address config of a Container - MacAddress = "io.docker.network.endpoint.macaddress" + MacAddress = Prefix + ".endpoint.macaddress" // ExposedPorts constant represents exposedports of a Container - ExposedPorts = "io.docker.network.endpoint.exposedports" + ExposedPorts = Prefix + ".endpoint.exposedports" //EnableIPv6 constant represents enabling IPV6 at network level - EnableIPv6 = "io.docker.network.enable_ipv6" + EnableIPv6 = Prefix + ".enable_ipv6" )