Google致力于提高黑人社区的种族平等。 怎么看。
此页面由 Cloud Translation API 翻译。
Switch to English

快乐用法

-h标志与任何happy-*命令一起使用可查看该命令的帮助和选项列表。

状态文件

Happy用一条记录在JSON文件中存储并仔细维护其拓扑状态。使用此状态文件,Happy可以运行适当的命令来创建或删除拓扑。

默认状态文件位于~/.happy_state.json 。默认状态名称是happy ,如在happy-state输出中所示:

 happy-state

State Name:  happy 

平行状态

Happy支持多个并行存在的并行状态。当前状态由HAPPY_STATE_ID环境变量决定。如果HAPPY_STATE_ID中不存在HAPPY_STATE_ID ,则使用默认状态值happy

在快乐安装期间未创建HAPPY_STATE_ID 。创建一个除state以外的其他值,以立即切换到另一个Happy状态。

 export HAPPY_STATE_ID="sunny"

现在检查happy-state得出不同的状态:

 happy-state

State Name:  sunny 

每个状态都保存在自己的~/.${HAPPY_STATE_ID}_state.json文件中。要在状态之间切换,请再次运行export HAPPY_STATE_ID=" <state-name> "命令。

并行状态下卸载

如果使用并行的快乐状态,并且要卸载快乐,请确保在每个状态都处于活动happy-state-delete运行happy-state-delete 。这样可以确保在不影响Linux主机网络配置的情况下,从系统中删除由Happy创建的所有网络名称空间。

例如,处于happysunny两种状态:

 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 。当您输入快乐命令时,日志将在后台显示外壳命令快乐问题。如果您对Linux网络名称空间感兴趣,这是了解Happy如何工作的好方法。

例如, 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调用的shell命令。考虑日志中的每一行:

# 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脚本格式。

JSON格式

JSON拓扑文件是使用happy-state-loadweave-state-load命令weave-state-load 。如果拓扑包括Weave,则必须使用weave-state-load加载拓扑,否则将跳过特定于Weave的命令。

例如,没有Weave的拓扑:

happy-state-load thread_wifi_ap_internet.json

编织的拓扑:

weave-state-load three_nodes_on_thread_weave.json

要将当前拓扑保存为单独的JSON文件以供以后使用(例如, 测试用例脚本 ),请使用happy-shell -s

happy-shell -s my_topology.json

这会将拓扑状态文件保存在$HOME目录中。

Shell脚本

Shell脚本拓扑文件包含用于在相应JSON文件中创建拓扑的Happy和Weave命令集。这些脚本默认情况下没有可执行权限。它们可以通过两种方式运行:

通过使用bash命令:

bash thread_wifi_ap_internet.sh

通过应用可执行权限:

chmod +x thread_wifi_ap_internet.sh
./thread_wifi_ap_internet.sh

组态

快乐有三个配置文件:

配置文件描述
~/.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的节点中连续运行ping:

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脚本

安装后,可以使用以下import语句将Happy Python软件包导入Python环境:

import happy

/happy中找到的各个命令模块将按以下方式导入:

import happy.HappyNodeAdd

要检索模块选项,请调用option()函数。例如,要检索HappyNodeAdd模块选项:

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