Reputation: 27486
I have a situation where I need to check the status of a file on the local machine (the one where I will call ansible-playbook ...
).
If a file that is created by the user exists, it needs to be copied over to the remote host(s). If it doesn't exist, then none of the remote hosts need it.
I know I've done things like :
- name: Check for ~/.blah/config
stat: path=/home/ubuntu/.blah/config
register: stat_blah_config
- name: Do something with blah config
shell: ~/do_something_with_config.sh
when: stat_aws_config.stat.exists == true
But that will only work if the file exists remotely. Is there a way to conditionally execute a task (like copy) only if the file exists locally (have the stat
in the first task execute locally instead of remotely), and fail silently if it does not? I'm not sure if ansible has this kind of functionality, but it would be useful.
Upvotes: 44
Views: 44050
Reputation: 649
This also works, and saves executing a task:
when: "lookup('ansible.builtin.fileglob', '/home/ubuntu/.blah/config') != []"
fileglob
always looks on the local machine.
Upvotes: 9
Reputation: 20719
Delegating the tasks to the localhost via the delegate_to statement should do what you want:
- name: Check for ~/.blah/config
delegate_to: localhost
stat:
path: /home/ubuntu/.blah/config
register: stat_blah_config
Upvotes: 47