En Google, luchamos por la equidad racial de la comunidad negra. Más información

Uso feliz

Utilice el -h , marca con cualquier happy-* comando 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 por defecto se encuentra en ~/.happy_state.json . El nombre del estado por defecto es happy , como se ve en el happy-state de salida:

happy-state

State Name:  happy

Estados paralelos

Happy admite múltiples estados paralelos coexistentes. El estado actual es dictado por el HAPPY_STATE_ID variable de entorno. Si HAPPY_STATE_ID no existe en el medio ambiente, el valor por defecto de estado happy se utiliza.

HAPPY_STATE_ID no se crea durante la instalación feliz. Crear uno con un valor distinto de state para cambiar inmediatamente a otro estado feliz.

export HAPPY_STATE_ID="sunny"

Ahora comprobar happy-state da lugar a un estado diferente:

happy-state

State Name:  sunny

Cada estado se mantiene en su propia ~/.${HAPPY_STATE_ID}_state.json archivo. Para cambiar entre los estados, ejecute el export HAPPY_STATE_ID=" <state-name> " comando de nuevo.

Desinstalar con estados paralelos

Si utiliza estados felices paralelas y que desea desinstalar feliz, 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

Feliz envía registros al syslog por defecto. Una segunda copia de seguridad del registro se envía a /tmp/${HAPPY_STATE_ID}_debug_log.txt .

Para ver los registros felices, 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 feliz. 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

Todo Driver:CallCmd() líneas son los comandos de shell que llama feliz. 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.

Las topologías están en formato JSON y Shell Script.

JSON

Archivos de topología JSON se cargan mediante el happy-state-load o weave-state-load comandos. Si la topología incluye la armadura, debe utilizar weave-state-load para cargar la topología, de lo contrario los comandos de la armadura-específicos se omiten.

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 la topología actual como un archivo JSON separado para su uso posterior (por ejemplo, un script de caso de prueba ), utilice happy-shell -s :

happy-shell -s my_topology.json

Esto guarda el archivo de estado de topología en el $HOME directorio.

Secuencias de comandos de shell

Los archivos de topología de script de shell contienen el conjunto de comandos Happy y Weave para crear las topologías en los archivos JSON correspondientes. Estos scripts de forma predeterminada no tienen permisos de ejecución. Se pueden ejecutar de dos formas:

Mediante el uso de la bash comando:

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. Establecer estos valores utilizando la happy-configuration de comandos.
<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 la happy-configuration comando para establecer las variables personales o plug-in más allá de los valores por defecto de que la implementación específica de Happy necesita.

Por ejemplo, para dejar feliz sabe dónde encontrar la armadura de test-apps directorio de scripts de prueba, ajuste el weave_path variables:

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

Tiendas felices servicio de configuración variables 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 de procesos y happy-process-stop para matar el proceso.

De salida de proceso está en /tmp . Por ejemplo, después de comenzar el proceso de ContinuousPing, compruebe el /tmp directorio:

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

Este .out archivo contiene la salida para el proceso ContinuousPing.

El uso de sudo

Happy cambia la configuración de red que está controlada por el kernel de Linux. Dado que sólo root puede cambiar la configuración del núcleo, feliz le solicita que introduzca el sudo contraseña durante la operación.

Feliz utiliza el $SUDO entorno de sistema variable para llamada sudo . Si $SUDO no está definido, feliz hace una normal de sudo llamada.

Secuencias de comandos de Python

Después de la instalación, paquetes feliz Python se pueden importar en un entorno Python usando la siguiente import declaración:

import happy

Módulos de control individuales que se encuentran en /happy se importan como sigue:

import happy.HappyNodeAdd

Para recuperar opciones del módulo, llamar a la option() función. Por ejemplo, para recuperar HappyNodeAdd opciones del módulo:

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