--- - name: Create temporary build directory tempfile: state: directory register: tmpdir - name: set variables needed to build images set_fact: openwrt_imgbuilder_dir: "{{ tmpdir.path }}" openwrt_imgbuilder_files: "{{ tmpdir.path }}/files" - name: Create the directories for mixins loop: "{{ mixin_directories | flatten }}" vars: mixin_directories: - "{{ openwrt_download_dir }}/dl/{{ openwrt_arch }}" - "{{ openwrt_imgbuilder_files }}/etc/config" - "{{ openwrt_mixin | map('dirname') | map('regex_replace', '^', openwrt_imgbuilder_files) | unique | list }}" file: path: "{{ item }}" state: directory mode: '0755' - name: Copy mixins in place [1/3] loop: "{{ openwrt_mixin | dict2items | selectattr('value.link', 'defined') | list }}" loop_control: label: "{{ item.key }}" file: dest: "{{ openwrt_imgbuilder_files }}/{{ item.key }}" src: "{{ item.value.link }}" force: yes follow: no state: link - name: Copy mixins in place [2/3] loop: "{{ openwrt_mixin | dict2items | selectattr('value.file', 'defined') | list }}" loop_control: label: "{{ item.key }}" copy: src: "{{ item.value.file }}" dest: "{{ openwrt_imgbuilder_files }}/{{ item.key }}" mode: "{{ item.value.mode | default('0644') }}" - name: Copy mixins in place [3/3] loop: "{{ openwrt_mixin | dict2items | selectattr('value.content', 'defined') | list }}" loop_control: label: "{{ item.key }}" copy: content: "{{ item.value.content }}" dest: "{{ openwrt_imgbuilder_files }}/{{ item.key }}" mode: "{{ item.value.mode | default('0644') }}" - name: Generate /etc/fstab when: openwrt_mounts is defined loop: "{{ openwrt_mounts }}" loop_control: label: "{{ item.path }}" mount: fstab: "{{ openwrt_imgbuilder_files }}/etc/fstab" state: present src: "{{ item.src | default(omit) }}" path: "{{ item.path | default(omit) }}" fstype: "{{ item.fstype | default(omit) }}" opts: "{{ item.opts | default(omit) }}" boot: "{{ item.boot | default(omit) }}" dump: "{{ item.dump | default(omit) }}" passno: "{{ item.passno | default(omit) }}" - name: Create UCI configuration files loop: "{{ openwrt_uci | dict2items }}" loop_control: label: "{{ item.key }}" template: src: uci.j2 dest: "{{ openwrt_imgbuilder_files }}/etc/config/{{ item.key }}" mode: 0644 trim_blocks: yes # force: no ## TODO: fail when overwriting a file - name: Create /etc/passwd when: openwrt_users is defined template: src: passwd.j2 dest: "{{ openwrt_imgbuilder_files }}/etc/passwd" mode: 0644 trim_blocks: yes - name: Create /etc/group when: openwrt_groups is defined or openwrt_users is defined template: src: group.j2 dest: "{{ openwrt_imgbuilder_files }}/etc/group" mode: 0644 trim_blocks: yes - name: extract image builder tarball environment: ### TODO: remove once this lands in ansible: https://github.com/ansible/ansible/pull/76542 LANGUAGE: en_US.utf8 unarchive: src: "{{ openwrt_download_dir }}/{{ openwrt_tarball_name }}" remote_src: yes dest: "{{ openwrt_imgbuilder_dir }}" - name: Symlink the cache repository file: state: link src: "{{ openwrt_download_dir }}/dl/{{ openwrt_arch }}" path: "{{ openwrt_imgbuilder_dir }}/{{ openwrt_tarball_basename }}/dl"