可以循环直到结果不为空
Ansible to loop until result is not empty
我正在尝试创建一个简单的 Ansible 脚本,该脚本循环执行一个命令,直到它 return 成为一个 IP。这是我的
- name: Get Shipa API address
shell: kubectl --namespace=shipa-system get svc shipa-ingress-nginx -o jsonpath="{.status.loadBalancer.ingress[0].ip}"
environment:
TERM: dumb
register: shipa_api
until: shipa_api.stdout | lenght > 3
retries: 5
delay: 90
- set_fact:
shipa_apiaddr: '{{ shipa_api.stdout | trim }}'
这肯定行不通,需要注意的一点是上面的命令可能 return 一个简单的 %
当它为空时,所以我需要确保 Ansible 只移动到有真实IP或超过X个字符时的下一个任务
我该怎么做?非常感谢任何帮助
为此有一个名为 ipaddr
的过滤器。
所以你可以去:
- name: Get Shipa API address
shell: kubectl --namespace=shipa-system get svc shipa-ingress-nginx -o jsonpath="{.status.loadBalancer.ingress[0].ip}"
environment:
TERM: dumb
register: shipa_api
until: shipa_api.stdout | ipaddr
retries: 5
delay: 90
我正在尝试创建一个简单的 Ansible 脚本,该脚本循环执行一个命令,直到它 return 成为一个 IP。这是我的
- name: Get Shipa API address
shell: kubectl --namespace=shipa-system get svc shipa-ingress-nginx -o jsonpath="{.status.loadBalancer.ingress[0].ip}"
environment:
TERM: dumb
register: shipa_api
until: shipa_api.stdout | lenght > 3
retries: 5
delay: 90
- set_fact:
shipa_apiaddr: '{{ shipa_api.stdout | trim }}'
这肯定行不通,需要注意的一点是上面的命令可能 return 一个简单的 %
当它为空时,所以我需要确保 Ansible 只移动到有真实IP或超过X个字符时的下一个任务
我该怎么做?非常感谢任何帮助
为此有一个名为 ipaddr
的过滤器。
所以你可以去:
- name: Get Shipa API address
shell: kubectl --namespace=shipa-system get svc shipa-ingress-nginx -o jsonpath="{.status.loadBalancer.ingress[0].ip}"
environment:
TERM: dumb
register: shipa_api
until: shipa_api.stdout | ipaddr
retries: 5
delay: 90