Google is committed to advancing racial equity for Black communities. See how.
Cette page a été traduite par l'API Cloud Translation.
Switch to English

Bonne utilisation

Utilisez l'indicateur -h avec n'importe quelle commande happy-* pour afficher l'aide et la liste des options de cette commande.

Fichiers d'état

Happy stocke et maintient soigneusement son état de topologie dans un fichier JSON avec un seul enregistrement. À l'aide de 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 dans ~/.happy_state.json . Le nom de l'état par défaut est happy , comme indiqué dans la sortie 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'est pas créé lors de l'installation Happy. Créez-en un avec une valeur autre que state pour passer immédiatement à un autre état Happy.

export HAPPY_STATE_ID="sunny"

Maintenant, la vérification happy-state entraîne un état différent:

happy-state

State Name:  sunny

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

Désinstaller avec des états parallèles

Si vous utilisez des états Happy parallèles et que vous souhaitez désinstaller Happy, assurez-vous d'exécuter happy-state-delete avec 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 deux états de happy et de 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

Journaux

Par défaut, Happy envoie les journaux à syslog . Une deuxième sauvegarde du journal est envoyée vers /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 entrez des commandes Happy, les journaux affichent les commandes shell Happy issues en arrière-plan. C'est un bon moyen de comprendre le fonctionnement de 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. La sortie du journal pour cette commande est:

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 shell Driver:CallCmd() Happy. Considérez chaque ligne du 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 référentiels Happy et OpenWeave à des fins de test. Utilisez-les également pour apprendre les commandes de construction de 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

Une topologie avec Weave:

weave-state-load three_nodes_on_thread_weave.json

Pour enregistrer votre topologie actuelle dans 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

Cela enregistre le fichier d'état de la topologie dans le répertoire $HOME .

Scripts shell

Les fichiers de topologie de script Shell contiennent l'ensemble des commandes Happy et Weave pour créer les topologies dans les fichiers JSON correspondants. Ces scripts par défaut n'ont pas d'autorisations exécutables. Ils peuvent être exécutés de deux manières:

En utilisant 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 a trois fichiers de configuration:

Fichier de configuration La description
~/.happy_conf.json Variables de configuration à usage personnel ou plug-in. Définissez ces valeurs à l'aide de la commande happy-configuration .
<path-to-happy> /happy/conf/main_config.json Variables de configuration Happy primaires.
<path-to-happy> /happy/conf/log_config.json Configuration du journal.

Ajouter des variables de configuration

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

Par exemple, pour indiquer à Happy où trouver le répertoire Weave test-apps 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 pour démarrer et arrêter les processus dans les nœuds simulés.

Pour démarrer un processus:

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

Par exemple, pour exécuter en continu 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 utilisé par Happy pour gérer le processus. Utilisez happy-process-wait pour suspendre l'exécution du processus et happy-process-stop pour tuer le processus.

La sortie du processus est dans /tmp . Par exemple, après avoir démarré le processus ContinuousPing, vérifiez le /tmp :

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

Ce fichier .out contient la sortie du processus ContinuousPing.

Utilisation de sudo

Happy change la configuration réseau contrôlée par le noyau Linux. Puisque seul root peut changer la configuration du noyau, Happy vous invite à entrer le mot de passe sudo pendant 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 d' 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()