Zufriedene Nutzung

Sie können das Flag -h mit jedem happy-*-Befehl verwenden, um die Hilfe und die Liste der Optionen für diesen Befehl aufzurufen.

Statusdateien

Happy speichert den Topologiestatus sorgfältig und hält sie in einer JSON-Datei mit einem einzelnen Eintrag bereit. Mit dieser Statusdatei kann Happy die entsprechenden Befehle zum Erstellen oder Entfernen einer Topologie ausführen.

Die Standardstatusdatei befindet sich unter ~/.happy_state.json. Der Standardname des Status ist happy, wie in der Ausgabe happy-state dargestellt:

happy-state

State Name:  happy

Parallele Zustände

„Happy“ unterstützt mehrere parallele Parallelzustände. Der aktuelle Status wird durch die Umgebungsvariable HAPPY_STATE_ID festgelegt. Wenn HAPPY_STATE_ID in der Umgebung nicht vorhanden ist, wird der Standardwert von happy verwendet.

HAPPY_STATE_ID wird während der Installation nicht erstellt. Erstellen Sie einen mit einem anderen Wert als state, um sofort in einen anderen Happy-Status zu wechseln.

export HAPPY_STATE_ID="sunny"

Die Ergebnisse von happy-state haben jetzt einen anderen Status:

happy-state

State Name:  sunny

Jeder Status wird in einer eigenen ~/.${HAPPY_STATE_ID}_state.json-Datei verwaltet. Führen Sie noch einmal den Befehl export HAPPY_STATE_ID="<state-name>" aus, um zwischen den Status zu wechseln.

Mit parallelem Status deinstallieren

Wenn Sie parallele Happy-Status verwenden und sie deinstallieren möchten, führen Sie happy-state-delete mit jedem aktiven Status aus. Dadurch werden alle von Happy erstellten Netzwerk-Namespaces aus Ihrem System entfernt, ohne die Konfiguration des Linux-Hostnetzwerks zu beeinträchtigen.

Beispiel mit den beiden Status happy und sunny:

export HAPPY_STATE_ID="sunny"
happy-state-delete
export HAPPY_STATE_ID="happy"
happy-state-delete

Entfernen Sie die Dateien mit parallelem Status bei Bedarf manuell:

rm -f ~/.sunny_state.json
rm -f ~/.sunny_state.json.lock
rm -f ~/.happy_state.json
rm -f ~/.happy_state.json.lock

Logs

Happy sendet die Protokolle standardmäßig an syslog. An /tmp/${HAPPY_STATE_ID}_debug_log.txt wird eine zweite Log-Sicherung gesendet.

Führen Sie happy-state -l in einem separaten Terminalfenster aus, um Happy Logs aufzurufen. Wenn Sie „Happy“-Befehle eingeben, werden die Shell-Befehle in den Logs im Hintergrund angezeigt. Wenn Sie Interesse an Linux-Netzwerk-Namespaces haben, ist das ein guter Weg, um zu verstehen, wie „Happy“ funktioniert.

happy-node-add node00 erstellt beispielsweise einen Happy-Knoten. Die Logausgabe für diesen Befehl lautet:

DEBUG [HappyHost:_namespaceExists():56] Happy: namespace happy000 does not exist
DEBUG [Driver:writeState():365] Happy: writing Happy state to file
DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns add happy000
DEBUG [HappyHost:_namespaceExists():56] Happy: namespace happy000 exists
DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns exec happy000 ifconfig lo up

Alle Driver:CallCmd()-Zeilen sind die Shell-Befehle, die „Happy“-Aufrufe ausführt. Beachten Sie jede Zeile im Log:

# Check to see if the target namespace (happy000) exists
DEBUG [HappyHost:_namespaceExists():56] Happy: namespace happy000 does not exist

# Write the link between node00 and happy000 in ~/.happy_state.json
DEBUG [Driver:writeState():365] Happy: writing Happy state to file

# Create the network namespace for the node
DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns add happy000

# Check to see if the target namespace (happy000) exists
DEBUG [HappyHost:_namespaceExists():56] Happy: namespace happy000 exists

# Bring up the loopback interface within the happy000 namespace
DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns exec happy000 ifconfig lo up

Beispieltopologien

Beispieltopologien sind zu Testzwecken in den Repositories von Happy und OpenWeave enthalten. Verwenden Sie sie auch, um die Befehle zum Erstellen komplexer Topologien zu lernen.

Topologien liegen im JSON- und Shell-Skriptformat vor.

JSON

JSON-Topologiedateien werden mit den Befehlen happy-state-load oder weave-state-load geladen. Wenn die Topologie Weave enthält, müssen Sie weave-state-load zum Laden der Topologie verwenden. Andernfalls werden die Weave-spezifischen Befehle übersprungen.

Beispiel für eine Topologie ohne Weave:

happy-state-load thread_wifi_ap_internet.json

Topologie mit Weave:

weave-state-load three_nodes_on_thread_weave.json

Wenn Sie Ihre aktuelle Topologie als separate JSON-Datei zur späteren Verwendung speichern möchten, z. B. als Testfallskript, verwenden Sie happy-shell -s:

happy-shell -s my_topology.json

Dadurch wird die Datei mit dem Topologiestatus im Verzeichnis $HOME gespeichert.

Shell-Skripts

Shell-Skripttopologie-Dateien enthalten die Befehle „Happy“ und „Weave“, mit denen die Topologien in den entsprechenden JSON-Dateien erstellt werden. Diese Skripts haben standardmäßig keine ausführbaren Berechtigungen. Hierfür gibt es zwei Möglichkeiten:

Mit dem Befehl bash:

bash thread_wifi_ap_internet.sh

Beachten Sie Folgendes, wenn Sie ausführbare Berechtigungen anwenden:

chmod +x thread_wifi_ap_internet.sh
./thread_wifi_ap_internet.sh

Konfiguration

Bei Happy sind drei Konfigurationsdateien verfügbar:

KonfigurationsdateiBeschreibung
~/.happy_conf.jsonKonfigurationsvariablen für den persönlichen Gebrauch oder für die Steckdose. Legen Sie diese Werte mit dem Befehl happy-configuration fest.
<path-to-happy>/happy/conf/main_config.jsonPrimäre Happy-Konfigurationsvariablen.
<path-to-happy>/happy/conf/log_config.jsonLogkonfiguration.

Konfigurationsvariablen hinzufügen

Wir empfehlen Ihnen, mit dem Befehl happy-configuration beliebige persönliche oder Plug-in-Variablen zusätzlich zu den Standardeinstellungen festzulegen, die Ihre spezifische Bereitstellung von Happy benötigt.

Wenn du beispielsweise angeben möchtest, wo sich das Weave-test-apps-Verzeichnis für Testskripts befindet, lege die Variable weave_path fest:

happy-configuration weave_path <path-to-openweave-core>/build/x86_64-unknown-linux-gnu/src/test-apps

Happy speichert Konfigurationsvariablen in ~/.happy_conf.json.

Prozesse in Knoten

Happy bietet Befehle zum Starten und Stoppen von Prozessen in simulierten Knoten.

So starten Sie einen Prozess:

happy-process-start <node-name> <custom-process-name> <command>

So führen Sie beispielsweise kontinuierlich einen Ping in einem Knoten mit dem Namen „ThreadNode“ aus:

happy-process-start ThreadNode ContinuousPing ping 8.8.8.8

Im Beispiel oben ist ContinuousPing der benutzerdefinierte Name für den Prozess, den Happy zum Verwalten des Prozesses verwendet. Verwenden Sie happy-process-wait, um die Prozessausführung zu unterbrechen, und happy-process-stop, um den Prozess zu beenden.

Die Prozessausgabe ist in /tmp. Nachdem du beispielsweise den ContinuousPing-Prozess gestartet hast, prüfe das Verzeichnis /tmp:

ls /tmp/happy*
/tmp/happy_018691_1524087014.192197_ContinuousPing.out

Diese .out-Datei enthält die Ausgabe für den ContinuousPing-Prozess.

Nutzung von sudo

Happy ändert die Netzwerkkonfiguration, die vom Linux-Kernel gesteuert wird. Da nur root die Kernel-Konfiguration ändern kann, werden Sie während des Vorgangs von Happy aufgefordert, das Passwort sudo einzugeben.

Happy verwendet die Systemumgebungsvariablen $SUDO, um sudo aufzurufen. Wenn $SUDO nicht definiert ist, führt Happy einen normalen sudo-Aufruf aus.

Python-Skripting

Nach der Installation können Happy Python-Pakete mit der folgenden import-Anweisung in eine Python-Umgebung importiert werden:

import happy

Die einzelnen in /happy gefundenen Befehlsmodule werden so importiert:

import happy.HappyNodeAdd

Rufen Sie die Funktion option() auf, um Moduloptionen abzurufen. So rufen Sie beispielsweise HappyNodeAdd-Moduloptionen ab:

module options
import happy.HappyNodeAdd
options = happy.HappyNodeAdd.option()