I was talking with some cohorts and we discussed Imagr as well as a feature that could be extremely useful for the project.
One thing about Imagr that makes it super useful is that all the workflows are dynamic. You feed it a config file and it runs the workflow as per the config file.
What if this functionality was taken a little further? Why not download the code necessary to run the steps as well as the specific settings to use in the step.
Example:
- Imagr pulls down the config
- partitionDisk step is in config
- Imagr pulls down the module (code) for partitionDisk
- Imagr runs the partitionDisk code using the data in the config
The Imagr.app that lives on the NBI would have the bare minimum amount of code to download the workflow modules/configs from the server and execute them. It would essentially be a stub app that sets up the netboot environment with only the steps necessary to image/bootstrap a machine.
This would provide a few very useful things:
- Less NBI builds. No need to rebuild the .nbi to change Imagr workflow steps and functionality.
- Better/faster testing. It would be possible to test new workflow modules with quick rollback if something doesn't work as expected. If you had 5 locations, you could test a new module at one location, confirm it works well and then roll it out to additional locations.
- More flexible. Just like with dynamic workflows which are configured dynamically, the code itself would only be pulled down if appropriate for the given Netboot set/location.
To facilitate this, you could split imagr into two parts:
Imagr Core (the .app)
Image Standard Modules (all the 'supported' workflow modules)
The only things that would need to be supported by the project would be Imagr Core and Imagr Standard Modules. If someone wanted to write a workflow module that queries AD and does all types of other crazy things, then they could feel free to provide that to the community and support it outside of the main Imagr project. This would help keep Imagr focused on doing the standard functionality well...Imaging and bootstrapping machines).
I think this may be slightly painful to implement at first, but once done, it would make doing further improvements easier and faster.
Nate