En Google, luchamos por la equidad racial de la comunidad negra. Más información
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Uso feliz

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 de 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 de 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 asegura 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 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 manera 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.

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 script 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 Happy Python se pueden importar a un entorno 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()