Zadowolenie

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.

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 konfiguracjiOpis
~/.happy_conf.jsonZmienne konfiguracji do użytku osobistego lub wtyczki. Ustaw te wartości za pomocą polecenia happy-configuration.
<path-to-happy>/happy/conf/main_config.jsonGłówne zmienne konfiguracji Happy.
<path-to-happy>/happy/conf/log_config.jsonKonfiguracja 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()