- package: name: ipxe state: present - name: copy ipxe copy: src: "{{ item }}" dest: /srv/tftp/fai remote_src: yes with_items: - /usr/lib/ipxe/ipxe.efi - /usr/lib/ipxe/ipxe.pxe - /usr/lib/ipxe/ipxe.lkrn - name: write ipxe menu copy: content: | #!ipxe set boot-root {{ http_mirror_ipxe_root_url }} set menu-default __exit set menu-timeout 5000 set submenu-timeout ${menu-timeout} isset ${menu-default} || set menu-default __exit # Figure out if client is 64-bit capable cpuid --ext 29 && set arch x64 || set arch x86 cpuid --ext 29 && set archl amd64 || set archl i386 :start menu iPXE boot menu item --key x __exit Exit iPXE and continue local boot item --gap -- item --key f __fai FAI Installer {% for k, v in ipxe_additional_entries.items() %} item {% if 'key' in v %}--key v.key {% endif %}{{ k }} {% if 'name' in v %}{{ v.name }}{% else %}{{ k }}{% endif %} {% endfor %} item --gap -- item __reload_after_fail Reload iPXE item --gap -- item --key c __config Configure settings item __shell Drop to iPXE shell item __reboot Reboot computer choose --timeout ${menu-timeout} --default ${menu-default} selected || goto cancel set menu-timeout 0 goto ${selected} :__cancel echo You cancelled the menu, dropping you to a shell :__shell echo Type 'exit' to get the back to the menu shell set menu-timeout 0 set submenu-timeout 0 goto start :__failed echo Booting failed, dropping to shell goto __shell :__config config goto start :__reload_after_fail echo Reloading iPXE sleep 3 chain --replace --autofree menu.ipxe || goto failed :__reboot reboot :__exit exit :__fai kernel ${boot-root}/{{ fai_live_vmlinuz }} root=live:{{ http_mirror_fai_squashfs_url }} FAI_FLAGS=verbose,sshd,createv,menu FAI_CONFIG_SRC={{ http_mirror_fai_profiles_url }} FAI_ACTION=install net.ifnames=0 ip=dhcp || goto __reload_after_fail initrd ${boot-root}/{{ fai_live_initrd }} || goto __reload_after_fail boot || goto __reload_after_fail goto start {% for k, v in ipxe_additional_entries.items() %}{% if 'kernel' %} :{{ k }} kernel ${boot-root}/{{ k }}/{{ v.kernel }} {% if 'args' in v %}{{ v['args'] }}{% endif %} || goto __reload_after_fail {% if 'initrd' in v %}{% for initrd in v.initrd %} initrd ${boot-root}/{{ k }}/{{ initrd }} || goto __reload_after_fail {% endfor %}{% endif %} {% if 'module' in v %}{% for module in v.multiboot %} module ${boot-root}/{{ k }}/{{ module }} || goto __reload_after_fail {% endfor %}{% endif %} boot || goto __reload_after_fail goto start{% endif %} {% endfor %} dest: /srv/tftp/fai/menu.ipxe mode: 0644 owner: root group: root