问题描述
我有以下任务可以正常工作,即它会从用户的crontab中注释所需的作业(job1到job5),但令我感到烦恼的是,实际上游戏会追加这些作业而不替换它们。 >
- name: "Comment cron jobs"
cron:
user: "{{ ansible_env.USER }}"
name: "Comment"
job: "{{ item }}"
state: present
disabled: True
with_items:
- 'job1'
- 'job2'
- 'job3'
- 'job4'
- 'job5'
tags: stop_cronn
这是crontab -l
的结果。我要替换它们而不是附加它们。
* * * * * job1
* * * * * job2
* * * * * job3
* * * * * job4
*/5 * * * * job5
#Ansible: None
#* * * * * job1
#Ansible: None
#* * * * * job2
#Ansible: None
#* * * * * job3
#Ansible: None
#* * * * * job4
#Ansible: None
#* * * * * job5
我正在使用ansible 2.4.2.0。谢谢
解决方法
根据文档-https://docs.ansible.com/ansible/latest/collections/ansible/builtin/cron_module.html
在管理crontab作业时:模块包括一行,其中包含crontab条目“ #Ansible:”的描述,与传递给模块的“名称”相对应,以后的ansible / module调用将使用该名称来查找/检查状态。 “名称”参数应该是唯一的,并且更改“名称”值将导致创建新的cron任务(或删除其他任务)。
还涉及name
参数:
请注意,如果未设置name且state = present,那么将始终创建新的crontab条目,而不管现有的条目如何。
因此,在您的情况下,您有5个名称不唯一的作业,这意味着ansible无法正确管理您的记录。您需要将任务重写为以下内容:
- name: "Comment cron jobs"
cron:
user: "{{ ansible_env.USER }}"
name: "{{ item.name }}"
job: "{{ item.job }}"
state: present
disabled: True
loop:
- { job: 'job1',name: "job1 name" }
- { job: 'job2',name: "job2 name" }
tags: stop_cronn
如果您要管理现有记录-ansible无法做到如前所述,则必须指定唯一名称,并且#Ansible
注释应存在。