Network plug-ins

The Shared File Systems service architecture defines an abstraction layer for network resource provisioning and allowing administrators to choose from a different options for how network resources are assigned to their projects’ networked storage. There are a set of network plug-ins that provide a variety of integration approaches with the network services that are available with OpenStack.

What is a network plugin in Manila?

A network plugin is a python class that uses a specific facility (e.g. Neutron network) to provide network resources to the manila-share service.

When to use a network plugin?

A Manila share driver may be configured in one of two modes, where it is managing the lifecycle of share servers on its own or where it is merely providing storage resources on a pre-configured share server. This mode is defined using the boolean option driver_handles_share_servers in the Manila configuration file. A network plugin is only useful when a driver is handling its own share servers.

Note

Not all share drivers support both modes. Each driver must report which mode(s) it supports to the manila-share service.

When driver_handles_share_servers is set to True, a share driver will be called to create share servers for shares using information provided within a share network. This information will be provided to one of the enabled network plugins that will handle reservation, creation and deletion of network resources including IP addresses and network interfaces.

The Shared File Systems service may need a network resource provisioning if share service with specified driver works in mode, when a share driver manages lifecycle of share servers on its own. This behavior is defined by a flag driver_handles_share_servers in share service configuration. When driver_handles_share_servers is set to True, a share driver will be called to create share servers for shares using information provided within a share network. This information will be provided to one of the enabled network plug-ins that will handle reservation, creation and deletion of network resources including IP addresses and network interfaces.

What network plug-ins are available?

There are three network plug-ins and three python classes in the Shared File Systems service:

  1. Network plug-in for using the OpenStack Networking service. It allows to use any network segmentation that the Networking service supports. It is up to each share driver to support at least one network segmentation type.

    1. manila.network.neutron.neutron_network_plugin.NeutronNetworkPlugin. This is a default network plug-in. It requires the neutron_net_id and the neutron_subnet_id to be provided when defining the share network that will be used for the creation of share servers. The user may define any number of share networks corresponding to the various physical network segments in a project environment.

    2. manila.network.neutron.neutron_network_plugin.NeutronSingleNetworkPlugin. This is a simplification of the previous case. It accepts values for neutron_net_id and neutron_subnet_id from the manila.conf configuration file and uses one network for all shares.

    3. manila.network.neutron.neutron_network_plugin.NeutronBindNetworkPlugin. This driver waits for active binding and fails if a Neutron port can’t be bound or an error occurs. This plugin is useful for agent based binding (like OVS with docker driver) and fabric binding where real hardware reconfiguration is taking place. The existing NeutronBindSingleNetworkPlugin is a combination of 1b and 1c.

    When only a single network is needed, the NeutronSingleNetworkPlugin (1.b) is a simple solution. Otherwise NeutronNetworkPlugin (1.a) should be chosen.

  2. Network plug-in for specifying networks independently from OpenStack networking services.

    1. manila.network.standalone_network_plugin.StandaloneNetworkPlugin. This plug-in uses a pre-existing network that is available to the manila-share host. This network may be handled either by OpenStack or be created independently by any other means. The plug-in supports any type of network - flat and segmented. As above, it is completely up to the share driver to support the network type for which the network plug-in is configured.

Note

The ip version of the share network is defined by the flags of network_plugin_ipv4_enabled and network_plugin_ipv6_enabled in the manila.conf configuration since Pike. The network_plugin_ipv4_enabled default value is set to True. The network_plugin_ipv6_enabled default value is set to False. If network_plugin_ipv6_enabled option is True, the value of network_plugin_ipv4_enabled will be ignored, it means to support both IPv4 and IPv6 share network.