SHA256
1
0

Add symlink support

This commit is contained in:
2025-12-14 21:19:13 -05:00
parent 201543a9c4
commit f2ce25bfca
4 changed files with 103 additions and 160 deletions

View File

@@ -1,202 +1,115 @@
---
- name: Find common home dotfiles (excluding templates)
- name: Find home dotfiles (excluding templates)
ansible.builtin.find:
paths: "{{ playbook_dir }}/dotfiles/common/home"
paths:
- "{{ playbook_dir }}/dotfiles/common/home"
- "{{ playbook_dir }}/dotfiles/{{ group_names[0] }}/home"
recurse: true
file_type: file
hidden: true
excludes: "*.j2"
delegate_to: localhost
register: dotfiles_common_home_files
register: dotfiles_home_files
run_once: true
ignore_errors: true
- name: Find common root dotfiles (excluding templates)
- name: Find root dotfiles (excluding templates)
ansible.builtin.find:
paths: "{{ playbook_dir }}/dotfiles/common/root"
paths:
- "{{ playbook_dir }}/dotfiles/common/root"
- "{{ playbook_dir }}/dotfiles/{{ group_names[0] }}/root"
recurse: true
file_type: file
hidden: true
excludes: "*.j2"
delegate_to: localhost
register: dotfiles_common_root_files
register: dotfiles_root_files
run_once: true
ignore_errors: true
- name: Find group home dotfiles (excluding templates)
- name: Find home template files
ansible.builtin.find:
paths: "{{ playbook_dir }}/dotfiles/{{ item }}/home"
recurse: true
file_type: file
hidden: true
excludes: "*.j2"
loop: "{{ group_names | default([]) }}"
delegate_to: localhost
register: dotfiles_group_home_files
run_once: true
ignore_errors: true
- name: Find group root dotfiles (excluding templates)
ansible.builtin.find:
paths: "{{ playbook_dir }}/dotfiles/{{ item }}/root"
recurse: true
file_type: file
hidden: true
excludes: "*.j2"
loop: "{{ group_names | default([]) }}"
delegate_to: localhost
register: dotfiles_group_root_files
run_once: true
ignore_errors: true
- name: Deploy common home dotfiles (remote)
ansible.builtin.copy:
src: "{{ item.path }}"
dest: "{{ ansible_facts['env']['HOME'] }}/{{ item.path | replace(playbook_dir + '/dotfiles/common/home/', '') }}"
mode: preserve
loop: "{{ dotfiles_common_home_files.files }}"
when: ansible_connection not in ['local', 'localhost']
- name: Deploy common root dotfiles (remote)
ansible.builtin.copy:
src: "{{ item.path }}"
dest: "/{{ item.path | replace(playbook_dir + '/dotfiles/common/root/', '') }}"
mode: preserve
loop: "{{ dotfiles_common_root_files.files }}"
when: ansible_connection not in ['local', 'localhost']
become: true
- name: Deploy group home dotfiles (remote)
ansible.builtin.copy:
src: "{{ item.1.path }}"
dest: "{{ ansible_facts['env']['HOME'] }}/{{ item.1.path | replace(playbook_dir + '/dotfiles/' + item.0.item + '/home/', '') }}"
mode: preserve
loop: "{{ dotfiles_group_home_files.results | subelements('files', skip_missing=True) }}"
when: ansible_connection not in ['local', 'localhost']
- name: Deploy group root dotfiles (remote)
ansible.builtin.copy:
src: "{{ item.1.path }}"
dest: "/{{ item.1.path | replace(playbook_dir + '/dotfiles/' + item.0.item + '/root/', '') }}"
mode: preserve
loop: "{{ dotfiles_group_root_files.results | subelements('files', skip_missing=True) }}"
when: ansible_connection not in ['local', 'localhost']
become: true
- name: Symlink common home dotfiles (local)
ansible.builtin.file:
src: "{{ item.path }}"
dest: "{{ ansible_facts['env']['HOME'] }}/{{ item.path | replace((playbook_dir + '/dotfiles/common/home/'), '') }}"
state: link
force: true
loop: "{{ dotfiles_common_home_files.files }}"
when: ansible_connection in ['local', 'localhost']
- name: Symlink common root dotfiles (local)
ansible.builtin.file:
src: "{{ item.path }}"
dest: "/{{ item.path | replace((playbook_dir + '/dotfiles/common/root/'), '') }}"
state: link
force: true
loop: "{{ dotfiles_common_root_files.files }}"
when: ansible_connection in ['local', 'localhost']
become: true
- name: Symlink group home dotfiles (local)
ansible.builtin.file:
src: "{{ item.1.path }}"
dest: "{{ ansible_facts['env']['HOME'] }}/{{ item.1.path | replace((playbook_dir + '/dotfiles/' + item.0.item + '/home/'), '') }}"
state: link
force: true
loop: "{{ dotfiles_group_home_files.results | subelements('files', skip_missing=True) }}"
when: ansible_connection in ['local', 'localhost']
- name: Symlink group root dotfiles (local)
ansible.builtin.file:
src: "{{ item.1.path }}"
dest: "/{{ item.1.path | replace((playbook_dir + '/dotfiles/' + item.0.item + '/root/'), '') }}"
state: link
force: true
loop: "{{ dotfiles_group_root_files.results | subelements('files', skip_missing=True) }}"
when: ansible_connection in ['local', 'localhost']
become: true
- name: Find template files in common home dotfiles
ansible.builtin.find:
paths: "{{ playbook_dir }}/dotfiles/common/home"
paths:
- "{{ playbook_dir }}/dotfiles/common/home"
- "{{ playbook_dir }}/dotfiles/{{ group_names[0] }}/home"
recurse: true
file_type: file
hidden: true
patterns: "*.j2"
delegate_to: localhost
register: dotfiles_common_home_templates
register: dotfiles_home_templates
run_once: true
ignore_errors: true
- name: Find template files in common root dotfiles
- name: Find root template files
ansible.builtin.find:
paths: "{{ playbook_dir }}/dotfiles/common/root"
paths:
- "{{ playbook_dir }}/dotfiles/common/root"
- "{{ playbook_dir }}/dotfiles/{{ group_names[0] }}/root"
recurse: true
file_type: file
hidden: true
patterns: "*.j2"
delegate_to: localhost
register: dotfiles_common_root_templates
register: dotfiles_root_templates
run_once: true
ignore_errors: true
- name: Find template files in group home dotfiles
ansible.builtin.find:
paths: "{{ playbook_dir }}/dotfiles/{{ item }}/home"
recurse: true
file_type: file
hidden: true
patterns: "*.j2"
loop: "{{ group_names | default([]) }}"
delegate_to: localhost
register: dotfiles_group_home_templates
run_once: true
ignore_errors: true
- name: Find template files in group root dotfiles
ansible.builtin.find:
paths: "{{ playbook_dir }}/dotfiles/{{ item }}/root"
recurse: true
file_type: file
hidden: true
patterns: "*.j2"
loop: "{{ group_names | default([]) }}"
delegate_to: localhost
register: dotfiles_group_root_templates
run_once: true
ignore_errors: true
- name: Template common home dotfiles
ansible.builtin.template:
- name: Symlink home dotfiles (local)
ansible.builtin.file:
src: "{{ item.path }}"
dest: "{{ ansible_facts['env']['HOME'] }}/{{ item.path | replace(playbook_dir + '/dotfiles/common/home/', '') | replace('.j2', '') }}"
mode: '0600'
loop: "{{ dotfiles_common_home_templates.files }}"
dest: "{{ ansible_facts['env']['HOME'] }}/{{ item.path | regex_replace('^.+/dotfiles/(?:common|' + group_names[0] + ')/home/', '') }}"
state: link
force: true
loop: "{{ dotfiles_home_files.files }}"
when: ansible_connection in ['local', 'localhost']
- name: Template common root dotfiles
ansible.builtin.template:
- name: Symlink root dotfiles (local)
ansible.builtin.file:
src: "{{ item.path }}"
dest: "/{{ item.path | replace(playbook_dir + '/dotfiles/common/root/', '') | replace('.j2', '') }}"
mode: '0600'
loop: "{{ dotfiles_common_root_templates.files }}"
dest: "/{{ item.path | regex_replace('^.+/dotfiles/(?:common|' + group_names[0] + ')/root/', '') }}"
state: link
force: true
loop: "{{ dotfiles_root_files.files }}"
when: ansible_connection in ['local', 'localhost']
become: true
- name: Template group home dotfiles
ansible.builtin.template:
src: "{{ item.1.path }}"
dest: "{{ ansible_facts['env']['HOME'] }}/{{ item.1.path | replace(playbook_dir + '/dotfiles/' + item.0.item + '/home/', '') | replace('.j2', '') }}"
mode: '0600'
loop: "{{ dotfiles_group_home_templates.results | subelements('files', skip_missing=True) }}"
- name: Deploy home dotfiles (remote)
ansible.builtin.copy:
src: "{{ item.path }}"
dest: "{{ ansible_facts['env']['HOME'] }}/{{ item.path | regex_replace('^.+/dotfiles/(?:common|' + group_names[0] + ')/home/', '') }}"
mode: preserve
loop: "{{ dotfiles_home_files.files }}"
when: ansible_connection not in ['local', 'localhost']
- name: Template group root dotfiles
ansible.builtin.template:
src: "{{ item.1.path }}"
dest: "/{{ item.1.path | replace(playbook_dir + '/dotfiles/' + item.0.item + '/root/', '') | replace('.j2', '') }}"
mode: '0600'
loop: "{{ dotfiles_group_root_templates.results | subelements('files', skip_missing=True) }}"
- name: Deploy root dotfiles (remote)
ansible.builtin.copy:
src: "{{ item.path }}"
dest: "/{{ item.path | regex_replace('^.+/dotfiles/(?:common|' + group_names[0] + ')/root/', '') }}"
mode: preserve
loop: "{{ dotfiles_root_files.files }}"
when: ansible_connection not in ['local', 'localhost']
become: true
- name: Template home dotfiles
ansible.builtin.template:
src: "{{ item.path }}"
dest: "{{ ansible_facts['env']['HOME'] }}/{{ item.path | regex_replace('^.+/dotfiles/(?:common|' + group_names[0] + ')/home/', '') | replace('.j2', '') }}"
mode: '0600'
loop: "{{ dotfiles_home_templates.files }}"
- name: Template root dotfiles
ansible.builtin.template:
src: "{{ item.path }}"
dest: "/{{ item.path | regex_replace('^.+/dotfiles/(?:common|' + group_names[0] + ')/root/', '') | replace('.j2', '') }}"
mode: '0600'
loop: "{{ dotfiles_root_templates.files }}"
become: true
- name: Deploy symlinks
ansible.builtin.file:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
state: link
force: true
loop: "{{ symlinks | default([]) }}"