summaryrefslogtreecommitdiff
path: root/tasks/copy-rendered-templates-recursive.yml
diff options
context:
space:
mode:
authorElizabeth Hunt <me@liz.coffee>2025-07-27 00:58:49 -0700
committerElizabeth Hunt <me@liz.coffee>2025-07-28 20:45:14 -0700
commit1f5f7e330c71cef982f1b77601a57ba481c41cc1 (patch)
tree6d72df55d5ee0c7a7ae825f97eaa08ca929de45b /tasks/copy-rendered-templates-recursive.yml
parent9940cd169e931631a0da142f72a8ca6c878e34ed (diff)
downloadinfra-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.yml71
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 }}"