Google is committed to advancing racial equity for Black communities. See how.
Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Szczęśliwe użytkowanie

Użyj flagi -h z dowolnym poleceniem happy-* aby wyświetlić pomoc i listę opcji dla tego polecenia.

Pliki stanu

Happy przechowuje i starannie utrzymuje stan topologii w pliku JSON z pojedynczym rekordem. Korzystając z tego pliku stanu, Happy może uruchomić odpowiednie polecenia, aby utworzyć lub usunąć topologię.

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

happy-state

State Name:  happy

Stany równoległe

Happy obsługuje wiele współistniejących stanów równoległych. Bieżący stan jest podyktowany zmienną środowiskową HAPPY_STATE_ID . Jeśli HAPPY_STATE_ID nie istnieje w środowisku, używana jest domyślna wartość stanu happy .

HAPPY_STATE_ID nie jest tworzony podczas szczęśliwej instalacji. Utwórz go z wartością inną niż state aby natychmiast przejść do innego stanu Happy.

export HAPPY_STATE_ID="sunny"

Teraz sprawdzanie happy-state w innym stanie:

happy-state

State Name:  sunny

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

Odinstaluj ze stanami równoległymi

Jeśli używasz równoległych stanów Happy i chcesz odinstalować Happy, upewnij się, że uruchamiasz happy-state-delete z każdym aktywnym stanem. Gwarantuje to, że wszystkie sieciowe przestrzenie nazw utworzone przez Happy zostaną usunięte z twojego systemu bez wpływu na konfigurację sieci hosta Linuksa.

Na przykład z dwoma stanami happy i sunny :

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

Dzienniki

Happy domyślnie wysyła logi do syslog . Druga kopia zapasowa dziennika jest wysyłana do /tmp/${HAPPY_STATE_ID}_debug_log.txt .

Aby wyświetlić dzienniki Happy, uruchom happy-state -l w osobnym oknie terminala. Po wpisaniu poleceń Happy w dziennikach są wyświetlane polecenia powłoki Happy Issues w tle. To dobry sposób, aby zrozumieć, jak działa Happy, jeśli interesują Cię sieciowe przestrzenie nazw Linuksa.

Na przykład happy-node-add node00 tworzy szczęśliwy węzeł. Dane wyjściowe dziennika dla tego polecenia to:

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

All Driver:CallCmd() linie Driver:CallCmd() to polecenia powłoki, które wywołuje Happy. Rozważ każdą linię 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 są zawarte w repozytoriach Happy i OpenWeave do testowania. Używaj ich także do nauki poleceń służących do tworzenia złożonych topologii.

Topologie są w formacie JSON i Shell Script.

JSON

Pliki topologii JSON są ładowane za pomocą poleceń happy-state-load lub weave-state-load . Jeśli topologia obejmuje Weave, do załadowania topologii należy użyć funkcji weave-state-load , w przeciwnym razie polecenia specyficzne dla Weave zostaną pominięte.

Na przykład topologia bez Splotu:

happy-state-load thread_wifi_ap_internet.json

Topologia z Splotem:

weave-state-load three_nodes_on_thread_weave.json

Aby zapisać aktualną topologię jako oddzielny plik JSON do późniejszego wykorzystania (na przykład skrypt 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 powłoki zawierają zestaw poleceń Happy i Weave służących do tworzenia topologii w odpowiednich plikach JSON. Te skrypty domyślnie nie mają uprawnień do wykonywania. Można je uruchomić na dwa sposoby:

Używając polecenia bash :

bash thread_wifi_ap_internet.sh

Stosując uprawnienia wykonywalne:

chmod +x thread_wifi_ap_internet.sh
./thread_wifi_ap_internet.sh

Konfiguracja

Happy ma trzy pliki konfiguracyjne:

Plik konfiguracyjny Opis
~/.happy_conf.json Zmienne konfiguracyjne do użytku osobistego lub wtyczki. Ustaw te wartości za pomocą polecenia happy-configuration .
<path-to-happy> /happy/conf/main_config.json Podstawowe zmienne konfiguracyjne Happy.
<path-to-happy> /happy/conf/log_config.json Konfiguracja dziennika.

Dodaj zmienne konfiguracyjne

Zalecamy użycie polecenia happy-configuration aby ustawić dowolne zmienne osobiste lub wtyczki poza wartościami domyślnymi, których potrzebuje twoje konkretne wdrożenie Happy.

Na przykład, aby powiadomić weave_path , gdzie znaleźć 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 przechowuje zmienne konfiguracyjne w ~/.happy_conf.json .

Procesy w węzłach

Happy udostępnia polecenia do uruchamiania i zatrzymywania procesów w symulowanych węzłach.

Aby rozpocząć proces:

happy-process-start <node-name> <custom-process-name> <command>

Na przykład, aby stale uruchamiać ping w węźle o nazwie ThreadNode:

happy-process-start ThreadNode ContinuousPing ping 8.8.8.8

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

Dane wyjściowe procesu znajdują się w /tmp . Na przykład po uruchomieniu procesu ContinuousPing sprawdź katalog /tmp :

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

Ten plik .out zawiera dane wyjściowe dla procesu ContinuousPing.

Korzystanie z sudo

Happy zmienia konfigurację sieci kontrolowaną przez jądro Linuksa. Ponieważ tylko root może zmienić konfigurację jądra, Happy prosi o wprowadzenie hasła sudo podczas operacji.

Happy używa systemowej zmiennej środowiskowej $SUDO do wywołania sudo . Jeśli $SUDO nie jest zdefiniowane, Happy wykonuje normalne połączenie sudo .

Skrypty w Pythonie

Po instalacji pakiety Happy Python można zaimportować do środowiska Python za pomocą następującej instrukcji import :

import happy

Poszczególne moduły poleceń znalezione w /happy są importowane w następujący sposób:

import happy.HappyNodeAdd

Aby pobrać opcje modułu, wywołaj funkcję option() . Na przykład, aby pobrać opcje modułu HappyNodeAdd :

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