DBaaS
Crear un backup
Sección titulada «Crear un backup»POST /v1/dbaas/{id}/backups · scope dbaas:write · reversible · asincrona · idempotente
Devuelve 202 en cuanto la tarea arranca, no cuando el archivo está listo: un dump puede tardar minutos, muy por encima de cualquier timeout HTTP. La operación se resuelve contra la lista de backups —aparece uno nuevo o no— y no contra el resultado del POST, así que sobrevive a que la llamada expire con el backup corriendo. Esperala con GET /v1/operations/{id}.
curl https://api.truo.cloud/v1/dbaas/svc_10432/backups \ -X POST \ -H "Authorization: Bearer $TRUO_TOKEN"truo dbaas backup create svc_10432await truo.dbaas.backups.create("svc_10432");truo_dbaas({ "action": "backup_create", "id": "svc_10432"})operationId: dbaas.backups.create
Backups del servicio
Sección titulada «Backups del servicio»GET /v1/dbaas/{id}/backups · scope dbaas:read
Del más nuevo al más viejo. Un servicio cuyo motor no tiene backups gestionados devuelve una lista vacía, no un error.
curl https://api.truo.cloud/v1/dbaas/svc_10432/backups \ -H "Authorization: Bearer $TRUO_TOKEN"truo dbaas backup list svc_10432await truo.dbaas.backups.list("svc_10432");truo_dbaas({ "action": "backup_list", "id": "svc_10432"})operationId: dbaas.backups.list
Datos de conexión, sin la credencial
Sección titulada «Datos de conexión, sin la credencial»GET /v1/dbaas/{id}/connection · scope dbaas:read
Host, puerto, base, usuario administrador, modo TLS y la CA del servicio — que es pública y sirve para verificar al servidor. No incluye la password ni ninguna URI que la contenga: la credencial sale de POST /v1/dbaas/{id}/credentials, que exige el scope dbaas:credentials.
curl https://api.truo.cloud/v1/dbaas/svc_10432/connection \ -H "Authorization: Bearer $TRUO_TOKEN"truo dbaas connection svc_10432await truo.dbaas.connection.get("svc_10432");truo_dbaas({ "action": "connection", "id": "svc_10432"})operationId: dbaas.connection.get
Revelar la credencial de administración
Sección titulada «Revelar la credencial de administración»POST /v1/dbaas/{id}/credentials · scope dbaas:credentials
Devuelve la password del administrador en claro. No rota nada: es la credencial que ya está en uso.
Es un POST y no un GET a propósito. Un GET queda en el historial del navegador, en los logs de cualquier proxy y en cachés intermedias, y se puede disparar sin querer desde un link; un POST obliga a una acción deliberada y entra al audit log como mutación, así que revelar la credencial de una base deja rastro. Por lo mismo vive en su propio scope (dbaas:credentials): dbaas:write crea bases y usuarios acotados, esto da acceso total a los datos y sobrevive a revocar la key.
curl https://api.truo.cloud/v1/dbaas/svc_10432/credentials \ -X POST \ -H "Authorization: Bearer $TRUO_TOKEN"truo dbaas credentials svc_10432await truo.dbaas.credentials.create("svc_10432");truo_dbaas({ "action": "credentials", "id": "svc_10432"})operationId: dbaas.credentials.create
Crear una base
Sección titulada «Crear una base»POST /v1/dbaas/{id}/databases · scope dbaas:write · reversible · idempotente
charset y collation son de MySQL; owner, de PostgreSQL. El resto de los motores los ignora. La respuesta no trae tamaño ni conteo de tablas: la base nace vacía y releerla costaría otra llamada para informar un cero.
curl https://api.truo.cloud/v1/dbaas/svc_10432/databases \ -X POST \ -H "Authorization: Bearer $TRUO_TOKEN" \ -H "Content-Type: application/json" \ -d '{"name":"appdb"}'truo dbaas database create svc_10432await truo.dbaas.databases.create("svc_10432", {"name":"appdb"});truo_dbaas({ "action": "database_create", "id": "svc_10432"})operationId: dbaas.databases.create
Borrar una base
Sección titulada «Borrar una base»DELETE /v1/dbaas/{id}/databases/{name} · scope dbaas:write · destructiva — no tiene vuelta atras · idempotente
Destructivo e irreversible: se van los datos y no hay papelera. Lo único que queda es lo que haya en GET /v1/dbaas/{id}/backups.
curl https://api.truo.cloud/v1/dbaas/svc_10432/databases/appdb \ -X DELETE \ -H "Authorization: Bearer $TRUO_TOKEN"truo dbaas database delete svc_10432 appdbawait truo.dbaas.databases.delete("svc_10432", "appdb");truo_dbaas({ "action": "database_delete", "id": "svc_10432", "name": "appdb"})operationId: dbaas.databases.delete
Listar las bases del servicio
Sección titulada «Listar las bases del servicio»GET /v1/dbaas/{id}/databases · scope dbaas:read
curl https://api.truo.cloud/v1/dbaas/svc_10432/databases \ -H "Authorization: Bearer $TRUO_TOKEN"truo dbaas database list svc_10432await truo.dbaas.databases.list("svc_10432");truo_dbaas({ "action": "database_list", "id": "svc_10432"})operationId: dbaas.databases.list
Obtener una base de datos con su estado real
Sección titulada «Obtener una base de datos con su estado real»GET /v1/dbaas/{id} · scope dbaas:read
Consulta el backend. Si no responde, los campos de estado vuelven en null y capabilities queda sin databases/users en vez de fallar: que el backend tenga un hipo no debería impedirte leer el resto del recurso.
curl https://api.truo.cloud/v1/dbaas/svc_10432 \ -H "Authorization: Bearer $TRUO_TOKEN"truo dbaas get svc_10432await truo.dbaas.instances.get("svc_10432");truo_dbaas({ "action": "get", "id": "svc_10432"})operationId: dbaas.instances.get
Listar las bases de datos gestionadas de la cuenta
Sección titulada «Listar las bases de datos gestionadas de la cuenta»GET /v1/dbaas · scope dbaas:read
Sale de la base, sin consultar el backend: engine, state, host y plan vienen en null, y capabilities omite databases y users porque saber si el motor las tiene costaría una llamada por elemento de la página. Una clave ausente es “no se consultó”, que no es lo mismo que false. Para el estado real de una, GET /v1/dbaas/{id}.
curl https://api.truo.cloud/v1/dbaas \ -H "Authorization: Bearer $TRUO_TOKEN"truo dbaas listawait truo.dbaas.instances.list();truo_dbaas({ "action": "list"})operationId: dbaas.instances.list
Reiniciar el motor
Sección titulada «Reiniciar el motor»POST /v1/dbaas/{id}/restart · scope dbaas:write · reversible · idempotente
Corta las conexiones abiertas: las transacciones en vuelo se pierden. Devuelve 202 con una operación ya terminada —el reinicio es síncrono en los dos backends— para que el cliente trate todas las mutaciones largas igual, y para que el día que deje de serlo no cambie el contrato sino la columna backend de la operación.
curl https://api.truo.cloud/v1/dbaas/svc_10432/restart \ -X POST \ -H "Authorization: Bearer $TRUO_TOKEN"truo dbaas restart svc_10432await truo.dbaas.instances.restart("svc_10432");truo_dbaas({ "action": "restart", "id": "svc_10432"})operationId: dbaas.instances.restart
Últimas líneas del log del motor
Sección titulada «Últimas líneas del log del motor»GET /v1/dbaas/{id}/logs · scope dbaas:read
La cola del log del proceso del motor, de la más vieja a la más nueva. No es un log de consultas ni de auditoría: son los mensajes de arranque, errores y avisos del motor.
curl https://api.truo.cloud/v1/dbaas/svc_10432/logs \ -H "Authorization: Bearer $TRUO_TOKEN"truo dbaas logs svc_10432await truo.dbaas.logs.get("svc_10432");truo_dbaas({ "action": "logs", "id": "svc_10432"})operationId: dbaas.logs.get
Métricas de la instancia
Sección titulada «Métricas de la instancia»GET /v1/dbaas/{id}/stats · scope dbaas:read
Instantánea, no serie temporal. Qué campos vienen llenos depende del backend del servicio: unos miden el contenedor y otros el motor.
curl https://api.truo.cloud/v1/dbaas/svc_10432/stats \ -H "Authorization: Bearer $TRUO_TOKEN"truo dbaas stats svc_10432await truo.dbaas.stats.get("svc_10432");truo_dbaas({ "action": "stats", "id": "svc_10432"})operationId: dbaas.stats.get
Crear un usuario
Sección titulada «Crear un usuario»POST /v1/dbaas/{id}/users · scope dbaas:write · reversible · idempotente
La password no se guarda de nuestro lado ni se devuelve después: si se pierde, se cambia con POST /v1/dbaas/{id}/users/{username}/password.
curl https://api.truo.cloud/v1/dbaas/svc_10432/users \ -X POST \ -H "Authorization: Bearer $TRUO_TOKEN" \ -H "Content-Type: application/json" \ -d '{"username":"app","password":"<password>"}'truo dbaas user create svc_10432await truo.dbaas.users.create("svc_10432", {"username":"app","password":"<password>"});truo_dbaas({ "action": "user_create", "id": "svc_10432"})operationId: dbaas.users.create
Borrar un usuario
Sección titulada «Borrar un usuario»DELETE /v1/dbaas/{id}/users/{username} · scope dbaas:write · destructiva — no tiene vuelta atras · idempotente
Corta el acceso de todo lo que estuviera conectado con ese usuario. No borra datos: las bases que creó siguen ahí.
curl https://api.truo.cloud/v1/dbaas/svc_10432/users/app \ -X DELETE \ -H "Authorization: Bearer $TRUO_TOKEN"truo dbaas user delete svc_10432 appawait truo.dbaas.users.delete("svc_10432", "app");truo_dbaas({ "action": "user_delete", "id": "svc_10432", "username": "app"})operationId: dbaas.users.delete
Listar los usuarios del motor
Sección titulada «Listar los usuarios del motor»GET /v1/dbaas/{id}/users · scope dbaas:read
Incluye al administrador. En MySQL el mismo nombre puede aparecer con varios host: el par usuario@host es lo que identifica al usuario, y por eso es el id del recurso.
curl https://api.truo.cloud/v1/dbaas/svc_10432/users \ -H "Authorization: Bearer $TRUO_TOKEN"truo dbaas user list svc_10432await truo.dbaas.users.list("svc_10432");truo_dbaas({ "action": "user_list", "id": "svc_10432"})operationId: dbaas.users.list
Cambiar la password de un usuario
Sección titulada «Cambiar la password de un usuario»POST /v1/dbaas/{id}/users/{username}/password · scope dbaas:write · reversible · idempotente
Toma efecto de inmediato: las aplicaciones que sigan usando la anterior van a fallar al reconectar. Sirve también para el usuario administrador.
curl https://api.truo.cloud/v1/dbaas/svc_10432/users/app/password \ -X POST \ -H "Authorization: Bearer $TRUO_TOKEN" \ -H "Content-Type: application/json" \ -d '{"password":"<password>"}'truo dbaas user password svc_10432 appawait truo.dbaas.users.set_password("svc_10432", "app", {"password":"<password>"});truo_dbaas({ "action": "user_set_password", "id": "svc_10432", "username": "app"})operationId: dbaas.users.set_password