Utilizza il flag -h
con qualsiasi comando happy-*
per visualizzare la guida e l'elenco di opzioni per quel comando.
File di stato
Happy memorizza e gestisce attentamente il proprio stato di 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 dello stato predefinito si trova in ~/.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 è
dettato dalla variabile di ambiente HAPPY_STATE_ID
. Se HAPPY_STATE_ID
non esiste nell'ambiente, viene utilizzato il valore predefinito dello stato happy
.
HAPPY_STATE_ID
non viene creato durante l'installazione di 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
restituisce uno stato diverso:
happy-state
State Name: sunny
Ogni stato viene gestito nel proprio file ~/.${HAPPY_STATE_ID}_state.json
. Per cambiare stato, 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. Ciò garantisce che tutti gli spazi dei nomi di rete creati da Happy vengano rimossi dal sistema senza influire sulla configurazione della rete host Linux.
Ad esempio, con due stati 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
Happy invia i log a syslog
per impostazione predefinita. Un secondo backup dei log viene inviato a
/tmp/${HAPPY_STATE_ID}_debug_log.txt
.
Per visualizzare i log di Happy, esegui happy-state -l
in una finestra separata del terminale. Quando inserisci comandi Happy, i log mostrano i comandi della shell sui problemi relativi a Happy in background. Questo è 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 Felice. 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 shell chiamati da Happy.
Esamina ogni riga del 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 il test. Inoltre, utilizzali per imparare i comandi per costruire topologie complesse.
- Soddisfatto:
/topologies
- OpenWeave:
/src/test-apps/happy/topologies/standalone
Le topologie sono in formato JSON e script shell.
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 topologia corrente come file JSON separato per utilizzarla in un secondo momento (ad esempio uno script di test case), utilizza happy-shell -s
:
happy-shell -s my_topology.json
Il file dello stato della topologia viene salvato nella directory $HOME
.
Script shell
I file di topologia di script shell contengono l'insieme di comandi Happy e Weave per creare le topologie nei file JSON corrispondenti. Per impostazione predefinita, questi script non dispongono di autorizzazioni eseguibili. Possono essere eseguiti in due modi:
Utilizzando il comando bash
:
bash thread_wifi_ap_internet.sh
Se applichi le 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 principali di Happy. |
<path-to-happy>/happy/conf/log_config.json | Configurazione dei log. |
Aggiungi variabili di configurazione
Ti consigliamo di utilizzare il comando happy-configuration
per impostare eventuali variabili personali o dei plug-in oltre a quelle predefinite necessarie per il tuo deployment specifico di Happy.
Ad esempio, per far sapere ad 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
Le variabili di configurazione di Happy Stores in ~/.happy_conf.json
.
Processi nei nodi
Happy fornisce i comandi per avviare e arrestare i processi all'interno dei nodi simulati.
Per avviare una procedura:
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 riportato sopra, ContinuousPing è il nome definito dall'utente per il processo utilizzato da Happy per gestirlo. Utilizza happy-process-wait
per sospendere
l'esecuzione del processo e happy-process-stop
per interromperlo.
L'output del processo è in /tmp
. Ad esempio, dopo aver avviato il processo ContinuousPing, 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 modifica la configurazione di rete controllata dal kernel Linux.
Poiché solo root
può modificare la configurazione del kernel, Happy ti chiede di inserire la password di sudo
durante il funzionamento.
Happy utilizza la variabile di ambiente di sistema $SUDO
per chiamare sudo
. Se $SUDO
non è definito, Happy effettua una normale chiamata a sudo
.
Scripting 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()