Wrapper di orchestrazione.
Dispone delle funzionalità minime per gestire l'esecuzione di job su backend eterogenei (es: Jenkins, PageDuty Rundeck,...)
E' studiato per porsi come frontend di portali di automazione custom:
- Repository interno dei run. All'atto della sottomissione è possibile indicare l'utente finale owner del job
- Sistema di locking
Il job è l'entità atomica gestita dal framework. Rappresenta un'operazione da eseguire su un backend; Il backend da utilizzare è identificato mediante labels Il backend effettua l'operazione descritta dal job con i parameteri forniti. Il run è l'esecuzione di un job Per gestire la concorrenza dei job è previsto che i job possano fornire una serie di lock da acquisire. Le lock sono memorizzate in un KV store
Il job è descritto dalla classe JobSpec
Dispone di un builder per semplificarne la definizione.
Lato server il compnente responsabile per la sottomissione del job è il JobService
Il jobservice identifica ogni lancio mediante runId ma non espone gli internals del run
JobSpec jobSpec = JobSpec.builder("submitter").withDescription("Job di prova").build();
Long runId = jobService.submit(jobSpec);
- stop job
- gestione output
- hook per consentire ai backend di aggiornare lo stato dei job
- sottomissione file
- hook per consentire ai backend di acquisire file passati in input al job
- polling asincrono stato job sui backend
- security
- ricerca job
- retry job (by resubmission)
- swagger api (yaml generato da runtime)
- logging ed error handling
- documentazione
E' possibile creare ed eseguire un container docker con il server
docker build -t ascob .
docker run -d --rm -p8081:8081 ascob
- Sottomissione job dummy
curl -H "X-Api-Token: rootToken" -X POST http://localhost:8081/api/runs -d '{ "jobSpec": { "description": "dummy", "labels":{"_execution_backend_id":"dummyBackend"}} }' -H "content-type: application/json"
Esempio Risposta:
{
"runId": 1
}
- Job Info
curl -H "X-Api-Token: rootToken" http://localhost:8081/api/runs/1
Esempio risposta
{
"id": 1,
"status": "SUBMITTED",
"description": "dummy",
"submitter": null,
"definedTime": "2023-04-16T18:41:19.099475",
"submissionTime": "2023-04-16T18:41:19.142079",
"endTime": null
}