Discourse Automation es realmente genial y útil, pero las automatizaciones disponibles son bastante limitadas. Muchas de ellas parecen “hacks” puntuales[1] destinados a abordar el caso de uso específico de algún cliente particular de CDCK, en lugar de herramientas de propósito general.
Es posible crear automatizaciones personalizadas, pero no hay forma de que los clientes alojados las implementen, que yo pueda ver. Además, parecen ser bastante peligrosas. Estoy seguro de que podría trabajar con el amable personal de Discourse para implementar una automatización que he escrito, pero eso parece mucho trabajo para ambas partes.
Así que, aquí está mi idea:
- Una interfaz de administración[2] donde se puedan proporcionar enlaces a imágenes OCI[3] (usando
registry.example.org/imagename:tag). - Una forma de asociar una clave API con esa imagen (vinculada a la página de administración de claves API existente).
- Una forma de asociar un webhook con esa imagen (vinculada a la página de administración de webhooks existente).
- Añadir una opción de programación recurrente para esto, o (mejor, ¡en mi opinión!) añadir eso a los webhooks de forma genérica.
Un broker/despachador escucharía los webhooks y los reenviaría al contenedor coincidente, proporcionando la clave API como secreto y la carga útil a través de stdin o a un puerto http. (Imagino que muchos de estos serían “de un solo uso” — el contenedor se iniciaría, procesaría un evento y saldría — pero podría haber una opción para los persistentes (o, quizás, para escuchar durante N segundos antes de salir).
Los contenedores se ejecutarían con límites de recursos razonables, y ya sea sin almacenamiento persistente o con acceso a los mismos adjuntos de grupo de almacenamiento y cosas que van allí. Para los sitios alojados, puedo imaginar el tiempo de CPU de automatización como otro límite por plan junto con las visualizaciones de páginas, correos electrónicos y almacenamiento.
La ubicación de la API del sitio podría proporcionarse como una variable de entorno u otro secreto. Por defecto, se prohibiría cualquier otro acceso a la red, aunque debería ser posible permitir conexiones salientes específicas.
Por supuesto, uno puede configurar tal cosa ahora mismo “al margen”, pero tenerla integrada con las interfaces de administración de API y Webhooks sería realmente genial (y básicamente se encargaría por completo del problema de administrar secretos de otra manera). Además, la configuración del despachador/broker es un poco complicada.