#!/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)