Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /usr/bin/python
- """
- Autor: Ricardo Carrillo - [email protected]
- Objetivo: Iniciar o Parar (start/stop) un dbsystem basado en un 'instance principal' sin la necesidad de configurar OCI-Cli
- Ejemplo de ejecucion:
- ./startStopDbSystemArgs.py --action start --compartment_id ocid1.compartment.oc1..aaaaaaaa5nflauus2d7wcdir5bk4nh7d6ts4xcox3ndutsm6icccjaryq --delay 10
- """
- import oci
- import argparse
- import time
- """
- # Cambiar por instance principal
- signer = oci.auth.signers.InstancePrincipalsSecurityTokenSigner()
- database_client = oci.database.DatabaseClient(config={}, signer=signer)
- Allow dynamic-group Default/dbsystem-admin-group to manage database-family in compartment compartment-name
- Allow dynamic-group Default/dbsystem-admin-group to use virtual-network-family in compartment compartment-name
- ALL { instance.compartment.id = 'ocid1.compartment.oc1...yourcompartmentocid' }
- """
- # Configurar los argumentos para el script
- parser = argparse.ArgumentParser()
- parser.add_argument('--action', choices=['start', 'stop'], required=True, help="Acción a realizar: start o stop")
- parser.add_argument('--compartment_id', required=True, help="OCID del compartimento")
- parser.add_argument('--delay', type=int, default=5, help="Delay de default entre acciones sobre cada nodo de DB System (opcional)")
- args = parser.parse_args()
- action = args.action.upper()
- # Obtener los DB Systems del compartimento especificado
- db_systems = database_client.list_db_systems(compartment_id=args.compartment_id).data
- # Iterar sobre los DB Systems
- for db_system in db_systems:
- if db_system.lifecycle_state != "AVAILABLE":
- print(f"Saltando DB System {db_system.display_name} (estado: {db_system.lifecycle_state})")
- continue
- if db_system.lifecycle_state == "AVAILABLE":
- print(f"Procesando DB System: {db_system.display_name}")
- db_nodes = database_client.list_db_nodes(compartment_id=args.compartment_id,db_system_id=db_system.id).data
- for db_node in db_nodes:
- if action == "START" and db_node.lifecycle_state == "STOPPED":
- print(f" -- Encendiendo DB Node {args.action}: {proxyLoc(db_node).hostname}")
- try:
- response = database_client.db_node_action(db_node_id=db_node.id,action="START")
- print(f" +DB Node {proxyLoc(db_node).hostname} encendido correctamente.")
- time.sleep(args.delay)
- except oci.exceptions.ServiceError as e:
- print(f" *Error al ejecutar acción en DB Node {db_node.id}: {e.message}")
- elif action == "STOP" and db_node.lifecycle_state == "RUNNING":
- print(f" -- Apagando DB Node {args.action}: {proxyLoc(db_node).hostname}")
- try:
- response = database_client.db_node_action(db_node_id=db_node.id,action="STOP")
- print(f" +DB Node {proxyLoc(db_node).hostname} apagado correctamente.")
- time.sleep(args.delay)
- except oci.exceptions.ServiceError as e:
- print(f" *Error al apagar DB Node {proxyLoc(db_node).hostname}: {e.message}")
- elif action == "START" and db_node.lifecycle_state == "RUNNING":
- print(f" -- DB System {db_system.display_name} encendido")
- elif action == "STOP" and db_node.lifecycle_state == "AVAILABLE":
- try:
- response = database_client.db_node_action(db_node_id=db_node.id,action="STOP")
- print(f" +DB Node {proxyLoc(db_node).hostname} apagado correctamente.")
- time.sleep(args.delay)
- except oci.exceptions.ServiceError as e:
- print(f" *Error al apagar DB Node {proxyLoc(db_node).hostname}: {e.message}")
- else:
- print(f" Nada que hacer con {proxyLoc(db_node).hostname} - {db_node.lifecycle_state}")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement