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.
- Glücklich:
/topologies
- OpenWeave:
/src/test-apps/happy/topologies/standalone
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:
Konfigurationsdatei | Beschreibung |
---|---|
~/.happy_conf.json | Konfigurationsvariablen 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.json | Primäre Happy-Konfigurationsvariablen. |
<path-to-happy>/happy/conf/log_config.json | Logkonfiguration. |
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()