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
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>
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: 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: ExecuteMixin
, GaneshaMixin
, 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:
-
- 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: 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.