Utilizza 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 mantiene attentamente lo stato della topologia 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 all'indirizzo ~/.happy_state.json
. Il nome predefinito dello stato è happy
, come mostrato nell'output di happy-state
:
happy-state
State Name: happy
Stati paralleli
Happy supporta più stati paralleli coesistenti. Lo stato attuale è indicato dalla variabile di ambiente HAPPY_STATE_ID
. Se HAPPY_STATE_ID
non esiste nell'ambiente, viene utilizzato il valore predefinito di stato happy
.
HAPPY_STATE_ID
non è stato creato durante l'installazione Happy. Creane uno con un valore diverso da state
per passare immediatamente a un altro stato Happy.
export HAPPY_STATE_ID="sunny"
Ora il controllo di happy-state
genera 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, esegui di nuovo il comando
export HAPPY_STATE_ID="<state-name>"
.
Disinstalla con stati paralleli
Se utilizzi gli stati Happy paralleli e vuoi disinstallare Happy, assicurati di eseguire happy-state-delete
con ogni stato attivo. In questo modo, tutti gli spazi dei nomi di rete creati da Happy vengono rimossi dal sistema senza influire sulla configurazione della rete 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
Rimuovi manualmente ogni file di stato parallelo in base alle tue esigenze:
rm -f ~/.sunny_state.json
rm -f ~/.sunny_state.json.lock
rm -f ~/.happy_state.json
rm -f ~/.happy_state.json.lock
Log
Per impostazione predefinita, Happy invia i log a syslog
. Verrà inviato un secondo backup di log a
/tmp/${HAPPY_STATE_ID}_debug_log.txt
.
Per visualizzare i log di Happy, esegui happy-state -l
in una finestra del terminale separata. Quando inserisci i comandi Happy, i log mostrano i comandi della shell Happy in background. È un buon modo per capire come funziona Happy, se ti interessano gli spazi dei nomi di rete Linux.
Ad esempio, happy-node-add node00
crea un nodo Happy. L'output del log 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
Tutte le righe Driver:CallCmd()
sono i comandi della shell che chiama Happy.
Considera ogni riga nel log:
# 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 i test. Utilizzali anche per imparare i comandi per realizzare topologie complesse.
- Felice:
/topologies
- OpenWeave:
/src/test-apps/happy/topologies/standalone
Le topologie sono in formato JSON e Script Script.
JSON
I file di topologia JSON vengono caricati utilizzando i comandi happy-state-load
o weave-state-load
. Se la topologia include Weave, devi 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 tua topologia corrente come file JSON separato per un utilizzo futuro (ad esempio, uno script scenario di test), utilizza happy-shell -s
:
happy-shell -s my_topology.json
Viene salvato il file di stato della topologia nella directory $HOME
.
Script shell
I file della topologia di script di Shell contengono l'insieme di comandi Happy e Weave per creare le topologie nei file JSON corrispondenti. Per impostazione predefinita, questi script non dispongono delle 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 | Description |
---|---|
~/.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 principali principali. |
<path-to-happy>/happy/conf/log_config.json | Configurazione log. |
Aggiungi variabili di configurazione
Ti consigliamo di utilizzare il comando happy-configuration
per impostare eventuali variabili personali o plug-in aggiuntive rispetto a quelle predefinite
necessarie per il tuo specifico deployment di Happy.
Ad esempio, per far sapere a Happy dove trovare la directory test-apps
di 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
Variabili di configurazione per gli archivi soddisfatti in ~/.happy_conf.json
.
Processi nei nodi
Happy fornisce comandi per avviare e interrompere 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. Utilizza 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
ContinuusPing, controlla la directory /tmp
:
ls /tmp/happy*
/tmp/happy_018691_1524087014.192197_ContinuousPing.out
Questo file .out
contiene l'output del processo ContinuousPing.
Utilizzo di sudo
Happy cambia la configurazione di rete che viene controllata dal kernel Linux.
Poiché solo root
può modificare la configurazione del kernel, Happy ti chiederà di inserire la password sudo
durante l'operazione.
Happy utilizza la variabile di ambiente del sistema $SUDO
per chiamare sudo
. Se $SUDO
non è
definito, Happy fa una normale chiamata sudo
.
Script Python
Dopo l'installazione, i pacchetti Happy Python possono essere importati in un ambiente Python utilizzando la seguente istruzione 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()