条件语句中的正则表达式使用Ansible直到循环

时间:2019-06-24 05:00:29

标签: regex ansible until-loop

我需要在直到循环中使用正则表达式模式检查命令stdout。当我使用regex_search显示调试消息时,一切正常:

    - name: Checking if node is ready
      shell: "kubectl --kubeconfig {{kubeconf}} get nodes"
      register: k_output

    - debug:
        msg: "{{k_output.stdout | regex_search(node_hostname | string + '\\s+Ready')}}"

消息是

ok: [any_node_hostname] => {
    "msg": "any_node_hostname   Ready"
}

但是,如果我尝试在内部使用该构造,直到条件语句任务失败并出现语法错误。

    - set_fact:
        regexp_pattern: "{{node_hostname | string + '\\s+Ready'}}"

    - debug:
        msg: "{{regexp_pattern}}"

    - name: Checking if node is ready
      shell: "kubectl --kubeconfig {{kubeconf}} get nodes"
      register: k_output
      until: "{{k_output.stdout | regex_search(regexp_pattern)}}" != ""
      retries: 5
      delay: 10

我只是将完整字符串{{k_output.stdout | regex_search(node_hostname | string + '\\s+Ready')}}复制并粘贴到条件语句中时,没有set_fact的行为相同。 那么,如何使用regex_search或直到这种情况适合的情况?

1 个答案:

答案 0 :(得分:1)

您在until:语句中出现语法错误:您不得在表达式中引用var,例如此处的示例:Retrying a task until a condition is met

    until: k_output.stdout | regex_search(regexp_pattern) != ""

我希望这会有所帮助