Bonne utilisation

Utilisez l'option -h avec n'importe quelle commande happy-* pour afficher l'aide et consulter la liste des options correspondantes.

Fichiers d'état

Happy stocke et conserve soigneusement son état de topologie dans un fichier JSON avec un seul enregistrement. Avec ce fichier d'état, Happy peut exécuter les commandes appropriées pour créer ou supprimer une topologie.

Le fichier d'état par défaut se trouve à ~/.happy_state.json. Le nom de l'état par défaut est happy, comme indiqué dans le résultat happy-state:

happy-state

State Name:  happy

États parallèles

Happy prend en charge plusieurs états parallèles coexistants. L'état actuel est dicté par la variable d'environnement HAPPY_STATE_ID. Si HAPPY_STATE_ID n'existe pas dans l'environnement, la valeur d'état par défaut de happy est utilisée.

HAPPY_STATE_ID n'a pas été créé lors de l'installation. Créez-en un avec une valeur autre que state pour passer immédiatement à un autre état Happy.

export HAPPY_STATE_ID="sunny"

La vérification des résultats happy-state suivant un état différent:

happy-state

State Name:  sunny

Chaque État est géré dans son propre fichier ~/.${HAPPY_STATE_ID}_state.json. Pour basculer entre les états, exécutez à nouveau la commande export HAPPY_STATE_ID="<state-name>".

Désinstaller avec états parallèles

Si vous utilisez des états Happy parallèles et que vous souhaitez désinstaller Happy, exécutez happy-state-delete pour exécuter chaque état actif. Cela garantit que tous les espaces de noms réseau créés par Happy sont supprimés de votre système sans affecter la configuration du réseau hôte Linux.

Par exemple, avec les deux états suivants : happy et sunny :

export HAPPY_STATE_ID="sunny"
happy-state-delete
export HAPPY_STATE_ID="happy"
happy-state-delete

Supprimez manuellement chaque fichier d'état parallèle, si nécessaire:

rm -f ~/.sunny_state.json
rm -f ~/.sunny_state.json.lock
rm -f ~/.happy_state.json
rm -f ~/.happy_state.json.lock

Logs

Happy envoie par défaut les journaux à syslog. Une deuxième sauvegarde des journaux est envoyée à /tmp/${HAPPY_STATE_ID}_debug_log.txt.

Pour afficher les journaux Happy, exécutez happy-state -l dans une fenêtre de terminal distincte. Lorsque vous saisissez des commandes "Happy", les journaux indiquent les problèmes "Happy" en arrière-plan dans l'interface système. C'est un bon moyen de comprendre comment fonctionne Happy, si vous êtes intéressé par les espaces de noms réseau Linux.

Par exemple, happy-node-add node00 crée un nœud Happy. Le résultat de la commande pour le journal est le suivant:

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

Toutes les lignes Driver:CallCmd() sont les commandes d'interface système qui effectuent des appels heureux. Considérons chaque ligne dans le journal:

# 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

Exemples de topologies

Des exemples de topologies sont inclus dans les dépôts Happy et OpenWeave à des fins de test. Servez-vous-en également pour apprendre les commandes permettant de créer des topologies complexes.

Les topologies sont au format JSON et Shell Script.

JSON

Les fichiers de topologie JSON sont chargés à l'aide des commandes happy-state-load ou weave-state-load. Si la topologie inclut Weave, vous devez utiliser weave-state-load pour charger la topologie. Sinon, les commandes spécifiques à Weave sont ignorées.

Par exemple, une topologie sans Weave:

happy-state-load thread_wifi_ap_internet.json

Topologie avec Weave:

weave-state-load three_nodes_on_thread_weave.json

Pour enregistrer votre topologie actuelle sous la forme d'un fichier JSON distinct pour une utilisation ultérieure (par exemple, un script de scénario de test), utilisez happy-shell -s:

happy-shell -s my_topology.json

Le fichier d'état de topologie est enregistré dans le répertoire $HOME.

Scripts d'interface système

Les fichiers de topologie Script de script contiennent les commandes Happy et Weave permettant de créer les topologies dans les fichiers JSON correspondants. Par défaut, ces scripts ne disposent pas d'autorisations d'exécution. Vous pouvez les exécuter de deux manières:

À l'aide de la commande bash:

bash thread_wifi_ap_internet.sh

En appliquant des autorisations exécutables:

chmod +x thread_wifi_ap_internet.sh
./thread_wifi_ap_internet.sh

Configuration

Happy dispose de trois fichiers de configuration:

Fichier de configurationDescription
~/.happy_conf.jsonVariables de configuration pour un usage personnel ou pour des plug-ins. Définissez ces valeurs à l'aide de la commande happy-configuration.
<path-to-happy>/happy/conf/main_config.jsonVariables de configuration "Joyeux" principales.
<path-to-happy>/happy/conf/log_config.jsonConfiguration des journaux.

Ajouter des variables de configuration

Nous vous recommandons d'utiliser la commande happy-configuration pour définir des variables personnelles ou de plug-in autres que les valeurs par défaut dont votre déploiement spécifique de Happy a besoin.

Par exemple, pour indiquer à Happy où se trouve le répertoire test-apps Weave pour les scripts de test, définissez la variable weave_path:

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

Happy stocke les variables de configuration dans ~/.happy_conf.json.

Processus dans les nœuds

Happy fournit des commandes permettant de démarrer et d'arrêter des processus dans des nœuds simulés.

Pour lancer un processus:

happy-process-start <node-name> <custom-process-name> <command>

Par exemple, pour exécuter continuellement un ping dans un nœud nommé ThreadNode:

happy-process-start ThreadNode ContinuousPing ping 8.8.8.8

Dans l'exemple ci-dessus, ContinuousPing est le nom défini par l'utilisateur pour le processus que Happy utilise pour gérer le processus. Utilisez happy-process-wait pour suspendre l'exécution du processus, et happy-process-stop pour le interrompre.

Le résultat du processus est en /tmp. Par exemple, après avoir démarré le processus ContinuousPing, consultez le répertoire /tmp:

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

Ce fichier .out contient le résultat du processus ContinuousPing.

Utilisation de sudo

L'option "Happy" modifie la configuration réseau contrôlée par le noyau Linux. Étant donné que seul root peut modifier la configuration du noyau, Happy vous invite à saisir le mot de passe sudo lors de l'opération.

Happy utilise la variable d'environnement système $SUDO pour appeler sudo. Si $SUDO n'est pas défini, Happy effectue un appel sudo normal.

Script Python

Après l'installation, les packages Happy Python peuvent être importés dans un environnement Python à l'aide de l'instruction import suivante:

import happy

Les modules de commande individuels trouvés dans /happy sont importés comme suit:

import happy.HappyNodeAdd

Pour récupérer les options du module, appelez la fonction option(). Par exemple, pour récupérer les options du module HappyNodeAdd:

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