Grundlagen

Modulkonfiguration hinzufügen

hostware bietet eine großartige Möglichkeit, dem Administrator eine visuelle Konfiguration bereitzustellen. Daher kann jedes Modul eine config.xml-Datei im Basisverzeichnis Deines Moduls haben.

Du denkst vielleicht, dass XML schlecht, alt und nicht mehr empfohlen ist. Tatsächlich hat es aber einige ziemlich coole Vorteile, wie Selbstvalidierung, und ist sehr leicht zu schreiben.

Schema

Jede Konfiguration ist in Tabs unterteilt, die dann Eingabefelder enthalten. Du solltest diese Eingabefelder zur besseren Lesbarkeit für den Administrator mit Trennlinien abgrenzen. Ein Beispiel:

Tabs in Deiner Konfiguration

In der einfachen Syntax der config.xml-Datei definierst Du Tabs auf der ersten Ebene. Jeder Tab kann dann Eingabefelder enthalten.

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="">

    <tab>
        <title>General</title>
        <title lang="de-DE">Allgemein</title>
        <icon>far fa-gear</icon>

    </tab>
</config>

Wie Du im gesamten config.xml-Schema sehen kannst, kann jeder Titel oder jedes Label über das lang-Attribut übersetzt werden. Ein Element ohne lang-Attribut ist immer auf Englisch und wird als Fallback angezeigt, wenn kein anderes Element bereitgestellt wird. Du kannst außerdem ein FontAwesome-Icon angeben, das vor dem Label angezeigt wird. h0stware verwendet den regulären Icon-Typ.

Eingabefelder

Du kannst Eingabefelder mit verschiedenen Typen erstellen, um Konfigurationswerte zu speichern und anzuzeigen. Diese Felder werden dem Administrator automatisch angezeigt. Jedes Eingabefeld hat einen name, der später zum Speichern und Abrufen des Werts verwendet wird. Du kannst einen defaultValue festlegen, der während der Modulinstallation angelegt wird.

Verfügbare Typen:

Typ

Dargestellt als

number

Zahlenfeld

text

Textfeld

bool

Schalter

multi-select

Dropdown

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="">

    <tab>
        <title>General</title>
        <title lang="de-DE">Allgemein</title>
        <icon>far fa-gear</icon>

        <input-field type="number">
            <name>minVmId</name>

            <label>Minimum VM ID</label>
            <label lang="de-DE">Kleinste VM ID</label>

            <helpText>Start of the incremental VM ID range which is used for vm creation</helpText>
            <helpText lang="de-DE">Beginn des inkrementellen VM-ID-Bereichs, der für die VM-Erstellung verwendet wird
            </helpText>

            <defaultValue>500</defaultValue>
        </input-field>

        <input-field type="multi-select">
            <name>vga</name>

            <label>Display type</label>
            <label lang="de-DE">Display Typ</label>

            <helpText>Display type which is set to the vm</helpText>
            <helpText lang="de-DE">Display, welches der VM gesetzt wird</helpText>


            <options>
                <option>
                    <id>default</id>
                    <name>default</name>
                </option>
                <option>
                    <id>serial0</id>
                    <name>Serial</name>
                </option>
            </options>
        </input-field>


        <devider>
            <label>Storage</label>
            <label lang="de-DE">Speicher</label>
        </devider>


        <input-field type="text">
            <name>disk.vm</name>

            <label>Disk for VMs</label>
            <label lang="de-DE">Disk für VMs</label>

            <defaultValue>local</defaultValue>
        </input-field>

        <input-field type="bool">
            <name>vnc.enabled</name>

            <label>VNC enabled?</label>
            <label lang="de-DE">VNC aktivieren?</label>
        </input-field>
    </tab>
</config>

Trennlinien

Um eine bessere Lesbarkeit für den Administrator zu schaffen, möchtest Du vielleicht Trennlinien einfügen, um eine bessere Struktur bereitzustellen. Eine Trennlinie ist eine einfache XML-Struktur, die wie folgt aussieht und sich wie folgt auswirkt:

<devider>
    <label>API key</label>
    <label lang="de-DE">API Schlüssel</label>
</devider>
War das hilfreich?