(nw *libnetwork.Network, dynamic bool)
| 652 | } |
| 653 | |
| 654 | func (daemon *Daemon) deleteNetwork(nw *libnetwork.Network, dynamic bool) error { |
| 655 | if network.IsPredefined(nw.Name()) && !dynamic { |
| 656 | err := fmt.Errorf("%s is a pre-defined network and cannot be removed", nw.Name()) |
| 657 | return errdefs.Forbidden(err) |
| 658 | } |
| 659 | |
| 660 | if dynamic && !nw.Dynamic() { |
| 661 | if network.IsPredefined(nw.Name()) { |
| 662 | // Predefined networks now support swarm services. Make this |
| 663 | // a no-op when cluster requests to remove the predefined network. |
| 664 | return nil |
| 665 | } |
| 666 | err := fmt.Errorf("%s is not a dynamic network", nw.Name()) |
| 667 | return errdefs.Forbidden(err) |
| 668 | } |
| 669 | |
| 670 | if err := nw.Delete(); err != nil { |
| 671 | return fmt.Errorf("error while removing network: %w", err) |
| 672 | } |
| 673 | |
| 674 | // If this is not a configuration only network, we need to |
| 675 | // update the corresponding remote drivers' reference counts |
| 676 | if !nw.ConfigOnly() { |
| 677 | daemon.pluginRefCount(nw.Type(), driverapi.NetworkPluginEndpointType, plugingetter.Release) |
| 678 | ipamType, _, _, _ := nw.IpamConfig() |
| 679 | daemon.pluginRefCount(ipamType, ipamapi.PluginEndpointType, plugingetter.Release) |
| 680 | daemon.LogNetworkEvent(nw, events.ActionDestroy) |
| 681 | } |
| 682 | |
| 683 | return nil |
| 684 | } |
| 685 | |
| 686 | // GetNetworks returns a list of all networks |
| 687 | func (daemon *Daemon) GetNetworks(filter network.Filter, config backend.NetworkListConfig) ([]networktypes.Inspect, error) { |
no test coverage detected