create cluster network if not present

pull/227/head
iwilltry42 5 years ago
parent eb9d14fe47
commit 30a98cce38
  1. 7
      pkg/cluster/cluster.go
  2. 5
      pkg/runtimes/containerd/network.go
  3. 30
      pkg/runtimes/docker/network.go
  4. 1
      pkg/runtimes/runtime.go
  5. 6
      pkg/types/types.go

@ -41,6 +41,13 @@ func CreateCluster(cluster *k3d.Cluster, runtime k3drt.Runtime) error {
// generate cluster network name, if not set
if cluster.Network == "" {
cluster.Network = fmt.Sprintf("%s-%s", k3d.DefaultObjectNamePrefix, cluster.Name)
// create cluster network
networkID, err := runtime.CreateNetworkIfNotPresent(cluster.Network)
if err != nil {
log.Errorln("Failed to create cluster network")
return err
}
cluster.Network = networkID
}
for _, node := range cluster.Nodes {

@ -20,3 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
package containerd
// CreateNetworkIfNotPresent creates a new docker network
func (d Containerd) CreateNetworkIfNotPresent(name string) (string, error) {
return "", nil
}

@ -23,7 +23,6 @@ package docker
import (
"context"
"fmt"
"github.com/docker/docker/api/types"
"github.com/docker/docker/client"
@ -32,29 +31,28 @@ import (
log "github.com/sirupsen/logrus"
)
// CreateNetworkIfNotExist creates a new docker network
// @return networkID, error
func CreateNetworkIfNotExist(clusterName string) (string, error) {
networkName := k3d.GetDefaultObjectName(clusterName)
// CreateNetworkIfNotPresent creates a new docker network
func (d Docker) CreateNetworkIfNotPresent(name string) (string, error) {
// (0) create new docker client
ctx := context.Background()
docker, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
if err != nil {
return "", fmt.Errorf("Failed to create docker client. %+v", err)
log.Errorln("Failed to create docker client")
return "", err
}
// (1) configure list filters
args := GetDefaultObjectLabelsFilter(clusterName)
args.Add("name", networkName)
args := GetDefaultObjectLabelsFilter(name)
args.Add("name", name)
// (2) get filtered list of networks
networkList, err := docker.NetworkList(ctx, types.NetworkListOptions{
Filters: args,
})
if err != nil {
return "", fmt.Errorf("Failed to list docker networks. %+v", err)
log.Errorln("Failed to list docker networks")
return "", err
}
// (2.1) If possible, return an existing network
@ -63,21 +61,19 @@ func CreateNetworkIfNotExist(clusterName string) (string, error) {
}
if len(networkList) > 0 {
log.Infof("Network with name '%s' already exists with ID '%s'", name, networkList[0].ID)
return networkList[0].ID, nil
}
// (3) Create a new network
// (3.1) Define network labels
labels := k3d.DefaultObjectLabels
labels["cluster"] = clusterName
// (3.2) Create network
network, err := docker.NetworkCreate(ctx, networkName, types.NetworkCreate{
network, err := docker.NetworkCreate(ctx, name, types.NetworkCreate{
Labels: k3d.DefaultObjectLabels,
})
if err != nil {
return "", fmt.Errorf("Failed to create network. %+v", err)
log.Errorln("Failed to create network")
return "", err
}
log.Infof("Created network '%s'", name)
return network.ID, nil
}

@ -40,6 +40,7 @@ type Runtime interface {
CreateNode(*k3d.Node) error
DeleteNode(*k3d.Node) error
GetNodesByLabel(map[string]string) ([]*k3d.Node, error)
CreateNetworkIfNotPresent(name string) (string, error)
// StartContainer() error
// ExecContainer() error
// StopContainer() error

@ -87,12 +87,6 @@ type Node struct {
Network string // filled automatically
}
// Network describes a container network used by k3d clusters
type Network struct {
Name string
Cluster string
}
// GetDefaultObjectName prefixes the passed name with the default prefix
func GetDefaultObjectName(name string) string {
return fmt.Sprintf("%s-%s", DefaultObjectNamePrefix, name)

Loading…
Cancel
Save