The following diagram shows how the image capture sequence differs if different provisioning modules are used -- xCAT and VMWare.
Take note of the following:
- The calls made by image.pm to the xCAT and VMWare capture() subroutines are identical. The image.pm state module does not care which provisioning engine is being used. All it knows is that a provisioning engine object has been created before image.pm::process() was called, the object can be accessed via $self->provisioner, and the name of the subroutine to call is capture().
- The calls made by xCAT and VMWare's capture() subroutine to the Windows.pm pre_capture() subroutine are identical. All a provisioning engine module needs to know is that an OS object has been created, the object can be accessed via $self->os, and the name of the subroutine to call is pre_capture().
- Provisioning engine modules do not not need to know any of the operating system details. They assume the OS module's pre_capture() subroutine will perform all the steps necessary for the particular OS to be captured and that the computer will be shut down (or left in the state specified by the end_state argument) when pre_capture() returns.
- The OS module's pre_capture() subroutine does not care which provisioning engine is being used. The steps it performs are identical.
- A very similar example could be made using the same provisioning engine module and different OS modules.