<Prereq> 元素
<Prereq> 元素可將必要條件指派給 <Get>、<Set> 及 <Discover> 作業。
語法
母元素:<Get>、<Set> 及 <Discover>
支援下列屬性:
屬性 | 必要 | 類型 | 說明 |
---|---|---|---|
id | 否 | 字串 | 指定唯一的 ID |
支援下列子元素:
子元素 | 必要 | 說明 |
---|---|---|
<Command> | 否 | 指令 |
<Argument> | 否 | 指令行引數 |
<Stdin> | 否 | <Stdin> 元素所支援的引數 |
<ErrMessage> | 否 | 必要條件失敗時所要列印的訊息 |
註: 必須針對每一個必要條件定義 <Command> 元素:在 <ParameterDef> 層次、在 <CfgMethod> 層次,或在
<PrereqDef> 元素中。
用法
Prereqs 指令可針對使用 <Get>、<Set> 及 <Discover> 作業的參數,決定處理此 <Get>、<Set> 及 <Discover> 作業的條件。將忽略其 prereq 指令失敗(非零回覆碼)的參數,而且會列印在必要條件中所定義的錯誤訊息。
<Prereq> 元素可將必要條件指派給母項 <Get>、<Set> 或 <Discover> 作業。必要條件是在本端的 <Prereq> 元素下定義,或是繼承自更高層次的 <Prereq> 或 <PrereqDef> 元素,而此元素需要有相符的 id 屬性。
參數會在本端的 <ParameterDef> 元素下定義所有必要條件。 此外,如果使用配置方法,則必要條件還會在參數的配置方法中定義內容。結果是:如果必要條件是定義在 <CfgMethod> 元素中,則使用配置方法的所有 <ParameterDef> 元素都將自動包含該必要條件(即使部分元素可能在本端重新定義必要條件)。
將以下列順序搜尋針對給定的作業定義必要條件的
<Command>、<Argument>、<Stdin>
及 <ErrMessage> 元素:
- 在 <ParameterDef> 元素的相關作業的<Prereq> 子元素下。
- 如果 <ParameterDef> 元素具有 cfgmethod 屬性,則是在配置方法的相關作業中具有相符 id 的 <Prereq> 子元素下。
- 在具有相符 ID 的型錄的 <PrereqDef> 元素下。
範例
下列範例會定義一個必要條件,此必要條件會檢查是否會將 netaddr 和 netaddr6 參數套用在擷取它們的相同系統上:
<ParameterDef name="netaddr" type="string" targetClass="device" cfgmethod="attr">
<Set type="permanent">
<Prereq>
<Command>[[ `/usr/bin/uname -f` = %p[nodeId] ]]</Command>
<ErrMessage>Parameter cannot be applied to a different node</ErrMessage>
</Prereq>
</Set>
</ParameterDef>
<ParameterDef name="netaddr6" type="string" targetClass="device" cfgmethod="attr">
<Set type="permanent">
<Prereq>
<Command>[[ `/usr/bin/uname -f` = %p[nodeId] ]]</Command>
<ErrMessage>Parameter cannot be applied to a different node</ErrMessage>
</Prereq>
</Set>
</ParameterDef>
在此範例中,測試會執行兩次:一次是針對 netaddr 參數,另一次是針對 netaddr6 參數。這項雙重處理的原因是每一個參數都具有其專屬的必要條件,以及其專屬的 <Command> 元素。若要參考只需要執行測試一次的範例,請參閱 artex_catalog_elem_PrereqDef.html。