From b52306944128c2fa1bba602ced1c63da32ed69db Mon Sep 17 00:00:00 2001 From: johannesa Date: Wed, 17 May 2017 16:41:00 +0200 Subject: [PATCH 1/3] mac address pinning in docker driver This commit adds mac address pining to the docker driver. --- client/driver/docker.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/client/driver/docker.go b/client/driver/docker.go index bea4a3501..7a24d320f 100644 --- a/client/driver/docker.go +++ b/client/driver/docker.go @@ -161,6 +161,7 @@ type DockerDriverConfig struct { Volumes []string `mapstructure:"volumes"` // Host-Volumes to mount in, syntax: /path/to/host/directory:/destination/path/in/container VolumeDriver string `mapstructure:"volume_driver"` // Docker volume driver used for the container's volumes ForcePull bool `mapstructure:"force_pull"` // Always force pull before running image, useful if your tags are mutable + MacAddress string `mapstructure:"mac_address"` // Pin mac address to container } // Validate validates a docker driver config @@ -204,6 +205,7 @@ func NewDockerDriverConfig(task *structs.Task, env *env.TaskEnvironment) (*Docke dconf.DNSServers = env.ParseAndReplace(dconf.DNSServers) dconf.DNSSearchDomains = env.ParseAndReplace(dconf.DNSSearchDomains) dconf.ExtraHosts = env.ParseAndReplace(dconf.ExtraHosts) + dconf.MacAddress = env.ReplaceEnv(dconf.MacAddress) for _, m := range dconf.LabelsRaw { for k, v := range m { @@ -355,6 +357,9 @@ func (d *DockerDriver) Validate(config map[string]interface{}) error { "ipv6_address": &fields.FieldSchema{ Type: fields.TypeString, }, + "mac_address": &fields.FieldSchema{ + Type: fields.TypeString, + }, "pid_mode": &fields.FieldSchema{ Type: fields.TypeString, }, @@ -953,6 +958,12 @@ func (d *DockerDriver) createContainerConfig(ctx *ExecContext, task *structs.Tas hostConfig.NetworkMode, driverConfig.IPv4Address, driverConfig.IPv6Address) } + if driverConfig.MacAddress != "" { + config.MacAddress = driverConfig.MacAddress + d.logger.Printf("[DEBUG] driver.docker: using pinned mac address: %q", + config.MacAddress) + } + return docker.CreateContainerOptions{ Name: containerName, Config: config, From 8dbe9db5393ba4a128842032f7c024a657a143f4 Mon Sep 17 00:00:00 2001 From: johannesa Date: Wed, 17 May 2017 16:48:51 +0200 Subject: [PATCH 2/3] Added snippet for mac address in docs --- website/source/docs/drivers/docker.html.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/website/source/docs/drivers/docker.html.md b/website/source/docs/drivers/docker.html.md index 093c77dcc..060521402 100644 --- a/website/source/docs/drivers/docker.html.md +++ b/website/source/docs/drivers/docker.html.md @@ -157,6 +157,9 @@ The `docker` driver supports the following configuration in the job spec: * `dns_servers` - (Optional) A list of DNS servers for the container to use (e.g. ["8.8.8.8", "8.8.4.4"]). *Docker API v1.10 and above only* +* `mac_address` - (Optional) The mac address for the container to use + (e.g. "02:68:b3:29:da:98"). + * `dns_search_domains` - (Optional) A list of DNS search domains for the container to use. From bdfd0b48108d75fe76be485c5af017fad7bcf1b2 Mon Sep 17 00:00:00 2001 From: johannesa Date: Wed, 17 May 2017 16:51:22 +0200 Subject: [PATCH 3/3] Fixed wrong newline --- client/driver/docker.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/driver/docker.go b/client/driver/docker.go index 7a24d320f..b01dac42e 100644 --- a/client/driver/docker.go +++ b/client/driver/docker.go @@ -960,8 +960,7 @@ func (d *DockerDriver) createContainerConfig(ctx *ExecContext, task *structs.Tas if driverConfig.MacAddress != "" { config.MacAddress = driverConfig.MacAddress - d.logger.Printf("[DEBUG] driver.docker: using pinned mac address: %q", - config.MacAddress) + d.logger.Printf("[DEBUG] driver.docker: using pinned mac address: %q", config.MacAddress) } return docker.CreateContainerOptions{