我正在尝试做一个剧本与一些任务。我想perfor一个简单的调试任务后,cpu负载低于2.0。
我在cpu-load.yml
中有这样一个例子:
---
- name: Check CPU load and wait
hosts: localhost
gather_facts: yes
tasks:
- name: Check cpu load
shell: uptime | awk -F 'load average:' '{print $2}' | awk -F ', ' '{print $1}'
register: cpu_load
- name: Wait until cpu load is bellow 2.0
wait_for:
timeout: 300
delay: 10
shell: Do something here
msg: "cpu load is bellow 2.0"
- name: Continue jobs
debug:
msg: "CPU load is bellow 2.0. Continue!!!"
现在我不知道如何使任务等待cpu负载去below 2. 0。你们能帮忙吗
2条答案
按热度按时间6fe3ivhb1#
你需要在你的“check cpu load”任务周围放置一个
until
循环:这将等待最多五分钟(300次重试,延迟1秒),以使负载平均值降至2.0以下。
可能有更好的方法来获得当前1分钟的CPU负载;从
/proc/loadavg
阅读可能是最简单的:mhd8tkvw2#
建立在@larsks的答案上,并进一步讨论句子
可能有更好的方法来获得当前1分钟的CPU负载
实际上有一个事实包含了这些信息,至少在linux上是这样的,例如。
注意事项:
gather_subset='!all,!min,loadavg'
确保严格地只收集所需的事实(并在下面的剧本中刷新)。有关详细信息,请参阅选项文档1.在我写这些行的时候,
loadavg
子集没有被记录,但是在我的ansible 2.14.6 / 2.15.0版本中,它被列在模块错误消息的允许选项中(见下文)知道这一点并应用与@larsk的答案相同的配方,检查可以实现为:
关于
setup
模块的未记录子集,这里有一个快速而肮脏的解决方案,可以列出您的模块版本中所有接受的子集: