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)