github.com/containers/libpod@v1.9.4-0.20220419124438-4284fd425507/cmd/podmanV2/common/netflags.go (about) 1 package common 2 3 import ( 4 "net" 5 6 "github.com/containers/libpod/pkg/domain/entities" 7 "github.com/containers/libpod/pkg/rootless" 8 "github.com/spf13/cobra" 9 "github.com/spf13/pflag" 10 ) 11 12 func getDefaultNetwork() string { 13 if rootless.IsRootless() { 14 return "slirp4netns" 15 } 16 return "bridge" 17 } 18 19 func GetNetFlags() *pflag.FlagSet { 20 netFlags := pflag.FlagSet{} 21 netFlags.StringSlice( 22 "add-host", []string{}, 23 "Add a custom host-to-IP mapping (host:ip) (default [])", 24 ) 25 netFlags.StringSlice( 26 "dns", []string{}, 27 "Set custom DNS servers", 28 ) 29 netFlags.StringSlice( 30 "dns-opt", []string{}, 31 "Set custom DNS options", 32 ) 33 netFlags.StringSlice( 34 "dns-search", []string{}, 35 "Set custom DNS search domains", 36 ) 37 netFlags.String( 38 "ip", "", 39 "Specify a static IPv4 address for the container", 40 ) 41 netFlags.String( 42 "mac-address", "", 43 "Container MAC address (e.g. 92:d0:c6:0a:29:33)", 44 ) 45 netFlags.String( 46 "network", getDefaultNetwork(), 47 "Connect a container to a network", 48 ) 49 netFlags.StringSliceP( 50 "publish", "p", []string{}, 51 "Publish a container's port, or a range of ports, to the host (default [])", 52 ) 53 netFlags.Bool( 54 "no-hosts", false, 55 "Do not create /etc/hosts within the container, instead use the version from the image", 56 ) 57 return &netFlags 58 } 59 60 func NetFlagsToNetOptions(cmd *cobra.Command) (*entities.NetOptions, error) { 61 var ( 62 err error 63 ) 64 opts := entities.NetOptions{} 65 opts.AddHosts, err = cmd.Flags().GetStringSlice("add-host") 66 if err != nil { 67 return nil, err 68 } 69 servers, err := cmd.Flags().GetStringSlice("dns") 70 if err != nil { 71 return nil, err 72 } 73 for _, d := range servers { 74 if d == "none" { 75 opts.DNSHost = true 76 break 77 } 78 opts.DNSServers = append(opts.DNSServers, net.ParseIP(d)) 79 } 80 opts.DNSSearch, err = cmd.Flags().GetStringSlice("dns-search") 81 if err != nil { 82 return nil, err 83 } 84 85 m, err := cmd.Flags().GetString("mac-address") 86 if err != nil { 87 return nil, err 88 } 89 if len(m) > 0 { 90 mac, err := net.ParseMAC(m) 91 if err != nil { 92 return nil, err 93 } 94 opts.StaticMAC = &mac 95 } 96 inputPorts, err := cmd.Flags().GetStringSlice("publish") 97 if err != nil { 98 return nil, err 99 } 100 if len(inputPorts) > 0 { 101 opts.PublishPorts, err = createPortBindings(inputPorts) 102 if err != nil { 103 return nil, err 104 } 105 } 106 opts.NoHosts, err = cmd.Flags().GetBool("no-hosts") 107 return &opts, err 108 }