Using OpenStack Shared File Systems

Before working with the Shared File System service, you’ll need to create a connection to your OpenStack cloud by following the Connect user guide. This will provide you with the conn variable used in the examples below.

List Availability Zones

A Shared File System service availability zone is a failure domain for your shared file systems. You may create a shared file system (referred to simply as shares) in a given availability zone, and create replicas of the share in other availability zones.

def list_availability_zones(conn):
    print("List Shared File System Availability Zones:")
    for az in conn.share.availability_zones():
        print(az)

Share Instances

Administrators can list, show information for, explicitly set the state of, and force-delete share instances.

def share_instances(conn, **query):
    print('List all share instances:')
    for si in conn.share.share_instances(**query):
        print(si)

Get Share Instance

Shows details for a single share instance.

def get_share_instance(conn, share_instance_id):
    print('Get share instance with given Id:')
    share_instance = conn.share.get_share_instance(share_instance_id)
    print(share_instance)

Reset Share Instance Status

Explicitly updates the state of a share instance.

def reset_share_instance_status(conn, share_instance_id, status):
    print(
        'Reset the status of the share instance with the given '
        'share_instance_id to the given status'
    )
    conn.share.reset_share_instance_status(share_instance_id, status)

Delete Share Instance

Force-deletes a share instance.

def delete_share_instance(conn, share_instance_id):
    print('Force-delete the share instance with the given share_instance_id')
    conn.share.delete_share_instance(share_instance_id)

Resize Share

Shared File System shares can be resized (extended or shrunk) to a given size. For details on resizing shares, refer to the Manila docs.

def resize_share(conn, share_id, share_size):
    # Be explicit about not wanting to use force if the share
    # will be extended.
    use_force = False
    print('Resize the share to the given size:')
    conn.share.resize_share(share_id, share_size, use_force)
def resize_shares_without_shrink(conn, min_size):
    # Sometimes, extending shares without shrinking
    # them (effectively setting a min size) is desirable.

    # Get list of shares from the connection.
    shares = conn.share.shares()

    # Loop over the shares:
    for share in shares:
        # Extend shares smaller than min_size to min_size,
        # but don't shrink shares larger than min_size.
        conn.share.resize_share(share.id, min_size, no_shrink=True)

List Share Group Snapshots

A share group snapshot is a point-in-time, read-only copy of the data that is contained in a share group. You can list all share group snapshots

def list_share_group_snapshots(conn, **query):
    print("List all share group snapshots:")
    share_group_snapshots = conn.share.share_group_snapshots(**query)
    for share_group_snapshot in share_group_snapshots:
        print(share_group_snapshot)

Get Share Group Snapshot

Show share group snapshot details

def get_share_group_snapshot(conn, group_snapshot_id):
    print("Show share group snapshot with given Id:")
    share_group_snapshot = conn.share.get_share_group_snapshots(
        group_snapshot_id
    )
    print(share_group_snapshot)

List Share Group Snapshot Members

Lists all share group snapshots members.

def share_group_snapshot_members(conn, group_snapshot_id):
    print("Show share group snapshot members with given Id:")
    members = conn.share.share_group_snapshot_members(group_snapshot_id)
    for member in members:
        print(member)

Create Share Group Snapshot

Creates a snapshot from a share group.

def create_share_group_snapshot(conn, share_group_id, **attrs):
    print("Creating a share group snapshot from given attributes:")
    share_group_snapshot = conn.share.create_share_group_snapshot(
        share_group_id, **attrs
    )
    print(share_group_snapshot)

Reset Share Group Snapshot

Reset share group snapshot state.

def reset_share_group_snapshot_status(conn, group_snapshot_id, status):
    print("Reseting the share group snapshot status:")
    conn.share.reset_share_group_snapshot_status(group_snapshot_id, status)

Update Share Group Snapshot

Updates a share group snapshot.

def update_share_group_snapshot(conn, group_snapshot_id, **attrs):
    print("Updating a share group snapshot with given Id:")
    share_group_snapshot = conn.share.update_share_group_snapshot(
        group_snapshot_id, **attrs
    )
    print(share_group_snapshot)

Delete Share Group Snapshot

Deletes a share group snapshot.

def delete_share_group_snapshot(conn, group_snapshot_id):
    print("Deleting a share group snapshot with given Id:")
    conn.share.delete_share_group_snapshot(group_snapshot_id)

List Share Metadata

Lists all metadata for a given share.

def list_share_metadata(conn, share_id):
    # Method returns the entire share with the metadata inside it.
    returned_share = conn.get_share_metadata(share_id)

    # Access metadata of share
    metadata = returned_share['metadata']

    print("List All Share Metadata:")
    for meta_key in metadata:
        print(f"{meta_key}={metadata[meta_key]}")

Get Share Metadata Item

Retrieves a specific metadata item from a shares metadata by its key.

def get_share_metadata_item(conn, share_id, key):
    # Method returns the entire share with the metadata inside it.
    returned_share = conn.get_share_metadata_item(share_id, key)

    # Access metadata of share
    metadata = returned_share['metadata']

    print("Get share metadata item given item key and share id:")
    print(metadata[key])

Create Share Metadata

Creates share metadata.

def create_share_metadata(conn, share_id, metadata):
    # Method returns the entire share with the metadata inside it.
    created_share = conn.create_share_metadata(share_id, metadata)

    # Access metadata of share
    metadata = created_share['metadata']

    print("Metadata created for given share:")
    print(metadata)

Update Share Metadata

Updates metadata of a given share.

def update_share_metadata(conn, share_id, metadata):
    # Method returns the entire share with the metadata inside it.
    updated_share = conn.update_share_metadata(share_id, metadata, True)

    # Access metadata of share
    metadata = updated_share['metadata']

    print("Updated metadata for given share:")
    print(metadata)

Delete Share Metadata

Deletes a specific metadata item from a shares metadata by its key. Can specify multiple keys to be deleted.

def delete_share_metadata(conn, share_id, keys):
    # Method doesn't return anything.
    conn.delete_share_metadata(share_id, keys)

Manage Share

Manage a share with Manila.

def manage_share(conn, protocol, export_path, service_host, **params):
    # Manage a share with the given protocol, export path, service host, and
    # optional additional parameters
    managed_share = conn.share.manage_share(
        protocol, export_path, service_host, **params
    )

    # Can get the ID of the share, which is now being managed with Manila
    managed_share_id = managed_share.id
    print("The ID of the share which was managed: %s", managed_share_id)

Unmanage Share

Unmanage a share from Manila.

def unmanage_share(conn, share_id):
    # Unmanage the share with the given share ID
    conn.share.unmanage_share(share_id)

    try:
        # Getting the share will raise an exception as it has been unmanaged
        conn.share.get_share(share_id)
    except Exception:
        pass

List Share replicas

Share replicas are the replicated copies of the existing share. You can use Share Replicas to sync data so that each share replica has an identical copy of the same share. Share replication can be used as a disaster recovery solution or as a load sharing mirroring solution.

def list_share_replicas(conn, **attrs):
    print("List share replicas for the shared file system:")
    for sr in conn.share.share_replicas(**attrs):
        print(sr)

Create Share Replica

Creates a share replica from attributes

def create_share_replica(conn, share_id, **attrs):
    print("Creating share replica:")
    share_replica = conn.share.create_share_replica(share_id, **attrs)
    print(share_replica)

Get Share Replica

List deatils of a single share replica

def get_share_replica(conn, share_replica_id):
    print("Getting share replica with give Id:")
    share_replica = conn.share.share_replica(share_replica_id)
    print(share_replica)

Delete Share Replica

Delete a share replica

def delete_share_replica(conn, share_replica_id):
    print("Deleting share replica with give Id:")
    conn.share.delete_share_replica(share_replica_id)

Reset Status of Share Replica

Reset status of the share replica

def reset_status_share_replica(conn, share_replica_id, status):
    print("Resetting status for given share replica Id:")
    conn.share.share_replica_reset_status(share_replica_id, status)

Reset Replica State of Share Replica

Reset replica_state of the share replica

def reset_replica_state_share_replica(conn, share_replica_id, reset_state):
    print("Resetting replica state for given share replica Id:")
    conn.share.share_replica_reset_replica_state(share_replica_id, reset_state)

Force Delete Share Replica

Force-delete share replica

def force_delete_share_replica(conn, share_replica_id):
    print("Force deleting the share replica for the given Id:")
    conn.share.share_replica_force_delete(share_replica_id)

Promote Share Replica

Promote share replica

def promote_share_replica(conn, share_replica_id):
    print("Promoting share replica with given Id:")
    conn.share.share_replica_promote(share_replica_id)

Resync Share Replica

Resync share replica

def resync_share_replica(conn, share_replica_id):
    print("Resyncing share replica with given Id:")
    conn.share.share_replica_resync(share_replica_id)