restart service for a single computer using a loop when file copied

Good day,

I have a list that I loop over to copy files. I want to restart a service only if that file has been changed on the remote system. What is the best method to restart a service on only on a system if the file was copied to the system.

For instance:
defaults/main.yml

copy_files:

  • name: macsec
    all_systems_copy_src: “files/etc/modprobe.d/macsec.conf”
    all_systems_copy_dest: “/etc/modprobe.d/macsec.conf”
    all_systems_copy_owner: “0”
    all_systems_copy_group: “0”
    all_systems_copy_mode: “0644”

  • name: rsyslog
    all_systems_copy_src: “files/etc/rsyslog/syslog.conf”
    all_systems_copy_dest: “/etc/rsyslog.d/syslog.conf”
    all_systems_copy_owner: “0”
    all_systems_copy_group: “0”
    all_systems_copy_mode: “0644”

tasks/copy_files/main.yml

  • name: “Copy files”
    copy:
    src: “{{ item.all_systems_copy_src }}”
    dest: “{{ item.all_systems_copy_dest }}”
    owner: “{{ item.all_systems_copy_owner }}”
    group: “{{ item.all_systems_copy_group }}”
    mode: “{{ item.all_systems_copy_mode }}”
    with_items:
  • “{{ copy_files }}”

If the system copies a new syslog file restart syslog.

I know there are handlers and notify, but I only want to restart on a specific system if it gets updated.

Chris

Good day,

I have a list that I loop over to copy files. I want to restart a service
only if that file has been changed on the remote system. What is the best
method to restart a service on only on a system if the file was copied to
the system.

Here you say system and system.

If the system copies a new syslog file restart syslog.

I know there are handlers and notify, but I only want to restart on a
specific system if it gets updated.

And system again, so i guess this is system is the same host and notify is perfect in that scenario.

Apologies if that was not clear.

On my ansible server I have files that I want to copy to remote servers. I only want to restart a service if a specific file was copied and not just any other file. My example shows two files, but I only want to restart the syslog service if the syslog file is copied. Additionally I don’t want to restart the syslog service on all of the inventoried servers just the ones with the updated file.

I hope that makes my question more clear.

Chris

use handlers https://docs.ansible.com/ansible/2.6/user_guide/playbooks_intro.html#handlers-running-operations-on-change

That's exactly what notify/handlers does, it only notify if it's a change.
So if you add a key to your list called notify then you can have notify: '{{ item.notify | default(omit) }}' on the task.
So any entry in the list that don't have notify key will just omit notify entirely.

Thank you, this is the answer I was searching for with my question.

I will add a notify key and then use a handler off of the key.