GPFS Driver

GPFS driver uses IBM General Parallel File System (GPFS), a high-performance, clustered file system, developed by IBM, as the storage backend for serving file shares to the manila clients.

Supported shared filesystems

  • NFS (access by IP)

Supported Operations

  • Create NFS Share

  • Delete NFS Share

  • Create Share Snapshot

  • Delete Share Snapshot

  • Create Share from a Share Snapshot

  • Allow NFS Share access

    • Currently only ‘rw’ access level is supported

  • Deny NFS Share access

Requirements

  • Install GPFS with server license, version >= 2.0, on the storage backend.

  • Install Kernel NFS or Ganesha NFS server on the storage backend servers.

  • If using Ganesha NFS, currently NFS Ganesha v1.5 and v2.0 are supported.

  • Create a GPFS cluster and create a filesystem on the cluster, that will be used to create the manila shares.

  • Enable quotas for the GPFS file system (mmchfs -Q yes).

  • Establish network connection between the manila host and the storage backend.

Manila driver configuration setting

The following parameters in the manila configuration file need to be set:

  • share_driver = manila.share.drivers.ibm.gpfs.GPFSShareDriver

  • gpfs_share_export_ip = <IP to be added to GPFS export string>

  • If the backend GPFS server is not running on the manila host machine, the following options are required to SSH to the remote GPFS backend server:

    • gpfs_ssh_login = <GPFS server SSH login name>

      and one of the following settings is required to execute commands over SSH:

    • gpfs_ssh_private_key = <path to GPFS server SSH private key for login>

    • gpfs_ssh_password = <GPFS server SSH login password>

The following configuration parameters are optional:

  • gpfs_mount_point_base = <base folder where exported shares are located>

  • gpfs_nfs_server_type = <KNFS|GNFS>

  • gpfs_nfs_server_list = <list of the fully qualified NFS server names>

  • gpfs_ssh_port = <ssh port number>

  • knfs_export_options = <options to use when creating a share using kernel

    NFS server>

Restart of manila-share service is needed for the configuration changes to take effect.

Known Restrictions

  • The driver does not support a segmented-network multi-tenancy model but instead works over a flat network where the tenants share a network.

  • While using remote GPFS node, with Ganesha NFS, ‘gpfs_ssh_private_key’ for remote login to the GPFS node must be specified and there must be a passwordless authentication already setup between the manila share service and the remote GPFS node.

The manila.share.drivers.ibm.gpfs Module

GPFS Driver for shares.

Config Requirements:

GPFS file system must have quotas enabled (mmchfs -Q yes).

Notes:

GPFS independent fileset is used for each share.

TODO(nileshb): add support for share server creation/deletion/handling.

Limitation:

While using remote GPFS node, with Ganesha NFS, ‘gpfs_ssh_private_key’ for remote login to the GPFS node must be specified and there must be a passwordless authentication already setup between the Manila share service and the remote GPFS node.

class CESHelper(execute, config_object)

Bases: manila.share.drivers.ibm.gpfs.NASHelperBase

Wrapper for NFS by Spectrum Scale CES

allow_access(local_path, share, access)

Allow access to the host.

deny_access(local_path, share, access, force=False)

Deny access to the host.

get_access_option(access)

Get access option string based on access level.

remove_export(local_path, share)

Remove export.

resync_access(local_path, share, access_rules)

Re-sync all access rules for given share.

class GPFSShareDriver(*args, **kwargs)

Bases: manila.share.driver.ExecuteMixin, manila.share.driver.GaneshaMixin, manila.share.driver.ShareDriver

GPFS Share Driver.

Executes commands relating to Shares. Supports creation of shares on a GPFS cluster.

API version history:

1.0 - Initial version. 1.1 - Added extend_share functionality 2.0 - Added CES support for NFS Ganesha

check_for_setup_error()

Returns an error if prerequisites aren’t met.

create_share(ctx, share, share_server=None)

Create GPFS directory that will be represented as share.

create_share_from_snapshot(ctx, share, snapshot, share_server=None, parent_share=None)

Is called to create share from a snapshot.

create_snapshot(context, snapshot, share_server=None)

Creates a snapshot.

delete_share(ctx, share, share_server=None)

Remove and cleanup share storage.

delete_snapshot(context, snapshot, share_server=None)

Deletes a snapshot.

do_setup(context)

Any initialization the share driver does while starting.

ensure_share(ctx, share, share_server=None)

Ensure that storage are mounted and exported.

extend_share(share, new_size, share_server=None)

Extends the quota on the share fileset.

get_network_allocations_number()

Returns number of network allocations for creating VIFs.

Drivers that use Nova for share servers should return zero (0) here same as Generic driver does. Because Nova will handle network resources allocation. Drivers that handle networking itself should calculate it according to their own requirements. It can have 1+ network interfaces.

manage_existing(share, driver_options)

Brings an existing share under Manila management.

If the provided share is not valid, then raise a ManageInvalidShare exception, specifying a reason for the failure.

If the provided share is not in a state that can be managed, such as being replicated on the backend, the driver MUST raise ManageInvalidShare exception with an appropriate message.

The share has a share_type, and the driver can inspect that and compare against the properties of the referenced backend share. If they are incompatible, raise a ManageExistingShareTypeMismatch, specifying a reason for the failure.

This method is invoked when the share is being managed with a share type that has driver_handles_share_servers extra-spec set to False.

Parameters
  • share – Share model

  • driver_options – Driver-specific options provided by admin.

Returns

share_update dictionary with required key ‘size’, which should contain size of the share.

update_access(context, share, access_rules, add_rules, delete_rules, share_server=None)

Update access rules for given share.

class KNFSHelper(execute, config_object)

Bases: manila.share.drivers.ibm.gpfs.NASHelperBase

Wrapper for Kernel NFS Commands.

allow_access(local_path, share, access, error_on_exists=True)

Allow access to one or more vm instances.

deny_access(local_path, share, access)

Remove access for one or more vm instances.

get_access_option(access)

Get access option string based on access level.

remove_export(local_path, share)

Remove export.

resync_access(local_path, share, access_rules)

Re-sync all access rules for given share.

class NASHelperBase(execute, config_object)

Bases: object

Interface to work with share.

abstract allow_access(local_path, share, access)

Allow access to the host.

create_export(local_path)

Construct location of new export.

abstract deny_access(local_path, share, access)

Deny access to the host.

abstract get_access_option(access)

Get access option string based on access level.

get_export_options(share, access, helper)

Get the export options.

abstract remove_export(local_path, share)

Remove export.

abstract resync_access(local_path, share, access_rules)

Re-sync all access rules for given share.