Split libpod/network package

The `libpod/network` package should only be used on the backend and not the
client. The client used this package only for two functions so move them
into a new `pkg/network` package.

This is needed so we can put linux only code into `libpod/network`, see #9710.

[NO TESTS NEEDED]

Signed-off-by: Paul Holzinger <paul.holzinger@web.de>
This commit is contained in:
Paul Holzinger
2021-03-15 10:45:24 +01:00
parent fc02d16e72
commit 762148deb6
11 changed files with 63 additions and 29 deletions

View File

@ -12,8 +12,8 @@ import (
"github.com/containers/podman/v3/cmd/podman/common" "github.com/containers/podman/v3/cmd/podman/common"
"github.com/containers/podman/v3/cmd/podman/registry" "github.com/containers/podman/v3/cmd/podman/registry"
"github.com/containers/podman/v3/cmd/podman/validate" "github.com/containers/podman/v3/cmd/podman/validate"
"github.com/containers/podman/v3/libpod/network"
"github.com/containers/podman/v3/pkg/domain/entities" "github.com/containers/podman/v3/pkg/domain/entities"
"github.com/containers/podman/v3/pkg/network"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"github.com/spf13/pflag" "github.com/spf13/pflag"

View File

@ -11,6 +11,7 @@ import (
"github.com/containernetworking/plugins/plugins/ipam/host-local/backend/allocator" "github.com/containernetworking/plugins/plugins/ipam/host-local/backend/allocator"
"github.com/containers/common/pkg/config" "github.com/containers/common/pkg/config"
"github.com/containers/podman/v3/libpod/define" "github.com/containers/podman/v3/libpod/define"
"github.com/containers/podman/v3/pkg/network"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
) )
@ -67,7 +68,7 @@ func GetCNIConfigPathByNameOrID(config *config.Config, name string) (string, err
if conf.Name == name { if conf.Name == name {
return confFile, nil return confFile, nil
} }
if strings.HasPrefix(GetNetworkID(conf.Name), name) { if strings.HasPrefix(network.GetNetworkID(conf.Name), name) {
idMatch++ idMatch++
file = confFile file = confFile
} }
@ -92,16 +93,6 @@ func ReadRawCNIConfByNameOrID(config *config.Config, name string) ([]byte, error
return b, err return b, err
} }
// GetCNIPlugins returns a list of plugins that a given network
// has in the form of a string
func GetCNIPlugins(list *libcni.NetworkConfigList) string {
plugins := make([]string, 0, len(list.Plugins))
for _, plug := range list.Plugins {
plugins = append(plugins, plug.Network.Type)
}
return strings.Join(plugins, ",")
}
// GetNetworkLabels returns a list of labels as a string // GetNetworkLabels returns a list of labels as a string
func GetNetworkLabels(list *libcni.NetworkConfigList) NcLabels { func GetNetworkLabels(list *libcni.NetworkConfigList) NcLabels {
cniJSON := make(map[string]interface{}) cniJSON := make(map[string]interface{})

View File

@ -7,6 +7,7 @@ import (
"strings" "strings"
"github.com/containernetworking/cni/libcni" "github.com/containernetworking/cni/libcni"
"github.com/containers/podman/v3/pkg/network"
"github.com/containers/podman/v3/pkg/util" "github.com/containers/podman/v3/pkg/util"
"github.com/pkg/errors" "github.com/pkg/errors"
) )
@ -211,7 +212,7 @@ func IfPassesFilter(netconf *libcni.NetworkConfigList, filters map[string][]stri
case "plugin": case "plugin":
// match one plugin // match one plugin
plugins := GetCNIPlugins(netconf) plugins := network.GetCNIPlugins(netconf)
for _, val := range filterValues { for _, val := range filterValues {
if strings.Contains(plugins, val) { if strings.Contains(plugins, val) {
result = true result = true
@ -243,7 +244,7 @@ func IfPassesFilter(netconf *libcni.NetworkConfigList, filters map[string][]stri
case "driver": case "driver":
// matches only for the DefaultNetworkDriver // matches only for the DefaultNetworkDriver
for _, filterValue := range filterValues { for _, filterValue := range filterValues {
plugins := GetCNIPlugins(netconf) plugins := network.GetCNIPlugins(netconf)
if filterValue == DefaultNetworkDriver && if filterValue == DefaultNetworkDriver &&
strings.Contains(plugins, DefaultNetworkDriver) { strings.Contains(plugins, DefaultNetworkDriver) {
result = true result = true
@ -253,7 +254,7 @@ func IfPassesFilter(netconf *libcni.NetworkConfigList, filters map[string][]stri
case "id": case "id":
// matches part of one id // matches part of one id
for _, filterValue := range filterValues { for _, filterValue := range filterValues {
if strings.Contains(GetNetworkID(netconf.Name), filterValue) { if strings.Contains(network.GetNetworkID(netconf.Name), filterValue) {
result = true result = true
break break
} }

View File

@ -1,8 +1,6 @@
package network package network
import ( import (
"crypto/sha256"
"encoding/hex"
"encoding/json" "encoding/json"
"net" "net"
"os" "os"
@ -245,13 +243,6 @@ func Exists(config *config.Config, name string) (bool, error) {
return true, nil return true, nil
} }
// GetNetworkID return the network ID for a given name.
// It is just the sha256 hash but this should be good enough.
func GetNetworkID(name string) string {
hash := sha256.Sum256([]byte(name))
return hex.EncodeToString(hash[:])
}
// PruneNetworks removes networks that are not being used and that is not the default // PruneNetworks removes networks that are not being used and that is not the default
// network. To keep proper fencing for imports, you must provide the used networks // network. To keep proper fencing for imports, you must provide the used networks
// to this function as a map. the key is meaningful in the map, the book is a no-op // to this function as a map. the key is meaningful in the map, the book is a no-op

View File

@ -12,7 +12,6 @@ import (
"github.com/containers/common/pkg/config" "github.com/containers/common/pkg/config"
"github.com/containers/podman/v3/libpod/define" "github.com/containers/podman/v3/libpod/define"
"github.com/containers/podman/v3/libpod/events" "github.com/containers/podman/v3/libpod/events"
"github.com/containers/podman/v3/libpod/network"
"github.com/containers/podman/v3/libpod/shutdown" "github.com/containers/podman/v3/libpod/shutdown"
"github.com/containers/podman/v3/pkg/cgroups" "github.com/containers/podman/v3/pkg/cgroups"
"github.com/containers/podman/v3/pkg/domain/entities/reports" "github.com/containers/podman/v3/pkg/domain/entities/reports"
@ -204,7 +203,7 @@ func (r *Runtime) setupContainer(ctx context.Context, ctr *Container) (_ *Contai
if len(ctr.config.Networks) > 0 { if len(ctr.config.Networks) > 0 {
netNames := make([]string, 0, len(ctr.config.Networks)) netNames := make([]string, 0, len(ctr.config.Networks))
for _, nameOrID := range ctr.config.Networks { for _, nameOrID := range ctr.config.Networks {
netName, err := network.NormalizeName(r.config, nameOrID) netName, err := normalizeNetworkName(r.config, nameOrID)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -0,0 +1,12 @@
// +build linux
package libpod
import (
"github.com/containers/common/pkg/config"
"github.com/containers/podman/v3/libpod/network"
)
func normalizeNetworkName(config *config.Config, nameOrID string) (string, error) {
return network.NormalizeName(config, nameOrID)
}

View File

@ -0,0 +1,12 @@
// +build !linux
package libpod
import (
"github.com/containers/common/pkg/config"
"github.com/containers/podman/v3/libpod/define"
)
func normalizeNetworkName(config *config.Config, nameOrID string) (string, error) {
return "", define.ErrNotImplemented
}

View File

@ -16,6 +16,7 @@ import (
"github.com/containers/podman/v3/pkg/api/handlers/utils" "github.com/containers/podman/v3/pkg/api/handlers/utils"
"github.com/containers/podman/v3/pkg/domain/entities" "github.com/containers/podman/v3/pkg/domain/entities"
"github.com/containers/podman/v3/pkg/domain/infra/abi" "github.com/containers/podman/v3/pkg/domain/infra/abi"
networkid "github.com/containers/podman/v3/pkg/network"
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
dockerNetwork "github.com/docker/docker/api/types/network" dockerNetwork "github.com/docker/docker/api/types/network"
"github.com/gorilla/schema" "github.com/gorilla/schema"
@ -135,7 +136,7 @@ func getNetworkResourceByNameOrID(nameOrID string, runtime *libpod.Runtime, filt
report := types.NetworkResource{ report := types.NetworkResource{
Name: conf.Name, Name: conf.Name,
ID: network.GetNetworkID(conf.Name), ID: networkid.GetNetworkID(conf.Name),
Created: time.Unix(int64(stat.Ctim.Sec), int64(stat.Ctim.Nsec)), // nolint: unconvert Created: time.Unix(int64(stat.Ctim.Sec), int64(stat.Ctim.Nsec)), // nolint: unconvert
Scope: "local", Scope: "local",
Driver: network.DefaultNetworkDriver, Driver: network.DefaultNetworkDriver,

View File

@ -7,7 +7,7 @@ import (
"github.com/containers/podman/v3/libpod" "github.com/containers/podman/v3/libpod"
"github.com/containers/podman/v3/libpod/define" "github.com/containers/podman/v3/libpod/define"
"github.com/containers/podman/v3/libpod/network" "github.com/containers/podman/v3/pkg/network"
"github.com/containers/podman/v3/pkg/timetype" "github.com/containers/podman/v3/pkg/timetype"
"github.com/containers/podman/v3/pkg/util" "github.com/containers/podman/v3/pkg/util"
"github.com/pkg/errors" "github.com/pkg/errors"

View File

@ -6,7 +6,7 @@ import (
"github.com/containers/podman/v3/libpod" "github.com/containers/podman/v3/libpod"
"github.com/containers/podman/v3/libpod/define" "github.com/containers/podman/v3/libpod/define"
"github.com/containers/podman/v3/libpod/network" "github.com/containers/podman/v3/pkg/network"
"github.com/containers/podman/v3/pkg/util" "github.com/containers/podman/v3/pkg/util"
"github.com/pkg/errors" "github.com/pkg/errors"
) )

27
pkg/network/network.go Normal file
View File

@ -0,0 +1,27 @@
package network
import (
"crypto/sha256"
"encoding/hex"
"strings"
"github.com/containernetworking/cni/libcni"
)
// GetCNIPlugins returns a list of plugins that a given network
// has in the form of a string
func GetCNIPlugins(list *libcni.NetworkConfigList) string {
plugins := make([]string, 0, len(list.Plugins))
for _, plug := range list.Plugins {
plugins = append(plugins, plug.Network.Type)
}
return strings.Join(plugins, ",")
}
// GetNetworkID return the network ID for a given name.
// It is just the sha256 hash but this should be good enough.
// The caller has to make sure it is only called with the network name.
func GetNetworkID(name string) string {
hash := sha256.Sum256([]byte(name))
return hex.EncodeToString(hash[:])
}