github.com/containers/libpod@v1.9.4-0.20220419124438-4284fd425507/cmd/podman/network_create.go (about) 1 // +build !remoteclient 2 3 package main 4 5 import ( 6 "fmt" 7 "net" 8 9 "github.com/containers/libpod/cmd/podman/cliconfig" 10 "github.com/containers/libpod/libpod" 11 "github.com/containers/libpod/pkg/adapter" 12 "github.com/containers/libpod/pkg/network" 13 "github.com/containers/libpod/pkg/rootless" 14 "github.com/pkg/errors" 15 "github.com/spf13/cobra" 16 ) 17 18 var ( 19 networkCreateCommand cliconfig.NetworkCreateValues 20 networkCreateDescription = `create CNI networks for containers and pods` 21 _networkCreateCommand = &cobra.Command{ 22 Use: "create [flags] [NETWORK]", 23 Short: "network create", 24 Long: networkCreateDescription, 25 RunE: func(cmd *cobra.Command, args []string) error { 26 networkCreateCommand.InputArgs = args 27 networkCreateCommand.GlobalFlags = MainGlobalOpts 28 networkCreateCommand.Remote = remoteclient 29 return networkcreateCmd(&networkCreateCommand) 30 }, 31 Example: `podman network create podman1`, 32 } 33 ) 34 35 func init() { 36 networkCreateCommand.Command = _networkCreateCommand 37 networkCreateCommand.SetHelpTemplate(HelpTemplate()) 38 networkCreateCommand.SetUsageTemplate(UsageTemplate()) 39 flags := networkCreateCommand.Flags() 40 flags.StringVarP(&networkCreateCommand.Driver, "driver", "d", "bridge", "driver to manage the network") 41 flags.IPVar(&networkCreateCommand.Gateway, "gateway", nil, "IPv4 or IPv6 gateway for the subnet") 42 flags.BoolVar(&networkCreateCommand.Internal, "internal", false, "restrict external access from this network") 43 flags.IPNetVar(&networkCreateCommand.IPRange, "ip-range", net.IPNet{}, "allocate container IP from range") 44 flags.StringVar(&networkCreateCommand.MacVLAN, "macvlan", "", "create a Macvlan connection based on this device") 45 // TODO not supported yet 46 //flags.StringVar(&networkCreateCommand.IPamDriver, "ipam-driver", "", "IP Address Management Driver") 47 // TODO enable when IPv6 is working 48 //flags.BoolVar(&networkCreateCommand.IPV6, "IPv6", false, "enable IPv6 networking") 49 flags.IPNetVar(&networkCreateCommand.Network, "subnet", net.IPNet{}, "subnet in CIDR format") 50 flags.BoolVar(&networkCreateCommand.DisableDNS, "disable-dns", false, "disable dns plugin") 51 } 52 53 func networkcreateCmd(c *cliconfig.NetworkCreateValues) error { 54 var ( 55 fileName string 56 err error 57 ) 58 if err := network.IsSupportedDriver(c.Driver); err != nil { 59 return err 60 } 61 if rootless.IsRootless() && !remoteclient { 62 return errors.New("network create is not supported for rootless mode") 63 } 64 if len(c.InputArgs) > 1 { 65 return errors.Errorf("only one network can be created at a time") 66 } 67 if len(c.InputArgs) > 0 && !libpod.NameRegex.MatchString(c.InputArgs[0]) { 68 return libpod.RegexError 69 } 70 runtime, err := adapter.GetRuntimeNoStore(getContext(), &c.PodmanCommand) 71 if err != nil { 72 return err 73 } 74 if len(c.MacVLAN) > 0 { 75 fileName, err = runtime.NetworkCreateMacVLAN(c) 76 } else { 77 fileName, err = runtime.NetworkCreateBridge(c) 78 } 79 if err == nil { 80 fmt.Println(fileName) 81 } 82 return err 83 }