【问题标题】:Why am I getting an error while initializing oxidized?为什么初始化氧化时出现错误?
【发布时间】:2019-04-23 22:00:23
【问题描述】:

我是在 Ubuntu 16.046 服务器上使用 Oxidized 的新手。我正在尝试为我的 Cisco 交换机的配置管理设置 Oxidized。

配置:

username: muhsin
password: muhsin
model: cisco
interval: 3600
use_syslog: false
debug: false
threads: 30
timeout: 20
retries: 3
prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/
rest: 0.0.0.0:8888
vars:
    enable: muhsin
groups: {}
pid: /home/oxidized/.config/oxidized/pid
input:
     default: ssh, telnet
     debug: false
     ssh:
     secure: false
output:
  default: file
  file:
    directory: /home/oxidized/configs
source:
   default: csv
   csv:
     file: /home/oxidized/.config/oxidized/router.db
     delimiter: !ruby/regexp /:/
   map:
      name: 0
      model: 1
      username: 2
      password: 3
    vars_map:
      enable: 4
    remove_secret: true
model_map:
cisco: ios

router.db:

192.168.223.10:cisco:muhsin:muhsin:muhsin

当我运行氧化时,我得到以下错误:

加载配置时出错:(): 在解析第 27 行第 4 列的块映射时未找到预期的键。

我做错了什么?

【问题讨论】:

    标签: yaml


    【解决方案1】:

    您做错的是使用不一致的缩进,这使得很难检测出问题所在,尤其是作为使用 YAML 的新手。

    • 您使用 四个 位置缩进作为键 vars 的值的映射。
    • 您将作为键 input 的值的映射缩进 五个 位置。
    • 您使用 两个 位置缩进作为键 output 的值的映射。
    • 您将作为键 map 的值的映射缩进 三个位置。

    现在这一切都是允许的,但会降低您的文件对人类的可读性。但不允许的是,映射是 source 的值部分具有 三个 位置(键 defaultcsvmap)和部分具有 四个 职位(vars_mapremove_secret)。

    请注意,这里的 YAML 解析器不会抛出错误(尽管它们应该),并且解析时就像 vars_mapremove_secret 缩进与 password 一样多。

    您得到第 27 行作为错误指示是解析器无法正确解析到末尾,从该行开始的映射(即从键值对 default: csv 开始的映射。

    Oxidized 程序可能对用户更友好,例如如果您使用我的 ruamel.yaml 解析器(用于 Python),您会收到一条错误消息,该错误消息可以更准确且更有用的方式指出该错误,因此这不是 YAML 问题,而是 Oxidized 对用户不友好:

    ruamel.yaml.parser.ParserError: while parsing a block mapping
      in "<unicode string>", line 26, column 4:
           default: csv
           ^ (line: 26)
    expected <block end>, but found '<block mapping start>'
      in "<unicode string>", line 35, column 5:
            vars_map:
            ^ (line: 35)
    

    (此处的第一行表示为 26 是典型的开始计数为零与开始计数为 1 的差异)。

    【讨论】:

    • 那么我将如何最好地重写我的代码以免引发错误。
    • YAML 不是代码,它是描述数据的文档。如果您只是想摆脱错误,您可以删除 YAML 文档末尾的行,直到它不再抛出错误。这当然会改变程序加载文档的语义。您可以做的另一件事是缩进或缩进vars_mapremove_secret 键。这两者中哪一个更合适取决于 Oxidized 的预期。
    • 我终于通过编辑映射图来运行它:名称:0 ip:1 模型:2 组:3
    猜你喜欢
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    • 2020-09-04
    相关资源
    最近更新 更多