我需要在直到循环中使用正则表达式模式检查命令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或直到这种情况适合的情况?
答案 0 :(得分:1)
您在until:
语句中出现语法错误:您不得在表达式中引用var,例如此处的示例:Retrying a task until a condition is met
until: k_output.stdout | regex_search(regexp_pattern) != ""
我希望这会有所帮助