Files
oracle-livemount-python/list_oracle_live_mounts.py
2025-11-14 17:54:24 +00:00

143 lines
4.5 KiB
Python
Executable File

#!/usr/bin/env python3
import json
import sys
import os
import argparse
from rsc import RSCAuth, RSCGraphQL
from tabulate import tabulate
def list_oracle_live_mounts(name=None, cluster_uuid=None, source_db_id=None, org_id=None, sort_field=None, sort_order=None, limit=50):
# Initialize auth
auth = RSCAuth()
# Initialize GraphQL client
gql = RSCGraphQL(auth)
# Build filters
filters = []
if name:
filters.append({"field": "NAME", "texts": [name]})
if cluster_uuid:
filters.append({"field": "CLUSTER_UUID", "texts": [cluster_uuid]})
if source_db_id:
filters.append({"field": "SOURCE_DATABASE_ID", "texts": [source_db_id]})
if org_id:
filters.append({"field": "ORG_ID", "texts": [org_id]})
# Build sortBy
sort_by = None
if sort_field:
sort_by = {"field": sort_field, "sortOrder": sort_order or "ASC"}
# GraphQL query to list Oracle Live Mounts
query = """
query OracleLiveMountListQuery($first: Int!, $filters: [OracleLiveMountFilterInput!], $sortBy: OracleLiveMountSortBy) {
oracleLiveMounts(
first: $first
filters: $filters
sortBy: $sortBy
) {
edges {
node {
id
cdmId
mountedDatabaseName
status
creationDate
cluster {
id
name
}
sourceDatabase {
id
name
dbUniqueName
}
mountedDatabase {
id
name
}
targetOracleHost {
id
name
}
targetOracleRac {
id
name
}
}
}
}
}
"""
variables = {
"first": limit,
"filters": filters if filters else None,
"sortBy": sort_by
}
# Execute query
response = gql.query(query, variables)
# Parse and display results
edges = response['data']['oracleLiveMounts']['edges']
if not edges:
print("No Oracle Live Mounts found.")
return
# Prepare data for tabulation
table_data = []
for edge in edges:
lm = edge['node']
cluster_name = lm['cluster']['name'] if lm['cluster'] else 'Unknown'
target_name = 'Unknown'
if lm.get('targetOracleHost'):
target_name = lm['targetOracleHost']['name']
elif lm.get('targetOracleRac'):
target_name = lm['targetOracleRac']['name']
source_db = lm['sourceDatabase']['dbUniqueName'] if lm['sourceDatabase'] else 'Unknown'
mounted_db = lm['mountedDatabase']['name'] if lm['mountedDatabase'] else lm['mountedDatabaseName']
table_data.append([
lm['id'],
source_db,
mounted_db,
cluster_name,
target_name,
lm['status'],
lm['creationDate']
])
# Print tabulated output
headers = ['ID', 'Source DB', 'Mounted DB', 'Cluster', 'Target', 'Status', 'Created']
print(tabulate(table_data, headers=headers, tablefmt='grid'))
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='List Oracle Live Mounts')
parser.add_argument('--name', help='Filter by name (mounted database name)')
parser.add_argument('--cluster-uuid', help='Filter by cluster UUID')
parser.add_argument('--source-db-id', help='Filter by source database ID')
parser.add_argument('--org-id', help='Filter by organization ID')
parser.add_argument('--sort-field', choices=['NAME', 'CREATION_DATE', 'STATUS'], help='Sort field')
parser.add_argument('--sort-order', choices=['ASC', 'DESC'], default='ASC', help='Sort order')
parser.add_argument('--limit', type=int, default=50, help='Maximum number of results')
args = parser.parse_args()
try:
list_oracle_live_mounts(
name=args.name,
cluster_uuid=args.cluster_uuid,
source_db_id=args.source_db_id,
org_id=args.org_id,
sort_field=args.sort_field,
sort_order=args.sort_order,
limit=args.limit
)
except Exception as e:
print(f"Error: {e}", file=sys.stderr)
sys.exit(1)