<Prereq> 元素

<Prereq> 元素可將必要條件指派給 <Get><Set><Discover> 作業。

語法

母元素:<Get><Set><Discover>

支援下列屬性:
表 1. 屬性
屬性 必要 類型 說明
id 字串 指定唯一的 ID
支援下列子元素:
表 2. 子元素
子元素 必要 說明
<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> 元素下。

範例

下列範例會定義一個必要條件,此必要條件會檢查是否會將 netaddrnetaddr6 參數套用在擷取它們的相同系統上:

<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