Google is committed to advancing racial equity for Black communities. See how.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Happy Usage

Verwenden Sie das Flag -h mit einem happy-* Befehl happy-* , um die Hilfe und die Liste der Optionen für diesen Befehl anzuzeigen.

Statusdateien

Happy speichert und behält seinen Topologiezustand sorgfältig in einer JSON-Datei mit einem einzigen Datensatz bei. Mit dieser Statusdatei kann Happy die entsprechenden Befehle ausführen, um eine Topologie zu erstellen oder zu entfernen.

Die Standardstatusdatei befindet sich unter ~/.happy_state.json . Der Standardstatusname ist happy , wie in der Ausgabe für den happy-state :

happy-state

State Name:  happy

Parallelzustände

Happy unterstützt mehrere gleichzeitig existierende parallele Zustände. Der aktuelle Status wird durch die Umgebungsvariable HAPPY_STATE_ID vorgegeben. Wenn HAPPY_STATE_ID in der Umgebung nicht vorhanden ist, wird der Standardstatuswert von happy verwendet.

HAPPY_STATE_ID wird während der Happy-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"

Wenn Sie nun den happy-state überprüfen, erhalten Sie einen anderen Status:

happy-state

State Name:  sunny

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

Deinstallieren Sie mit parallelen Zuständen

Wenn Sie parallele Happy-Zustände verwenden und Happy deinstallieren möchten, stellen Sie sicher, dass Sie happy-state-delete mit jedem aktiven Zustand ausführen. Dadurch wird sichergestellt, dass alle von Happy erstellten Netzwerk-Namespaces von Ihrem System entfernt werden, ohne dass dies Auswirkungen auf die Linux-Host-Netzwerkkonfiguration hat.

Zum Beispiel mit zwei Zuständen von happy und sunny :

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

Entfernen Sie jede parallele Statusdatei manuell nach Bedarf:

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

Protokolle

Happy sendet standardmäßig Protokolle an syslog . Eine zweite Protokollsicherung wird an /tmp/${HAPPY_STATE_ID}_debug_log.txt gesendet.

Führen Sie zum Anzeigen von Happy-Protokollen happy-state -l in einem separaten Terminalfenster aus. Wenn Sie Happy-Befehle eingeben, werden in den Protokollen die Shell-Befehle Happy-Probleme im Hintergrund angezeigt. Dies ist ein guter Weg, um zu verstehen, wie Happy funktioniert, wenn Sie an Linux-Netzwerk-Namespaces interessiert sind.

Zum Beispiel erstellt happy-node-add node00 einen Happy-Knoten. Die Protokollausgabe 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() sind die Shell-Befehle, die Happy aufruft. Betrachten Sie jede Zeile im Protokoll:

# 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 zum Testen sowohl im Happy- als auch im OpenWeave-Repository enthalten. Verwenden Sie sie auch, um die Befehle zum Erstellen komplexer Topologien zu lernen.

Topologien sind im JSON- und Shell-Skriptformat.

JSON

JSON-Topologiedateien werden mit den Befehlen happy-state-load oder weave-state-load . Wenn die Topologie Weave enthält, müssen Sie weave-state-load , um die Topologie zu laden. Andernfalls werden die Weave-spezifischen Befehle übersprungen.

Zum Beispiel eine Topologie ohne Webart:

happy-state-load thread_wifi_ap_internet.json

Eine Topologie mit Weave:

weave-state-load three_nodes_on_thread_weave.json

Verwenden Sie happy-shell -s um Ihre aktuelle Topologie als separate JSON-Datei für die spätere Verwendung (z. B. ein Testfallskript ) zu speichern:

happy-shell -s my_topology.json

Dadurch wird die Topologiestatusdatei im Verzeichnis $HOME gespeichert.

Shell-Skripte

Shell-Skript-Topologiedateien enthalten eine Reihe von Happy- und Weave-Befehlen zum Erstellen der Topologien in den entsprechenden JSON-Dateien. Diese Skripte haben standardmäßig keine ausführbaren Berechtigungen. Sie können auf zwei Arten ausgeführt werden:

Mit dem Befehl bash :

bash thread_wifi_ap_internet.sh

Durch Anwenden ausführbarer Berechtigungen:

chmod +x thread_wifi_ap_internet.sh
./thread_wifi_ap_internet.sh

Aufbau

Happy hat drei Konfigurationsdateien:

Konfigurationsdatei Beschreibung
~/.happy_conf.json Konfigurationsvariablen für den persönlichen oder Plug-In-Gebrauch. Stellen Sie diese Werte mit dem Befehl happy-configuration .
<path-to-happy> /happy/conf/main_config.json Primäre Happy-Konfigurationsvariablen.
<path-to-happy> /happy/conf/log_config.json Protokollkonfiguration.

Konfigurationsvariablen hinzufügen

Wir empfehlen, dass Sie den Befehl happy-configuration , um alle persönlichen Variablen oder Plug-In-Variablen festzulegen, die über die Standardeinstellungen hinausgehen, die Ihre spezifische Bereitstellung von Happy erfordert.

Um Happy beispielsweise weave_path , wo sich das Weave- test-apps Verzeichnis für Testskripte befindet, legen Sie die Variable weave_path :

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 obigen Beispiel ist ContinuousPing der benutzerdefinierte Name für den Prozess, mit dem Happy den Prozess verwaltet. Verwenden Sie happy-process-wait um die Prozessausführung happy-process-stop , und happy-process-stop , um den Prozess abzubrechen.

Die Prozessausgabe erfolgt in /tmp . Überprüfen Sie beispielsweise nach dem Starten des ContinuousPing-Prozesses 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.

Verwendung von sudo

Happy ändert die Netzwerkkonfiguration, die vom Linux-Kernel gesteuert wird. Da nur root die Kernelkonfiguration ändern kann, fordert Happy Sie auf, während des Betriebs das sudo Passwort einzugeben.

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

Python-Skripte

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

import happy

Einzelne in /happy gefundene Befehlsmodule werden wie folgt importiert:

import happy.HappyNodeAdd

Rufen Sie die Funktion option() , um option() abzurufen. So HappyNodeAdd Sie beispielsweise die Optionen des HappyNodeAdd Moduls ab:

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