Użyj flagi -h
z każdym poleceniem happy-*
, aby wyświetlić pomoc i listę opcji dostępnych dla tego polecenia.
Pliki stanu
Szczęśliwe sklepy i jednostronnie przechowują stan topologii w pliku JSON. Za pomocą tego pliku stanu zespół Happy może uruchamiać odpowiednie polecenia, aby utworzyć lub usunąć topologię.
Domyślny plik stanu znajduje się w lokalizacji ~/.happy_state.json
. Domyślna nazwa stanu to happy
, jak przedstawiono w danych wyjściowych happy-state
:
happy-state
State Name: happy
Stany równoległe
Funkcja Happy obsługuje wiele stanów równoległych. Bieżący stan jest określany przez zmienną środowiskową HAPPY_STATE_ID
. Jeśli w środowisku nie ma HAPPY_STATE_ID
, używana jest domyślna wartość stanu happy
.
Aplikacja HAPPY_STATE_ID
nie została utworzona podczas instalacji Happy. Utwórz jedną z wartością inną niż state
, aby od razu przełączyć się na inny stan gry.
export HAPPY_STATE_ID="sunny"
Obecnie wyniki w happy-state
są w innym stanie:
happy-state
State Name: sunny
Każdy stan jest przechowywany w oddzielnym pliku ~/.${HAPPY_STATE_ID}_state.json
. Aby przełączyć się między stanami, uruchom jeszcze raz polecenie export HAPPY_STATE_ID="<state-name>"
.
Odinstalowanie ze stanami równoległymi
Jeśli używasz równoległych stanów Happy i chcesz odinstalować pakiet Happy, upewnij się, że uruchomiony jest happy-state-delete
z każdym aktywnym stanem. Dzięki temu wszystkie przestrzenie nazw sieci utworzone przez sieć Happy zostaną usunięte z Twojego systemu bez wpływu na konfigurację sieci hosta Linux.
Na przykład z 2 stanami happy
i sunny
:
export HAPPY_STATE_ID="sunny"
happy-state-delete
export HAPPY_STATE_ID="happy"
happy-state-delete
Ręcznie usuń w razie potrzeby każdy plik stanu równoległego:
rm -f ~/.sunny_state.json
rm -f ~/.sunny_state.json.lock
rm -f ~/.happy_state.json
rm -f ~/.happy_state.json.lock
Logi
Domyślnie Happy wysyła dzienniki do syslog
. Druga kopia zapasowa logu jest wysyłana na adres /tmp/${HAPPY_STATE_ID}_debug_log.txt
.
Aby wyświetlić dzienniki Happy, uruchom happy-state -l
w osobnym oknie terminala. Gdy wpiszesz polecenia Happy, w logach pojawią się polecenia powłoki Happy w tle. Jeśli chcesz dowiedzieć się, jak działa Happy, dowiedz się, jak działają przestrzenie nazw sieci Linux.
Na przykład: happy-node-add node00
tworzy węzeł szczęśliwy. Wyniki działania logu związane z tym poleceniem:
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
Wszystkie wiersze Driver:CallCmd()
to polecenia powłoki, które wywołuje Happy.
Weź pod uwagę każdy wiersz w dzienniku:
# 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
Przykładowe topologie
Przykładowe topologie znajdziesz w repozytoriach Happy i OpenWeave na potrzeby testów. Za ich pomocą możesz też wykonywać polecenia służące do tworzenia złożonych topologii.
- Wesoły:
/topologies
- OpenWeave:
/src/test-apps/happy/topologies/standalone
Topologie są w formacie JSON i Shell Script.
JSON
Pliki topologii JSON są wczytywane za pomocą poleceń happy-state-load
lub weave-state-load
. Jeśli topologia obejmuje usługę Weave, musisz ją wczytać przy użyciu właściwości weave-state-load
. W przeciwnym razie polecenia dotyczące Weave zostaną pominięte.
Topologia bez tkania:
happy-state-load thread_wifi_ap_internet.json
Topologia usługi Weave:
weave-state-load three_nodes_on_thread_weave.json
Aby zapisać bieżącą topologię jako oddzielny plik JSON do późniejszego użycia (na przykład skryptu przypadku testowego), użyj happy-shell -s
:
happy-shell -s my_topology.json
Spowoduje to zapisanie pliku stanu topologii w katalogu $HOME
.
Skrypty powłoki
Pliki topologii skryptów zawierają zestaw poleceń Happy i Weave służącym do tworzenia topologii w powiązanych plikach JSON. Te skrypty domyślnie nie mają uprawnień wykonywalnych. Możesz je uruchomić na dwa sposoby:
Aby użyć polecenia bash
:
bash thread_wifi_ap_internet.sh
Zastosowanie uprawnień wykonywalnych:
chmod +x thread_wifi_ap_internet.sh
./thread_wifi_ap_internet.sh
Konfiguracja
Szczęśliwy traf ma 3 pliki konfiguracji:
Plik konfiguracji | Opis |
---|---|
~/.happy_conf.json | Zmienne konfiguracji do użytku osobistego lub wtyczki. Ustaw te wartości za pomocą polecenia happy-configuration . |
<path-to-happy>/happy/conf/main_config.json | Główne zmienne konfiguracji Happy. |
<path-to-happy>/happy/conf/log_config.json | Konfiguracja logu. |
Dodawanie zmiennych konfiguracji
Zalecamy używanie polecenia happy-configuration
do ustawiania wszelkich zmiennych osobistych lub wtyczek innych niż domyślne, które są wymagane w przypadku konkretnego wdrożenia.
Aby na przykład wskazać, gdzie znajduje się katalog Weave test-apps
dla skryptów testowych, ustaw zmienną weave_path
:
happy-configuration weave_path <path-to-openweave-core>/build/x86_64-unknown-linux-gnu/src/test-apps
~/.happy_conf.json
ma zmienne konfiguracji sklepu.
Procesy w węzłach
Happy zapewnia polecenia rozpoczynania i zatrzymywania procesów w symulowanych węzłach.
Aby rozpocząć proces:
happy-process-start <node-name> <custom-process-name> <command>
Aby na przykład stale wykonywać polecenia ping w węźle o nazwie ThreadNode:
happy-process-start ThreadNode ContinuousPing ping 8.8.8.8
W tym przykładzie ContinPing to zdefiniowana przez użytkownika nazwa procesu, której Happy używa do zarządzania procesem. Użyj happy-process-wait
, aby zawiesić wykonanie procesu, i happy-process-stop
, aby go zakończyć.
Dane wyjściowe procesu są zapisane w języku: /tmp
. Na przykład po rozpoczęciu procesu pingowania sprawdzić katalog /tmp
:
ls /tmp/happy*
/tmp/happy_018691_1524087014.192197_ContinuousPing.out
Ten plik (.out
) zawiera dane wyjściowe procesu ContinPing.
Korzystanie z sudo
Szczęśliwie zmienia konfigurację sieci sterowaną przez jądro Linuksa.
Konfigurację jądra może zmienić tylko root
, więc w trakcie operacji pojawi się prośba o wpisanie hasła sudo
.
Happy używa zmiennej systemowej $SUDO
do wywołania metody sudo
. Jeśli $SUDO
nie został zdefiniowany, Happy wykonuje zwykłe wywołanie sudo
.
Skrypty w języku Python
Po instalacji pakiety Happy Python można zaimportować do środowiska Python przy użyciu tej instrukcji import
:
import happy
Poszczególne moduły poleceń opisane w /happy
zostały zaimportowane w ten sposób:
import happy.HappyNodeAdd
Aby pobrać opcje modułu, wywołaj funkcję option()
. Aby na przykład pobrać opcje modułu HappyNodeAdd
:
module options import happy.HappyNodeAdd options = happy.HappyNodeAdd.option()