From 8a1852db1460b97497ea3461b041179601dcf1ca Mon Sep 17 00:00:00 2001 From: SupraJames Date: Fri, 14 Nov 2025 17:54:24 +0000 Subject: [PATCH] list LMs --- list_oracle_live_mounts.py | 143 +++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100755 list_oracle_live_mounts.py diff --git a/list_oracle_live_mounts.py b/list_oracle_live_mounts.py new file mode 100755 index 0000000..8879ccc --- /dev/null +++ b/list_oracle_live_mounts.py @@ -0,0 +1,143 @@ +#!/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) \ No newline at end of file