diff --git a/roles/service/tasks/main.yaml b/roles/service/tasks/main.yaml index 2e0f327..945abba 100644 --- a/roles/service/tasks/main.yaml +++ b/roles/service/tasks/main.yaml @@ -2,10 +2,6 @@ - name: Validate inputs ansible.builtin.import_tasks: validation.yaml -- name: Initialize variables - ansible.builtin.set_fact: - _service_container_mounts: [] - - name: Database for {{ service_name }} ansible.builtin.include_tasks: database.yaml when: _service_setup_database @@ -18,9 +14,9 @@ ansible.builtin.include_tasks: secrets.yaml when: _service_container_secrets | length > 0 -- name: Mounts for {{ service_name }} - ansible.builtin.include_tasks: mounts.yaml - when: service_container_mounts | length > 0 +- name: Template mounts for {{ service_name }} + ansible.builtin.include_tasks: templates.yaml + when: _service_template_mounts | length > 0 - name: Additional containers for {{ service_name }} ansible.builtin.include_tasks: additional.yaml diff --git a/roles/service/tasks/mount.yaml b/roles/service/tasks/mount.yaml deleted file mode 100644 index 82519f7..0000000 --- a/roles/service/tasks/mount.yaml +++ /dev/null @@ -1,32 +0,0 @@ ---- -- name: Set container named mounts - ansible.builtin.set_fact: - _service_container_mounts: > - {{ _service_container_mounts + - [mount | combine({'source': service_name + '-' + mount.source})] }} - when: mount.type == 'volume' - -- name: Set container named mounts - ansible.builtin.set_fact: - _service_container_mounts: "{{ _service_container_mounts + [mount] }}" - when: mount.type == 'bind' - -- name: Template mounts - when: mount.type == 'template' - block: - - name: Set template host path - ansible.builtin.set_fact: - _service_template_host_path: "{{ _service_host_directory }}/mounts/{{ (mount.source | split('.'))[0:-1] | join('.') }}" # Strip .j2 extension - - - name: Template files for template mounts - ansible.builtin.template: - src: "{{ mount.source }}" - dest: "{{ _service_template_host_path }}" - mode: "0644" - notify: "Restart container service {{ service_name }}" - - - name: Set container template mounts - ansible.builtin.set_fact: - _service_container_mounts: > - {{ _service_container_mounts + - [{'readonly': true} | combine(mount) | combine({'type': 'bind', 'source': _service_template_host_path})] }} diff --git a/roles/service/tasks/mounts.yaml b/roles/service/tasks/mounts.yaml deleted file mode 100644 index 4e6f9ac..0000000 --- a/roles/service/tasks/mounts.yaml +++ /dev/null @@ -1,21 +0,0 @@ ---- -- name: Create template mount directories under /srv - when: _service_template_mounts | length > 0 - block: - - name: Create directory {{ _service_host_directory }} - ansible.builtin.file: - path: "{{ _service_host_directory }}" - state: directory - mode: "0755" - - - name: Create directory {{ _service_host_directory + '/mounts' }} - ansible.builtin.file: - path: "{{ _service_host_directory }}/mounts" - state: directory - mode: "0700" - -- name: Set mount definitions for {{ service_name }} - ansible.builtin.include_tasks: mount.yaml - loop: "{{ service_container_mounts }}" - loop_control: - loop_var: mount diff --git a/roles/service/tasks/templates.yaml b/roles/service/tasks/templates.yaml new file mode 100644 index 0000000..e4ae11c --- /dev/null +++ b/roles/service/tasks/templates.yaml @@ -0,0 +1,20 @@ +--- +- name: Create directory {{ _service_host_directory }} + ansible.builtin.file: + path: "{{ _service_host_directory }}" + state: directory + mode: "0755" + +- name: Create directory {{ _service_host_directory + '/mounts' }} + ansible.builtin.file: + path: "{{ _service_host_directory }}/mounts" + state: directory + mode: "0700" + +- name: Template files for template mounts + ansible.builtin.template: + src: "{{ item[0].source }}" + dest: "{{ item[1].source }}" + mode: "0644" + notify: "Restart container service {{ service_name }}" + loop: "{{ _service_template_mounts | zip(_service_container_template_mounts) }}" diff --git a/roles/service/vars/main.yaml b/roles/service/vars/main.yaml index 66cc2f3..01f206c 100644 --- a/roles/service/vars/main.yaml +++ b/roles/service/vars/main.yaml @@ -1,7 +1,42 @@ --- -_service_template_mounts: "{{ service_container_mounts | selectattr('type', '==', 'template') | list }}" +_service_volume_mounts: "{{ service_container_mounts | selectattr('type', '==', 'volume') }}" +_service_template_mounts: "{{ service_container_mounts | selectattr('type', '==', 'template') }}" _service_host_directory: "/srv/{{ service_name }}" +_service_container_volume_mounts: >- + {{ + _service_volume_mounts | + zip( + _service_volume_mounts | + map(attribute='source') | + map('regex_replace', '^', service_name ~ '-') | + map('community.general.dict_kv', 'source') + ) | + map('combine') + }} +_service_container_bind_mounts: "{{ service_container_mounts | selectattr('type', '==', 'bind') }}" +_service_container_template_mounts: >- + {{ + ([{'readonly': true}] * _service_template_mounts | length) | + zip( + _service_template_mounts, + _service_template_mounts | + map(attribute='source') | + map('regex_replace', '\.j2$', '') | + map('regex_replace', '^', _service_host_directory ~ '/mounts/') | + map('community.general.dict_kv', 'source'), + ([{'type': 'bind'}] * _service_template_mounts | length) + ) | + map('combine') + }} + +_service_container_mounts: >- + {{ + _service_container_volume_mounts + + _service_container_bind_mounts + + _service_container_template_mounts + }} + _service_setup_database: "{{ service_database_type != 'none' }}" _service_database_name: "{{ service_name }}-{{ service_database_type }}"