Utilice la bandera -h
con cualquier comando happy-*
para ver la ayuda y la lista de opciones para ese comando.
Archivos de estado
Happy almacena y mantiene cuidadosamente su estado de topología en un archivo JSON con un solo registro. Con este archivo de estado, Happy puede ejecutar los comandos adecuados para crear o eliminar una topología.
El archivo de estado predeterminado se encuentra en ~/.happy_state.json
. El nombre del estado predeterminado es happy
, como se ve en la salida de happy-state
:
happy-state
State Name: happy
Estados paralelos
Happy admite múltiples estados paralelos coexistentes. El estado actual lo dicta la variable de entorno HAPPY_STATE_ID
. Si HAPPY_STATE_ID
no existe en el entorno, se usa el valor de estado predeterminado de happy
.
HAPPY_STATE_ID
no se crea durante la instalación Happy. Cree uno con un valor que no sea el state
para cambiar inmediatamente a otro estado Feliz.
export HAPPY_STATE_ID="sunny"
Ahora verificando happy-state
resultados del happy-state
en un estado diferente:
happy-state
State Name: sunny
Cada estado se mantiene en su propio ~/.${HAPPY_STATE_ID}_state.json
. Para cambiar entre estados, ejecute el export HAPPY_STATE_ID=" <state-name> "
nuevamente.
Desinstalar con estados paralelos
Si usa estados Happy paralelos y desea desinstalar Happy, asegúrese de ejecutar happy-state-delete
con cada estado activo. Esto garantiza que todos los espacios de nombres de red creados por Happy se eliminen de su sistema sin afectar la configuración de red del host de Linux.
Por ejemplo, con dos estados de happy
y sunny
:
export HAPPY_STATE_ID="sunny"
happy-state-delete
export HAPPY_STATE_ID="happy"
happy-state-delete
Elimine manualmente cada archivo de estado paralelo según sea necesario:
rm -f ~/.sunny_state.json
rm -f ~/.sunny_state.json.lock
rm -f ~/.happy_state.json
rm -f ~/.happy_state.json.lock
Registros
Happy envía registros a syslog
de forma predeterminada. Se envía una segunda copia de seguridad del registro a /tmp/${HAPPY_STATE_ID}_debug_log.txt
.
Para ver los registros de Happy, ejecute happy-state -l
en una ventana de terminal separada. Cuando ingresa comandos Happy, los registros muestran los comandos de shell Problemas felices en segundo plano. Esta es una buena forma de entender cómo funciona Happy, si está interesado en los espacios de nombres de red de Linux.
Por ejemplo, happy-node-add node00
crea un nodo Happy. La salida de registro para este comando es:
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
Todas las líneas Driver:CallCmd()
son los comandos de shell que Happy llama. Considere cada línea del 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
Topologías de muestra
Las topologías de muestra se incluyen en los repositorios Happy y OpenWeave para realizar pruebas. Úselos también para aprender los comandos para construir topologías complejas.
- Feliz:
/topologies
- OpenWeave:
/src/test-apps/happy/topologies/standalone
Las topologías están en formato JSON y Shell Script.
JSON
Los archivos de topología JSON se cargan mediante los comandos happy-state-load
o weave-state-load
. Si la topología incluye Weave, debe usar weave-state-load
para cargar la topología; de lo contrario, se omiten los comandos específicos de Weave.
Por ejemplo, una topología sin Weave:
happy-state-load thread_wifi_ap_internet.json
Una topología con Weave:
weave-state-load three_nodes_on_thread_weave.json
Para guardar su topología actual como un archivo JSON separado para su uso posterior (por ejemplo, un script de caso de prueba ), use happy-shell -s
:
happy-shell -s my_topology.json
Esto guarda el archivo de estado de topología en el directorio $HOME
.
Scripts de shell
Los archivos de topología de secuencias de comandos de Shell contienen el conjunto de comandos Happy y Weave para crear las topologías en los archivos JSON correspondientes. Estos scripts por defecto no tienen permisos de ejecución. Se pueden ejecutar de dos formas:
Usando el comando bash
:
bash thread_wifi_ap_internet.sh
Aplicando permisos ejecutables:
chmod +x thread_wifi_ap_internet.sh
./thread_wifi_ap_internet.sh
Configuración
Happy tiene tres archivos de configuración:
Archivo de configuración | Descripción |
---|---|
~/.happy_conf.json | Variables de configuración para uso personal o plug-in. Establezca estos valores mediante el comando happy-configuration . |
<path-to-happy> /happy/conf/main_config.json | Variables de configuración primarias de Happy. |
<path-to-happy> /happy/conf/log_config.json | Configuración de registro. |
Agregar variables de configuración
Le recomendamos que utilice el comando happy-configuration
para establecer cualquier variable personal o de complemento más allá de los valores predeterminados que su implementación específica de Happy necesita.
Por ejemplo, para que Happy sepa dónde encontrar el directorio de test-apps
Weave para los scripts de prueba, establezca la variable weave_path
:
happy-configuration weave_path <path-to-openweave-core>/build/x86_64-unknown-linux-gnu/src/test-apps
Happy almacena las variables de configuración en ~/.happy_conf.json
.
Procesos en nodos
Happy proporciona comandos para iniciar y detener procesos dentro de nodos simulados.
Para iniciar un proceso:
happy-process-start <node-name> <custom-process-name> <command>
Por ejemplo, para ejecutar continuamente un ping en un nodo llamado ThreadNode:
happy-process-start ThreadNode ContinuousPing ping 8.8.8.8
En el ejemplo anterior, ContinuousPing es el nombre definido por el usuario para el proceso que Happy usa para administrar el proceso. Utilice happy-process-wait
para suspender la ejecución del proceso y happy-process-stop
para matar el proceso.
La salida del proceso está en /tmp
. Por ejemplo, después de iniciar el proceso ContinuousPing, verifique el directorio /tmp
:
ls /tmp/happy*
/tmp/happy_018691_1524087014.192197_ContinuousPing.out
Este archivo .out
contiene la salida del proceso ContinuousPing.
Uso de sudo
Happy cambia la configuración de red que está controlada por el kernel de Linux. Dado que solo root
puede cambiar la configuración del kernel, Happy le solicita que ingrese la contraseña de sudo
durante la operación.
Happy usa la variable de entorno del sistema $SUDO
para llamar a sudo
. Si $SUDO
no está definido, Happy realiza una llamada sudo
normal.
Secuencias de comandos de Python
Después de la instalación, los paquetes de Happy Python se pueden importar a un entorno de Python utilizando la siguiente declaración de import
:
import happy
Los módulos de comando individuales que se encuentran en /happy
se importan de la siguiente manera:
import happy.HappyNodeAdd
Para recuperar las opciones del módulo, llame a la función option()
. Por ejemplo, para recuperar las opciones del módulo HappyNodeAdd
:
module options import happy.HappyNodeAdd options = happy.HappyNodeAdd.option()