Google is committed to advancing racial equity for Black communities. See how.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Buon utilizzo

Utilizzare il flag -h con qualsiasi comando happy-* per visualizzare la guida e l'elenco delle opzioni per quel comando.

File di stato

Happy archivia e conserva con cura il proprio stato topologico in un file JSON con un singolo record. Utilizzando questo file di stato, Happy può eseguire i comandi appropriati per creare o rimuovere una topologia.

Il file di stato predefinito si trova in ~/.happy_state.json . Il nome dello stato predefinito è happy , come si vede nell'output happy-state :

happy-state

State Name:  happy

Stati paralleli

Happy supporta più stati paralleli coesistenti. Lo stato corrente è dettato dalla variabile d'ambiente HAPPY_STATE_ID . Se HAPPY_STATE_ID non esiste nell'ambiente, viene utilizzato il valore di stato predefinito happy .

HAPPY_STATE_ID non viene creato durante l'installazione Happy. Creane uno con un valore diverso da state per passare immediatamente a un altro stato Felice.

export HAPPY_STATE_ID="sunny"

Ora il controllo happy-state produce uno stato diverso:

happy-state

State Name:  sunny

Ogni stato viene mantenuto nel proprio file ~/.${HAPPY_STATE_ID}_state.json . Per passare da uno stato all'altro, eseguire nuovamente il comando export HAPPY_STATE_ID=" <state-name> " .

Disinstalla con stati paralleli

Se utilizzi stati Happy paralleli e desideri disinstallare Happy, assicurati di eseguire happy-state-delete con ogni stato attivo. Ciò garantisce che tutti gli spazi dei nomi di rete creati da Happy vengano rimossi dal sistema senza influire sulla configurazione della rete dell'host Linux.

Ad esempio, con due stati di happy e sunny :

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

Rimuovere manualmente ogni file di stato parallelo secondo necessità:

rm -f ~/.sunny_state.json
rm -f ~/.sunny_state.json.lock
rm -f ~/.happy_state.json
rm -f ~/.happy_state.json.lock

logs

Happy invia i log a syslog per impostazione predefinita. Un secondo backup del log viene inviato a /tmp/${HAPPY_STATE_ID}_debug_log.txt .

Per visualizzare i log di Happy, esegui happy-state -l in una finestra di terminale separata. Quando si immettono i comandi Happy, i registri mostrano i comandi della shell Happy issues in background. Questo è un buon modo per capire come funziona Happy, se sei interessato agli spazi dei nomi di rete Linux.

Ad esempio, happy-node-add node00 crea un nodo Happy. L'output del registro per questo comando è:

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

Tutti i Driver:CallCmd() linee Driver:CallCmd() sono i comandi della shell che Happy chiama. Considera ogni riga nel registro:

# 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

Topologie di esempio

Le topologie di esempio sono incluse nei repository Happy e OpenWeave per il test. Usali anche per apprendere i comandi per costruire topologie complesse.

Le topologie sono in formato JSON e Shell Script.

JSON

I file della topologia JSON vengono caricati utilizzando i comandi happy-state-load o weave-state-load . Se la topologia include Weave, è necessario utilizzare weave-state-load per caricare la topologia, altrimenti i comandi specifici di Weave vengono ignorati.

Ad esempio, una topologia senza Weave:

happy-state-load thread_wifi_ap_internet.json

Una topologia con Weave:

weave-state-load three_nodes_on_thread_weave.json

Per salvare la topologia corrente come file JSON separato per un uso successivo (ad esempio, uno script di test case ), utilizzare happy-shell -s :

happy-shell -s my_topology.json

Ciò salva il file di stato della topologia nella directory $HOME .

Script di shell

I file della topologia degli script di shell contengono il set di comandi Happy e Weave per creare le topologie nei file JSON corrispondenti. Questi script per impostazione predefinita non dispongono di autorizzazioni eseguibili. Possono essere eseguiti in due modi:

Utilizzando il comando bash :

bash thread_wifi_ap_internet.sh

Applicando autorizzazioni eseguibili:

chmod +x thread_wifi_ap_internet.sh
./thread_wifi_ap_internet.sh

Configurazione

Happy ha tre file di configurazione:

File di configurazione Descrizione
~/.happy_conf.json Variabili di configurazione per uso personale o plug-in. Imposta questi valori utilizzando il comando happy-configuration .
<path-to-happy> /happy/conf/main_config.json Variabili di configurazione primarie Happy.
<path-to-happy> /happy/conf/log_config.json Configurazione registro.

Aggiungi variabili di configurazione

Ti consigliamo di utilizzare il comando happy-configuration per impostare eventuali variabili personali o plug-in oltre i valori predefiniti richiesti dalla tua specifica distribuzione di Happy.

Ad esempio, per far sapere a Happy dove trovare la directory delle test-apps Weave per gli script di test, imposta la variabile weave_path :

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

Happy memorizza le variabili di configurazione in ~/.happy_conf.json .

Processi nei nodi

Happy fornisce comandi per avviare e arrestare i processi all'interno dei nodi simulati.

Per avviare un processo:

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

Ad esempio, per eseguire continuamente un ping in un nodo denominato ThreadNode:

happy-process-start ThreadNode ContinuousPing ping 8.8.8.8

Nell'esempio precedente, ContinuousPing è il nome definito dall'utente per il processo che Happy utilizza per gestire il processo. Usa happy-process-wait per sospendere l'esecuzione del processo e happy-process-stop per terminare il processo.

L'output del processo è in /tmp . Ad esempio, dopo aver avviato il processo ContinuousPing, controlla la /tmp :

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

Questo file .out contiene l'output per il processo ContinuousPing.

Utilizzo di sudo

Happy cambia la configurazione di rete controllata dal kernel Linux. Poiché solo root può modificare la configurazione del kernel, Happy ti chiede di inserire la password sudo durante l'operazione.

Happy usa la variabile d'ambiente di sistema $SUDO per chiamare sudo . Se $SUDO non è definito, Happy effettua una normale chiamata sudo .

Scripting Python

Dopo l'installazione, i pacchetti Happy Python possono essere importati in un ambiente Python utilizzando la seguente istruzione di import :

import happy

I singoli moduli di comando trovati in /happy vengono importati come segue:

import happy.HappyNodeAdd

Per recuperare le opzioni del modulo, chiama la funzione option() . Ad esempio, per recuperare le opzioni del modulo HappyNodeAdd :

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