首页 > 解决方案 > Ansible - 使用循环“直到”时如何检查特定的子字符串?

问题描述

我有一个任务要检查我的交换机是否已重新启动,并且我想运行该任务,直到它返回成功的 ping。我拥有的交换机是 Aruba 2530,当我手动对其进行 ping 操作时,我得到以下字符串作为回报:

192.168.12.200 存活,时间 = 2 ms

我的想法是从返回字符串中检查单词“alive”以查看 ping 是否成功。这甚至是一种理想的方式吗?哦,我正在使用来自https://github.com/aruba/aruba-switch-ansible的模块

我的任务如下所示:

  arubaos_switch_ssh_cli:
    ip: "{{ ansible_host }}"
    user: "{{ ansible_user }}"
    password: "{{ ansible_password }}"
    show_command: "ping 192.168.12.200"
  register: ping_result
  retries: 12
  delay: 5
  until: ???"

我试过用谷歌搜索答案并尝试了几种不同的语法。我发现的大多数东西都在考虑条件“何时”,所以我不确定“何时”和“直到”在查看它们的语法时如何相互比较。

我试过以下:

"'alive' in ping_result.cli_output"

"ping_result.cli_output | search('alive')

"{{ 'alive' in ping_result.cli_output }}"

和其他几个没有工作的...

提前感谢大家!

标签: automationansibleswitching

解决方案


如果没有您注册的 var 的样本,有点难以确定,但我认为这就是您要寻找的:

until: ping_result.cli_output is search('alive')

值得注意的是:

  • 任务参数until(as when, failed_when...) 直接解释为 jinja2 模板字符串。所以你永远不应该在你的表达式周围加上双花括号。
  • Ansible测试不是过滤器,不应该这样使用(即带有竖线 ( |) 符号)。

推荐阅读