From 06b89a91b45d1dfb9743196f72bfdbc31b100f69 Mon Sep 17 00:00:00 2001 From: Brad Rydzewski Date: Tue, 11 Aug 2020 09:03:07 -0400 Subject: [PATCH] support for defining docker network opts --- command/daemon/config.go | 25 +++++++++++++------------ command/daemon/daemon.go | 9 +++++---- engine/compiler/compiler.go | 9 +++++++-- engine/engine.go | 5 +++-- engine/spec.go | 5 +++-- 5 files changed, 31 insertions(+), 22 deletions(-) diff --git a/command/daemon/config.go b/command/daemon/config.go index 1f7cd1e..dde3c61 100644 --- a/command/daemon/config.go +++ b/command/daemon/config.go @@ -42,18 +42,19 @@ type Config struct { } Runner struct { - Name string `envconfig:"DRONE_RUNNER_NAME"` - Capacity int `envconfig:"DRONE_RUNNER_CAPACITY" default:"2"` - Procs int64 `envconfig:"DRONE_RUNNER_MAX_PROCS"` - Environ map[string]string `envconfig:"DRONE_RUNNER_ENVIRON"` - EnvFile string `envconfig:"DRONE_RUNNER_ENV_FILE"` - Secrets map[string]string `envconfig:"DRONE_RUNNER_SECRETS"` - Labels map[string]string `envconfig:"DRONE_RUNNER_LABELS"` - Volumes map[string]string `envconfig:"DRONE_RUNNER_VOLUMES"` - Devices []string `envconfig:"DRONE_RUNNER_DEVICES"` - Networks []string `envconfig:"DRONE_RUNNER_NETWORKS"` - Privileged []string `envconfig:"DRONE_RUNNER_PRIVILEGED_IMAGES"` - Clone string `envconfig:"DRONE_RUNNER_CLONE_IMAGE"` + Name string `envconfig:"DRONE_RUNNER_NAME"` + Capacity int `envconfig:"DRONE_RUNNER_CAPACITY" default:"2"` + Procs int64 `envconfig:"DRONE_RUNNER_MAX_PROCS"` + Environ map[string]string `envconfig:"DRONE_RUNNER_ENVIRON"` + EnvFile string `envconfig:"DRONE_RUNNER_ENV_FILE"` + Secrets map[string]string `envconfig:"DRONE_RUNNER_SECRETS"` + Labels map[string]string `envconfig:"DRONE_RUNNER_LABELS"` + Volumes map[string]string `envconfig:"DRONE_RUNNER_VOLUMES"` + Devices []string `envconfig:"DRONE_RUNNER_DEVICES"` + Networks []string `envconfig:"DRONE_RUNNER_NETWORKS"` + NetworkOpts map[string]string `envconfig:"DRONE_RUNNER_NETWORK_OPTS"` + Privileged []string `envconfig:"DRONE_RUNNER_PRIVILEGED_IMAGES"` + Clone string `envconfig:"DRONE_RUNNER_CLONE_IMAGE"` } Platform struct { diff --git a/command/daemon/daemon.go b/command/daemon/daemon.go index a5876ac..9a88f52 100644 --- a/command/daemon/daemon.go +++ b/command/daemon/daemon.go @@ -120,10 +120,11 @@ func (c *daemonCommand) run(*kingpin.ParseContext) error { config.Limit.Trusted, ), Compiler: &compiler.Compiler{ - Clone: config.Runner.Clone, - Privileged: append(config.Runner.Privileged, compiler.Privileged...), - Networks: config.Runner.Networks, - Volumes: config.Runner.Volumes, + Clone: config.Runner.Clone, + Privileged: append(config.Runner.Privileged, compiler.Privileged...), + Networks: config.Runner.Networks, + NetworkOpts: config.Runner.NetworkOpts, + Volumes: config.Runner.Volumes, Resources: compiler.Resources{ Memory: config.Resources.Memory, MemorySwap: config.Resources.MemorySwap, diff --git a/engine/compiler/compiler.go b/engine/compiler/compiler.go index 81782d8..c54d92c 100644 --- a/engine/compiler/compiler.go +++ b/engine/compiler/compiler.go @@ -73,6 +73,10 @@ type Compiler struct { // attached to each pipeline container. Networks []string + // NetworkOpts provides a set of network options that + // are used when creating the docker network. + NetworkOpts map[string]string + // Volumes provides a set of volumes that should be // mounted to each pipeline container. Volumes map[string]string @@ -154,8 +158,9 @@ func (c *Compiler) Compile(ctx context.Context, args runtime.CompilerArgs) runti spec := &engine.Spec{ Network: engine.Network{ - ID: random(), - Labels: labels, + ID: random(), + Labels: labels, + Options: c.NetworkOpts, }, Platform: engine.Platform{ OS: pipeline.Platform.OS, diff --git a/engine/engine.go b/engine/engine.go index b970aa8..4f283e1 100644 --- a/engine/engine.go +++ b/engine/engine.go @@ -83,8 +83,9 @@ func (e *Docker) Setup(ctx context.Context, specv runtime.Spec) error { driver = "nat" } _, err := e.client.NetworkCreate(ctx, spec.Network.ID, types.NetworkCreate{ - Driver: driver, - Labels: spec.Network.Labels, + Driver: driver, + Options: spec.Network.Options, + Labels: spec.Network.Labels, }) return errors.TrimExtraInfo(err) diff --git a/engine/spec.go b/engine/spec.go index 414d165..9ad219a 100644 --- a/engine/spec.go +++ b/engine/spec.go @@ -117,8 +117,9 @@ type ( // Network that is created and attached to containers Network struct { - ID string `json:"id,omitempty"` - Labels map[string]string `json:"labels,omitempty"` + ID string `json:"id,omitempty"` + Labels map[string]string `json:"labels,omitempty"` + Options map[string]string `json:"options,omitempty"` } // Auth defines dockerhub authentication credentials.