failed_when不使用telnet输出

问题描述 投票:0回答:1

如果“实例”在输出消息中,我将尝试将telnet任务设置为失败,但它不起作用。

这是日志:

TASK [ISAM Log to log1 and log2] **************************************************************************************************************************************
task path: /Users/sascha.mueller/Downloads/isam_log.yml:9
changed: [1.2.3.4] => {
    "changed": true, 
    "failed_when_result": false, 
    "output": [
        "configure system syslog no route dslamlog msg-type all\r\n\r\nError : instance does not exist\r\n\r\nISAM-ISAM_7363_Labor_Zw>#", 
        "configure system syslog no destination dslamlog\r\n\r\nError : instance does not exist\r\n\r\nISAM-ISAM_7363_Labor_Zw>#"
    ]
}

TASK [fail the play if the previous command did not succeed] **********************************************************************************************************
task path: /Users/sascha.mueller/Downloads/isam_log.yml:27
skipping: [1.2.3.4] => {
    "changed": false, 
    "skip_reason": "Conditional result was False"
}

我也尝试过command_output.stderr,例如但所有这些价值观都不存在

---
-
 hosts: all
 connection: local
 become: no

 tasks:
 - name: ISAM Log to log1 and log2
   ignore_unreachable: yes
   telnet:
     user: bla
     password: blubb
     login_prompt: "login: "
     password_prompt: "password: "
     timeout: 5
     prompts:
       - "[#|$]"
     command:
       - configure system syslog no route dslamlog msg-type all
       - configure system syslog no destination dslamlog

   register: command_output
     failed_when: "'instance' in command_output.output"


 - name: fail the play if the previous command did not succeed
   fail:
     msg: "the command failed"
   when: "'instance' in command_output.output"

是否可以使用telnet命令进行检查,或者使用variable.output或仅使用variable.stderr进行检查?

ansible
1个回答
0
投票

您可以在示例中看到output是一个列表:

"output": [
    "configure system syslog no route dslamlog msg-type all\r\n\r\nError : instance does not exist\r\n\r\nISAM-ISAM_7363_Labor_Zw>#", 
    "configure system syslog no destination dslamlog\r\n\r\nError : instance does not exist\r\n\r\nISAM-ISAM_7363_Labor_Zw>#"
]

当你问"'instance' in command_output.output"时,你问的是outout中是否有一个项目是字符串instance。也就是说,如果output看起来像这样,你的表达式将评估为true:

"output": [
    "this item does not match",
    "instance"
]

你真正想问的是“output中的任何项目都包含字符串instance吗?”。最简单的方法是将所有行连接成一个字符串:

"'instance' in ''.join(command_output.output)"

你应该能够在failed_when条件下使用它:

- name: ISAM Log to log1 and log2
  ignore_unreachable: yes
  telnet:
    user: bla
    password: blubb
    login_prompt: "login: "
    password_prompt: "password: "
    timeout: 5
    prompts:
      - "[#|$]"
    command:
      - configure system syslog no route dslamlog msg-type all
      - configure system syslog no destination dslamlog

  register: command_output
  failed_when: "'instance' in ''.join(command_output.output)"

或者在你的when任务的fail声明中:

 - name: fail the play if the previous command did not succeed
   fail:
     msg: "the command failed"
   when: "'instance' in ''.join(command_output.output)"
© www.soinside.com 2019 - 2024. All rights reserved.