Используйте флаг -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 для тестирования. Также используйте их для изучения команд построения сложных топологий.
- Счастливый:
/topologies
- OpenWeave:
/src/test-apps/happy/topologies/standalone
Топологии представлены в формате 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()