github.com/containerd/nerdctl@v1.7.7/cmd/nerdctl/network_create.go (about)

     1  /*
     2     Copyright The containerd Authors.
     3  
     4     Licensed under the Apache License, Version 2.0 (the "License");
     5     you may not use this file except in compliance with the License.
     6     You may obtain a copy of the License at
     7  
     8         http://www.apache.org/licenses/LICENSE-2.0
     9  
    10     Unless required by applicable law or agreed to in writing, software
    11     distributed under the License is distributed on an "AS IS" BASIS,
    12     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13     See the License for the specific language governing permissions and
    14     limitations under the License.
    15  */
    16  
    17  package main
    18  
    19  import (
    20  	"fmt"
    21  
    22  	"github.com/containerd/containerd/identifiers"
    23  	"github.com/containerd/nerdctl/pkg/api/types"
    24  	"github.com/containerd/nerdctl/pkg/cmd/network"
    25  	"github.com/containerd/nerdctl/pkg/netutil"
    26  	"github.com/containerd/nerdctl/pkg/strutil"
    27  
    28  	"github.com/spf13/cobra"
    29  )
    30  
    31  func newNetworkCreateCommand() *cobra.Command {
    32  	var networkCreateCommand = &cobra.Command{
    33  		Use:           "create [flags] NETWORK",
    34  		Short:         "Create a network",
    35  		Long:          `NOTE: To isolate CNI bridge, CNI plugin "firewall" (>= v1.1.0) is needed.`,
    36  		Args:          IsExactArgs(1),
    37  		RunE:          networkCreateAction,
    38  		SilenceUsage:  true,
    39  		SilenceErrors: true,
    40  	}
    41  	networkCreateCommand.Flags().StringP("driver", "d", DefaultNetworkDriver, "Driver to manage the Network")
    42  	networkCreateCommand.RegisterFlagCompletionFunc("driver", shellCompleteNetworkDrivers)
    43  	networkCreateCommand.Flags().StringArrayP("opt", "o", nil, "Set driver specific options")
    44  	networkCreateCommand.Flags().String("ipam-driver", "default", "IP Address Management Driver")
    45  	networkCreateCommand.RegisterFlagCompletionFunc("ipam-driver", shellCompleteIPAMDrivers)
    46  	networkCreateCommand.Flags().StringArray("ipam-opt", nil, "Set IPAM driver specific options")
    47  	networkCreateCommand.Flags().StringArray("subnet", nil, `Subnet in CIDR format that represents a network segment, e.g. "10.5.0.0/16"`)
    48  	networkCreateCommand.Flags().String("gateway", "", `Gateway for the master subnet`)
    49  	networkCreateCommand.Flags().String("ip-range", "", `Allocate container ip from a sub-range`)
    50  	networkCreateCommand.Flags().StringArray("label", nil, "Set metadata for a network")
    51  	networkCreateCommand.Flags().Bool("ipv6", false, "Enable IPv6 networking")
    52  	return networkCreateCommand
    53  }
    54  
    55  func networkCreateAction(cmd *cobra.Command, args []string) error {
    56  	globalOptions, err := processRootCmdFlags(cmd)
    57  	if err != nil {
    58  		return err
    59  	}
    60  	name := args[0]
    61  	if err := identifiers.Validate(name); err != nil {
    62  		return fmt.Errorf("malformed name %s: %w", name, err)
    63  	}
    64  	if err != nil {
    65  		return err
    66  	}
    67  	driver, err := cmd.Flags().GetString("driver")
    68  	if err != nil {
    69  		return err
    70  	}
    71  	opts, err := cmd.Flags().GetStringArray("opt")
    72  	if err != nil {
    73  		return err
    74  	}
    75  	ipamDriver, err := cmd.Flags().GetString("ipam-driver")
    76  	if err != nil {
    77  		return err
    78  	}
    79  	ipamOpts, err := cmd.Flags().GetStringArray("ipam-opt")
    80  	if err != nil {
    81  		return err
    82  	}
    83  	subnets, err := cmd.Flags().GetStringArray("subnet")
    84  	if err != nil {
    85  		return err
    86  	}
    87  	gatewayStr, err := cmd.Flags().GetString("gateway")
    88  	if err != nil {
    89  		return err
    90  	}
    91  	ipRangeStr, err := cmd.Flags().GetString("ip-range")
    92  	if err != nil {
    93  		return err
    94  	}
    95  	labels, err := cmd.Flags().GetStringArray("label")
    96  	if err != nil {
    97  		return err
    98  	}
    99  	labels = strutil.DedupeStrSlice(labels)
   100  	ipv6, err := cmd.Flags().GetBool("ipv6")
   101  	if err != nil {
   102  		return err
   103  	}
   104  
   105  	return network.Create(types.NetworkCreateOptions{
   106  		GOptions: globalOptions,
   107  		CreateOptions: netutil.CreateOptions{
   108  			Name:        name,
   109  			Driver:      driver,
   110  			Options:     strutil.ConvertKVStringsToMap(opts),
   111  			IPAMDriver:  ipamDriver,
   112  			IPAMOptions: strutil.ConvertKVStringsToMap(ipamOpts),
   113  			Subnets:     subnets,
   114  			Gateway:     gatewayStr,
   115  			IPRange:     ipRangeStr,
   116  			Labels:      labels,
   117  			IPv6:        ipv6,
   118  		},
   119  	}, cmd.OutOrStdout())
   120  }