diff options
author | Elizabeth Hunt <me@liz.coffee> | 2025-07-27 00:58:49 -0700 |
---|---|---|
committer | Elizabeth Hunt <me@liz.coffee> | 2025-07-28 20:45:14 -0700 |
commit | 1f5f7e330c71cef982f1b77601a57ba481c41cc1 (patch) | |
tree | 6d72df55d5ee0c7a7ae825f97eaa08ca929de45b /tasks/copy-rendered-templates-recursive.yml | |
parent | 9940cd169e931631a0da142f72a8ca6c878e34ed (diff) | |
download | infra-1f5f7e330c71cef982f1b77601a57ba481c41cc1.tar.gz infra-1f5f7e330c71cef982f1b77601a57ba481c41cc1.zip |
Remove dependency on `file
Diffstat (limited to 'tasks/copy-rendered-templates-recursive.yml')
-rw-r--r-- | tasks/copy-rendered-templates-recursive.yml | 71 |
1 files changed, 38 insertions, 33 deletions
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 }}" |