Befehlszeilengenerierung
Das Framework AIX Runtime Expert stützt sich auf externe Befehle, die Parameterwerte erfassen, setzen und (optional) vergleichen. In diesem Abschnitt wird beschrieben, wie Befehlszeilen basierend auf den in den Katalogdateien bereitgestellten Syntaxinformationen erstellt werden.
Operationen
Für jeden Parameter können die folgenden Operationen definiert werden:
- Get type="current": Wird verwendet, um den aktuellen Wert des Parameters zu erfassen.
- Get type="nextboot": Wird verwendet, um den Wert des Parameters zu erfassen, den der Parameter nach einem Warmstart hat.
- Set type="current": Wird verwendet, um den aktuellen Wert des Parameters zu setzen. Dieser Parameterwert geht bei einem Warmstart verloren.
- Set type="nextboot": Wird verwendet, um den Wert des Parameters zu setzen, den der Parameter nach einem Warmstart hat.
- Set type="permanent": Wird verwendet, um den aktuellen Wert des Parameters zu setzen, den der Parameter auch nach einem Warmstart beibehält.
- diff: Wird verwendet, um zwei Werte des Parameters miteinander zu vergleichen.
- Discover: Wird verwendet, um Ziele für Parameter zu suchen, die diese Parameter unterstützen.
- Eigenschaft, die zum Erfassen einer Eigenschaft für einen Parameter verwendet wird
- Voraussetzung, die verwendet wird, um Bedingungen für die Ausführung einer get-, set- oder discover-Operation für einen bestimmten Parameter festzulegen
Es müssen nicht alle Operationen für alle Parameter definiert werden. Die beiden get-Operationen und alle set-Operationen, die von den Parametern unterstützt werden, müssen definiert werden. Die Operation diff ist optional, und wenn sie nicht definiert wird, werden Vergleiche von Parameterwerten intern auf der Basis des Parametertyps, wie z. B. string oder integer, vorgenommen. Die Operation discover darf nur für Parameter definiert werden, die ein Ziel haben. Eigenschaften und Voraussetzungen werden nur bei Bedarf definiert.
Befehlszeilenelemente
Für jede von einem Parameter unterstützte Operation können bis zu fünf verschiedene Elemente verwendet werden, um zu definieren, wie eine Befehlszeile zum Ausführen der Operation erstellt werden kann:
- <Command>: Wird verwendet, um den Basisbefehl für die Behandlung der Parameter zu definieren.
- <Stdin>: Wird verwendet, um die Daten zu definieren, die in die Standardeingabe der Befehlszeile geschrieben wird.
- <Argument>: Wird verwendet, um parameterspezifische Daten in ein Element <Command> oder <Stdin> einzufügen.
- <Filter>: Wird verwendet, um die Ausgabe einer Befehlszeile für die get- und diff-Operationen zu filtern.
- <Mask>: Wird verwendet, um Daten aus der Ausgabe einer Befehlszeile für die get-, diff- und property-Operationen zu extrahieren.
Wenn eine Operation ausgeführt werden muss, werden die für die angeforderte Operation definierten Elemente <Command>, <Stdin>, <Argument> und <Filter> zu einer Gruppe von Befehlszeilen kombiniert, wie im Abschnitt Algorithmus für die Befehlszeilengenerierung erläutert wird. Die generierten Befehlszeilen werden von einer Shell ausgeführt. Für die get-, diff- und property-Operationen wird das Element <Mask> verwendet, um die angeforderten Daten (Parameterwerte, Vergleichsergebnisse oder Eigenschaftswerte) aus der Befehlszeile zu extrahieren.
Konfigurationsmethoden
Befehlszeilenelemente können lokal in einem Element <ParameterDef> definiert oder von einem Element <CfgMethod> übernommen werden, das im Element <ParameterDef> mit dem Attribut cfgmethod referenziert wird.
Die Kombination der folgenden Komponenten ist zulässig: Die Gruppe der Befehlszeilenelemente, die für eine bestimmte Operation eines bestimmten Parameters definiert sind, ist die Union der lokal im Element <ParameterDef> definierten Befehlszeilenelemente und der Befehlszeilenelemente, die für dieselbe Operation im Element <CfgMethod> definiert sind, das vom Attribut cfgmethod des Elements <ParameterDef> referenziert wird. Wenn dasselbe Befehlszeilenelement lokal und in einer Konfigurationsmethode definiert ist, hat die lokale Definition Vorrang.
Im Folgenden sehen Sie eine nicht optimierte Katalogdatei:
<CfgMethod id=”vmo”>
<Get type=”nextboot”>
<Command>/usr/sbin/vmo -r%a</Command>
<Mask name="1" value="2">[[:space:]]*(.*) = (.*)</Mask>
</Get>
<Set type=”permanent”>
<Command>/usr/sbin/vmo –p –o%a</Command>
<Argument> -o %n=%p</Argument>
</Set>
</CfgMethod>
<ParameterDef name=”lgpg_size” cfgmethod=”vmo”>
<Get type=”current”>
<Command>/usr/sbin/vmo -o lgpg_size</Command>
<Mask name="1" value="2">[[:space:]]*(.*) = (.*)</Mask>
</Get>
<Get type=”nextboot”>
<Argument> -o lgpg_size</Argument>
</Get>
</ParameterDef>Erläuterungen zu dieser Datei:
- Die Operation <Get type="current"> wird vollständig auf der Ebene von <ParameterDef> definiert.
- Die Operation <Get type="nextboot"> hat einige Elemente, die auf der Ebene von <CfgMethod> definiert sind (<Command> und <Mask>), und einige Elemente, die auf der Ebene von <ParameterDef> definiert sind (<Argument>).
- Die Operation <Get type="current"> wird vollständig auf der Ebene von <CfgMethod> definiert.
Die Verwendung einer Konfigurationsmethode hat die folgenden beiden Vorteile:
- Sie vereinfacht den Katalog. In vielen Fällen übernehmen Parameterdefinitionen alle Befehlszeilenelemente von einer Konfigurationsmethode, und das Element <ParameterDef> ist leer.
- Sie lässt die Gruppierung verschiedener Parameter in einer einzigen Befehlszeile zu, sofern dies möglich ist.
Algorithmus für die Befehlszeilengenerierung
Befehlszeilen werden mit einem Algorithmus generiert, der die Gruppierung mehrerer Parameter in einem einzigen Befehl zulässt.
Die Parametergruppierung ist nicht nur aus Leistungs- und Effizienzgründen, sondern auch für bestimmte Parameter erforderlich. Die vmo-Parameter lgpg_regions und lgpg_size können beispielsweise nicht unabhängig voneinander gesetzt werden, sondern müssen gemeinsam in einem einzigen Befehlsaufruf vmo gesetzt werden.
Der Algorithmus für die Befehlszeilengenerierung entspricht funktional den folgenden Schritten:
- Die Elemente <Command> und <Stdin> jedes Parameters im Eingabeprofil werden teilweise erweitert. In dieser Phase werden die Sequenzen %a, %v1[name], %v2[name], %f1[name] und %f2[name] ignoriert und nicht erweitert.
- Parameter, die alle fünf folgenden Bedingungen prüfen, werden gruppiert:
- Parameter verwenden dasselbe Element <Command>.
- Parameter verwenden dasselbe Element <Stdin>.
- Parameter verwenden dasselbe Element <Filter>.
- Die Erweiterung des Elements <Command>, die in Schritt 1 durchgeführt wurde, hat identische Zeichenfolgen erzeugt.
- Die Erweiterung des Elements <Stdin>, die in Schritt 1 durchgeführt wurde, hat identische Zeichenfolgen erzeugt.
Die Gruppe hat jetzt eigene, teilweise erweiterte Elemente <Command> und <Stdin> sowie ein eigenes Element <Filter>, das von allen Parametern in der Gruppe gemeinsam genutzt wird.
- Für jede Parametergruppe werden die Sequenzen %v1[name], %v2[name], %f1[name] und %f2[name] der Elemente <Command> und <Stdin> der Gruppe erweitert. Der Parametername wird nur in der Gruppe gesucht.
- Für jede Parametergruppe wird die Sequenz %a für die Elemente <Command> und <Stdin> der Gruppe erweitert: Für jeden Parameter in der Gruppe wird das Element <Argument> erweitert, und die Verkettung dieser erweiterten Elemente <Argument> ersetzt jede Sequenz %a in den Elementen <Command> und <Stdin>.
Das Ergebnis dieses Prozesses ist eine Gruppe von Befehlszeilen mit optionalen Daten, die in die Standardeingabe geschrieben werden sollen, und einem Befehl zum Filtern der Ausgabe.