A Python SDK for interacting with the VAST Management System (VMS) REST API. This package provides a simple and intuitive interface to manage your VAST storage system programmatically.
- Full REST API coverage with a Pythonic interface
- Command-line interface (CLI) for quick operations
- Support for all HTTP methods (GET, POST, PATCH, DELETE)
- JSON file input support for complex operations
- Schema-less design compatible with all VAST versions
pip install vastpy
The package is available on PyPI: https://pypi.org/project/vastpy/
- Python 3.6 or higher
- urllib3 1.2 or higher
from vastpy import VASTClient
# Initialize with credentials
client = VASTClient(
user='your_username',
password='your_password',
address='vast-vms-hostname'
)
# List all views
for view in client.views.get():
print(view)
# Create a new view with the default policy
policies = client.viewpolicies.get(name='default')
default_policy = policies[0] # Get the first (and should be only) matching policy
# Create a new view using the default policy
view = client.views.post(
path='/prod/pgsql',
policy_id=default_policy['id'], # Use the policy's unique identifier
create_dir=True
)
# Update a view's protocols
view_to_update = client.views.get(path='/prod/pgsql')[0] # Get the first matching view
updated_view = client.views[view_to_update['id']].patch(protocols=['NFS', 'SMB'])
# Delete a view
client.views[view['id']].delete()
# List snapshots with specific fields
snapshots = client.snapshots.get(fields=['id', 'path'])
for snapshot in snapshots:
print(f"ID: {snapshot['id']}, Path: {snapshot['path']}")
# Create a new snapshot
snapshot = client.snapshots.post(path='/prod/pgsql', name='db')
# Query protocol metrics
metrics = client.monitors.ad_hoc_query.get(
object_type='cluster',
time_frame='5m',
prop_list=[
'ProtoMetrics,proto_name=ProtoCommon,iops', # Aggregated IOPS across protocols
'ProtoMetrics,proto_name=ProtoCommon,bw', # Aggregated bandwidth
'ProtoMetrics,proto_name=NFS,iops', # NFS-specific IOPS
'ProtoMetrics,proto_name=SMB,bw', # SMB-specific bandwidth
'ProtoMetrics,proto_name=S3,latency' # S3 protocol latency
]
)
The package also includes a CLI tool (vastpy-cli
) for quick operations.
Credentials can be provided through environment variables or command-line arguments:
# Using environment variables
$ export VMS_USER=admin
$ export VMS_PASSWORD=your_password
$ export VMS_ADDRESS=vast-vms-hostname
# Or using command-line arguments
$ vastpy-cli --user=admin --password=your_password --address=vast-vms-hostname
Any method (get, post, patch, delete) is supported:
# List snapshots
$ vastpy-cli get snapshots fields=id,path
[
{
"path": "/dbs",
"id": 12
},
{
"path": "/datasets",
"id": 43
},
...
]
# Create a new view
$ vastpy-cli post views path=/prod/pgsql create_dir=true policy_id=1
{
"id": 109,
"guid": "551b5fc0-42a2-4b77-b385-d5bf6a6c1538",
"name": "view-109",
"title": "/prod/pgsql",
...
# Create a new snapshot
$ vastpy-cli post snapshots path=/prod/pgsql name=db
{
"id": 4707792,
"name": "db_snapshot",
"path": "/prod/pgsql"
...
# Delete a view
$ vastpy-cli delete views/109
For complex operations, you can use JSON input files:
# Create a file with your configuration
$ cat > config.json << EOF
{
"read_access_users": ["vastadmin"],
"read_access_users_groups": ["vastadmin"],
"protocols_audit": {
"log_full_path": true,
"modify_data_md": true,
"create_delete_files_dirs_objects": true
},
"enable_vast_db_audit": true
}
EOF
# Apply the configuration
vastpy-cli patch clusters/<cluster_id>/auditing --file-input config.json
While developing applications using the VMS API, please refer to the documentation available on your VAST system:
https://vast-vms-hostname/docs
This SDK is designed to be schema-less, making it compatible with all VAST versions. The Python objects are translated directly to REST API endpoints:
client.collection[object].get()
→GET /api/collection/object
client.collection.post()
→POST /api/collection
client.collection[object].patch()
→PATCH /api/collection/object
client.collection[object].delete()
→DELETE /api/collection/object
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.