fix idempotence for this command

20 views
Skip to first unread message

Nicola L.

unread,
May 27, 2021, 10:02:23 AM5/27/21
to Ansible Project

Hi,
this task breaks the idempotence of my role:

- name: Set directories permissions for production installation
command: find /opt/tomcat -type d -exec chmod -c 2750 {} \;
register: find_chmod_result
changed_when: 'find_chmod_result.stdout | length > 0'

The command is selecting all the folders (and not the files) located under /opt/tomcat and it applies them the permissions 2750.

Is there a way to express the same thing without breaking the idempotence?

Nicola

Matt Martz

unread,
May 27, 2021, 10:04:47 AM5/27/21
to ansible...@googlegroups.com
Instead of running the find command via `command`, switch to using the `find` module, register the result, then use the `file` module, looping the previous results, to set permissions on the directories.



--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/e264e896-18fb-479d-9b0e-e6b62649d117n%40googlegroups.com.


--
Matt Martz
@sivel
sivel.net

Nicola L.

unread,
May 27, 2021, 11:56:49 AM5/27/21
to Ansible Project
Thank you!! That's indeed the solution!
Now it looks like this:

- name: Set directories permissions - select
find:
paths: "/opt/tomcat
file_type: directory
register: find_chmod_result

- name: Set directories permissions - apply
file:
path: "{{ item.path }}"
owner: "{{ tomcat_user }}"
group: "{{ tomcat_group }}"
mode: '02775'
loop: "{{ find_chmod_result.files }}"

Nicola
Reply all
Reply to author
Forward
0 new messages