有没有办法保证使用随机生成变量的剧本的幂等性?
例如,我想设置 crontab 以在不同时间触发多个服务器上的电子邮件,因此我使用 ansible 的 set_fact 模块创建随机整数:
tasks:
- set_fact:
first_run_30="{{ 30 | random }}"
run_once: yes
然后使用 ansible 将这些生成的变量应用到我的 crontab,如下所示:
- name: Setup cron30job
cron: name=cron30job minute={{first_run_30}},{{first_run_30 | int + 30}} job='/bin/bash /cron30job.sh' state=present user=root
environment:
MAILTO: '[email protected] /cdn-cgi/l/email-protection'
MAILFROM: '[email protected] /cdn-cgi/l/email-protection'
这非常有效,但是,我相信,使用这种策略会破坏 ansible 的无效原则,因为每次播放时你都会看到变化:
TASK: [Setup cron30job] *****************************************
changed: [127.0.0.1]
此外,在 crontab 中,每次在三个单独的运行期间都在 root 下进行检查:
[ansible]# cat /var/spool/cron/root
#Ansible: cron30job
5,35 * * * * /bin/bash /sw/test/cron30job.sh
#Ansible: cron30job
9,39 * * * * /bin/bash /sw/test/cron30job.sh
#Ansible: cron30job
6,36 * * * * /bin/bash /sw/test/cron30job.sh
如果有解决方法,或者在我的情况下可能无法实现无能,我想知道。