在RYU App中注册新的命令行选项

时间:2014-09-01 07:50:48

标签: openflow ryu

我需要能够从我的simple_switch.py​​应用程序中读取路径文件。我已将以下代码添加到python中的simple_switch.py​​。

      LOG = logging.getLogger(__name__)
 CONF = cfg.CONF
 CONF.register_cli_opts([
             cfg.StrOpt('path-file', default='test.txt',
                                              help='path-file')
     ])

我尝试按如下方式启动应用程序。

  bin/ryu-manager --observe-links --path-file test.txt ryu/app/simple_switch.py      

但是我收到以下错误。

usage: ryu-manager [-h] [--app-lists APP_LISTS] [--ca-certs CA_CERTS]
                   [--config-dir DIR] [--config-file PATH]
                   [--ctl-cert CTL_CERT] [--ctl-privkey CTL_PRIVKEY]
                   [--default-log-level DEFAULT_LOG_LEVEL] [--explicit-drop]
                   [--install-lldp-flow] [--log-config-file LOG_CONFIG_FILE]
                   [--log-dir LOG_DIR] [--log-file LOG_FILE]
                   [--log-file-mode LOG_FILE_MODE]
                   [--neutron-admin-auth-url NEUTRON_ADMIN_AUTH_URL]
                   [--neutron-admin-password NEUTRON_ADMIN_PASSWORD]
                   [--neutron-admin-tenant-name NEUTRON_ADMIN_TENANT_NAME]
                   [--neutron-admin-username NEUTRON_ADMIN_USERNAME]
                   [--neutron-auth-strategy NEUTRON_AUTH_STRATEGY]
                   [--neutron-controller-addr NEUTRON_CONTROLLER_ADDR]
                   [--neutron-url NEUTRON_URL]
                   [--neutron-url-timeout NEUTRON_URL_TIMEOUT]
                   [--noexplicit-drop] [--noinstall-lldp-flow]
                   [--noobserve-links] [--nouse-stderr] [--nouse-syslog]
                   [--noverbose] [--observe-links]
                   [--ofp-listen-host OFP_LISTEN_HOST]
                   [--ofp-ssl-listen-port OFP_SSL_LISTEN_PORT]
                   [--ofp-tcp-listen-port OFP_TCP_LISTEN_PORT] [--use-stderr]
                   [--use-syslog] [--verbose] [--version]
                   [--wsapi-host WSAPI_HOST] [--wsapi-port WSAPI_PORT]
                   [--test-switch-dir TEST-SWITCH_DIR]
                   [--test-switch-target TEST-SWITCH_TARGET]
                   [--test-switch-tester TEST-SWITCH_TESTER]
                   [app [app ...]]
ryu-manager: error: unrecognized arguments: --path-file

看起来我需要先注册一个新的命令行选项,然后才能使用它。可以向我说明如何做到这一点?也有人可以解释如何访问程序内的文件(text.txt)吗?

1 个答案:

答案 0 :(得分:4)

您已经走上正轨,但是您正在创建的CONF条目实际上需要在加载您的应用之前加载,否则ryu-manager无法知道它存在!

您要查找的文件是 flags.py ,位于源树的ryu目录下(或根目录安装目录下)。

这是ryu / tests / switch / tester.py Ryu应用程序定义它自己的参数的方式,因此您可以将其用作参考:

CONF.register_cli_opts([
    # tests/switch/tester
    cfg.StrOpt('target', default='0000000000000001', help='target sw dp-id'),
    cfg.StrOpt('tester', default='0000000000000002', help='tester sw dp-id'),
    cfg.StrOpt('dir', default='ryu/tests/switch/of13',
               help='test files directory')
], group='test-switch')

遵循这种格式,CONF.register_cli_opts完全按照您的方式采用一系列配置类型(对于可用的不同类型,请参阅 ryu / cfg.py )。

当你运行ryu-manager帮助,即

时,你会注意到
ryu-manager --help

出现的列表按应用程序排序(例如,' test-switch options'下的参数组)。因此,您需要为命令集指定组名。

现在让我们说您使用了群组名称' my-app'并有一个名为' path-file'在该组中,命令行参数将是--my-app-path-file(这可能会有点长),而您可以在应用程序中访问它,如下所示:

from ryu import cfg
CONF = cfg.CONF
path_file = CONF['my-app']['path_file']

请注意使用破折号与使用下划线。

干杯!