func runCreate(dockerCli *client.DockerCli, opts createOptions) error { client := dockerCli.Client() ipamCfg, err := consolidateIpam(opts.ipamSubnet, opts.ipamIPRange, opts.ipamGateway, opts.ipamAux.GetAll()) if err != nil { return err } // Construct network create request body nc := types.NetworkCreate{ Driver: opts.driver, Options: opts.driverOpts.GetAll(), IPAM: network.IPAM{ Driver: opts.ipamDriver, Config: ipamCfg, Options: opts.ipamOpt.GetAll(), }, CheckDuplicate: true, Internal: opts.internal, EnableIPv6: opts.ipv6, Labels: runconfigopts.ConvertKVStringsToMap(opts.labels), } resp, err := client.NetworkCreate(context.Background(), opts.name, nc) if err != nil { return err } fmt.Fprintf(dockerCli.Out(), "%s\n", resp.ID) return nil }
func updateNetworks( ctx context.Context, dockerCli *client.DockerCli, networks []string, namespace string, ) error { client := dockerCli.Client() existingNetworks, err := getNetworks(ctx, client, namespace) if err != nil { return err } existingNetworkMap := make(map[string]types.NetworkResource) for _, network := range existingNetworks { existingNetworkMap[network.Name] = network } createOpts := types.NetworkCreate{ Labels: getStackLabels(namespace, nil), Driver: defaultNetworkDriver, // TODO: remove when engine-api uses omitempty for IPAM IPAM: network.IPAM{Driver: "default"}, } for _, internalName := range networks { name := fmt.Sprintf("%s_%s", namespace, internalName) if _, exists := existingNetworkMap[name]; exists { continue } fmt.Fprintf(dockerCli.Out(), "Creating network %s\n", name) if _, err := client.NetworkCreate(ctx, name, createOpts); err != nil { return err } } return nil }