diff options
author | Paul Holzinger <pholzing@redhat.com> | 2021-08-16 16:11:26 +0200 |
---|---|---|
committer | Paul Holzinger <pholzing@redhat.com> | 2021-09-15 20:00:20 +0200 |
commit | 85e8fbf7f33717ef6a0d6cf9e2143b52c874c2de (patch) | |
tree | 82b0c29102d2779c18ea8a6f10df5dc1139e3817 /cmd/podman/networks/create.go | |
parent | 218f132fdf4939d9e0374ef860d534f19e71df54 (diff) | |
download | podman-85e8fbf7f33717ef6a0d6cf9e2143b52c874c2de.tar.gz podman-85e8fbf7f33717ef6a0d6cf9e2143b52c874c2de.tar.bz2 podman-85e8fbf7f33717ef6a0d6cf9e2143b52c874c2de.zip |
Wire network interface into libpod
Make use of the new network interface in libpod.
This commit contains several breaking changes:
- podman network create only outputs the new network name and not file
path.
- podman network ls shows the network driver instead of the cni version
and plugins.
- podman network inspect outputs the new network struct and not the cni
conflist.
- The bindings and libpod api endpoints have been changed to use the new
network structure.
The container network status is stored in a new field in the state. The
status should be received with the new `c.getNetworkStatus`. This will
migrate the old status to the new format. Therefore old containers should
contine to work correctly in all cases even when network connect/
disconnect is used.
New features:
- podman network reload keeps the ip and mac for more than one network.
- podman container restore keeps the ip and mac for more than one
network.
- The network create compat endpoint can now use more than one ipam
config.
The man pages and the swagger doc are updated to reflect the latest
changes.
Signed-off-by: Paul Holzinger <pholzing@redhat.com>
Diffstat (limited to 'cmd/podman/networks/create.go')
-rw-r--r-- | cmd/podman/networks/create.go | 60 |
1 files changed, 51 insertions, 9 deletions
diff --git a/cmd/podman/networks/create.go b/cmd/podman/networks/create.go index b5ddd215f..21d720f55 100644 --- a/cmd/podman/networks/create.go +++ b/cmd/podman/networks/create.go @@ -8,7 +8,8 @@ import ( "github.com/containers/podman/v3/cmd/podman/common" "github.com/containers/podman/v3/cmd/podman/parse" "github.com/containers/podman/v3/cmd/podman/registry" - "github.com/containers/podman/v3/libpod/define" + "github.com/containers/podman/v3/libpod/network/types" + "github.com/containers/podman/v3/libpod/network/util" "github.com/containers/podman/v3/pkg/domain/entities" "github.com/pkg/errors" "github.com/sirupsen/logrus" @@ -38,11 +39,11 @@ func networkCreateFlags(cmd *cobra.Command) { flags := cmd.Flags() driverFlagName := "driver" - flags.StringVarP(&networkCreateOptions.Driver, driverFlagName, "d", "bridge", "driver to manage the network") + flags.StringVarP(&networkCreateOptions.Driver, driverFlagName, "d", types.DefaultNetworkDriver, "driver to manage the network") _ = cmd.RegisterFlagCompletionFunc(driverFlagName, common.AutocompleteNetworkDriver) optFlagName := "opt" - flags.StringArrayVarP(&opts, optFlagName, "o", []string{}, "Set driver specific options (default [])") + flags.StringArrayVarP(&opts, optFlagName, "o", nil, "Set driver specific options (default [])") _ = cmd.RegisterFlagCompletionFunc(optFlagName, completion.AutocompleteNone) gatewayFlagName := "gateway" @@ -55,6 +56,7 @@ func networkCreateFlags(cmd *cobra.Command) { flags.IPNetVar(&networkCreateOptions.Range, ipRangeFlagName, net.IPNet{}, "allocate container IP from range") _ = cmd.RegisterFlagCompletionFunc(ipRangeFlagName, completion.AutocompleteNone) + // TODO consider removing this for 4.0 macvlanFlagName := "macvlan" flags.StringVar(&networkCreateOptions.MacVLAN, macvlanFlagName, "", "create a Macvlan connection based on this device") // This option is deprecated @@ -88,9 +90,6 @@ func networkCreate(cmd *cobra.Command, args []string) error { name string ) if len(args) > 0 { - if !define.NameRegex.MatchString(args[0]) { - return define.RegexError - } name = args[0] } var err error @@ -100,17 +99,60 @@ func networkCreate(cmd *cobra.Command, args []string) error { } networkCreateOptions.Options, err = parse.GetAllLabels([]string{}, opts) if err != nil { - return errors.Wrapf(err, "unable to process options") + return errors.Wrapf(err, "unable to parse options") + } + + network := types.Network{ + Name: name, + Driver: networkCreateOptions.Driver, + Options: networkCreateOptions.Options, + Labels: networkCreateOptions.Labels, + IPv6Enabled: networkCreateOptions.IPv6, + DNSEnabled: !networkCreateOptions.DisableDNS, + Internal: networkCreateOptions.Internal, } + // old --macvlan option if networkCreateOptions.MacVLAN != "" { logrus.Warn("The --macvlan option is deprecated, use `--driver macvlan --opt parent=<device>` instead") + network.Driver = types.MacVLANNetworkDriver + network.NetworkInterface = networkCreateOptions.MacVLAN + } else if networkCreateOptions.Driver == types.MacVLANNetworkDriver { + // new -d macvlan --opt parent=... syntax + if parent, ok := network.Options["parent"]; ok { + network.NetworkInterface = parent + delete(network.Options, "parent") + } + } + + if networkCreateOptions.Subnet.IP != nil { + s := types.Subnet{ + Subnet: types.IPNet{IPNet: networkCreateOptions.Subnet}, + Gateway: networkCreateOptions.Gateway, + } + if networkCreateOptions.Range.IP != nil { + startIP, err := util.FirstIPInSubnet(&networkCreateOptions.Range) + if err != nil { + return errors.Wrap(err, "failed to get first ip in range") + } + lastIP, err := util.LastIPInSubnet(&networkCreateOptions.Range) + if err != nil { + return errors.Wrap(err, "failed to get last ip in range") + } + s.LeaseRange = &types.LeaseRange{ + StartIP: startIP, + EndIP: lastIP, + } + } + network.Subnets = append(network.Subnets, s) + } else if networkCreateOptions.Range.IP != nil || networkCreateOptions.Gateway != nil { + return errors.New("cannot set gateway or range without subnet") } - response, err := registry.ContainerEngine().NetworkCreate(registry.Context(), name, networkCreateOptions) + response, err := registry.ContainerEngine().NetworkCreate(registry.Context(), network) if err != nil { return err } - fmt.Println(response.Filename) + fmt.Println(response.Name) return nil } |