Przyjemnego korzystania

Aby wyświetlić pomoc i listę opcji związanych z tym poleceniem, użyj flagi -h z każdym poleceniem happy-*.

Pliki stanu

Happy przechowuje i uważnie zarządza stanem topologii w pliku JSON z jednym rekordem. Korzystając z tego pliku stanu, Happy może wykonywać odpowiednie polecenia do tworzenia i usuwania topologii.

Domyślny plik stanu znajduje się pod adresem ~/.happy_state.json. Domyślna nazwa stanu to happy, jak widać w wyjściu happy-state:

happy-state

State Name:  happy

Stany równoległe

Happy obsługuje wiele równoległych stanów. Bieżący stan jest określany przez zmienną środowiskową HAPPY_STATE_ID. Jeśli w środowisku nie ma właściwości HAPPY_STATE_ID, używana jest domyślna wartość stanu happy.

Podczas instalacji HAPPY_STATE_ID nie jest tworzony. Utwórz jeden z wartością inną niż state, aby natychmiast przełączyć się w inny stan Happy.

export HAPPY_STATE_ID="sunny"

Teraz sprawdzanie happy-state powoduje inny stan:

happy-state

State Name:  sunny

Każdy stan jest przechowywany w osobnym pliku ~/.${HAPPY_STATE_ID}_state.json. Aby przełączyć się między stanami, ponownie uruchom polecenie export HAPPY_STATE_ID="<state-name>".

Odinstalowanie z użyciem stanów równoległych

Jeśli używasz równoległych stanów Happy i chcesz odinstalować Happy, uruchom happy-state-delete z aktywnymi stanami. Dzięki temu wszystkie przestrzenie nazw sieci utworzone przez Happy zostaną usunięte z Twojego systemu bez wpływu na konfigurację sieci hosta Linuxa.

Na przykład w przypadku 2 stanów: happysunny:

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

W razie potrzeby ręcznie usuń 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 logi do syslog. Druga kopia zapasowa logów zostanie wysłana na adres /tmp/${HAPPY_STATE_ID}_debug_log.txt.

Aby wyświetlić dzienniki Happy, uruchom happy-state -l w osobnym oknie terminala. Gdy wpisujesz polecenia Happy, w tle będą się wyświetlać polecenia powłoki Happy. Jeśli interesują Cię przestrzenie nazw sieci Linux, możesz w ten sposób dowiedzieć się, jak działa Happy.

Na przykład happy-node-add node00 tworzy węzeł Happy. Wynikiem tego polecenia jest:

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 wywoływane przez Happy. Sprawdź każdy wiersz w logu:

# 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 na potrzeby testowania są zawarte w repozytoriach Happy i OpenWeave. Możesz też użyć tych przykładów, aby poznać polecenia służące do tworzenia złożonych topologii.

Topologie są w formacie JSON i skryptu powłoki.

JSON

Pliki topologii JSON są wczytywane za pomocą poleceń happy-state-load lub weave-state-load. Jeśli topologia zawiera Weave, musisz użyć opcji weave-state-load, aby ją załadować. W przeciwnym razie komendy dotyczące Weave zostaną pominięte.

Na przykład topologia bez Weave:

happy-state-load thread_wifi_ap_internet.json

Topologia z użyciem Weave:

weave-state-load three_nodes_on_thread_weave.json

Aby zapisać bieżącą topologię jako osobny plik JSON na potrzeby 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 skryptu powłoki zawierają zestaw poleceń Happy i Weave służących do tworzenia topologii w odpowiednich plikach JSON. Domyślnie te skrypty nie mają uprawnień do wykonywania. Można je uruchamiać na 2 sposoby:

Za pomocą polecenia bash:

bash thread_wifi_ap_internet.sh

Zastosowanie uprawnień do plików wykonywalnych:

chmod +x thread_wifi_ap_internet.sh
./thread_wifi_ap_internet.sh

Konfiguracja

Happy 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.jsonPodstawowe zmienne konfiguracji Happy.
<path-to-happy>/happy/conf/log_config.jsonKonfiguracja logów.

Dodawanie zmiennych konfiguracji

Zalecamy użycie polecenia happy-configuration, aby ustawić dowolne zmienne osobiste lub wtyczki, które wykraczają poza wartości domyślne wymagane przez konkretne wdrożenie Happy.

Aby na przykład poinformować Happy, gdzie znajduje się katalog test-apps Weave dla testowych skryptów, ustaw zmienną weave_path:

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

Happy przechowuje zmienne konfiguracji w pliku ~/.happy_conf.json.

Procesy w węzłach

Happy udostępnia polecenia uruchamiania 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ć ping w węźle o nazwie ThreadNode:

happy-process-start ThreadNode ContinuousPing ping 8.8.8.8

W powyższym przykładzie CiągłyP to zdefiniowana przez użytkownika nazwa procesu, którego Happy używa do zarządzania tym procesem. Użyj polecenia happy-process-wait, aby zawiesić wykonywanie procesu, i happy-process-stop, aby zakończyć proces.

Dane wyjściowe procesu są w formacie /tmp. Na przykład po rozpoczęciu procesu ciągłego pingowania sprawdź katalog /tmp:

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

Plik .out zawiera dane wyjściowe procesu ciągłego pingowania.

Wykorzystanie: sudo

Zmień konfigurację sieci, która jest kontrolowana przez jądro Linuksa. Ponieważ tylko root może zmienić konfigurację jądra, podczas operacji Happy prosi o podanie hasła sudo.

Happy używa zmiennej środowiskowej systemu $SUDO do wywołania funkcji sudo. Jeśli $SUDO nie jest zdefiniowany, Happy wykonuje zwykłe wywołanie sudo.

Pisanie skryptów w Pythonie

Po zainstalowaniu pakiety Happy Python można importować do środowiska Pythona za pomocą tego polecenia import:

import happy

Poszczególne moduły poleceń znalezione w pliku /happy są importowane 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()