Счастливого использования

Используйте флаг -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 создает счастливый узел. Вывод журнала для этой команды:

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.

Например, чтобы Хэппи знал, где найти каталог 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

Happy изменяет конфигурацию сети, которая управляется ядром 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()