Ansible在提交之前预测条目是否会更改

Ansible在提交之前预测条目是否会更改,ansible,Ansible,我想知道,例如,我是否使用lineinfle,我实际上可以确定它是否会被更改,如果是,请执行一些操作,然后提交实际的lineinfle 有可能吗 谢谢是的。这是可能的。首次试运行lineinfile并通知处理程序。然后提交该行 tasks: - lineinfile: path: '<PATH>' regexp: '<REGEX>' line: '<REPLACE' check_mode: t

我想知道,例如,我是否使用lineinfle,我实际上可以确定它是否会被更改,如果是,请执行一些操作,然后提交实际的lineinfle

有可能吗


谢谢

是的。这是可能的。首次试运行lineinfile并通知处理程序。然后提交该行

  tasks:

    - lineinfile:
        path: '<PATH>'
        regexp: '<REGEX>'
        line: '<REPLACE'
      check_mode: true
      notify: run handler1

    - name: Force notified handlers to run
      meta: flush_handlers

    - lineinfile:
        path: "<PATH>"
        regexp: '<REGEX>'
        line: '<REPLACE>'

  handlers:

    - name: run handler1
      debug:
        msg: Action because the line will change.
B) 这就是Ansible通常提供的功能:

* Commit the actual lineinfile
* Find out if it was changed
* If yes ---> do some action
可以使用属性
backup
,该属性将:

创建包含时间戳信息的备份文件,以便 如果您不正确地删除了原始文件,请将其取回

例如:

tasks:
- lineinfile:
    path: ...
    regexp: ...
    line: ...
    backup: yes

用例是什么?也就是说,在线路改变之前运行该操作的原因是什么?@VladimirBotka在改变发生之前进行备份很好!但现在我想知道是否有一种方法可以避免任务重复(使用基本相同的参数调用2x lineinfle),我不知道这是如何实现的。Ansible的哲学和目标是定义系统的状态并使过程幂等。没有人会那么在意“以前”系统的状态。当一个过程是幂等的时,运行两次并不是什么大问题。@dctremblay您可以使用“backup”属性来避免重复。我在回答中举了一个例子。
tasks:
- lineinfile:
    path: ...
    regexp: ...
    line: ...
    backup: yes