A child element of the <try> step. <finally> specifies the steps to execute regardless of whether a typical error occurred earlier within the <try> or <catch> steps. An atypical error can be a plan abort or a plan timeout, in which case the steps of the <finally> element are skipped. <finally> can contain any number of steps that are permitted within the scope of the block that contains the <try> step.
The <finally> element is used primarily to specify cleanup steps that should always be run, regardless of an error. To run cleanup steps in response to an error, use the <catch> element instead.
In this example, the component installation consists of resource deployment followed by a restart. In this case, the component is considered to be installed after its resources are deployed, and a failure during restart should not affect its installed state. Typical errors can be suppressed during the restart as follows:
<installSteps blockName="default">
<deployResource/>
<try>
<block>
<call blockName="restart"><thisComponent/></call>
</block>
<catch/><!-- suppress all typical errors -->
</try>
</installSteps>
|
You can use <try> blocks to model intelligent auto-upgrades. Version 1.1 of a component has two different installation routines. One performs a fresh installation of the component. The other performs an upgrade installation if Version 1.0 of that component was previously installed. You can model this situation in a single installation block, as follows:
<installSteps blockName="default">
<try>
<block>
<checkDependency>
<installedComponent name="foo" version="1.0"/>
</checkDependency>
<!-- 1.0 installation exists, do upgrade -->
</block>
<catch>
<!-- 1.0 installation doesn't exist, do fresh installation -->
</catch>
</try>
</installSteps>
|
The <finally> block is most often used to clean up temporary resources. The following example creates a temporary file, processes it, and then removes it.
<control blockName="default">
<varList>
<var name="file" default="/tmp/file.txt"/>
</varList>
<execNative outputFile=":[file]">
<exec cmd="ls"><arg value="-l"/></exec>
</execNative>
<try>
<block>
<!-- process file in some way -->
</block>
<finally>
<execNative>
<exec cmd="rm"><arg value=":[file]"/></exec>
</execNative>
</finally>
</try>
</control>
|