Shared Filesystems

Todo

rework

The manila.share.manager Module

NAS share manager managers creating shares and access rights.

Related Flags

share_driver:Used by ShareManager.
class ShareManager(share_driver=None, service_name=None, *args, **kwargs)

Bases: manila.manager.SchedulerDependentManager

Manages NAS storages.

RPC_API_VERSION = '1.11'
allow_access(*args, **kwargs)
create_cgsnapshot(*args, **kwargs)
create_consistency_group(*args, **kwargs)
create_replicated_snapshot(*args, **kwargs)
create_share_instance(*args, **kwargs)
create_share_replica(*args, **kwargs)
create_snapshot(*args, **kwargs)
delete_cgsnapshot(*args, **kwargs)
delete_consistency_group(*args, **kwargs)
delete_free_share_servers(*args, **kwargs)
delete_replicated_snapshot(*args, **kwargs)
delete_share_instance(*args, **kwargs)
delete_share_replica(*args, **kwargs)
delete_share_server(*args, **kwargs)
delete_snapshot(*args, **kwargs)
deny_access(*args, **kwargs)
extend_share(*args, **kwargs)
init_host(*args, **kwargs)
manage_share(*args, **kwargs)
manage_snapshot(*args, **kwargs)
migration_cancel(*args, **kwargs)
migration_complete(*args, **kwargs)
migration_get_driver_info(*args, **kwargs)
migration_get_info(*args, **kwargs)
migration_get_progress(*args, **kwargs)
migration_start(*args, **kwargs)

Migrates a share from current host to another host.

periodic_share_replica_snapshot_update(*args, **kwargs)
periodic_share_replica_update(*args, **kwargs)
promote_share_replica(*args, **kwargs)
publish_service_capabilities(*args, **kwargs)
shrink_share(*args, **kwargs)
unmanage_share(*args, **kwargs)
unmanage_snapshot(*args, **kwargs)
update_share_replica(*args, **kwargs)
add_hooks(f)
locked_share_replica_operation(operation)

Lock decorator for share replica operations.

Takes a named lock prior to executing the operation. The lock is named with the id of the share to which the replica belongs.

Intended use: If a replica operation uses this decorator, it will block actions on all share replicas of the share until the named lock is free. This is used to protect concurrent operations on replicas of the same share e.g. promote ReplicaA while deleting ReplicaB, both belonging to the same share.

The manila.share.driver Module

Drivers for shares.

class ExecuteMixin

Bases: object

Provides an executable functionality to a driver class.

init_execute_mixin(*args, **kwargs)
set_execute(execute)
class GaneshaMixin

Bases: object

Augment derived classes with Ganesha configuration.

init_ganesha_mixin(*args, **kwargs)
class ShareDriver(driver_handles_share_servers, *args, **kwargs)

Bases: object

Class defines interface of NAS driver.

admin_network_api
allocate_admin_network(context, share_server, count=None, **kwargs)

Allocate admin network resources using given network information.

allocate_network(context, share_server, share_network, count=None, **kwargs)

Allocate network resources using given network information.

allow_access(context, share, access, share_server=None)

Allow access to the share.

check_for_setup_error()

Check for setup error.

choose_share_server_compatible_with_cg(context, share_servers, cg_ref, cgsnapshot=None)
choose_share_server_compatible_with_share(context, share_servers, share, snapshot=None, consistency_group=None)

Method that allows driver to choose share server for provided share.

If compatible share-server is not found, method should return None.

Parameters:
  • context – Current context
  • share_servers – list with share-server models
  • share – share model
  • snapshot – snapshot model
  • consistency_group – ConsistencyGroup model with shares
Returns:

share-server or None

create_cgsnapshot(context, snap_dict, share_server=None)

Create a consistency group snapshot.

Parameters:
  • context
  • snap_dict

    The cgsnapshot details EXAMPLE: .. code:

    {
    'status': 'available',
    'project_id': '13c0be6290934bd98596cfa004650049',
    'user_id': 'a0314a441ca842019b0952224aa39192',
    'description': None,
    'deleted': '0',
    'created_at': datetime.datetime(2015, 8, 10, 0, 5, 58),
    'updated_at': datetime.datetime(2015, 8, 10, 0, 5, 58),
    'consistency_group_id': '4b04fdc3-00b9-4909-ba1a-06e9b3f88b67',
    'cgsnapshot_members': [
        {
         'status': 'available',
         'share_type_id': '1a9ed31e-ee70-483d-93ba-89690e028d7f',
         'user_id': 'a0314a441ca842019b0952224aa39192',
         'deleted': 'False',
         'created_at': datetime.datetime(2015, 8, 10, 0, 5, 58),
         'share': <models.Share>,
         'updated_at': datetime.datetime(2015, 8, 10, 0, 5, 58),
         'share_proto': 'NFS',
         'project_id': '13c0be6290934bd98596cfa004650049',
         'cgsnapshot_id': 'f6aa3b59-57eb-421e-965c-4e182538e36a',
         'deleted_at': None,
         'id': '6813e06b-a8f5-4784-b17d-f3e91afa370e',
         'size': 1
        }
    ],
    'deleted_at': None,
    'id': 'f6aa3b59-57eb-421e-965c-4e182538e36a',
    'name': None
    }
    
Returns:

(cgsnapshot_update, member_update_list) cgsnapshot_update - a dict containing any values to be updated for the CGSnapshot in the database. This value may be None.

member_update_list - a list of dictionaries containing for every member of the cgsnapshot. Each dict should contains values to be updated for teh CGSnapshotMember in the database. This list may be empty or None.

create_consistency_group(context, cg_dict, share_server=None)

Create a consistency group.

Parameters:
  • context
  • cg_dict – The consistency group details EXAMPLE: { ‘status’: ‘creating’, ‘project_id’: ‘13c0be6290934bd98596cfa004650049’, ‘user_id’: ‘a0314a441ca842019b0952224aa39192’, ‘description’: None, ‘deleted’: ‘False’, ‘created_at’: datetime.datetime(2015, 8, 10, 15, 14, 6), ‘updated_at’: None, ‘source_cgsnapshot_id’: ‘f6aa3b59-57eb-421e-965c-4e182538e36a’, ‘host’: 'openstack2@cmodeSSVMNFS‘, ‘deleted_at’: None, ‘share_types’: [<models.ConsistencyGroupShareTypeMapping>], ‘id’: ‘eda52174-0442-476d-9694-a58327466c14’, ‘name’: None }
Returns:

(cg_model_update, share_update_list) cg_model_update - a dict containing any values to be updated for the CG in the database. This value may be None.

create_consistency_group_from_cgsnapshot(context, cg_dict, cgsnapshot_dict, share_server=None)

Create a consistency group from a cgsnapshot.

Parameters:
  • context
  • cg_dict

    The consistency group details EXAMPLE: .. code:

    {
    'status': 'creating',
    'project_id': '13c0be6290934bd98596cfa004650049',
    'user_id': 'a0314a441ca842019b0952224aa39192',
    'description': None,
    'deleted': 'False',
    'created_at': datetime.datetime(2015, 8, 10, 15, 14, 6),
    'updated_at': None,
    'source_cgsnapshot_id': 'f6aa3b59-57eb-421e-965c-4e182538e36a',
    'host': 'openstack2@cmodeSSVMNFS',
    'deleted_at': None,
    'shares': [<models.Share>], # The new shares being created
    'share_types': [<models.ConsistencyGroupShareTypeMapping>],
    'id': 'eda52174-0442-476d-9694-a58327466c14',
    'name': None
    }
    
  • cgsnapshot_dict

    The cgsnapshot details EXAMPLE: .. code:

    {
    'status': 'available',
    'project_id': '13c0be6290934bd98596cfa004650049',
    'user_id': 'a0314a441ca842019b0952224aa39192',
    'description': None,
    'deleted': '0',
    'created_at': datetime.datetime(2015, 8, 10, 0, 5, 58),
    'updated_at': datetime.datetime(2015, 8, 10, 0, 5, 58),
    'consistency_group_id': '4b04fdc3-00b9-4909-ba1a-06e9b3f88b67',
    'cgsnapshot_members': [
        {
         'status': 'available',
         'share_type_id': '1a9ed31e-ee70-483d-93ba-89690e028d7f',
         'user_id': 'a0314a441ca842019b0952224aa39192',
         'deleted': 'False',
         'created_at': datetime.datetime(2015, 8, 10, 0, 5, 58),
         'share': <models.Share>,
         'updated_at': datetime.datetime(2015, 8, 10, 0, 5, 58),
         'share_proto': 'NFS',
         'project_id': '13c0be6290934bd98596cfa004650049',
         'cgsnapshot_id': 'f6aa3b59-57eb-421e-965c-4e182538e36a',
         'deleted_at': None,
         'id': '6813e06b-a8f5-4784-b17d-f3e91afa370e',
         'size': 1
        }
    ],
    'deleted_at': None,
    'id': 'f6aa3b59-57eb-421e-965c-4e182538e36a',
    'name': None
    }
    
Returns:

(cg_model_update, share_update_list) cg_model_update - a dict containing any values to be updated for the CG in the database. This value may be None.

share_update_list - a list of dictionaries containing dicts for every share created in the CG. Any share dicts should at a minimum contain the ‘id’ key and ‘export_locations’. Export locations should be in the same format as returned by a share_create. This list may be empty or None. EXAMPLE: .. code:

[{'id': 'uuid', 'export_locations': ['export_path']}]

create_replica(context, replica_list, new_replica, access_rules, replica_snapshots, share_server=None)

Replicate the active replica to a new replica on this backend.

NOTE: This call is made on the host that the new replica is being created upon.

Parameters:
  • context – Current context
  • replica_list – List of all replicas for a particular share.

This list also contains the replica to be created. The ‘active’ replica will have its ‘replica_state’ attr set to ‘active’.

EXAMPLE:
[

{ ‘id’: ‘d487b88d-e428-4230-a465-a800c2cce5f8’, ‘share_id’: ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘replica_state’: ‘in_sync’,

...

‘share_server_id’: ‘4ce78e7b-0ef6-4730-ac2a-fd2defefbd05’, ‘share_server’: <models.ShareServer> or None, }, { ‘id’: ‘10e49c3e-aca9-483b-8c2d-1c337b38d6af’, ‘share_id’: ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘replica_state’: ‘active’,

...

‘share_server_id’: ‘f63629b3-e126-4448-bec2-03f788f76094’, ‘share_server’: <models.ShareServer> or None, }, { ‘id’: ‘e82ff8b6-65f0-11e5-9d70-feff819cdc9f’, ‘share_id’: ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘replica_state’: ‘in_sync’,

...

‘share_server_id’: ‘07574742-67ea-4dfd-9844-9fbd8ada3d87’, ‘share_server’: <models.ShareServer> or None, }, ...

]

Parameters:
  • new_replica

    The share replica dictionary. EXAMPLE:

    { ‘id’: ‘e82ff8b6-65f0-11e5-9d70-feff819cdc9f’, ‘share_id’: ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘deleted’: False, ‘host’: 'openstack2@cmodeSSVMNFS2‘, ‘status’: ‘creating’, ‘scheduled_at’: datetime.datetime(2015, 8, 10, 0, 5, 58), ‘launched_at’: datetime.datetime(2015, 8, 10, 0, 5, 58), ‘terminated_at’: None, ‘replica_state’: ‘out_of_sync’, ‘availability_zone_id’: ‘f6e146d0-65f0-11e5-9d70-feff819cdc9f’, ‘export_locations’: [

    models.ShareInstanceExportLocations,

    ], ‘access_rules_status’: ‘out_of_sync’, ‘share_network_id’: ‘4ccd5318-65f1-11e5-9d70-feff819cdc9f’, ‘share_server_id’: ‘e6155221-ea00-49ef-abf9-9f89b7dd900a’, ‘share_server’: <models.ShareServer> or None, }

  • access_rules – A list of access rules that other instances of

the share already obey. Drivers are expected to apply access rules to the new replica or disregard access rules that don’t apply.

EXAMPLE:
[ { ‘id’: ‘f0875f6f-766b-4865-8b41-cccb4cdf1676’, ‘deleted’ = False, ‘share_id’ = ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘access_type’ = ‘ip’, ‘access_to’ = ‘172.16.20.1’, ‘access_level’ = ‘rw’, }]
Parameters:replica_snapshots – List of dictionaries of snapshot instances

for each snapshot of the share whose ‘aggregate_status’ property was reported to be ‘available’ when the share manager initiated this request. Each list member will have two sub dictionaries: ‘active_replica_snapshot’ and ‘share_replica_snapshot’. The ‘active’ replica snapshot corresponds to the instance of the snapshot on any of the ‘active’ replicas of the share while share_replica_snapshot corresponds to the snapshot instance for the specific replica that will need to exist on the new share replica that is being created. The driver needs to ensure that this snapshot instance is truly available before transitioning the replica from ‘out_of_sync’ to ‘in_sync’. Snapshots instances for snapshots that have an ‘aggregate_status’ of ‘creating’ or ‘deleting’ will be polled for in the update_replicated_snapshot method.

EXAMPLE:

[ { ‘active_replica_snapshot’: {

‘id’: ‘8bda791c-7bb6-4e7b-9b64-fefff85ff13e’, ‘share_instance_id’: ‘10e49c3e-aca9-483b-8c2d-1c337b38d6af’, ‘status’: ‘available’, ‘provider_location’: ‘/newton/share-snapshot-10e49c3e-aca9’, ... },
‘share_replica_snapshot’: {

‘id’: ‘’, ‘share_instance_id’: ‘e82ff8b6-65f0-11e5-9d70-feff819cdc9f’, ‘status’: ‘available’, ‘provider_location’: None,

...

},

}]

Parameters:share_server – <models.ShareServer> or None,

Share server of the replica being created. :return: None or a dictionary containing export_locations, replica_state and access_rules_status. export_locations is a list of paths and replica_state is one of active, in_sync, out_of_sync or error. A backend supporting ‘writable’ type replication should return ‘active’ as the replica_state. Export locations should be in the same format as returned during the create_share call.

EXAMPLE: .. code:: {

‘export_locations’: [
{
‘path’: ‘172.16.20.22/sample/export/path’,
‘is_admin_only’: False, ‘metadata’: {‘some_key’: ‘some_value’},

},

],
‘replica_state’: ‘in_sync’, ‘access_rules_status’: ‘in_sync’,

}

create_replicated_snapshot(context, replica_list, replica_snapshots, share_server=None)

Create a snapshot on active instance and update across the replicas.

NOTE: This call is made on the ‘active’ replica’s host. Drivers are expected to transfer the snapshot created to the respective replicas.

The driver is expected to return model updates to the share manager. If it was able to confirm the creation of any number of the snapshot instances passed in this interface, it can set their status to ‘available’ as a cue for the share manager to set the progress attr to ‘100%’.

Parameters:
  • context – Current context
  • replica_list – List of all replicas for a particular share.

The ‘active’ replica will have its ‘replica_state’ attr set to ‘active’.

EXAMPLE:
[

{ ‘id’: ‘d487b88d-e428-4230-a465-a800c2cce5f8’, ‘share_id’: ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘replica_state’: ‘in_sync’,

...

‘share_server_id’: ‘4ce78e7b-0ef6-4730-ac2a-fd2defefbd05’, ‘share_server’: <models.ShareServer> or None, }, { ‘id’: ‘10e49c3e-aca9-483b-8c2d-1c337b38d6af’, ‘share_id’: ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘replica_state’: ‘active’,

...

‘share_server_id’: ‘f63629b3-e126-4448-bec2-03f788f76094’, ‘share_server’: <models.ShareServer> or None, }, ...

]

Parameters:
  • replica_snapshots

    List of all snapshot instances that track the snapshot across the replicas. All the instances will have their status attribute set to ‘creating’.

    EXAMPLE:
    [
    { ‘id’: ‘d3931a93-3984-421e-a9e7-d9f71895450a’, ‘snapshot_id’: ‘13ee5cb5-fc53-4539-9431-d983b56c5c40’, ‘status: ‘creating’, ‘progress’: ‘0%’,
    ...

    }, { ‘id’: ‘8bda791c-7bb6-4e7b-9b64-fefff85ff13e’, ‘snapshot_id’: ‘13ee5cb5-fc53-4539-9431-d983b56c5c40’, ‘status: ‘creating’, ‘progress’: ‘0%’,

    ...

    ]

  • share_server – <models.ShareServer> or None
Returns:

List of replica_snapshots, a list of dictionaries containing

values that need to be updated on the database for the snapshot instances being created. :raises: Exception. Any exception in this method will set all instances to ‘error’.

create_share(context, share, share_server=None)

Is called to create share.

create_share_from_snapshot(context, share, snapshot, share_server=None)

Is called to create share from snapshot.

create_snapshot(context, snapshot, share_server=None)

Is called to create snapshot.

Parameters:
  • context – Current context
  • snapshot – Snapshot model. Share model could be retrieved through snapshot[‘share’].
  • share_server – Share server model or None.
deallocate_network(context, share_server_id)

Deallocate network resources for the given share server.

delete_cgsnapshot(context, snap_dict, share_server=None)

Delete a consistency group snapshot

Parameters:
  • context
  • snap_dict

    The cgsnapshot details EXAMPLE: .. code:

    {
    'status': 'available',
    'project_id': '13c0be6290934bd98596cfa004650049',
    'user_id': 'a0314a441ca842019b0952224aa39192',
    'description': None,
    'deleted': '0',
    'created_at': datetime.datetime(2015, 8, 10, 0, 5, 58),
    'updated_at': datetime.datetime(2015, 8, 10, 0, 5, 58),
    'consistency_group_id': '4b04fdc3-00b9-4909-ba1a-06e9b3f88b67',
    'cgsnapshot_members': [
        {
         'status': 'available',
         'share_type_id': '1a9ed31e-ee70-483d-93ba-89690e028d7f',
         'share_id': 'e14b5174-e534-4f35-bc4f-fe81c1575d6f',
         'user_id': 'a0314a441ca842019b0952224aa39192',
         'deleted': 'False',
         'created_at': datetime.datetime(2015, 8, 10, 0, 5, 58),
         'share': <models.Share>,
         'updated_at': datetime.datetime(2015, 8, 10, 0, 5, 58),
         'share_proto': 'NFS',
         'project_id': '13c0be6290934bd98596cfa004650049',
         'cgsnapshot_id': 'f6aa3b59-57eb-421e-965c-4e182538e36a',
         'deleted_at': None,
         'id': '6813e06b-a8f5-4784-b17d-f3e91afa370e',
         'size': 1
        }
    ],
    'deleted_at': None,
    'id': 'f6aa3b59-57eb-421e-965c-4e182538e36a',
    'name': None
    }
    
Returns:

(cgsnapshot_update, member_update_list) cgsnapshot_update - a dict containing any values to be updated for the CGSnapshot in the database. This value may be None.

delete_consistency_group(context, cg_dict, share_server=None)

Delete a consistency group

Parameters:
  • context – The request context
  • cg_dict

    The consistency group details EXAMPLE: .. code:

    {
    'status': 'creating',
    'project_id': '13c0be6290934bd98596cfa004650049',
    'user_id': 'a0314a441ca842019b0952224aa39192',
    'description': None,
    'deleted': 'False',
    'created_at': datetime.datetime(2015, 8, 10, 15, 14, 6),
    'updated_at': None,
    'source_cgsnapshot_id': 'f6aa3b59-57eb-421e-965c-4e182538e36a',
    'host': 'openstack2@cmodeSSVMNFS',
    'deleted_at': None,
    'shares': [<models.Share>], # The new shares being created
    'share_types': [<models.ConsistencyGroupShareTypeMapping>],
    'id': 'eda52174-0442-476d-9694-a58327466c14',
    'name': None
    }
    
Returns:

cg_model_update cg_model_update - a dict containing any values to be updated for the CG in the database. This value may be None.

delete_replica(context, replica_list, replica_snapshots, replica, share_server=None)

Delete a replica.

NOTE: This call is made on the host that hosts the replica being deleted.

Parameters:
  • context – Current context
  • replica_list – List of all replicas for a particular share.

This list also contains the replica to be deleted. The ‘active’ replica will have its ‘replica_state’ attr set to ‘active’.

EXAMPLE:
[

{ ‘id’: ‘d487b88d-e428-4230-a465-a800c2cce5f8’, ‘share_id’: ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘replica_state’: ‘in_sync’,

...

‘share_server_id’: ‘4ce78e7b-0ef6-4730-ac2a-fd2defefbd05’, ‘share_server’: <models.ShareServer> or None, }, { ‘id’: ‘10e49c3e-aca9-483b-8c2d-1c337b38d6af’, ‘share_id’: ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘replica_state’: ‘active’,

...

‘share_server_id’: ‘f63629b3-e126-4448-bec2-03f788f76094’, ‘share_server’: <models.ShareServer> or None, }, { ‘id’: ‘e82ff8b6-65f0-11e5-9d70-feff819cdc9f’, ‘share_id’: ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘replica_state’: ‘in_sync’,

...

‘share_server_id’: ‘07574742-67ea-4dfd-9844-9fbd8ada3d87’, ‘share_server’: <models.ShareServer> or None, }, ...

]

Parameters:
  • replica

    Dictionary of the share replica being deleted. EXAMPLE:

    { ‘id’: ‘e82ff8b6-65f0-11e5-9d70-feff819cdc9f’, ‘share_id’: ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘deleted’: False, ‘host’: 'openstack2@cmodeSSVMNFS2‘, ‘status’: ‘available’, ‘scheduled_at’: datetime.datetime(2015, 8, 10, 0, 5, 58), ‘launched_at’: datetime.datetime(2015, 8, 10, 0, 5, 58), ‘terminated_at’: None, ‘replica_state’: ‘in_sync’, ‘availability_zone_id’: ‘f6e146d0-65f0-11e5-9d70-feff819cdc9f’, ‘export_locations’: [

    models.ShareInstanceExportLocations

    ], ‘access_rules_status’: ‘out_of_sync’, ‘share_network_id’: ‘4ccd5318-65f1-11e5-9d70-feff819cdc9f’, ‘share_server_id’: ‘53099868-65f1-11e5-9d70-feff819cdc9f’, ‘share_server’: <models.ShareServer> or None, }

  • replica_snapshots – A list of dictionaries containing snapshot

instances that are associated with the share replica being deleted. No model updates are possible in this method. The driver should return when the cleanup is completed on the backend for both, the snapshots and the replica itself. Drivers must handle situations where the snapshot may not yet have finished ‘creating’ on this replica.

EXAMPLE:
[

{ ‘id’: ‘89dafd00-0999-4d23-8614-13eaa6b02a3b’, ‘snapshot_id’: ‘3ce1caf7-0945-45fd-a320-714973e949d3’, ‘status: ‘available’, ‘share_instance_id’: ‘e82ff8b6-65f0-11e5-9d70-feff819cdc9f’

...

}, { ‘id’: ‘8bda791c-7bb6-4e7b-9b64-fefff85ff13e’, ‘snapshot_id’: ‘13ee5cb5-fc53-4539-9431-d983b56c5c40’, ‘status: ‘creating’, ‘share_instance_id’: ‘e82ff8b6-65f0-11e5-9d70-feff819cdc9f’

...

]

Parameters:share_server – <models.ShareServer> or None,

Share server of the replica to be deleted. :return: None. :raises Exception. Any exception raised will set the share replica’s ‘status’ and ‘replica_state’ to ‘error_deleting’. It will not affect snapshots belonging to this replica.

delete_replicated_snapshot(context, replica_list, replica_snapshots, share_server=None)

Delete a snapshot by deleting its instances across the replicas.

NOTE: This call is made on the ‘active’ replica’s host, since drivers may not be able to delete the snapshot from an individual replica.

The driver is expected to return model updates to the share manager. If it was able to confirm the removal of any number of the snapshot instances passed in this interface, it can set their status to ‘deleted’ as a cue for the share manager to clean up that instance from the database.

Parameters:
  • context – Current context
  • replica_list – List of all replicas for a particular share.

The ‘active’ replica will have its ‘replica_state’ attr set to ‘active’.

EXAMPLE:
[

{ ‘id’: ‘d487b88d-e428-4230-a465-a800c2cce5f8’, ‘share_id’: ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘replica_state’: ‘in_sync’,

...

‘share_server_id’: ‘4ce78e7b-0ef6-4730-ac2a-fd2defefbd05’, ‘share_server’: <models.ShareServer> or None, }, { ‘id’: ‘10e49c3e-aca9-483b-8c2d-1c337b38d6af’, ‘share_id’: ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘replica_state’: ‘active’,

...

‘share_server_id’: ‘f63629b3-e126-4448-bec2-03f788f76094’, ‘share_server’: <models.ShareServer> or None, }, ...

]

Parameters:
  • replica_snapshots

    List of all snapshot instances that track the snapshot across the replicas. All the instances will have their status attribute set to ‘deleting’. EXAMPLE:

    [
    { ‘id’: ‘d3931a93-3984-421e-a9e7-d9f71895450a’, ‘snapshot_id’: ‘13ee5cb5-fc53-4539-9431-d983b56c5c40’, ‘status’: ‘deleting’, ‘progress’: ‘100%’,
    ...

    }, { ‘id’: ‘8bda791c-7bb6-4e7b-9b64-fefff85ff13e’, ‘snapshot_id’: ‘13ee5cb5-fc53-4539-9431-d983b56c5c40’, ‘status: ‘deleting’, ‘progress’: ‘100%’,

    ...

    ]

  • share_server – <models.ShareServer> or None
Returns:

List of replica_snapshots, a list of dictionaries containing

values that need to be updated on the database for the snapshot instances being deleted. To confirm the deletion of the snapshot instance, set the ‘status’ attribute of the instance to ‘deleted’(constants.STATUS_DELETED). :raises: Exception. Any exception in this method will set all instances to ‘error_deleting’.

delete_share(context, share, share_server=None)

Is called to remove share.

delete_snapshot(context, snapshot, share_server=None)

Is called to remove snapshot.

Parameters:
  • context – Current context
  • snapshot – Snapshot model. Share model could be retrieved through snapshot[‘share’].
  • share_server – Share server model or None.
deny_access(context, share, access, share_server=None)

Deny access to the share.

do_setup(context)

Any initialization the share driver does while starting.

driver_handles_share_servers
ensure_share(context, share, share_server=None)

Invoked to ensure that share is exported.

Driver can use this method to update the list of export locations of the share if it changes. To do that, you should return list with export locations.

:return None or list with export locations

extend_share(share, new_size, share_server=None)

Extends size of existing share.

Parameters:
  • share – Share model
  • new_size – New size of share (new_size > share[‘size’])
  • share_server – Optional – Share server model
get_admin_network_allocations_number()
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.

get_periodic_hook_data(context, share_instances)

Dedicated for update/extend of data for existing share instances.

Redefine this method in share driver to be able to update/change/extend share instances data that will be used by periodic hook action. One of possible updates is add-on of “automount” CLI commands for each share instance for case of notification is enabled using ‘hook’ approach.

Parameters:
  • context – Current context
  • share_instances – share instances list provided by share manager
Returns:

list of share instances.

get_pool(share)

Return pool name where the share resides on.

Parameters:share – The share hosted by the driver.
get_share_server_pools(share_server)

Return list of pools related to a particular share server.

Parameters:share_server – ShareServer class instance.
get_share_stats(refresh=False)

Get share status.

If ‘refresh’ is True, run update the stats first.

manage_existing(share, driver_options)

Brings an existing share under Manila management.

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

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.

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.

manage_existing_snapshot(snapshot, driver_options)

Brings an existing snapshot under Manila management.

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

Parameters:
  • snapshot

    ShareSnapshotInstance model with ShareSnapshot data. Example: {‘id’: <instance id>, ‘snapshot_id’: < snapshot id>,

    ‘provider_location’: <location>, ......}
  • driver_options – Optional driver-specific options provided by admin. Example: {‘key’: ‘value’, ......}
Returns:

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

migration_cancel(context, share_ref, share_server, dest_driver_migration_info)

Is called to cancel driver migration.

If possible, driver can implement a way to cancel an in-progress migration. :param context: The ‘context.RequestContext’ object for the request. :param share_ref: Reference to the share being migrated. :param share_server: Share server model or None. :param dest_driver_migration_info: Migration information provided by destination host.

migration_complete(context, share_ref, share_server, dest_driver_migration_info)

Is called to perform 2nd phase of driver migration of a given share.

If driver is implementing 2-phase migration, this method should perform tasks related to the 2nd phase of migration, thus completing it. :param context: The ‘context.RequestContext’ object for the request. :param share_ref: Reference to the share being migrated. :param share_server: Share server model or None. :param dest_driver_migration_info: Migration information provided by destination host. :returns: Dictionary containing a model update with relevant data to be updated after migration, such as export locations.

migration_get_driver_info(context, share, share_server)

Is called to provide necessary driver migration logic.

Parameters:
  • context – The ‘context.RequestContext’ object for the request.
  • share – Reference to the share being migrated.
  • share_server – Share server model or None.
Returns:

A dictionary with migration information.

migration_get_info(context, share, share_server)

Is called to provide necessary generic migration logic.

Parameters:
  • context – The ‘context.RequestContext’ object for the request.
  • share – Reference to the share being migrated.
  • share_server – Share server model or None.
Returns:

A dictionary with migration information.

migration_get_progress(context, share_ref, share_server, dest_driver_migration_info)

Is called to get migration progress.

If possible, driver can implement a way to return migration progress information. :param context: The ‘context.RequestContext’ object for the request. :param share_ref: Reference to the share being migrated. :param share_server: Share server model or None. :param dest_driver_migration_info: Migration information provided by destination host. :return: A dictionary with ‘total_progress’ field containing the percentage value.

migration_start(context, share_ref, share_server, host, dest_driver_migration_info, notify)

Is called to perform 1st phase of driver migration of a given share.

Driver should implement this method if willing to perform migration in an optimized way, useful for when driver understands destination backend. :param context: The ‘context.RequestContext’ object for the request. :param share_ref: Reference to the share being migrated. :param share_server: Share server model or None. :param host: Destination host and its capabilities. :param dest_driver_migration_info: Migration information provided by destination host. :param notify: whether the migration should complete or wait for 2nd phase call. Driver may throw exception when validating this parameter, exception if does not support 1-phase or 2-phase approach. :returns: Boolean value indicating if driver migration succeeded. :returns: Dictionary containing a model update with relevant data to be updated after migration, such as export locations.

promote_replica(context, replica_list, replica, access_rules, share_server=None)

Promote a replica to ‘active’ replica state.

NOTE: This call is made on the host that hosts the replica being promoted.

Parameters:
  • context – Current context
  • replica_list – List of all replicas for a particular share.

This list also contains the replica to be promoted. The ‘active’ replica will have its ‘replica_state’ attr set to ‘active’.

EXAMPLE:
[

{ ‘id’: ‘d487b88d-e428-4230-a465-a800c2cce5f8’, ‘share_id’: ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘replica_state’: ‘in_sync’,

...

‘share_server_id’: ‘4ce78e7b-0ef6-4730-ac2a-fd2defefbd05’, ‘share_server’: <models.ShareServer> or None, }, { ‘id’: ‘10e49c3e-aca9-483b-8c2d-1c337b38d6af’, ‘share_id’: ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘replica_state’: ‘active’,

...

‘share_server_id’: ‘f63629b3-e126-4448-bec2-03f788f76094’, ‘share_server’: <models.ShareServer> or None, }, { ‘id’: ‘e82ff8b6-65f0-11e5-9d70-feff819cdc9f’, ‘share_id’: ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘replica_state’: ‘in_sync’,

...

‘share_server_id’: ‘07574742-67ea-4dfd-9844-9fbd8ada3d87’, ‘share_server’: <models.ShareServer> or None, }, ...

]

Parameters:
  • replica

    Dictionary of the replica to be promoted. EXAMPLE:

    { ‘id’: ‘e82ff8b6-65f0-11e5-9d70-feff819cdc9f’, ‘share_id’: ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘deleted’: False, ‘host’: 'openstack2@cmodeSSVMNFS2‘, ‘status’: ‘available’, ‘scheduled_at’: datetime.datetime(2015, 8, 10, 0, 5, 58), ‘launched_at’: datetime.datetime(2015, 8, 10, 0, 5, 58), ‘terminated_at’: None, ‘replica_state’: ‘in_sync’, ‘availability_zone_id’: ‘f6e146d0-65f0-11e5-9d70-feff819cdc9f’, ‘export_locations’: [

    models.ShareInstanceExportLocations

    ], ‘access_rules_status’: ‘in_sync’, ‘share_network_id’: ‘4ccd5318-65f1-11e5-9d70-feff819cdc9f’, ‘share_server_id’: ‘07574742-67ea-4dfd-9844-9fbd8ada3d87’, ‘share_server’: <models.ShareServer> or None, }

  • access_rules – A list of access rules that other instances of

the share already obey. EXAMPLE:

[ { ‘id’: ‘f0875f6f-766b-4865-8b41-cccb4cdf1676’, ‘deleted’ = False, ‘share_id’ = ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘access_type’ = ‘ip’, ‘access_to’ = ‘172.16.20.1’, ‘access_level’ = ‘rw’, }]
Parameters:share_server – <models.ShareServer> or None,

Share server of the replica to be promoted. :return: updated_replica_list or None

The driver can return the updated list as in the request parameter. Changes that will be updated to the Database are: ‘export_locations’, ‘access_rules_status’ and ‘replica_state’.
:raises Exception
This can be any exception derived from BaseException. This is re-raised by the manager after some necessary cleanup. If the driver raises an exception during promotion, it is assumed that all of the replicas of the share are in an inconsistent state. Recovery is only possible through the periodic update call and/or administrator intervention to correct the ‘status’ of the affected replicas if they become healthy again.
replication_domain
setup_server(*args, **kwargs)
shrink_share(share, new_size, share_server=None)

Shrinks size of existing share.

If consumed space on share larger than new_size driver should raise ShareShrinkingPossibleDataLoss exception: raise ShareShrinkingPossibleDataLoss(share_id=share[‘id’])

Parameters:
  • share – Share model
  • new_size – New size of share (new_size < share[‘size’])
  • share_server – Optional – Share server model

:raises ShareShrinkingPossibleDataLoss, NotImplementedError

snapshots_are_supported
teardown_server(*args, **kwargs)
unmanage(share)

Removes the specified share from Manila management.

Does not delete the underlying backend share.

For most drivers, this will not need to do anything. However, some drivers might use this call as an opportunity to clean up any Manila-specific configuration that they have associated with the backend share.

If provided share cannot be unmanaged, then raise an UnmanageInvalidShare exception, specifying a reason for the failure.

unmanage_snapshot(snapshot)

Removes the specified snapshot from Manila management.

Does not delete the underlying backend share snapshot.

For most drivers, this will not need to do anything. However, some drivers might use this call as an opportunity to clean up any Manila-specific configuration that they have associated with the backend share snapshot.

If provided share snapshot cannot be unmanaged, then raise an UnmanageInvalidShareSnapshot exception, specifying a reason for the failure.

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

Update access rules for given share.

Drivers should support 2 different cases in this method: 1. Recovery after error - ‘access_rules’ contains all access_rules, ‘add_rules’ and ‘delete_rules’ shall be empty. Driver should clear any existent access rules and apply all access rules for given share. This recovery is made at driver start up.

2. Adding/Deleting of several access rules - ‘access_rules’ contains all access_rules, ‘add_rules’ and ‘delete_rules’ contain rules which should be added/deleted. Driver can ignore rules in ‘access_rules’ and apply only rules from ‘add_rules’ and ‘delete_rules’.

Drivers must be mindful of this call for share replicas. When ‘update_access’ is called on one of the replicas, the call is likely propagated to all replicas belonging to the share, especially when individual rules are added or removed. If a particular access rule does not make sense to the driver in the context of a given replica, the driver should be careful to report a correct behavior, and take meaningful action. For example, if R/W access is requested on a replica that is part of a “readable” type replication; R/O access may be added by the driver instead of R/W. Note that raising an exception will result in the access_rules_status on the replica, and the share itself being “out_of_sync”. Drivers can sync on the valid access rules that are provided on the create_replica and promote_replica calls.

Parameters:
  • context – Current context
  • share – Share model with share data.
  • access_rules – All access rules for given share
  • add_rules – Empty List or List of access rules which should be added. access_rules already contains these rules.
  • delete_rules – Empty List or List of access rules which should be removed. access_rules doesn’t contain these rules.
  • share_server – None or Share server model
update_replica_state(context, replica_list, replica, access_rules, replica_snapshots, share_server=None)

Update the replica_state of a replica.

NOTE: This call is made on the host which hosts the replica being updated.

Drivers should fix replication relationships that were broken if possible inside this method.

This method is called periodically by the share manager; and whenever requested by the administrator through the ‘resync’ API.

Parameters:
  • context – Current context
  • replica_list – List of all replicas for a particular share.

This list also contains the replica to be updated. The ‘active’ replica will have its ‘replica_state’ attr set to ‘active’.

EXAMPLE:
[

{ ‘id’: ‘d487b88d-e428-4230-a465-a800c2cce5f8’, ‘share_id’: ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘replica_state’: ‘in_sync’,

...

‘share_server_id’: ‘4ce78e7b-0ef6-4730-ac2a-fd2defefbd05’, ‘share_server’: <models.ShareServer> or None, }, { ‘id’: ‘10e49c3e-aca9-483b-8c2d-1c337b38d6af’, ‘share_id’: ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘replica_state’: ‘active’,

...

‘share_server_id’: ‘f63629b3-e126-4448-bec2-03f788f76094’, ‘share_server’: <models.ShareServer> or None, }, { ‘id’: ‘e82ff8b6-65f0-11e5-9d70-feff819cdc9f’, ‘share_id’: ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘replica_state’: ‘in_sync’,

...

‘share_server_id’: ‘07574742-67ea-4dfd-9844-9fbd8ada3d87’, ‘share_server’: <models.ShareServer> or None, }, ...

]

Parameters:replica – Dictionary of the replica being updated.

Replica state will always be ‘in_sync’, ‘out_of_sync’, or ‘error’. Replicas in ‘active’ state will not be passed via this parameter.

EXAMPLE:

{ ‘id’: ‘d487b88d-e428-4230-a465-a800c2cce5f8’, ‘share_id’: ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘deleted’: False, ‘host’: 'openstack2@cmodeSSVMNFS1‘, ‘status’: ‘available’, ‘scheduled_at’: datetime.datetime(2015, 8, 10, 0, 5, 58), ‘launched_at’: datetime.datetime(2015, 8, 10, 0, 5, 58), ‘terminated_at’: None, ‘replica_state’: ‘in_sync’, ‘availability_zone_id’: ‘e2c2db5c-cb2f-4697-9966-c06fb200cb80’, ‘export_locations’: [

models.ShareInstanceExportLocations,

], ‘access_rules_status’: ‘in_sync’, ‘share_network_id’: ‘4ccd5318-65f1-11e5-9d70-feff819cdc9f’, ‘share_server_id’: ‘4ce78e7b-0ef6-4730-ac2a-fd2defefbd05’, }

Parameters:access_rules – A list of access rules that other replicas of

the share already obey. The driver could attempt to sync on any un-applied access_rules. EXAMPLE:

[ { ‘id’: ‘f0875f6f-766b-4865-8b41-cccb4cdf1676’, ‘deleted’ = False, ‘share_id’ = ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘access_type’ = ‘ip’, ‘access_to’ = ‘172.16.20.1’, ‘access_level’ = ‘rw’, }]
Parameters:replica_snapshots – List of dictionaries of snapshot instances

for each snapshot of the share whose ‘aggregate_status’ property was reported to be ‘available’ when the share manager initiated this request. Each list member will have two sub dictionaries: ‘active_replica_snapshot’ and ‘share_replica_snapshot’. The ‘active’ replica snapshot corresponds to the instance of the snapshot on any of the ‘active’ replicas of the share while share_replica_snapshot corresponds to the snapshot instance for the specific replica being updated. The driver needs to ensure that this snapshot instance is truly available before transitioning from ‘out_of_sync’ to ‘in_sync’. Snapshots instances for snapshots that have an ‘aggregate_status’ of ‘creating’ or ‘deleting’ will be polled for in the update_replicated_snapshot method.

EXAMPLE:

[ { ‘active_replica_snapshot’: {

‘id’: ‘8bda791c-7bb6-4e7b-9b64-fefff85ff13e’, ‘share_instance_id’: ‘10e49c3e-aca9-483b-8c2d-1c337b38d6af’, ‘status’: ‘available’, ‘provider_location’: ‘/newton/share-snapshot-10e49c3e-aca9’, ... },

‘share_replica_snapshot’: { ‘id’: ,

‘share_instance_id’: ‘d487b88d-e428-4230-a465-a800c2cce5f8’, ‘status’: ‘creating’, ‘provider_location’: None,

...

},

}]

Parameters:share_server – <models.ShareServer> or None
Returns:replica_state replica_state - a str value denoting the replica_state that the replica can have. Valid values are ‘in_sync’ and ‘out_of_sync’ or None (to leave the current replica_state unchanged).
update_replicated_snapshot(context, replica_list, share_replica, replica_snapshots, replica_snapshot, share_server=None)

Update the status of a snapshot instance that lives on a replica.

NOTE: For DR and Readable styles of replication, this call is made on the replica’s host and not the ‘active’ replica’s host.

This method is called periodically by the share manager. It will query for snapshot instances that track the parent snapshot across non-‘active’ replicas. Drivers can expect the status of the instance to be ‘creating’ or ‘deleting’. If the driver sees that a snapshot instance has been removed from the replica’s backend and the instance status was set to ‘deleting’, it is expected to raise a SnapshotResourceNotFound exception. All other exceptions will set the snapshot instance status to ‘error’. If the instance was not in ‘deleting’ state, raising a SnapshotResourceNotFound will set the instance status to ‘error’.

Parameters:
  • context – Current context
  • replica_list – List of all replicas for a particular share.

The ‘active’ replica will have its ‘replica_state’ attr set to ‘active’.

EXAMPLE:
[

{ ‘id’: ‘d487b88d-e428-4230-a465-a800c2cce5f8’, ‘share_id’: ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘replica_state’: ‘in_sync’,

...

‘share_server_id’: ‘4ce78e7b-0ef6-4730-ac2a-fd2defefbd05’, ‘share_server’: <models.ShareServer> or None, }, { ‘id’: ‘10e49c3e-aca9-483b-8c2d-1c337b38d6af’, ‘share_id’: ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘replica_state’: ‘active’,

...

‘share_server_id’: ‘f63629b3-e126-4448-bec2-03f788f76094’, ‘share_server’: <models.ShareServer> or None, }, ...

]

Parameters:share_replica – Dictionary of the replica the snapshot instance

is meant to be associated with. Replicas in ‘active’ replica_state will not be passed via this parameter.

EXAMPLE:

{ ‘id’: ‘d487b88d-e428-4230-a465-a800c2cce5f8’, ‘share_id’: ‘f0e4bb5e-65f0-11e5-9d70-feff819cdc9f’, ‘deleted’: False, ‘host’: 'openstack2@cmodeSSVMNFS1‘, ‘status’: ‘available’, ‘scheduled_at’: datetime.datetime(2015, 8, 10, 0, 5, 58), ‘launched_at’: datetime.datetime(2015, 8, 10, 0, 5, 58), ‘terminated_at’: None, ‘replica_state’: ‘in_sync’, ‘availability_zone_id’: ‘e2c2db5c-cb2f-4697-9966-c06fb200cb80’, ‘export_locations’: [

models.ShareInstanceExportLocations,

], ‘access_rules_status’: ‘in_sync’, ‘share_network_id’: ‘4ccd5318-65f1-11e5-9d70-feff819cdc9f’, ‘share_server_id’: ‘4ce78e7b-0ef6-4730-ac2a-fd2defefbd05’, }

Parameters:
  • replica_snapshots

    List of all snapshot instances that track the snapshot across the replicas. This will include the instance being updated as well. EXAMPLE:

    [
    { ‘id’: ‘d3931a93-3984-421e-a9e7-d9f71895450a’, ‘snapshot_id’: ‘13ee5cb5-fc53-4539-9431-d983b56c5c40’,
    ...

    }, { ‘id’: ‘8bda791c-7bb6-4e7b-9b64-fefff85ff13e’, ‘snapshot_id’: ‘13ee5cb5-fc53-4539-9431-d983b56c5c40’,

    ...

    ]

  • replica_snapshot – Dictionary of the snapshot instance to be

updated. replica_snapshot will be in ‘creating’ or ‘deleting’ states when sent via this parameter.

EXAMPLE:

{ ‘name’: ‘share-snapshot-18825630-574f-4912-93bb-af4611ef35a2’, ‘share_id’: ‘d487b88d-e428-4230-a465-a800c2cce5f8’, ‘share_name’: ‘share-d487b88d-e428-4230-a465-a800c2cce5f8’, ‘status’: ‘creating’, ‘id’: ‘18825630-574f-4912-93bb-af4611ef35a2’, ‘deleted’: False, ‘created_at’: datetime.datetime(2016, 8, 3, 0, 5, 58), ‘share’: <models.ShareInstance>, ‘updated_at’: datetime.datetime(2016, 8, 3, 0, 5, 58), ‘share_instance_id’: ‘d487b88d-e428-4230-a465-a800c2cce5f8’, ‘snapshot_id’: ‘13ee5cb5-fc53-4539-9431-d983b56c5c40’, ‘progress’: ‘0%’, ‘deleted_at’: None, ‘provider_location’: None, }

Parameters:share_server – <models.ShareServer> or None
Returns:replica_snapshot_model_update, a dictionary containing

values that need to be updated on the database for the snapshot instance that represents the snapshot on the replica. :raises: exception.SnapshotResourceNotFound for snapshots that are not found on the backend and their status was ‘deleting’.

Table Of Contents

Previous topic

The Database Layer

Next topic

Manila share driver hooks

Project Source

This Page