ansible-install-server/roles/fai/tasks/fai-ipxe.yml

102 lines
3.0 KiB
YAML

- 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