Advertisement
dominusceo

Start Stop DB System (startStopDbSystemArgs.py)

May 14th, 2025 (edited)
571
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.82 KB | Cybersecurity | 0 0
  1. #! /usr/bin/python
  2. """
  3. Autor: Ricardo Carrillo - [email protected]
  4. Objetivo:   Iniciar o Parar (start/stop) un dbsystem basado en un 'instance principal' sin la necesidad de configurar OCI-Cli
  5. Ejemplo de ejecucion:
  6.     ./startStopDbSystemArgs.py  --action start --compartment_id  ocid1.compartment.oc1..aaaaaaaa5nflauus2d7wcdir5bk4nh7d6ts4xcox3ndutsm6icccjaryq --delay 10
  7. """
  8. import oci
  9. import argparse
  10. import time
  11. """
  12. # Cambiar por instance principal
  13. signer = oci.auth.signers.InstancePrincipalsSecurityTokenSigner()
  14. database_client = oci.database.DatabaseClient(config={}, signer=signer)
  15. Allow dynamic-group Default/dbsystem-admin-group to manage database-family in compartment compartment-name
  16. Allow dynamic-group Default/dbsystem-admin-group to use virtual-network-family in compartment compartment-name
  17. ALL { instance.compartment.id = 'ocid1.compartment.oc1...yourcompartmentocid' }
  18. """
  19.  
  20. # Configurar los argumentos para el script
  21. parser = argparse.ArgumentParser()
  22. parser.add_argument('--action', choices=['start', 'stop'], required=True, help="Acción a realizar: start o stop")
  23. parser.add_argument('--compartment_id', required=True, help="OCID del compartimento")
  24. parser.add_argument('--delay', type=int, default=5, help="Delay de default entre acciones sobre cada nodo de DB System (opcional)")
  25. args = parser.parse_args()
  26. action = args.action.upper()
  27. # Obtener los DB Systems del compartimento especificado
  28. db_systems = database_client.list_db_systems(compartment_id=args.compartment_id).data
  29. # Iterar sobre los DB Systems
  30. for db_system in db_systems:
  31.     if db_system.lifecycle_state != "AVAILABLE":
  32.         print(f"Saltando DB System {db_system.display_name} (estado: {db_system.lifecycle_state})")
  33.         continue
  34.     if db_system.lifecycle_state == "AVAILABLE":
  35.         print(f"Procesando DB System: {db_system.display_name}")
  36.         db_nodes = database_client.list_db_nodes(compartment_id=args.compartment_id,db_system_id=db_system.id).data
  37.         for db_node in db_nodes:
  38.             if action == "START" and db_node.lifecycle_state == "STOPPED":
  39.                 print(f" -- Encendiendo DB Node {args.action}: {proxyLoc(db_node).hostname}")
  40.                 try:
  41.                     response = database_client.db_node_action(db_node_id=db_node.id,action="START")
  42.                     print(f" +DB Node {proxyLoc(db_node).hostname} encendido correctamente.")
  43.                     time.sleep(args.delay)
  44.                 except oci.exceptions.ServiceError as e:
  45.                     print(f" *Error al ejecutar acción en DB Node {db_node.id}: {e.message}")
  46.  
  47.             elif action == "STOP" and db_node.lifecycle_state == "RUNNING":
  48.                 print(f" -- Apagando DB Node {args.action}: {proxyLoc(db_node).hostname}")
  49.                 try:
  50.                     response = database_client.db_node_action(db_node_id=db_node.id,action="STOP")
  51.                     print(f" +DB Node {proxyLoc(db_node).hostname} apagado correctamente.")
  52.                     time.sleep(args.delay)
  53.                 except oci.exceptions.ServiceError as e:
  54.                     print(f" *Error al apagar DB Node {proxyLoc(db_node).hostname}: {e.message}")
  55.             elif action == "START" and db_node.lifecycle_state == "RUNNING":
  56.                 print(f"    -- DB System {db_system.display_name} encendido")
  57.             elif action == "STOP" and db_node.lifecycle_state == "AVAILABLE":
  58.                 try:
  59.                     response = database_client.db_node_action(db_node_id=db_node.id,action="STOP")
  60.                     print(f" +DB Node {proxyLoc(db_node).hostname} apagado correctamente.")
  61.                     time.sleep(args.delay)
  62.                 except oci.exceptions.ServiceError as e:
  63.                     print(f" *Error al apagar DB Node {proxyLoc(db_node).hostname}: {e.message}")
  64.             else:
  65.                 print(f"    Nada que hacer con {proxyLoc(db_node).hostname} - {db_node.lifecycle_state}")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement