Utilisez l'option -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 gère 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 à l'emplacement ~/.happy_state.json
. Le nom d'état par défaut est happy
, comme indiqué dans la sortie happy-state
:
happy-state
State Name: happy
États parallèles
Happy accepte 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 de Happy. Créez-en une avec une valeur autre que state
pour passer immédiatement à un autre état "Happy".
export HAPPY_STATE_ID="sunny"
Si vous vérifiez happy-state
, vous obtenez un état différent:
happy-state
State Name: sunny
Chaque état est conservé 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ésinstallation avec états parallèles
Si vous utilisez des états "Happy" parallèles et que vous souhaitez désinstaller "Happy", veillez à 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 réseau de l'hôte Linux.
Par exemple, avec deux états de 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
Journaux
Happy envoie des journaux à syslog
par défaut. Une deuxième sauvegarde de journal 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 affichent les problèmes Happy des commandes shell 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 la suivante:
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 que Happy appelle.
Examinez 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 dépôts Happy et OpenWeave à des fins de test. Utilisez-les également pour apprendre les commandes permettant de créer des topologies complexes.
- Satisfait:
/topologies
- OpenWeave:
/src/test-apps/happy/topologies/standalone
Les topologie 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 la charger, 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 dans un fichier JSON distinct en vue d'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 la topologie est alors enregistré dans le répertoire $HOME
.
Scripts shell
Les fichiers de topologie de script shell contiennent l'ensemble des 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 d'exécution:
chmod +x thread_wifi_ap_internet.sh
./thread_wifi_ap_internet.sh
Configuration
Happy dispose de trois fichiers de configuration:
Fichier de configuration | Description |
---|---|
~/.happy_conf.json | Variables de configuration pour un usage personnel ou pour les plug-ins. Définissez ces valeurs à l'aide de la commande happy-configuration . |
<path-to-happy>/happy/conf/main_config.json | Variables de configuration principales de Happy. |
<path-to-happy>/happy/conf/log_config.json | Configuration 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 en plus 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 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 pour démarrer et arrêter des processus dans des nœuds simulés.
Pour démarrer un processus:
happy-process-start <node-name> <custom-process-name> <command>
Par exemple, pour exécuter un ping en continu 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 le gérer. Utilisez happy-process-wait
pour suspendre l'exécution du processus et happy-process-stop
pour arrêter le processus.
La sortie du processus se trouve dans /tmp
. Par exemple, après avoir lancé le processus ContinuousPing, vérifiez le répertoire /tmp
:
ls /tmp/happy*
/tmp/happy_018691_1524087014.192197_ContinuousPing.out
Ce fichier .out
contient la sortie du processus ContinuousPing.
Utilisation de sudo
Happy modifie la configuration réseau contrôlée par le noyau Linux.
Étant donné que seul root
peut modifier la configuration du kernel, Happy vous invite à saisir 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 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()