Examplar Execution Flow is Mapped

Hey all.

Well, it’s certainly been a bit since the last update, but, I have diagrammed the execution flow for the Task class, finally, and fleshed out a (mostly) working implementation of the subprocess execution class consumed during that process.

Note:  Green is cheese for the mice.

Note 2: Not really.  Those are user-configurable items in the datastructure.

Decisions

  • At this point implementation is almost complete.  I’ve gone ahead and made an executive decision to include the design documents with the source in the Examplar source repository.
  • Any pull requests that do not reflect their changes in the design (where applicable) will be summarily rejected.
  • I have removed output checks because it’s unnecessary and complex.  If users desire that they’ll need to implement it in the code that Examplar calls.  It is designed to accommodate that, so there is no loss of functionality there.

TODO

  • There is a minor issue with I/O redirection that I’m working on (select/poll madness needed there).
  • It doesn’t support curses dialogs very well at all yet, I assume there’s additional communication going on regarding cursor position, refresh, and window size that needs to be accounted for.  I will not consider the product releaseable until curses dialogs are fully supported.  This also applies to interactive utilities like an ssh client.  This was actually partially working until an issue with exit code of child process capture was repaired that ended up breaking it in the process.  Everything comes back to the same class for subprocess execution.
  • Dependency check implementation.

Summary of Current State

Examplar is actually a functional product at this point and can be used for simple styles of scripting (i.e. tools that have output but dont require input to STDIN) but not for interactive processes.  The difference between a full, robust software suite and current state is a matter of fixing I/O redirection in a single class, which is in progress.

That should be relatively soon, but in the meantime you should be able to use it to build with your favorite python scripts, bash scripts, ruby scripts, C tools, or whatever and even begin building out things with it as long as those things don’t require keyboard entry from the user.

This is, of course, at the time of writing this, so for posterity’s sake the current source is here.

The repos are kind of the wild west until first release.

Musings

As I’m working through the test scenarios and use cases it’s occured to me how badly I needed this tool in some environments I’ve worked in and some builds I’ve done in the past — yet it’s so simple when you zoom out.  I have a feeling this has the potential for a larger impact than I initially intended, in terms of the quality of the automations that will be produced in this as opposed to just scripting or programming something out without rails in place.

All in all, it’s coming together to meet its originally intended purpose:  A scalable complex (or simple) automation or testing framework.  It could even be used for orchestration or configuration management.

I do have to laugh at the fact that the last 5% of the code took 90% of the project time.