Используйте флаг -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 для тестирования. Также используйте их для изучения команд построения сложных топологий.
- Рад:
/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.
Например, чтобы сообщить 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()