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-stateState 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-stateState 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-deleteexport HAPPY_STATE_ID="happy"happy-state-delete
W razie potrzeby ręcznie usuń każdy plik stanu równoległego:
rm -f ~/.sunny_state.jsonrm -f ~/.sunny_state.json.lockrm -f ~/.happy_state.jsonrm -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()