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.
- Heureux :
/topologies
- OpenWeave:
/src/test-apps/happy/topologies/standalone
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 configuration | Description |
---|---|
~/.happy_conf.json | Variables 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.json | Variables de configuration "Joyeux" principales. |
<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 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()