blob: 63dccc0587979de0dad95ecdc603e5aedfb126b7 [file] [log] [blame]
Title: Provisioning Engine Module Interface Specification
<a name="ProvisioningEngineModuleInterfaceSpecification-Background"></a>
# Background
* Provisioning module objects are created by State.pm::initialize() when a
new state object is created.
* Provisioning module objects are available&nbsp;within state modules and
OS modules
* Provisioning module objects are not available within other types of
modules for safety.
{color:#6600ff}{_}Explain:_{color}
* {color:#6600ff}{_}define what we mean by "provisioning system"_{color}
* {color:#6600ff}{_}give examples of provisioning systems{_}{color}
* {color:#6600ff}{_}could be bare metal, virtual, differentiated,
undifferentiated, a service, a special piece of hardware, eventually VCL
could provision various types of resources{_}{color}
* {color:#6600ff}{_}relationships among mgt nodes, computers, provisioning
systems (such as computer is assigned 1 prov system at a time)_{color}
* {color:#6600ff}{_}computer.provisioningid{_}{color}
* {color:#6600ff}{_}provisioning table{_}{color}
* {color:#6600ff}{_}future: management node to provisioning
mapping{_}{color}
* {color:#6600ff}{_}provisioning module implementation is responsible for
knowing which OS interactions are necessary{_}{color}
** {color:#6600ff}{_}image.pm calls provisioner->capture, new.pm calls
provisioner->load, it calls OS subs as necessary{_}{color}
<a name="ProvisioningEngineModuleInterfaceSpecification-ProvisioningModuleSubroutines"></a>
# Provisioning Module Subroutines
It is highly recommended that all&nbsp;provisioning modules implement the
following subroutines.&nbsp; There may be many additional subroutines
implemented within a provisioning module.&nbsp; These will not be called by
any of the core VCL modules.
* [#node_status](#node_status.html)
* [#capture](#capture.html)
* [#load](#load.html)
* [#power_off](#power_off.html)
* [#power_on](#power_on.html)
* [#power_reset](#power_reset.html)
* [#get_current_image](#get_current_image.html)
* [#get_image_size](#get_image_size.html)
----
<a name="ProvisioningEngineModuleInterfaceSpecification-node_status{anchor:node_status}"></a>
## node_status {anchor:node_status}
* Description
** A provisioning module's node_status routine checks the current status of
the node. Through the module this routine is aware of how to figure out if
a node is available and loaded with the correct image or needs to be
reloaded.
** It returns a hash reference with various information, the most important
being the "status"
ie for the xcat module:
hashref: reference to hash with keys/values
\{status\} => <"READY","RELOAD">
\{ping\} => <0,1>
\{ssh\} => <0,1>
\{rpower\} => <0,1>
\{nodeset\} => <"boot", "install", "image", ...>
\{nodetype\} => <image name>
\{currentimage\} => <image name>
** The status key/value tells the vcl system the node is ready or needs to
be reloaded.
<a name="ProvisioningEngineModuleInterfaceSpecification-capture{anchor:capture}"></a>
## capture {anchor:capture}
* Description
** A provisioning module's capture() subroutine saves the current state of
the resource.&nbsp;&nbsp;
** For the provisioning of computers, this means saving an image of the
contents of the hard drive.&nbsp; Although current VCL implementations
focus on provisioning computers, the capture() subroutine does not
necessarily need to save an image of a hard drive.&nbsp; A provisioning
module may be developed to save the configuration of a network service or
some other type of resource.
** The capture() subroutine is responsible for calling the OS module's
pre_capture&nbsp;subroutine.&nbsp; This is not called by the image.pm state
module because there may be cases where an OS isn't applicable.
** The capture() subroutine is responsible for waiting for the entire
capture process to complete.
* Expected Beginning State
** An administrator has configured the resource and initiated the capture
using the VCL website.
** The resource is on and accessible.
** The information contained in the data object describes the image which
does not yet exist and will be captured.
* Expected Ending State
** The entire capture process is complete or else an error occurred.
** The capture() subroutine has waited for an image to be captured.
* Called By
** image.pm::process()
* Arguments & Calling Environment
** Should only be called as an object method&nbsp;of a image.pm state
object ($self->capture())&nbsp;
** No Arguments
* Return Values
** 1
*** Resource was successfully captured.
*** image.pm may proceed to update the database tables making the image
available to be provisioned.
** 0
*** Resource was not successfully captured.
*** An administrator needs to investigate the problem.
<a name="ProvisioningEngineModuleInterfaceSpecification-load{anchor:load}"></a>
## load {anchor:load}
* Description
** A provisioning module's load() subroutine is responsible for
provisioning the node.
** This means starting a virtual machine, loading a image to disk, or
nothing in the case of the standalone lab machine.
* Expected Beginning State
** ...
* Expected Ending State
** ...
* Called By
** ...
* Arguments & Calling Environment
** Must only be called as an object method&nbsp;of a
provisioning&nbsp;object ($provisioner->pre_capture())&nbsp;
** No Arguments
* Return Values
** 1
*** ...
** 0
*** ...
** Undefined
*** ...
<a name="ProvisioningEngineModuleInterfaceSpecification-power_off{anchor:power_off}"></a>
## power_off {anchor:power_off}
* Description
** A provisioning module's power_off() subroutine is responsible for
powering off or down a node.
* Expected Beginning State
** ...
* Expected Ending State
** ...
* Called By
** ...
* Arguments & Calling Environment
** Must only be called as an object method&nbsp;of a
provisioning&nbsp;object ($provisioner->pre_capture())&nbsp;
** No Arguments
* Return Values
** 1
*** ...
** 0
*** ...
** Undefined
*** ...
<a name="ProvisioningEngineModuleInterfaceSpecification-power_on{anchor:power_on}"></a>
## power_on {anchor:power_on}
* Description
** A provisioning module's power_on() subroutine is responsible for
powering on a node.
* Expected Beginning State
** ...
* Expected Ending State
** ...
* Called By
** ...
* Arguments & Calling Environment
** Must only be called as an object method&nbsp;of a
provisioning&nbsp;object ($provisioner->pre_capture())&nbsp;
** No Arguments
* Return Values
** 1
*** ...
** 0
*** ...
** Undefined
*** ...
<a name="ProvisioningEngineModuleInterfaceSpecification-get_current_image{anchor:get_current_image}"></a>
## get_current_image {anchor:get_current_image}
* Description
** A provisioning module's get_current_image() subroutine is responsible
for trying to figure out what image is loaded on the node. By reading
currentimage.txt located on the node's in root's user directory. This
routine can be copied from another module.
* Expected Beginning State
** The node is expected to be online and accessible.
* Called By
** node_status()
* Arguments & Calling Environment
** Must only be called as an object method&nbsp;of a
provisioning&nbsp;object ($provisioner->pre_capture())&nbsp;
** No Arguments
* Return Values
** 1
*** ...
** 0
*** ...
** Undefined
*** ...
<a name="ProvisioningEngineModuleInterfaceSpecification-get_image_size&nbsp;{anchor:get_image_size}"></a>
## get_image_size&nbsp;{anchor:get_image_size}
* Description
** A provisioning module's get_image_size() subroutine is responsible for
collected the disk usage of the image within the image library.
* Expected Beginning State
** N/A
* Expected Ending State
** ...
* Called By
** ...
* Arguments & Calling Environment
** Must only be called as an object method&nbsp;of a
provisioning&nbsp;object ($provisioner->pre_capture())&nbsp;
** No Arguments
* Return Values
** 1
*** ...
** 0
*** ...
** Undefined
*** ...