在crontab中具有多个MAILTO环境变量的简便方法

在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作为一个环境变量,如

我必须在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
作为一个环境变量,如果我多次指定它,它就会被覆盖 使用
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
,它与任何可能的技巧都不匹配