Ansible 响应中的空字符串

小时

我正在为 Ansible 2.5 开发 RouterOS 网络模块。

RouterOS shell 可以打印一些应该在on_open_shell()事件中检测到的消息,并自动跳过或关闭。这些Do you want to see the software license? [Y/n]:和其他一些,所有这些都在 MikroTik Wiki 中有详细记录

这是我的做法:

def on_open_shell(self):
    try:
        if not prompt.strip().endswith(b'>'):
            self._exec_cli_command(b' ')
    except AnsibleConnectionFailure:
        raise AnsibleConnectionFailure('unable to bypass license prompt')

它确实绕过了许可证提示。然而,\n来自 RouterOS 设备响应似乎被视为对随后的实际命令的响应。所以,如果我的剧本中有两个这样的任务:

---
- hosts: routeros
  gather_facts: no
  connection: network_cli
  tasks:
    - routeros_command:
        commands:
          - /system resource print
          - /system routerboard print
      register: result

    - name: Print result
      debug: var=result.stdout_lines

这是我得到的输出:

ok: [example] => {
    "result.stdout_lines": [
        [
            ""
        ],
        [
            "uptime: 12h33m29s",
            "                  version: 6.42.1 (stable)",
            "               build-time: Apr/23/2018 10:46:55",
            "              free-memory: 231.0MiB",
            "             total-memory: 249.5MiB",
            "                      cpu: Intel(R)",
            "                cpu-count: 1",
            "            cpu-frequency: 2700MHz",
            "                 cpu-load: 2%",
            "           free-hdd-space: 943.8MiB",
            "          total-hdd-space: 984.3MiB",
            "  write-sect-since-reboot: 7048",
            "         write-sect-total: 7048",
            "        architecture-name: x86",
            "               board-name: x86",
            "                 platform: MikroTik"
        ]
    ]
}

如您所见,输出似乎偏移了 1。我该怎么做才能更正?

小时

事实证明,问题出在定义 shell 提示的正则表达式中。我是这样定义的:

terminal_stdout_re = [
    re.compile(br"\[\w+\@[\w\-\.]+\] ?>"),
    # other cases
]

它与提示的结尾不匹配,导致 Ansible 认为在实际命令输出之前有一个换行符。这是正确的正则表达式:

terminal_stdout_re = [
    re.compile(br"\[\w+\@[\w\-\.]+\] ?> ?$"),
    # other cases
]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Ansible中的字符串操作

来自分类Dev

Ansible字符串中的换行

来自分类Dev

在ansible中从json输出中删除转义的字符串

来自分类Dev

在Ansible中以字符串形式从列表中获取项目

来自分类Dev

PHP在$ .ajax响应中回显空字符串

来自分类Dev

Ansible-检查文件中是否存在字符串

来自分类Dev

多行模板-Ansible中的字符串转义

来自分类Dev

条件中的 ansible 连接字符串和变量

来自分类Dev

在 Ansible 调试消息中搜索字符串

来自分类Dev

ansible任务中的多行json字符串

来自分类Dev

在 Ansible 中为字符串生成数字哈希

来自分类Dev

Ansible警告“字符串字段中的类型列表已转换为字符串类型”

来自分类Dev

Ansible:从字符串构建Mac Adresse

来自分类Dev

如何从ansible中的ansible regsiter变量中提取字符串

来自分类Dev

Bash中的空字符串比较

来自分类Dev

忽略mapconcat中的空字符串?

来自分类Dev

python中的空字符串?

来自分类Dev

空字符串比较中的异常

来自分类Dev

在Java中检查空字符串

来自分类Dev

python中的空字符串?

来自分类Dev

删除字符串数组中的空字符串

来自分类Dev

在字符串检测中处理空字符串

来自分类Dev

字符串数组中的空字符串

来自分类Dev

如何从Ansible组中获取包含特定字符串的主机名

来自分类Dev

检查Ansible中的字符串是否等于和三元运算符

来自分类Dev

如何在Ansible YAML文件中的字符串中转义冒号?

来自分类Dev

使用Ansible正则表达式在文件中搜索字符串

来自分类Dev

使用Ansible删除文件中字符串之前的每一行

来自分类Dev

ansible-将字符串追加到存储在变量中的每个列表项