149 lines
4.8 KiB
Python
Executable File
149 lines
4.8 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 (optional, defaults to local database)')
|
|
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()
|
|
|
|
if not args.source_db_id and not (args.name or args.cluster_uuid or args.org_id):
|
|
auth = RSCAuth()
|
|
gql = RSCGraphQL(auth)
|
|
args.source_db_id = gql.get_local_database_id()
|
|
print(f"INFO: No filters specified, using local database ID: {args.source_db_id}")
|
|
|
|
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) |