1

我需要在直到循环中使用正则表达式模式检查命令标准输出。当我使用 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 或适合这种情况的东西,直到?

4

1 回答 1

2

你在语句中有语法错误until::你不能引用表达式中的变量,就像这里的例子:重试任务直到满足条件

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

我希望这个能帮上忙

于 2019-06-24T15:18:16.200 回答