Symbolic - Operations Runner

Symbolic engine, or OperationRunner, is something like what we have seen for the scripts: a couple of job/thread that going in polling over database, look for ready operation, or completed (success/failed) operations.
All this operation will be completely asynchronous both for user and symbolic application: a ControllerJob will call each "n" seconds to verify the state of ran operation.

  1. Select machine(s), decide which operation he want, and complete (if required) the parameters needed for the execution
  2. An entry is stored in database and set in "ready state"
  3. RunnerJob (is not the same job used to run scripts!) check, each "x" seconds, if there's any operation to run.
  4. When it finds something, using func api, he call func and change the operation status in database: running state
  5. Func, through func-transmit script, will call required minion creating an "async job" (the job id will be returned to RunnerJob and stored in database)
  6. Another job, the ControllerJob, verifies if there is any running operation (contacting database) and, using stored job id, it asks to Func the state of that job
  7. When it receives a "complete job" response (could be success or failed) store the information in database setting also the status to correct value (success/error)
  8. User can see the result for the operation he called.