Passa al contenuto principale

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​

  1. Scegli come gira il plugin: come processo figlio (stdio) o come servizio (HTTP). Entrambi parlano JSON-RPC 2.0.

  2. Dichiara il plugin con il kind Plugin, con il comando che lo avvia e le variabili d'ambiente che gli servono:

    apiVersion: afe.dev/v1alpha1
    kind: Plugin
    metadata:
    name: my-plugin
    spec:
    transport: stdio
    command:
    - my-plugin
    - serve
    env:
    MY_PLUGIN_TOKEN: "${MY_PLUGIN_TOKEN}"
  3. Esegui un flow. Il motore chiama describe per conoscere le porte, poi un invoke per 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.

Vedi anche​