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 }