为了为每个主机生成随机的cron执行,我想将要执行的时间随机化,以分散负载并避免所有主机同时运行艰巨的任务。
因此,如果可以为每个主机生成不同的小时和分钟,它将自动传播它。
示例:
cron:
name: "Conquer the world"
minute: "{{ ansible.hostname | str2num(0, 59) }}"
hour: "{{ ansible.hostname | str2num(4, 6) }}"
job: "conquer_the_world.sh"
我要命名为str2num
的函数是,该函数应确定性地为同一主机生成相同的数字,并且每个主机可能有所不同。
已经有解决方案吗?还是应该为此创建自定义过滤器?
答案
由于博客文章https://ansibledaily.com/idempotent-random-number/,我终于自己找到了答案:
cron:
name: "Conquer the world"
minute: "{{ (59 |random(seed=ansible_hostname)) }}"
hour: "{{ (2 |random(seed=ansible_hostname)) + 4 }}"
job: "conquer_the_world.sh"
通常:{{ ( (MAX - MIN) | random(seed=ansible_hostname)) + MIN }}
答案 0 :(得分:0)
使用Random Number Filter。有一个cron示例:
"{{ 60 | random }} * * * * root /script/from/cron"
# => '21 * * * * root /script/from/cron'
一个选择是创建一个“时间表”,然后使用它。例如下面的播放
- hosts: test_jails
tasks:
- set_fact:
my_cron_schedule: "{{ my_cron_schedule|default([]) | combine(
{item :{
'my_cron_hour':(24|random),
'my_cron_minute':(60|random)}}) }}"
loop: "{{ play_hosts }}"
run_once: true
- debug:
var: my_cron_schedule
run_once: true
给予:
"my_cron_schedule": {
"test_01": {
"my_cron_hour": 17,
"my_cron_minute": 43
},
"test_02": {
"my_cron_hour": 2,
"my_cron_minute": 13
},
"test_03": {
"my_cron_hour": 13,
"my_cron_minute": 0
}
}