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  }