Move docker specific volume & network settings into backend code (#1956)

... if we want to make them be changed ... it should be an
agent-backend-option
This commit is contained in:
6543 2023-07-09 21:03:19 +02:00 committed by GitHub
parent 89623471fb
commit 5393aa5d3b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 21 additions and 35 deletions

View file

@ -18,6 +18,7 @@ import (
"context" "context"
"io" "io"
"os" "os"
"runtime"
"strings" "strings"
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
@ -41,6 +42,12 @@ type docker struct {
volumes []string volumes []string
} }
const (
networkDriverNAT = "nat"
networkDriverBridge = "bridge"
volumeDriver = "local"
)
// New returns a new Docker Engine. // New returns a new Docker Engine.
func New() backend.Engine { func New() backend.Engine {
return &docker{ return &docker{
@ -97,21 +104,22 @@ func (e *docker) Load(ctx context.Context) error {
func (e *docker) Setup(_ context.Context, conf *backend.Config) error { func (e *docker) Setup(_ context.Context, conf *backend.Config) error {
for _, vol := range conf.Volumes { for _, vol := range conf.Volumes {
_, err := e.client.VolumeCreate(noContext, volume.VolumeCreateBody{ _, err := e.client.VolumeCreate(noContext, volume.VolumeCreateBody{
Name: vol.Name, Name: vol.Name,
Driver: vol.Driver, Driver: volumeDriver,
DriverOpts: vol.DriverOpts,
// Labels: defaultLabels,
}) })
if err != nil { if err != nil {
return err return err
} }
} }
networkDriver := networkDriverBridge
if runtime.GOOS == "windows" {
networkDriver = networkDriverNAT
}
for _, n := range conf.Networks { for _, n := range conf.Networks {
_, err := e.client.NetworkCreate(noContext, n.Name, types.NetworkCreate{ _, err := e.client.NetworkCreate(noContext, n.Name, types.NetworkCreate{
Driver: n.Driver, Driver: networkDriver,
Options: n.DriverOpts,
EnableIPv6: e.enableIPv6, EnableIPv6: e.enableIPv6,
// Labels: defaultLabels,
}) })
if err != nil { if err != nil {
return err return err

View file

@ -2,7 +2,5 @@ package types
// Network defines a container network. // Network defines a container network.
type Network struct { type Network struct {
Name string `json:"name,omitempty"` Name string `json:"name,omitempty"`
Driver string `json:"driver,omitempty"`
DriverOpts map[string]string `json:"driver_opts,omitempty"`
} }

View file

@ -2,7 +2,5 @@ package types
// Volume defines a container volume. // Volume defines a container volume.
type Volume struct { type Volume struct {
Name string `json:"name,omitempty"` Name string `json:"name,omitempty"`
Driver string `json:"driver,omitempty"`
DriverOpts map[string]string `json:"driver_opts,omitempty"`
} }

View file

@ -3,7 +3,6 @@ package compiler
import ( import (
"fmt" "fmt"
"path" "path"
"strings"
backend_types "github.com/woodpecker-ci/woodpecker/pipeline/backend/types" backend_types "github.com/woodpecker-ci/woodpecker/pipeline/backend/types"
"github.com/woodpecker-ci/woodpecker/pipeline/frontend/metadata" "github.com/woodpecker-ci/woodpecker/pipeline/frontend/metadata"
@ -11,17 +10,9 @@ import (
"github.com/woodpecker-ci/woodpecker/shared/constant" "github.com/woodpecker-ci/woodpecker/shared/constant"
) )
// TODO(bradrydzewski) compiler should handle user-defined volumes from YAML
// TODO(bradrydzewski) compiler should handle user-defined networks from YAML
const ( const (
windowsPrefix = "windows/"
defaultCloneName = "clone" defaultCloneName = "clone"
networkDriverNAT = "nat"
networkDriverBridge = "bridge"
nameServices = "services" nameServices = "services"
namePipeline = "pipeline" namePipeline = "pipeline"
) )
@ -114,22 +105,13 @@ func (c *Compiler) Compile(conf *yaml_types.Workflow) (*backend_types.Config, er
// create a default volume // create a default volume
config.Volumes = append(config.Volumes, &backend_types.Volume{ config.Volumes = append(config.Volumes, &backend_types.Volume{
Name: fmt.Sprintf("%s_default", c.prefix), Name: fmt.Sprintf("%s_default", c.prefix),
Driver: "local",
}) })
// create a default network // create a default network
if strings.HasPrefix(c.metadata.Sys.Platform, windowsPrefix) { config.Networks = append(config.Networks, &backend_types.Network{
config.Networks = append(config.Networks, &backend_types.Network{ Name: fmt.Sprintf("%s_default", c.prefix),
Name: fmt.Sprintf("%s_default", c.prefix), })
Driver: networkDriverNAT,
})
} else {
config.Networks = append(config.Networks, &backend_types.Network{
Name: fmt.Sprintf("%s_default", c.prefix),
Driver: networkDriverBridge,
})
}
// create secrets for mask // create secrets for mask
for _, sec := range c.secrets { for _, sec := range c.secrets {