ansible-role-nextcloud/tasks/groupfolders.yml

55 lines
2.6 KiB
YAML

- 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 | int }}"
with_items: "{{ nextcloud.groupfolders }}"
when: (group_folders | selectattr(search_key, 'equalto', search_val) | list | first).quota != item.quota | int
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 }}"