Skip to content

Commit

Permalink
Merge pull request containers#10919 from vikas-goel/macvlan
Browse files Browse the repository at this point in the history
Return macvlan object in /network REST API response
  • Loading branch information
openshift-merge-robot authored Jul 15, 2021
2 parents 1e23684 + 48e6a8e commit 1568247
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 19 deletions.
47 changes: 28 additions & 19 deletions pkg/api/handlers/compat/networks.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@ import (
"github.com/sirupsen/logrus"
)

type pluginInterface struct {
PluginType string `json:"type"`
IPAM network.IPAMConfig `json:"ipam"`
IsGW bool `json:"isGateway"`
}

func InspectNetwork(w http.ResponseWriter, r *http.Request) {
runtime := r.Context().Value("runtime").(*libpod.Runtime)

Expand Down Expand Up @@ -103,12 +109,12 @@ func getNetworkResourceByNameOrID(nameOrID string, runtime *libpod.Runtime, filt
}
}

// No Bridge plugin means we bail
bridge, err := genericPluginsToBridge(conf.Plugins, network.DefaultNetworkDriver)
plugin, err := getPlugin(conf.Plugins)
if err != nil {
return nil, err
}
for _, outer := range bridge.IPAM.Ranges {

for _, outer := range plugin.IPAM.Ranges {
for _, n := range outer {
ipamConfig := dockerNetwork.IPAMConfig{
Subnet: n.Subnet,
Expand Down Expand Up @@ -140,19 +146,26 @@ func getNetworkResourceByNameOrID(nameOrID string, runtime *libpod.Runtime, filt
labels = map[string]string{}
}

isInternal := false
dockerDriver := plugin.PluginType
if plugin.PluginType == network.DefaultNetworkDriver {
isInternal = !plugin.IsGW
dockerDriver = "default"
}

report := types.NetworkResource{
Name: conf.Name,
ID: networkid.GetNetworkID(conf.Name),
Created: time.Unix(int64(stat.Ctim.Sec), int64(stat.Ctim.Nsec)), // nolint: unconvert
Scope: "local",
Driver: network.DefaultNetworkDriver,
Driver: plugin.PluginType,
EnableIPv6: false,
IPAM: dockerNetwork.IPAM{
Driver: "default",
Driver: dockerDriver,
Options: map[string]string{},
Config: ipamConfigs,
},
Internal: !bridge.IsGW,
Internal: isInternal,
Attachable: false,
Ingress: false,
ConfigFrom: dockerNetwork.ConfigReference{},
Expand All @@ -166,23 +179,19 @@ func getNetworkResourceByNameOrID(nameOrID string, runtime *libpod.Runtime, filt
return &report, nil
}

func genericPluginsToBridge(plugins []*libcni.NetworkConfig, pluginType string) (network.HostLocalBridge, error) {
var bridge network.HostLocalBridge
generic, err := findPluginByName(plugins, pluginType)
if err != nil {
return bridge, err
}
err = json.Unmarshal(generic, &bridge)
return bridge, err
}
func getPlugin(plugins []*libcni.NetworkConfig) (pluginInterface, error) {
var plugin pluginInterface

func findPluginByName(plugins []*libcni.NetworkConfig, pluginType string) ([]byte, error) {
for _, p := range plugins {
if pluginType == p.Network.Type {
return p.Bytes, nil
for _, pluginType := range network.SupportedNetworkDrivers {
if pluginType == p.Network.Type {
err := json.Unmarshal(p.Bytes, &plugin)
return plugin, err
}
}
}
return nil, errors.New("unable to find bridge plugin")

return plugin, errors.New("unable to find supported plugin")
}

func ListNetworks(w http.ResponseWriter, r *http.Request) {
Expand Down
14 changes: 14 additions & 0 deletions test/apiv2/35-networks.at
Original file line number Diff line number Diff line change
Expand Up @@ -142,4 +142,18 @@ t GET networks?filters='{"label":["zaq"]}' 200 length=1
t POST networks/prune?filters='{"until":["5000000000"]}' 200
t GET networks?filters='{"label":["zaq"]}' 200 length=0

# test macvlan network response
podman network create --driver macvlan macvlan1

# libpod api inspect the macvlan network
t GET libpod/networks/macvlan1/json 200 .name="macvlan1"

# compat api inspect the macvlan network
t GET networks/macvlan1 200 .Name="macvlan1"

# clean the macvlan network
t DELETE libpod/networks/macvlan1 200 \
.[0].Name~macvlan1 \
.[0].Err=null

# vim: filetype=sh

0 comments on commit 1568247

Please sign in to comment.