如何在Ansible playbook使用pause模块时打印已流逝时长
方案1:纯原生模块实现固定时长等待+实时显示流逝时间
原生pause模块无法在等待过程中动态输出内容,你可以用「固定短间隔等待+循环」的方式替代单次长等待,示例配置如下:
首先记录等待开始的时间戳:
- name: 记录等待起始时间 set_fact: wait_start_time: "{{ ansible_date_time.epoch }}"
然后循环执行短等待,每次输出已流逝时长:
- name: 等待AWS EC2实例构建(最长10分钟) pause: seconds: 10 prompt: "当前已等待 {{ (ansible_date_time.epoch | int - wait_start_time | int) }} 秒,剩余最长等待时间 {{ 600 - (ansible_date_time.epoch | int - wait_start_time | int) }} 秒" loop: "{{ range(60) | list }}" loop_control: label: "等待进度:{{ (item * 10) }}/600 秒"
这个配置每10秒刷新一次等待进度,你可以根据需要调整间隔秒数,把seconds参数和循环次数对应修改即可。
方案2:更高效的EC2状态轮询(无需固定等待10分钟)
相比硬等10分钟,更推荐主动轮询EC2实例的运行状态,实例构建完成就自动结束等待,不会浪费时间:
- name: 轮询EC2实例运行状态 amazon.aws.ec2_instance_info: instance_ids: "{{ 需要等待的实例ID列表 }}" filters: instance-state-name: running register: ec2_poll_result until: ec2_poll_result.instances | length == 你期望的正常运行实例数量 retries: 60 delay: 10
这个配置最长等待时间还是10分钟(10秒*60次重试),如果实例提前构建完成会直接进入下一个任务,Ansible每次重试时会自动输出重试次数,你也可以在两次轮询之间加debug任务打印已流逝时长。
内容的提问来源于stack exchange,提问作者jmacioci
相关产品推荐
相关产品推荐

