Приятного использования

Используйте флаг -h с любой командой happy-* , чтобы просмотреть справку и список опций для этой команды.

Государственные файлы

Happy хранит и тщательно поддерживает состояние своей топологии в файле JSON с одной записью. Используя этот файл состояния, Happy может запускать соответствующие команды для создания или удаления топологии.

Файл состояния по умолчанию находится в ~/.happy_state.json . Имя состояния по умолчанию — happy , как видно из вывода happy-state :

happy-state

State Name:  happy

Параллельные состояния

Happy поддерживает несколько сосуществующих параллельных состояний. Текущее состояние определяется переменной среды HAPPY_STATE_ID . Если HAPPY_STATE_ID не существует в среде, используется значение состояния по умолчанию « happy .

HAPPY_STATE_ID не создается во время установки Happy. Создайте его со значением, отличным от state , чтобы немедленно переключиться в другое состояние «Счастливо».

export HAPPY_STATE_ID="sunny"

Теперь проверяем результаты happy-state в другом состоянии:

happy-state

State Name:  sunny

Каждое состояние сохраняется в собственном файле ~/.${HAPPY_STATE_ID}_state.json . Чтобы переключиться между состояниями, снова запустите команду export HAPPY_STATE_ID=" <state-name> " .

Удаление с параллельными состояниями

Если вы используете параллельные состояния Happy и хотите удалить Happy, обязательно запускайте happy-state-delete для каждого активного состояния. Это гарантирует, что все сетевые пространства имен, созданные Happy, будут удалены из вашей системы, не затрагивая конфигурацию хост-сети Linux.

Например, с двумя состояниями: happy и sunny :

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

При необходимости вручную удалите каждый файл параллельного состояния:

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

Журналы

По умолчанию Happy отправляет журналы в syslog . Вторая резервная копия журнала отправляется в /tmp/${HAPPY_STATE_ID}_debug_log.txt .

Чтобы просмотреть журналы Happy, запустите happy-state -l в отдельном окне терминала. Когда вы вводите команды Happy, в журналах отображаются команды оболочки, которые выполняются Happy в фоновом режиме. Это хороший способ понять, как работает Happy, если вас интересуют сетевые пространства имен Linux.

Например, happy-node-add node00 создает узел Happy. Вывод журнала для этой команды:

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

Все строки Driver:CallCmd() — это команды оболочки, которые вызывает Happy. Рассмотрим каждую строку в журнале:

# 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

Примеры топологий

Примеры топологий включены в репозитории Happy и OpenWeave для тестирования. Также используйте их для изучения команд построения сложных топологий.

Топологии представлены в формате JSON и Shell Script.

JSON

Файлы топологии JSON загружаются с помощью команд happy-state-load или weave-state-load . Если топология включает Weave, для загрузки топологии необходимо использовать weave-state-load , в противном случае команды, специфичные для Weave, пропускаются.

Например, топология без Weave:

happy-state-load thread_wifi_ap_internet.json

Топология с Weave:

weave-state-load three_nodes_on_thread_weave.json

Чтобы сохранить текущую топологию в виде отдельного файла JSON для последующего использования (например, в сценарии тестового примера ), используйте happy-shell -s :

happy-shell -s my_topology.json

При этом файл состояния топологии сохраняется в каталоге $HOME .

Скрипты оболочки

Файлы топологии сценариев оболочки содержат набор команд Happy и Weave для создания топологий в соответствующих файлах JSON. Эти сценарии по умолчанию не имеют разрешений на выполнение. Их можно запустить двумя способами:

Используя команду bash :

bash thread_wifi_ap_internet.sh

Применяя разрешения на исполняемый файл:

chmod +x thread_wifi_ap_internet.sh
./thread_wifi_ap_internet.sh

Конфигурация

У Happy есть три файла конфигурации:

Файл конфигурации Описание
~/.happy_conf.json Переменные конфигурации для личного использования или использования подключаемого модуля. Установите эти значения с помощью команды happy-configuration .
<path-to-happy> /happy/conf/main_config.json Первичные переменные конфигурации Happy.
<path-to-happy> /happy/conf/log_config.json Конфигурация журнала.

Добавьте переменные конфигурации

Мы рекомендуем вам использовать команду happy-configuration чтобы установить любые личные переменные или переменные плагина, выходящие за рамки значений по умолчанию, которые необходимы для вашего конкретного развертывания Happy.

Например, чтобы сообщить Happy, где находится каталог Weave test-apps для тестовых сценариев, установите переменную weave_path :

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

Happy хранит переменные конфигурации в ~/.happy_conf.json .

Процессы в узлах

Happy предоставляет команды для запуска и остановки процессов внутри моделируемых узлов.

Чтобы запустить процесс:

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

Например, чтобы постоянно выполнять проверку связи в узле с именем ThreadNode:

happy-process-start ThreadNode ContinuousPing ping 8.8.8.8

В приведенном выше примере ContinuousPing — это определяемое пользователем имя процесса, которое Happy использует для управления этим процессом. Используйте happy-process-wait , чтобы приостановить выполнение процесса, и happy-process-stop чтобы завершить процесс.

Вывод процесса находится в /tmp . Например, после запуска процесса ContinuousPing проверьте каталог /tmp :

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

Этот файл .out содержит выходные данные процесса ContinuousPing.

Использование sudo

Хэппи меняет конфигурацию сети, которой управляет ядро ​​Linux. Поскольку только root может изменить конфигурацию ядра, Happy во время работы предложит ввести пароль sudo .

Happy использует переменную системной среды $SUDO для вызова sudo . Если $SUDO не определен, Happy выполняет обычный вызов sudo .

Скрипты на Python

После установки пакеты Happy Python можно импортировать в среду Python с помощью следующего оператора import :

import happy

Отдельные командные модули, найденные в /happy импортируются следующим образом:

import happy.HappyNodeAdd

Чтобы получить параметры модуля, вызовите функцию option() . Например, чтобы получить параметры модуля HappyNodeAdd :

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