【问题标题】:Ansible until loop with regex in conditional statementAnsible until 循环在条件语句中使用正则表达式
【发布时间】:2019-06-24 23:18:16
【问题描述】:

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

【问题讨论】:

    标签: regex ansible until-loop


    【解决方案1】:

    until: 语句有语法错误:你不能在表达式中引用变量,例如这里的例子:Retrying a task until a condition is met

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

    我希望这会有所帮助

    【讨论】:

      猜你喜欢
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 2022-12-07
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 2012-08-28
      相关资源
      最近更新 更多