- name: manage group folders block: # Get list of existing group folders and set them as fact - name: get list of group folders check_mode: no command: 'nextcloud-occ groupfolders:list --output json' register: existing_group_folders - name: store existing group folders set_fact: group_folders: "{{ existing_group_folders.stdout | from_json }}" # Create group folders that did not exist yet - name: create non-existing folders command: "nextcloud-occ groupfolders:create {{ item.name }}" with_items: "{{ nextcloud.groupfolders }}" when: group_folders | selectattr(search_key, 'equalto', search_val) | list | count == 0 vars: search_key: "mount_point" search_val: "{{ item.name }}" # Get list of existing group folders AGAIN and set them as fact - name: get list of group folders again check_mode: no command: 'nextcloud-occ groupfolders:list --output json' register: existing_group_folders - name: store existing group folders set_fact: group_folders: "{{ existing_group_folders.stdout | from_json }}" # Set quota for folders where it does not match - name: set group folder quota command: "nextcloud-occ groupfolders:quota {{ (group_folders | selectattr(search_key, 'equalto', search_val) | list | first).id }} {{ item.quota }}" with_items: "{{ nextcloud.groupfolders }}" when: (group_folders | selectattr(search_key, 'equalto', search_val) | list | first).quota != item.quota vars: search_key: "mount_point" search_val: "{{ item.name }}" # We search for some random name so that the LDAP data cache gets updated - name: update LDAP cache command: "nextcloud-occ ldap:search random_string_to_update_cache" changed_when: False # Set folder permissions if they are not correct yet - name: Set folder permissions command: "nextcloud-occ groupfolders:group {{ (group_folders | selectattr(search_key, 'equalto', search_val) | list | first).id }} {{ item.1 }} write share delete" # Only execute when the permissions of the group for that folder are not "31" (31 is write, share, delete) when: ((group_folders | selectattr(search_key, 'equalto', search_val) | list | first).groups[item.1] is undefined) or ((group_folders | selectattr(search_key, 'equalto', search_val) | list | first).groups[item.1] != 31) loop: "{{ nextcloud.groupfolders | subelements('groups') }}" vars: search_key: "mount_point" search_val: "{{ item.0.name }}"