--- - name: Install ACL support become: true ansible.builtin.apt: name: acl state: present update_cache: true cache_valid_time: 3600 - name: Converge access ACLs on Narratio writable roots become: true ansible.posix.acl: path: "{{ item.0 }}" etype: "{{ item.1.etype }}" permissions: "{{ item.1.permissions }}" state: present loop: >- {{ ['/var/lib/narratio', '/var/spool/narratio', '/var/cache/narratio'] | product([ {'etype': 'user', 'permissions': 'rwx'}, {'etype': 'group', 'permissions': 'rwx'}, {'etype': 'other', 'permissions': 'r-x'}, {'etype': 'mask', 'permissions': 'rwx'} ]) | list }} loop_control: label: "{{ item.0 }} {{ item.1.etype }}::{{ item.1.permissions }}" - name: Converge default ACLs on Narratio writable roots become: true ansible.posix.acl: path: "{{ item.0 }}" etype: "{{ item.1.etype }}" permissions: "{{ item.1.permissions }}" default: true state: present loop: >- {{ ['/var/lib/narratio', '/var/spool/narratio', '/var/cache/narratio'] | product([ {'etype': 'user', 'permissions': 'rwx'}, {'etype': 'group', 'permissions': 'rwx'}, {'etype': 'other', 'permissions': 'r-x'}, {'etype': 'mask', 'permissions': 'rwx'} ]) | list }} loop_control: label: "{{ item.0 }} default:{{ item.1.etype }}::{{ item.1.permissions }}" - name: Create the prompt-library root become: true ansible.builtin.file: path: "{{ dnd_pipeline_prompt_library_root }}" state: directory owner: root group: "{{ dnd_pipeline_runtime_group }}" mode: "0755" - name: Deploy the campaign registry become: true ansible.builtin.git: repo: "{{ dnd_pipeline_campaigns_repository_url }}" dest: "{{ dnd_pipeline_campaigns_root }}" version: "{{ dnd_pipeline_campaigns_revision }}" update: true force: true - name: Deploy the prompt library become: true ansible.builtin.git: repo: "{{ dnd_pipeline_prompt_library_repository_url }}" dest: "{{ dnd_pipeline_prompt_library_root }}" version: "{{ dnd_pipeline_prompt_library_revision }}" update: true force: true - name: Create Narratio configuration directories become: true ansible.builtin.file: path: "/usr/local/etc/narratio/{{ item }}" state: directory owner: "{{ dnd_pipeline_runtime_user }}" group: "{{ dnd_pipeline_runtime_group }}" mode: "{{ dnd_pipeline_config_directory_mode }}" loop: - conf.d - artifacts - artifact-families - profiles - name: Deploy Narratio D&D configuration fragments become: true ansible.builtin.template: src: "{{ item.src }}" dest: "/usr/local/etc/narratio/{{ item.dest }}" owner: "{{ dnd_pipeline_runtime_user }}" group: "{{ dnd_pipeline_runtime_group }}" mode: "{{ dnd_pipeline_config_file_mode }}" loop: - src: processing.yml.j2 dest: conf.d/processing.yml - src: session-recap.yml.j2 dest: artifacts/session-recap.yml - src: hostile-rumors.yml.j2 dest: artifacts/hostile-rumors.yml - src: deranged-rumors.yml.j2 dest: artifacts/deranged-rumors.yml - src: scene-map.yml.j2 dest: artifacts/scene-map.yml - src: character-meta-analysis.yml.j2 dest: artifact-families/character-meta-analysis.yml - src: testing.yml.j2 dest: profiles/testing.yml