github.com/containers/podman/v2@v2.2.2-0.20210501105131-c1e07d070c4c/pkg/bindings/network/network.go (about)

     1  package network
     2  
     3  import (
     4  	"context"
     5  	"net/http"
     6  	"net/url"
     7  	"strconv"
     8  	"strings"
     9  
    10  	"github.com/containers/podman/v2/pkg/bindings"
    11  	"github.com/containers/podman/v2/pkg/domain/entities"
    12  	jsoniter "github.com/json-iterator/go"
    13  )
    14  
    15  // Create makes a new CNI network configuration
    16  func Create(ctx context.Context, options entities.NetworkCreateOptions, name *string) (*entities.NetworkCreateReport, error) {
    17  	var report entities.NetworkCreateReport
    18  	conn, err := bindings.GetClient(ctx)
    19  	if err != nil {
    20  		return nil, err
    21  	}
    22  	params := url.Values{}
    23  	if name != nil {
    24  		params.Set("name", *name)
    25  	}
    26  	networkConfig, err := jsoniter.MarshalToString(options)
    27  	if err != nil {
    28  		return nil, err
    29  	}
    30  	stringReader := strings.NewReader(networkConfig)
    31  	response, err := conn.DoRequest(stringReader, http.MethodPost, "/networks/create", params, nil)
    32  	if err != nil {
    33  		return nil, err
    34  	}
    35  	return &report, response.Process(&report)
    36  }
    37  
    38  // Inspect returns low level information about a CNI network configuration
    39  func Inspect(ctx context.Context, nameOrID string) ([]entities.NetworkInspectReport, error) {
    40  	var reports []entities.NetworkInspectReport
    41  	conn, err := bindings.GetClient(ctx)
    42  	if err != nil {
    43  		return nil, err
    44  	}
    45  	response, err := conn.DoRequest(nil, http.MethodGet, "/networks/%s/json", nil, nil, nameOrID)
    46  	if err != nil {
    47  		return nil, err
    48  	}
    49  	return reports, response.Process(&reports)
    50  }
    51  
    52  // Remove deletes a defined CNI network configuration by name.  The optional force boolean
    53  // will remove all containers associated with the network when set to true.  A slice
    54  // of NetworkRemoveReports are returned.
    55  func Remove(ctx context.Context, nameOrID string, force *bool) ([]*entities.NetworkRmReport, error) {
    56  	var reports []*entities.NetworkRmReport
    57  	conn, err := bindings.GetClient(ctx)
    58  	if err != nil {
    59  		return nil, err
    60  	}
    61  	params := url.Values{}
    62  	if force != nil {
    63  		params.Set("force", strconv.FormatBool(*force))
    64  	}
    65  	response, err := conn.DoRequest(nil, http.MethodDelete, "/networks/%s", params, nil, nameOrID)
    66  	if err != nil {
    67  		return nil, err
    68  	}
    69  	return reports, response.Process(&reports)
    70  }
    71  
    72  // List returns a summary of all CNI network configurations
    73  func List(ctx context.Context, options entities.NetworkListOptions) ([]*entities.NetworkListReport, error) {
    74  	var (
    75  		netList []*entities.NetworkListReport
    76  	)
    77  	conn, err := bindings.GetClient(ctx)
    78  	if err != nil {
    79  		return nil, err
    80  	}
    81  	params := url.Values{}
    82  	if options.Filter != "" {
    83  		params.Set("filter", options.Filter)
    84  	}
    85  	response, err := conn.DoRequest(nil, http.MethodGet, "/networks/json", params, nil)
    86  	if err != nil {
    87  		return netList, err
    88  	}
    89  	return netList, response.Process(&netList)
    90  }
    91  
    92  // Disconnect removes a container from a given network
    93  func Disconnect(ctx context.Context, networkName string, options entities.NetworkDisconnectOptions) error {
    94  	conn, err := bindings.GetClient(ctx)
    95  	if err != nil {
    96  		return err
    97  	}
    98  	params := url.Values{}
    99  	body, err := jsoniter.MarshalToString(options)
   100  	if err != nil {
   101  		return err
   102  	}
   103  	stringReader := strings.NewReader(body)
   104  	response, err := conn.DoRequest(stringReader, http.MethodPost, "/networks/%s/disconnect", params, nil, networkName)
   105  	if err != nil {
   106  		return err
   107  	}
   108  	return response.Process(nil)
   109  }
   110  
   111  // Connect adds a container to a network
   112  func Connect(ctx context.Context, networkName string, options entities.NetworkConnectOptions) error {
   113  	conn, err := bindings.GetClient(ctx)
   114  	if err != nil {
   115  		return err
   116  	}
   117  	params := url.Values{}
   118  	body, err := jsoniter.MarshalToString(options)
   119  	if err != nil {
   120  		return err
   121  	}
   122  	stringReader := strings.NewReader(body)
   123  	response, err := conn.DoRequest(stringReader, http.MethodPost, "/networks/%s/connect", params, nil, networkName)
   124  	if err != nil {
   125  		return err
   126  	}
   127  	return response.Process(nil)
   128  }