ansible评论多个cron作业

问题描述

我有以下任务可以正常工作,即它会从用户的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注释应存在。