From 1f5f7e330c71cef982f1b77601a57ba481c41cc1 Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Sun, 27 Jul 2025 00:58:49 -0700 Subject: Remove dependency on `file --- tasks/copy-rendered-templates-recursive.yml | 71 +++++++++++++++-------------- 1 file changed, 38 insertions(+), 33 deletions(-) (limited to 'tasks/copy-rendered-templates-recursive.yml') diff --git a/tasks/copy-rendered-templates-recursive.yml b/tasks/copy-rendered-templates-recursive.yml index 3b6055a..57322cd 100644 --- a/tasks/copy-rendered-templates-recursive.yml +++ b/tasks/copy-rendered-templates-recursive.yml @@ -7,6 +7,42 @@ state: directory register: tempdir +- name: Define list of binary extensions + set_fact: + binary_extensions: + - png + - jpg + - jpeg + - gif + - pdf + - bin + - exe + - zip + - tar + - gz + - bz2 + - xz + - mp3 + - mp4 + - wav + - avi + +- name: Initialize file lists + set_fact: + text_files: [] + binary_files: [] + +- name: Classify files into text and binary + set_fact: + text_files: "{{ text_files + [item] if (file_ext not in binary_extensions) else text_files }}" + binary_files: "{{ binary_files + [item] if (file_ext in binary_extensions) else binary_files }}" + vars: + file_ext: "{{ (item.path | splitext | last | regex_replace('^\\.', '')) | lower }}" + loop: "{{ lookup('filetree', render_dir) }}" + when: item.state == "file" + loop_control: + label: "{{ item.path }}" + - name: Ensure parent directories exist for all files delegate_to: localhost become: false @@ -18,42 +54,11 @@ with_filetree: "{{ render_dir }}" when: item.state == "file" -- name: Check if each file is text or binary - delegate_to: localhost - become: false - ansible.builtin.command: - cmd: file --mime-type "{{ item.src }}" - register: file_type_check - changed_when: false - with_filetree: "{{ render_dir }}" - when: item.state == "file" - loop_control: - label: "{{ item.path }}" - -- name: Separate text and binary files - set_fact: - text_files: >- - {{ - file_type_check.results - | selectattr('stdout', 'defined') - | selectattr('stdout', 'search', '^.*: text/') - | map(attribute='item') - | list - }} - binary_files: >- - {{ - file_type_check.results - | selectattr('stdout', 'defined') - | rejectattr('stdout', 'search', '^.*: text/') - | map(attribute='item') - | list - }} - - name: Render templates (text files only) delegate_to: localhost become: false ansible.builtin.template: - src: "{{ item.src }}" + src: "{{ render_dir }}/{{ item.path }}" dest: "{{ tempdir.path }}/{{ item.path }}" mode: "{{ mode | default('0755') }}" owner: "{{ owner }}" @@ -63,7 +68,7 @@ delegate_to: localhost become: false ansible.builtin.copy: - src: "{{ item.src }}" + src: "{{ render_dir }}/{{ item.path }}" dest: "{{ tempdir.path }}/{{ item.path }}" mode: "{{ mode | default('0644') }}" owner: "{{ owner }}" -- cgit v1.2.3-70-g09d2