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: 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
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.
- Szczęśliwy:
/topologies
- OpenWeave:
/src/test-apps/happy/topologies/standalone
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 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 | Podstawowe zmienne konfiguracji Happy. |
<path-to-happy>/happy/conf/log_config.json | Konfiguracja 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()