Gort es un marco de chatbot diseñado desde cero para chatops.
Gort lleva el poder de la línea de comandos al lugar donde colaboras con tu equipo: tu ventana de chat. Su compatibilidad con paquetes de comandos abiertos permite a los desarrolladores implementar funciones en el idioma de su elección, mientras que un potente control de acceso significa que puede colaborar incluso en las tareas más delicadas con confianza. Centrarse en la extensibilidad y la adaptabilidad significa que puede responder rápidamente a lo inesperado, sin que su equipo pierda visibilidad.
La documentación oficial se puede encontrar aquí: The Gort Guide.
Gort fue concebido inicialmente como una reimplementación de Cog de Operable en Go, y aunque sigue estando fuertemente inspirado en Cog, Gort ha seguido en gran medida su propio camino.
Durante nuestra discusión inicial sobre el diseño, descubrimos que muchas de las características de Cog, por innovadoras que fueran, no se utilizaban en gran medida y que el código base se había vuelto difícil de ampliar y mantener. Además, su lenguaje de implementación, Elixir, tenía relativamente pocos desarrolladores competentes. La solución, que se discutió durante muchos meses en el espacio de trabajo de Cog Slack, fue reescribir Cog desde cero en Go, eliminando algunas de las funciones menos utilizadas y reduciendo la complejidad del proceso.
Esto nos dio la oportunidad de considerar y posiblemente redefinir lo que Cog debía ser. Elegir las características que tienen sentido y descartar las que no. De esta manera, Gort puede describirse más como un “sucesor espiritual” de Cog que como una reimplementación fiel.
La filosofía de diseño de Gort enfatiza la flexibilidad y la seguridad al permitirle crear comandos en cualquier lenguaje que desee, utilizando herramientas con las que ya se sienta cómodo y pueda controlar estrictamente quién puede usarlas y cómo.
Más específicamente:
Cada uno de estos se describe con más detalle a continuación.
Los usuarios interactúan principalmente con Gort a través de comandos , que se activan mediante un carácter de comando ( !
por defecto), pero por lo demás son conceptualmente idénticos a los comandos ingresados en la línea de comando.
Por ejemplo, usar un comando echo
podría verse así:
Como se muestra, Gort transmite la salida de los comandos exitosos.
Puede encontrar más información sobre los comandos en la Guía Gort:
Los comandos de Gort se crean como imágenes de contenedor, lo que significa que puedes crearlos en cualquier idioma con el que te sientas cómodo.
Es más, debido a que su ejecutable recibe todas las entradas del chat exactamente como si se estuvieran escribiendo en la línea de comando, puede usar cualquier intérprete de línea de comando que desee. Los comandos pueden incluso implementarse como scripts Bash o utilizando comandos existentes, como curl
!
Puede encontrar más información sobre cómo escribir comandos en la Guía Gort:
En Gort, se puede instalar un conjunto de uno o más comandos relacionados como un "paquete de comandos".
Un paquete se representa en YAML, especificando qué ejecutable usar para cada comando y quién puede ejecutar cada comando.
A continuación se muestra un archivo de paquete muy simple.
---
gort_bundle_version : 1
name : echo
version : 0.0.1
image : ubuntu:20.04
author : Matt Titmus
homepage : https://guide.getgort.io
description : A test bundle.
long_description : |-
This is an example bundle. It lets you echo text using the "echo"
command that's built into Ubuntu 20.04.
permissions :
- can_echo
commands :
echo :
description : " Echos back anything sent to it. "
executable : [ "/bin/echo" ]
rules :
- must have echo:can_echo
Esto muestra un paquete llamado echo
, que define un comando (también llamado echo
) y un permiso llamado can_echo
. Una vez instalado, cualquier usuario con el permiso echo:can_echo
puede ejecutarlo en Slack.
Puede encontrar más información sobre los paquetes en la Guía Gort:
En Gort, los usuarios se pueden asignar de forma exclusiva a usuarios de uno o más proveedores de chat. Los usuarios de Gort pueden ser miembros de uno o más grupos , que a su vez pueden tener cualquier número de roles que pueden considerarse como colecciones de permisos concedidos. Por ejemplo, el usuario dave
podría estar en un grupo llamado developers
. Este grupo puede tener un rol asociado llamado deployers
que contiene varios permisos, incluido uno llamado production_deploy
.
Puede encontrar más información sobre permisos y reglas en la Guía Gort:
Se puede aplicar un sofisticado sistema de reglas para cada comando que define quién puede usarlo. Estos pueden ser bastante granulares e incluso son capaces de tomar decisiones de permisos basadas en los valores de indicadores o parámetros específicos.
Las reglas se asignan a nivel de paquete y pueden ser bastante sofisticadas. A continuación tenemos un subconjunto de un paquete llamado deploy
.
name : deploy
version : 0.0.1
permissions :
- production_deploy
commands :
deploy :
description : " Deploys to the chosen environment. "
executable : [ "/bin/deploy" ]
rules :
- with arg[0] == "production" must have deploy:production_deploy
Como puede ver, el ejemplo anterior incluye un comando, también llamado deploy
. Su única regla afirma que cualquier usuario que pase "producción" como parámetro debe tener el permiso production_deploy
(del paquete deploy
).
Puede encontrar más información sobre permisos y reglas en la Guía Gort:
Gort proporciona un sofisticado sistema de plantillas que le permite controlar la presentación de cualquier información enviada a los usuarios, incluidos los mensajes del sistema, así como la salida de comandos y los mensajes de error.
Es más, las plantillas se pueden definir a nivel de aplicación en la configuración, o a nivel de paquete o incluso a nivel de comando en configuraciones de paquetes individuales.
Las plantillas de Gort utilizan la sintaxis de plantilla de Go para formatear la salida de forma independiente del chat. Por ejemplo, una plantilla de comando muy simple podría verse así:
{{ text | monospace true }}{{ .Response.Out }}{{ endtext }}
Esta plantilla emite la respuesta del comando ( .Response.Out
) como texto monoespaciado, que puede verse similar a lo siguiente:
A continuación se muestra una plantilla un poco más complicada, esta es una plantilla de error de comando (en realidad la predeterminada).
{{ header | color "#FF0000" | title .Response.Title }}
{{ text }}The pipeline failed planning the invocation:{{ endtext }}
{{ text | monospace true }}{{ .Request.Bundle.Name }}:{{ .Request.Command.Name }} {{ .Request.Parameters }}{{ endtext }}
{{ text }}The specific error was:{{ endtext }}
{{ text | monospace true }}{{ .Response.Out }}{{ endtext }}
Éste incluye un encabezado con un color y un título, así como texto alternado monoespaciado y estándar. En este caso, esto formateará un error de comando similar al siguiente:
Notará algunas referencias a .Response
: son referencias al sobre de respuesta , una estructura de datos a la que se puede acceder desde cualquier plantilla que pone a disposición todos los datos y metadatos relacionados con una solicitud, ejecución y respuesta de un comando.
Puede encontrar más información sobre el registro de auditoría en la Guía Gort:
Gort admite tanto Slack como Discord como proveedores de chat de primera clase.
Cada proveedor de chat admitido tiene una sección dedicada en la configuración. Tenga en cuenta que cada uno de estos es una lista, por lo que no solo puede interactuar con Slack y Discord desde el mismo controlador Gort, sino que también puede interactuar con múltiples instancias de cada uno si lo desea.
Una vez que haya creado un usuario de bot de acuerdo con las instrucciones proporcionadas en el Inicio rápido de Gort, los administradores solo necesitan crear un usuario de Gort (si aún no lo ha hecho) y asignar ese usuario de Gort a una ID de usuario de proveedor de chat, como se muestra. abajo:
$ gort user create mtitmus --email [email protected] --name " Matt Titmus " --password REDACTED
User " mtitmus " created.
$ gort user list
USER NAME FULL NAME EMAIL
admin Gort Administrator gort@localhost
mtitmus Matt Titmus [email protected]
$ gort user map mtitmus Slack U012P123456
User " mtitmus " mapped to " Slack:U012P123456 " .
$ gort user info mtitmus
Name mtitmus
Full Name Matt Titmus
Email [email protected]
Groups < undefined >
ADAPTER ID MAPPING
Slack U012P123456
A partir de ese momento, cualquier comando ingresado por el usuario de chat asignado se asocia con ese usuario de Gort.
Todas las actividades de comando se emiten como eventos de registro de alta cardinalidad (que se muestran a continuación) y se registran en un registro de auditoría que se mantiene en la base de datos de Gort.
Tomemos, por ejemplo, un usuario que ejecuta el comando !bundle list
desde Slack:
Esto generará una salida de registro similar a la siguiente:
INFO [49594] Triggering command adapter.name=Gort bundle.default=false bundle.name=gort bundle.version=0.0.1
command.executable="[/bin/gort bundle]" command.name=bundle
command.params=list gort.user.name=admin provider.channel.id=C1238A01234
provider.channel.name=gort-dev [email protected]
provider.user.id=U012P123456 trace.id=476b3089c8ce0d38a2915a3b58fde032
Como puede ver, este rico evento incluye:
Tenga en cuenta que este ejemplo utiliza un formato "legible por humanos" para facilitar la lectura. En el modo de producción, Gort genera eventos de registro codificados en JSON.
Puede encontrar más información sobre el registro de auditoría en la Guía Gort:
Para obtener más información, consulte la Guía de inicio rápido en The Gort Guide.
El binario gort
también sirve como CLI de administración del controlador.
El cliente gort
utiliza un archivo de configuración con formato YAML, ubicado convencionalmente en el archivo profile
en un directorio .gort
en su directorio de inicio. Aquí es donde puede almacenar las credenciales de conexión para permitir que gort
interactúe con la API REST del controlador de Gort.
Un ejemplo de archivo .gort/profile
podría verse así:
defaults :
profile : gort
gort :
url : https://gort.mycompany.com:4000
password : " seekrit#password "
user : me
preprod :
url : https://gort.preprod.mycompany.com:4000
password : " anotherseekrit#password "
user : me
Los comentarios comienzan con el carácter #
; Si su contraseña contiene un #
, escriba toda la contraseña entre comillas, como se ilustra arriba.
Puede almacenar varios "perfiles" en este archivo, con un nombre diferente para cada uno (aquí tenemos gort
y preprod
). gort
utilizará el que esté marcado como predeterminado (en la sección de defaults
). Sin embargo, puede pasar la opción --profile=$PROFILE
gort
usar un conjunto diferente de credenciales.
Si bien puede agregar perfiles a este archivo manualmente, también puede usar el comando gort profile create
como ayuda.
El ejecutable gort
contiene varios comandos y subcomandos. Hay ayuda disponible para todos ellos pasando la opción --help
. Comience con gort --help
y continúe desde allí.
Gort se encuentra en un estado de fuerte desarrollo activo. La fecha en que se lograron varios hitos se enumera a continuación. El número y el enfoque de los hitos presentes y futuros están sujetos a cambios.