| package client |
| |
| import ( |
| "context" |
| "encoding/json" |
| |
| "github.com/moby/moby/api/types/network" |
| ) |
| |
| // NetworkCreateOptions holds options to create a network. |
| type NetworkCreateOptions struct { |
| Driver string // Driver is the driver-name used to create the network (e.g. `bridge`, `overlay`) |
| Scope string // Scope describes the level at which the network exists (e.g. `swarm` for cluster-wide or `local` for machine level). |
| EnableIPv4 *bool // EnableIPv4 represents whether to enable IPv4. |
| EnableIPv6 *bool // EnableIPv6 represents whether to enable IPv6. |
| IPAM *network.IPAM // IPAM is the network's IP Address Management. |
| Internal bool // Internal represents if the network is used internal only. |
| Attachable bool // Attachable represents if the global scope is manually attachable by regular containers from workers in swarm mode. |
| Ingress bool // Ingress indicates the network is providing the routing-mesh for the swarm cluster. |
| ConfigOnly bool // ConfigOnly creates a config-only network. Config-only networks are place-holder networks for network configurations to be used by other networks. ConfigOnly networks cannot be used directly to run containers or services. |
| ConfigFrom string // ConfigFrom specifies the source which will provide the configuration for this network. The specified network must be a config-only network; see [CreateOptions.ConfigOnly]. |
| Options map[string]string // Options specifies the network-specific options to use for when creating the network. |
| Labels map[string]string // Labels holds metadata specific to the network being created. |
| } |
| |
| // NetworkCreateResult represents the result of a network create operation. |
| type NetworkCreateResult struct { |
| ID string |
| |
| Warning []string |
| } |
| |
| // NetworkCreate creates a new network in the docker host. |
| func (cli *Client) NetworkCreate(ctx context.Context, name string, options NetworkCreateOptions) (NetworkCreateResult, error) { |
| req := network.CreateRequest{ |
| Name: name, |
| Driver: options.Driver, |
| Scope: options.Scope, |
| EnableIPv4: options.EnableIPv4, |
| EnableIPv6: options.EnableIPv6, |
| IPAM: options.IPAM, |
| Internal: options.Internal, |
| Attachable: options.Attachable, |
| Ingress: options.Ingress, |
| ConfigOnly: options.ConfigOnly, |
| Options: options.Options, |
| Labels: options.Labels, |
| } |
| |
| if options.ConfigFrom != "" { |
| req.ConfigFrom = &network.ConfigReference{Network: options.ConfigFrom} |
| } |
| |
| resp, err := cli.post(ctx, "/networks/create", nil, req, nil) |
| defer ensureReaderClosed(resp) |
| if err != nil { |
| return NetworkCreateResult{}, err |
| } |
| |
| var response network.CreateResponse |
| err = json.NewDecoder(resp.Body).Decode(&response) |
| |
| var warnings []string |
| if response.Warning != "" { |
| warnings = []string{response.Warning} |
| } |
| |
| return NetworkCreateResult{ID: response.ID, Warning: warnings}, err |
| } |