如何查看ansible运行的shell脚本的实时输出?
我最近重构了一个等待脚本以使用多重处理,并提供了对多个服务的各种服务等待检查的实时状态。
作为一个独立的脚本,它可以像预期的那样为每个线程提供状态,因为它们并行等待各种服务变得稳定。
在ansible中,输出暂停,直到python脚本完成(或终止),然后提供输出。好的,我希望找到一种更快显示输出的方法。在通过jenkins withEnv运行ansible-playbook之前,我曾尝试设置PYTHONUNBUFFERED
,但这似乎也未能实现目标
- name: Wait up to 30m for service stability
shell: "{{ venv_dir }}/bin/python3 -u wait_service_state.py"
args:
chdir: "{{ script_dir }}"
用于显示长时间运行的脚本的输出的标准ansible模式是什么?
我的猜测是我可以遵循其中一条路线
答案 0 :(得分:0)
“ What's the standard ansible pattern for displaying output for a long running script?
”
用于显示长时间运行的脚本的输出的标准ansible模式是轮询async并循环直到async_status完成。直到循环的输出的自定义设置是有限的。参见Feature request: until for blocks #16621。
ansible-runner是另一条可以遵循的路线。
答案 1 :(得分:0)
您可以使用-https://docs.ansible.com/ansible/latest/user_guide/playbooks_async.html
- name: Run items asynchronously in batch of two items
vars:
sleep_durations:
- 1
- 2
- 3
- 4
- 5
durations: "{{ item }}"
include_tasks: execute_batch.yml
loop: "{{ sleep_durations | batch(2) | list }}"
- name: Async sleeping for batched_items
command: sleep {{ async_item }}
async: 45
poll: 0
loop: "{{ durations }}"
loop_control:
loop_var: "async_item"
register: async_results
- name: Check sync status
async_status:
jid: "{{ async_result_item.ansible_job_id }}"
loop: "{{ async_results.results }}"
loop_control:
loop_var: "async_result_item"
register: async_poll_results
until: async_poll_results.finished
retries: 30