---
- name: download debian-live images
  get_url:
    url: "{{ live_url }}{{ item.value }}"
    dest: "/var/cache/di-netboot-assistant/{{ item.value }}"
    checksum: "sha256:{{ live_url }}/SHA256SUMS"
  register: new_iso
  loop:
    "{{ live_iso | dict2items }}"

- name: umount old iso images
  mount:
    path: "/var/lib/tftpboot/d-i/n-live/{{ item.key }}"
    state: unmounted
  loop:
    "{{ live_iso | dict2items }}"
  when: new_iso.changed

- name: prepare live image directory
  file:
    path: "/var/lib/tftpboot/d-i/n-live/{{ item.key }}"
    state: directory
    mode: 0755
  loop:
    "{{ live_iso | dict2items }}"

- name: make sure loop module is loaded
  modprobe:
    name: loop
    state: present

- name: loop mount iso images
  mount:
    path: "/var/lib/tftpboot/d-i/n-live/{{ item.key }}"
    src: "/var/cache/di-netboot-assistant/{{ item.value }}"
    fstype: iso9660
    opts: loop,ro,nofail
    state: mounted
  loop:
    "{{ live_iso | dict2items }}"
  notify: rebuild di-netboot menu

- name: prepare http downloads
  file:
    src: "/var/lib/tftpboot/d-i/"
    dest: "/var/www/html/d-i"
    state: link

- name: export live image squashfs
  lineinfile:
    path: /etc/exports
    line: "/var/lib/tftpboot/d-i/n-live/ *(ro,crossmnt,no_subtree_check)"
  notify: export nfs

- name: configure ipxe boot menu address and headline
  replace:
    path: /etc/di-netboot-assistant/ipxemenu.HEAD
    regexp: "{{ item.reg }}"
    replace: "{{ item.rep }}"
  loop:
    - reg: '^set 210:string .+$'
      rep: 'set 210:string http://{{ ansible_default_ipv4.address }}/'
    - reg: '^#(item --gap -- -- Customized Boot Entries.*)$'
      rep: '\1'
  notify: rebuild di-netboot menu

- name: configure grub boot menu addresses
  lineinfile:
    path: /etc/di-netboot-assistant/grub.cfg.HEAD
    line: "{{ item.line }}"
    regexp: "{{ item.reg }}"
  loop:
    - line: "set root=(http,{{ ansible_default_ipv4.address }})"
      reg: "^set root="
    - line: "set pxe_default_server={{ ansible_default_ipv4.address }}"
      reg: "^set pxe_default_server="
  notify: rebuild di-netboot menu

- name: prepare debian live nfs boot entry title
  lineinfile:
    path: /etc/di-netboot-assistant/ipxemenu.HEAD
    insertafter: '-- Customized Boot Entries --'
    line: "item {{ item.key }} Debian GNU/Linux {{ item.key }} NFS"
  loop:
    "{{ live_iso | dict2items }}"
  notify: rebuild di-netboot menu

- name: find kernel version
  shell:
    cmd: >-
      basename /var/lib/tftpboot/d-i/n-live/{{ item.key }}/live/vmlinuz*
      | sed "s/vmlinuz-//"
  register: images
  changed_when: false
  loop:
    "{{ live_iso | dict2items }}"

- name: prepare debian live boot loader ipxe
  blockinfile:
    path: /etc/di-netboot-assistant/ipxemenu.HEAD
    marker: "# {mark} ANSIBLE MANAGED BLOCK {{ item.item.key }}"
    block: |
      :{{ item.item.key }}
          echo Booting Debian GNU/Linux {{ item.item.key }} NFS
          kernel ${210:string}d-i/n-live/{{ item.item.key }}/live/vmlinuz-{{ item.stdout }} \
          initrd=initrd.img-{{ item.stdout }} {{ boot_params|join(' ') }} \
          nfsroot={{ ansible_default_ipv4.address }}:/var/lib/tftpboot/d-i/n-live/{{ item.item.key }}/
          initrd ${210:string}d-i/n-live/{{ item.item.key }}/live/initrd.img-{{ item.stdout }}
          boot
  loop:
    "{{ images.results }}"
  notify: rebuild di-netboot menu

- name: prepare debian live boot loader grub
  blockinfile:
    path: /etc/di-netboot-assistant/grub.cfg.HEAD
    insertbefore: "^menuentry 'Boot from local disk..'"
    marker: "# {mark} ANSIBLE MANAGED BLOCK {{ item.item.key }}"
    block: |
      menuentry 'Debian GNU/Linux Live {{ item.item.key }} NFS' {
          linux (http,{{ ansible_default_ipv4.address }})/d-i/n-live/{{ item.item.key }}/live/vmlinuz-{{ item.stdout }} \
          {{ boot_params|join(' ') }} \
          nfsroot={{ ansible_default_ipv4.address }}:/var/lib/tftpboot/d-i/n-live/{{ item.item.key }}/
          initrd (http,{{ ansible_default_ipv4.address }})/d-i/n-live/{{ item.item.key }}/live/initrd.img-{{ item.stdout }}
      }
  loop:
    "{{ images.results }}"
  notify: rebuild di-netboot menu