在crontab中具有多个MAILTO环境变量的简便方法
我必须在Ansible中创建crontab,这样呈现的crontab应该有多个在crontab中具有多个MAILTO环境变量的简便方法,cron,ansible,ansible-2.x,mailto,Cron,Ansible,Ansible 2.x,Mailto,我必须在Ansible中创建crontab,这样呈现的crontab应该有多个MAILTO,这是基于下面的cron任务。例如,最后的crontab可能如下所示 MAILTO=person1@domain.com #Ansible: TEST 1 0 * * * * ls -ahl > /dev/null MAILTO=person2@domain.com #Ansible: TEST 2 1 * * * * ls -ahl > /dev/null MAILTO作为一个环境变量,如
MAILTO
,这是基于下面的cron任务。例如,最后的crontab可能如下所示
MAILTO=person1@domain.com
#Ansible: TEST 1
0 * * * * ls -ahl > /dev/null
MAILTO=person2@domain.com
#Ansible: TEST 2
1 * * * * ls -ahl > /dev/null
MAILTO
作为一个环境变量,如果我多次指定它,它就会被覆盖
使用env
的剧本示例
- cron:
env: true
name: MAILTO
job: person1@domain.com
state: "present"
insertbefore: "TEST 1"
- cron:
name: "TEST 1"
job: "ls -ahl > /dev/null"
state: "present"
minute: "0"
hours: "5,2"
- cron:
env: true
name: MAILTO
job: person2@domain.com
state: "present"
insertbefore: "TEST 2"
- cron:
name: "TEST 2"
job: "ls -ahl > /dev/null"
state: "present"
minute: "1"
hours: "4,2"
但是运气不好,我也尝试过使用cronvar
- cronvar:
name: MAILTO
value: person1@domain.com
state: "present"
insertbefore: "TEST 1"
- cron:
name: "TEST 1"
job: "ls -ahl > /dev/null"
state: "present"
minute: "0"
hours: "5,2"
- cronvar:
name: MAILTO
value: person2@domain.com
state: "present"
insertbefore: "TEST 2"
- cron:
name: "TEST 2"
job: "ls -ahl > /dev/null"
state: "present"
minute: "1"
hours: "4,2"
又没运气了
有人能指出实现这一点的方法吗?因为
cronvar
意味着向文件中添加变量,这些文件是唯一的,而且我不能完全确定在crontab
的所有实现中都有多个MAILTO
是可能的,所以很可能Ansible不会支持它,我想你最好的选择是求助于一个普通的老客户
当然,其中不太好的部分是,您必须创建一个主机、播放或任务变量来保存crontab文件的路径。我快速浏览了文档,但似乎没有给出用户的实际crontab的事实,而且由于它似乎是的一部分,我不确定是否有一个好方法可以从Ansible本身找到它 另一方面,标识线路应添加位置的部分似乎是未来的证据,因为它清楚地记录为预期行为: 管理crontab作业时:模块包括一行,其中包含crontab条目
“#Ansible:
的描述,对应于传递给模块的“名称”,将来的Ansible/module调用使用该名称查找/检查状态。“name”参数应该是唯一的,更改“name”值将导致创建一个新的cron任务(或删除另一个任务)
从文件:
考虑到所有这些,考虑到剧本:
-主机:所有
收集事实:不
变量:
cron\u文件:/etc/crontab/root
任务:
-克朗:
名称:“测试1”
作业:“ls-ahl>/dev/null”
国家:“目前”
分钟:“0”
小时:“5,2”
寄存器:cron
-线条填充:
路径:“{{cron_file}}”
insertbefore:“#应答:测试1”
行:“MAILTO”=person1@domain.com'
-克朗:
名称:“测试2”
作业:“ls-ahl>/dev/null”
国家:“目前”
分钟:“1”
小时:“4,2”
-线条填充:
路径:“{{cron_file}}”
insertbefore:“#应答:测试2”
行:“MAILTO”=person2@domain.com'
这就产生了重述:
PLAY [all] *********************************************************************************************************
TASK [cron] ********************************************************************************************************
changed: [localhost]
TASK [lineinfile] **************************************************************************************************
changed: [localhost]
TASK [cron] ********************************************************************************************************
changed: [localhost]
TASK [lineinfile] **************************************************************************************************
changed: [localhost]
PLAY RECAP *********************************************************************************************************
localhost : ok=4 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
在用于测试的Alpine的/etc/crontab/root中:
MAILTO=person1@domain.com
#Ansible: TEST 1
0 5,2 * * * ls -ahl > /dev/null
MAILTO=person2@domain.com
#Ansible: TEST 2
1 4,2 * * * ls -ahl > /dev/null
最后但并非最不重要的一点是,重新运行完全相同的剧本表明幂等性得到了尊重:
PLAY [all] *********************************************************************************************************
TASK [cron] ********************************************************************************************************
ok: [localhost]
TASK [lineinfile] **************************************************************************************************
ok: [localhost]
TASK [cron] ********************************************************************************************************
ok: [localhost]
TASK [lineinfile] **************************************************************************************************
ok: [localhost]
PLAY RECAP *********************************************************************************************************
localhost : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
谢谢,它可以工作,但我如何才能添加重复的
MAILTO=person1@domain.com
行,lineinfle
只添加一个唯一的行。要有重复的MAILTO=person1@domain.com
使用regex:'#Ansible:test1'
,基本上regex
与insertbefore
相同。任务可能如下所示:-lineinfle:路径:{{cron\u file}}
insertbefore:“#Ansible:TEST 1”
正则表达式:“#Ansible:TEST 1”第一个匹配:true行:'MAILTO=person1@domain.com“
不是正确的解决方案,有人知道如何添加重复的MAILTO吗=person1@domain.com
ansible task之前的行OK有一个令人讨厌的黑客使用了一个regex
,它与任何可能的技巧都不匹配