graph/network.go (55 lines of code) (raw):

// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. package graph import ( "bytes" "context" "github.com/Azure/acr-builder/pkg/procmanager" "github.com/pkg/errors" ) const ( // DefaultNetworkName is the default network name. DefaultNetworkName = "acb_default_network" ) var ( errInvalidName = errors.New("name must be specified") ) // Network defines a Docker network. type Network struct { Name string `yaml:"name"` Driver string `yaml:"driver"` Ipv6 bool `yaml:"ipv6"` SkipCreation bool `yaml:"skipCreation"` IsDefault bool `yaml:"isDefault"` } // NewNetwork creates a new network. func NewNetwork(name string, ipv6 bool, driver string, skipCreation bool, isDefault bool) (*Network, error) { if name == "" { return nil, errInvalidName } return &Network{ Name: name, Ipv6: ipv6, Driver: driver, SkipCreation: skipCreation, IsDefault: isDefault, }, nil } // Create creates a new Docker network. func (n *Network) Create(ctx context.Context, pm *procmanager.ProcManager) (string, error) { var buf bytes.Buffer err := pm.Run(ctx, n.getDockerCreateArgs(), nil, &buf, &buf, "") return buf.String(), err } // Delete deletes the Docker network. func (n *Network) Delete(ctx context.Context, pm *procmanager.ProcManager) (string, error) { var buf bytes.Buffer err := pm.Run(ctx, n.getDockerRmArgs(), nil, &buf, &buf, "") return buf.String(), err } func (n *Network) getDockerCreateArgs() []string { args := []string{"docker", "network", "create", n.Name} if n.Ipv6 { args = append(args, "--ipv6") } if n.Driver != "" { args = append(args, "--driver", n.Driver) } return args } func (n *Network) getDockerRmArgs() []string { return []string{"docker", "network", "rm", n.Name} }