Plugin fuori processo
Obiettivo: dichiarare un plugin scritto in un altro linguaggio ed eseguirlo via stdio o HTTP.
Prerequisiti
- Il comando o il servizio del plugin, compilato ed eseguibile dal worker.
Passi
-
Scegli come gira il plugin: come processo figlio (stdio) o come servizio (HTTP). Entrambi parlano JSON-RPC 2.0.
-
Dichiara il plugin con il kind
Plugin, con il comando che lo avvia e le variabili d'ambiente che gli servono:apiVersion: afe.dev/v1alpha1kind: Pluginmetadata:name: my-pluginspec:transport: stdiocommand:- my-plugin- serveenv:MY_PLUGIN_TOKEN: "${MY_PLUGIN_TOKEN}" -
Esegui un flow. Il motore chiama
describeper conoscere le porte, poi uninvokeper ogni chiamata di porta. È lo stesso contratto di un plugin in processo.
Note
Un plugin stdio riceve solo PATH, HOME e le variabili dichiarate nel suo manifest. Nessun
segreto del motore entra mai in esso.
Risoluzione dei problemi
plugin 'my-plugin' did not start: [Errno 2] No such file or directory: 'my-plugin'
Il campo command nomina un binario che il worker non trova su PATH. Installa il plugin sul
worker, oppure usa un percorso assoluto in command.
plugin 'my-plugin' did not answer 'describe'
Il processo figlio è partito, ma non ha risposto entro il timeout del trasporto. Controlla i log
del plugin su stderr, e che parli JSON-RPC 2.0 delimitato da riga su stdout.
plugin 'my-plugin': <messaggio>
Il plugin ha risposto con un errore JSON-RPC. Il messaggio è quello del plugin: leggilo rispetto
alla documentazione o al codice sorgente del plugin.