Buon utilizzo

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.

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 configurazioneDescription
~/.happy_conf.jsonVariabili di configurazione per uso personale o plug-in. Imposta questi valori utilizzando il comando happy-configuration.
<path-to-happy>/happy/conf/main_config.jsonVariabili di configurazione principali principali.
<path-to-happy>/happy/conf/log_config.jsonConfigurazione 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()