Replace pxelinux with iPXE support in MNAIO

Adds support for iPXE scripting.  Allows for the
operator to specify a remote iPXE kernel to pull in
newer iPXE kernel features and specify a remote
default iPXE script for customizing the multi node
for other types of deployments.

Switches the installations to use netboot installer kernels
instead of ISO retrival and extraction.

Restructures directory to allow for future multi node configs
instead of just debian based installs.

Change-Id: Ie97f021dbd33ad3d852132b0b2850f54d4e13476
This commit is contained in:
Antony Messerli 2018-01-30 11:03:16 -06:00
parent cb77f7e3d2
commit f00c6bf215
24 changed files with 167 additions and 246 deletions

View File

@ -170,6 +170,12 @@ Instruct the system to use a set amount of ram for the logging VM type:
Instruct the system to use a set amount of ram for the swift VM type:
``SWIFT_VM_SERVER_RAM=${SWIFT_VM_SERVER_RAM:-1024}``
Instruct the system to use a customized iPXE kernel:
``IPXE_KERNEL_URL=${IPXE_KERNEL_URL:-'http://boot.ipxe.org/ipxe.lkrn'}``
Instruct the system to use a customized iPXE script during boot of VMs:
``IPXE_PATH_URL=${IPXE_PATH_URL:-''}``
Re-kicking VM(s)
----------------

View File

@ -43,12 +43,14 @@ ansible-playbook -vv \
-e default_ubuntu_kernel=${DEFAULT_KERNEL:-"linux-image-generic"} \
-e default_ubuntu_mirror_hostname=${DEFAULT_MIRROR_HOSTNAME:-"archive.ubuntu.com"} \
-e default_ubuntu_mirror_directory=${DEFAULT_MIRROR_DIR:-"/ubuntu"} \
-e cinder_vm_server_ram=${CINDER_VM_SERVER_RAM-"2048"} \
-e compute_vm_server_ram=${COMPUTE_VM_SERVER_RAM-"8196"} \
-e infra_vm_server_ram=${INFRA_VM_SERVER_RAM-"8196"} \
-e loadbalancer_vm_server_ram=${LOADBALANCER_VM_SERVER_RAM-"1024"} \
-e logging_vm_server_ram=${LOGGING_VM_SERVER_RAM-"1024"} \
-e swift_vm_server_ram=${SWIFT_VM_SERVER_RAM-"1024"} \
-e container_tech=${CONTAINER_TECH-"lxc"}\
-e cinder_vm_server_ram=${CINDER_VM_SERVER_RAM:-"2048"} \
-e compute_vm_server_ram=${COMPUTE_VM_SERVER_RAM:-"8196"} \
-e infra_vm_server_ram=${INFRA_VM_SERVER_RAM:-"8196"} \
-e loadbalancer_vm_server_ram=${LOADBALANCER_VM_SERVER_RAM:-"1024"} \
-e logging_vm_server_ram=${LOGGING_VM_SERVER_RAM:-"1024"} \
-e swift_vm_server_ram=${SWIFT_VM_SERVER_RAM:-"1024"} \
-e container_tech=${CONTAINER_TECH-"lxc"} \
-e ipxe_kernel_url=${IPXE_KERNEL_URL:-"http://boot.ipxe.org/ipxe.lkrn"} \
-e ipxe_path_url=${IPXE_PATH_URL:-""} \
--force-handlers \
playbooks/site.yml

View File

@ -45,15 +45,13 @@
mode: "0755"
with_items:
- /var/www/pxe
- /var/www/pxe/configs
- /var/www/pxe/images
- /var/www/pxe/iso
- /var/www/pxe/networking
- /var/www/pxe/scripts
- /var/www/pxe/templates
- /var/lib/tftpboot
- /var/lib/tftpboot/boot-screens
- /var/lib/tftpboot/preseed
- /var/lib/tftpboot/pxelinux.cfg
- /var/lib/tftpboot/ipxe
- name: Get root public key
command: cat /root/.ssh/id_rsa.pub
@ -89,82 +87,23 @@
notify:
- restart tftp-hpa
- name: Download image iso(s)
- name: Download iPXE
get_url:
url: "{{ item.value.image_iso_url }}"
dest: "/var/www/pxe/iso/{{ item.value.image_name }}"
with_dict: "{{ images }}"
- name: Remove image directory if it exists
file:
path: "/var/www/pxe/images/{{ item.value.image_short_name }}"
state: absent
with_dict: "{{ images }}"
- name: Create image directory if it exists
file:
path: "/var/www/pxe/images/{{ item.value.image_short_name }}"
state: directory
owner: "root"
group: "root"
mode: "0755"
with_dict: "{{ images }}"
- name: Extract ISO(s) contents
command: "7z x /var/www/pxe/iso/{{ item.value.image_name }}"
args:
chdir: "/var/www/pxe/images/{{ item.value.image_short_name }}"
with_dict: "{{ images }}"
- name: Download pxelinux
get_url:
url: "{{ pxelinux_url }}"
dest: "/var/www/pxe/{{ pxelinux_name }}"
url: "{{ ipxe_kernel_url }}"
dest: "/var/lib/tftpboot/ipxe.lkrn"
tmp_dest: /tmp/
- name: Remove image directory if it exists
file:
path: "/var/www/pxe/{{ pxelinux_short_name }}"
state: absent
- name: Extract pxelinux contents
command: "tar -xf /var/www/pxe/{{ pxelinux_name }}"
args:
chdir: "/var/www/pxe"
- name: Drop pxelinux.cfg default menu
copy:
src: "pxe/tftp/pxelinux.cfg.default"
dest: "{{ item }}"
mode: "0644"
owner: root
group: root
with_items:
- /var/lib/tftpboot/pxelinux.cfg/default
- /var/lib/tftpboot/boot-screens/syslinux.cfg
# These links are using the shell command because the file module does not create hard links
- name: Create hard links
shell: |
ln -f /var/www/pxe/{{ pxelinux_short_name }}/bios/com32/elflink/ldlinux/ldlinux.c32 /var/lib/tftpboot/ldlinux.c32
ln -f /var/www/pxe/{{ pxelinux_short_name }}/bios/core/pxelinux.0 /var/lib/tftpboot/pxelinux.0
ln -f /var/www/pxe/{{ pxelinux_short_name }}/bios/com32/lib/libcom32.c32 /var/lib/tftpboot/boot-screens/libcom32.c32
ln -f /var/www/pxe/{{ pxelinux_short_name }}/bios/com32/libutil/libutil.c32 /var/lib/tftpboot/boot-screens/libutil.c32
ln -f /var/www/pxe/{{ pxelinux_short_name }}/bios/com32/menu/vesamenu.c32 /var/lib/tftpboot/boot-screens/vesamenu.c32
- name: Drop boot-screens default menu
- name: Drop ipxe default menu
template:
src: "pxe/tftp/menu.cfg.j2"
dest: /var/lib/tftpboot/boot-screens/menu.cfg
src: "pxe/tftp/boot.ipxe.j2"
dest: "/var/lib/tftpboot/boot.ipxe"
mode: "0644"
owner: root
group: root
tags:
- boot-menu
- name: network scripts for pxe
template:
src: "pxe/{{ ansible_os_family | lower }}/{{ item.src }}"
src: "pxe/configs/{{ ansible_os_family | lower }}/{{ item.src }}"
dest: /var/www/pxe/{{ item.dir }}/{{ item.dest }}
mode: "0644"
owner: root
@ -182,7 +121,7 @@
- name: network scripts for an MNAIO
template:
src: "pxe/{{ ansible_os_family | lower }}/{{ item.src }}"
src: "pxe/configs/{{ ansible_os_family | lower }}/{{ item.src }}"
dest: /var/www/pxe/{{ item.dir }}/{{ item.dest }}
mode: "0644"
owner: root
@ -199,7 +138,7 @@
- name: network scripts for servers
template:
src: "pxe/{{ ansible_os_family | lower }}/vm-bridges.cfg.j2"
src: "pxe/configs/{{ ansible_os_family | lower }}/vm-bridges.cfg.j2"
dest: /var/www/pxe/networking/{{ hostvars[item]['server_hostname'] }}-bridges.cfg
mode: "0644"
owner: root
@ -208,8 +147,8 @@
- name: tftp configs for servers
template:
src: "pxe/tftp/pxelinux.cfg.macaddr.j2"
dest: "/var/lib/tftpboot/pxelinux.cfg/01-{{ hostvars[item]['server_mac_address'] | replace(':', '-') | lower }}"
src: "pxe/tftp/boot.ipxe.macaddr.j2"
dest: "/var/lib/tftpboot/ipxe/{{ hostvars[item]['server_mac_address'] | replace(':', '-') | lower }}"
mode: "0644"
owner: root
group: root
@ -217,8 +156,8 @@
- name: Preseeds for pxe mnaio
template:
src: "pxe/{{ ansible_os_family | lower }}/mnaio.preseed.j2"
dest: /var/lib/tftpboot/preseed/mnaio.preseed
src: "pxe/configs/{{ ansible_os_family | lower }}/mnaio.config.j2"
dest: /var/www/pxe/configs/mnaio.config
mode: "0644"
owner: root
group: root
@ -226,8 +165,8 @@
- name: Preseeds for pxe vm
template:
src: "pxe/{{ ansible_os_family | lower }}/vm.preseed.j2"
dest: /var/lib/tftpboot/preseed/vm.preseed
src: "pxe/configs/{{ ansible_os_family | lower }}/vm.config.j2"
dest: /var/www/pxe/configs/vm.config
mode: "0644"
owner: root
group: root
@ -235,8 +174,8 @@
- name: Preseeds for pxe vm-compute
template:
src: "pxe/{{ ansible_os_family | lower }}/vm-compute.preseed.j2"
dest: /var/lib/tftpboot/preseed/vm-compute.preseed
src: "pxe/configs/{{ ansible_os_family | lower }}/vm-compute.config.j2"
dest: /var/www/pxe/configs/vm-compute.config
mode: "0644"
owner: root
group: root
@ -244,8 +183,8 @@
- name: Preseeds for pxe compute
template:
src: "pxe/{{ ansible_os_family | lower }}/compute.preseed.j2"
dest: /var/lib/tftpboot/preseed/compute.preseed
src: "pxe/configs/{{ ansible_os_family | lower }}/compute.config.j2"
dest: /var/www/pxe/configs/compute.config
mode: "0644"
owner: root
group: root
@ -253,32 +192,13 @@
- name: Preseeds for pxe infra
template:
src: "pxe/{{ ansible_os_family | lower }}/infra.preseed.j2"
dest: /var/lib/tftpboot/preseed/infra.preseed
src: "pxe/configs/{{ ansible_os_family | lower }}/infra.config.j2"
dest: /var/www/pxe/configs/infra.config
mode: "0644"
owner: root
group: root
with_dict: "{{ images }}"
- name: Create netboot bind mount path
file:
path: "/var/lib/tftpboot/{{ item.value.image_short_name }}"
state: directory
owner: "root"
group: "root"
mode: "0755"
with_dict: "{{ images }}"
- name: Unbind mount netboot images
mount:
name: "/var/lib/tftpboot/{{ item.value.image_short_name }}"
src: "/var/www/pxe/images/{{ item.value.image_netboot }}"
opts: bind
fstype: none
state: unmounted
register: fstab
with_dict: "{{ images }}"
- name: Ensure permissions are correct
shell: |
# Fix perms if needed
@ -286,16 +206,6 @@
find /var/lib/tftpboot -type f -exec chmod 0644 {} \;
find /var/www/pxe -type d -exec chmod 0755 {} \;
- name: Bind mount netboot images
mount:
name: "/var/lib/tftpboot/{{ item.value.image_short_name }}"
src: "/var/www/pxe/images/{{ item.value.image_netboot }}"
opts: bind
fstype: none
state: mounted
register: fstab
with_dict: "{{ images }}"
environment: "{{ deployment_environment_variables | default({}) }}"
handlers:

View File

@ -12,26 +12,30 @@ shared-network all-networks {
option routers {{ dhcp.gateway }};
option domain-name-servers {{ dhcp.dns }};
option subnet-mask {{ dhcp.netmask }};
{% if dhcp.default_lease_time is defined and dhcp.default_lease_time > 0 %}
{% if dhcp.default_lease_time is defined and dhcp.default_lease_time > 0 %}
default-lease-time {{ dhcp.default_lease_time }};
{% else %}
{% else %}
default-lease-time {{ dhcp_default_lease_time }};
{% endif %}
{% if dhcp.max_lease_time is defined and dhcp.max_lease_time > 0 %}
{% endif %}
{% if dhcp.max_lease_time is defined and dhcp.max_lease_time > 0 %}
max-lease-time {{ dhcp.max_lease_time }};
{% else %}
{% else %}
max-lease-time {{ dhcp_max_lease_time }};
{% endif %}
{% if dhcp.tftp_server is defined and dhcp.tftp_server|ipaddr %}
{% endif %}
{% if dhcp.tftp_server is defined and dhcp.tftp_server|ipaddr %}
next-server {{ dhcp.tftp_server }};
{% elif tftp_server is defined and tftp_server|length > 0 %}
{% elif tftp_server is defined and tftp_server|length > 0 %}
next-server {{ tftp_server }};
{% endif %}
{% if dhcp.tftp_boot_path is defined and dhcp.tftp_boot_path|ipaddr %}
filename "{{ dhcp.tftp_boot_path }}";
{% elif tftp_boot_path is defined and tftp_boot_path|length > 0 %}
filename "{{ tftp_boot_path }}";
{% endif %}
{% endif %}
if exists user-class and ( option user-class = "iPXE" ) {
{% if dhcp.ipxe_boot_file is defined and dhcp.ipxe_boot_file|ipaddr %}
filename "{{ dhcp.ipxe_boot_file }}";
{% elif ipxe_boot_file is defined and ipxe_boot_file|length > 0 %}
filename "{{ ipxe_boot_file }}";
{% endif %}
} else {
filename "ipxe.lkrn";
}
}
{% endfor %}

View File

@ -24,6 +24,8 @@ default_ubuntu_mirror_proxy: 'http://10.0.2.1:3142/'
default_ubuntu_mirror_hostname: archive.ubuntu.com
default_ubuntu_mirror_directory: /ubuntu
ipxe_kernel_url: "{{ ipxe_kernel_url | default('http://boot.ipxe.org/ipxe.lkrn') }}"
# IP address, or domain name of the TFTP server
tftp_server: "{{ hostvars[groups['pxe_hosts'][0]]['ansible_host'] | default(ansible_host) }}"
# tftp_ssh_key: '' # user defined ssh key, used to access the host
@ -32,57 +34,51 @@ tftp_port: 69
# Default ISO images
images:
ubuntu-16.04-amd64:
image_type: debian
image_iso_url: "http://releases.ubuntu.com/16.04.2/ubuntu-16.04.2-server-amd64.iso"
image_name: "ubuntu-16.04.2-server-amd64.iso"
image_short_name: "ubuntu-16.04.2-server-amd64"
image_default_boot: "ubuntu-16.04.2-server-amd64/amd64/boot-screens/menu.cfg"
image_type: "debian"
image_os: "ubuntu"
image-version: "xenial"
image_kernel_options: "biosdevname=0 net.ifnames=0 auto=true priority=critical"
image_kernel: "ubuntu-16.04.2-server-amd64/amd64/linux"
image_initrd: "ubuntu-16.04.2-server-amd64/amd64/initrd.gz"
image_netboot: "ubuntu-16.04.2-server-amd64/install/netboot/ubuntu-installer"
image_preseeds:
image_netboot_kernel_url: "http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux"
image_netboot_initrd_url: "http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz"
image_configs:
mnaio:
url: "tftp://{{ tftp_server }}/preseed/mnaio.preseed"
template_name: "mnaio.preseed"
url: "http://{{ tftp_server }}/configs/mnaio.config"
template_name: "mnaio.config"
vm:
url: "tftp://{{ tftp_server }}/preseed/vm.preseed"
template_name: "vm.preseed"
url: "http://{{ tftp_server }}/configs/vm.config"
template_name: "vm.config"
vm-compute:
url: "tftp://{{ tftp_server }}/preseed/vm-compute.preseed"
template_name: "vm-compute.preseed"
url: "http://{{ tftp_server }}/configs/vm-compute.config"
template_name: "vm-compute.config"
compute:
url: "tftp://{{ tftp_server }}/preseed/compute.preseed"
template_name: "compute.preseed"
url: "http://{{ tftp_server }}/configs/compute.config"
template_name: "compute.config"
infra:
url: "tftp://{{ tftp_server }}/preseed/infra.preseed"
template_name: "infra.preseed"
url: "http://{{ tftp_server }}/configs/infra.config"
template_name: "infra.config"
ubuntu-14.04-amd64:
image_type: debian
image_iso_url: "http://releases.ubuntu.com/14.04.5/ubuntu-14.04.5-server-amd64.iso"
image_name: "ubuntu-14.04.5-server-amd64.iso"
image_short_name: "ubuntu-14.04.5-server-amd64"
image_default_boot: "ubuntu-14.04.5-server-amd64/amd64/boot-screens/menu.cfg"
image_type: "debian"
image_os: "ubuntu"
image_version: "trusty"
image_kernel_options: "biosdevname=0 net.ifnames=0 auto=true priority=critical quiet splash"
image_kernel: "ubuntu-14.04.5-server-amd64/amd64/linux"
image_initrd: "ubuntu-14.04.5-server-amd64/amd64/initrd.gz"
image_netboot: "ubuntu-14.04.5-server-amd64/install/netboot/ubuntu-installer"
image_preseeds:
image_netboot_kernel_url: "http://archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux"
image_netboot_initrd_url: "http://archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz"
image_configs:
mnaio:
url: "tftp://{{ tftp_server }}/preseed/mnaio.preseed"
template_name: "mnaio.preseed"
url: "http://{{ tftp_server }}/configs/mnaio.config"
template_name: "mnaio.config"
vm:
url: "tftp://{{ tftp_server }}/preseed/vm.preseed"
template_name: "vm.preseed"
url: "http://{{ tftp_server }}/configs/vm.config"
template_name: "vm.config"
vm-compute:
url: "tftp://{{ tftp_server }}/preseed/vm-compute.preseed"
template_name: "vm-compute.preseed"
url: "http://{{ tftp_server }}/configs/vm-compute.config"
template_name: "vm-compute.config"
compute:
url: "tftp://{{ tftp_server }}/preseed/compute.preseed"
template_name: "compute.preseed"
url: "http://{{ tftp_server }}/configs/compute.config"
template_name: "compute.config"
infra:
url: "tftp://{{ tftp_server }}/preseed/infra.preseed"
template_name: "infra.preseed"
url: "http://{{ tftp_server }}/configs/infra.config"
template_name: "infra.config"
# mnaio_data_disk: 'sdc' # str - not required, set this to define a given data disk if no data disk
# is defined the largest unpartitioned disk will be used.
mnaio_host_networks:

View File

@ -11,10 +11,9 @@
# See the License for the specific language governing permissions and
# limitations under the License.
dhcp_default_lease_time: 21600 # Default lease time
dhcp_max_lease_time: 43200 # Max lease time
tftp_boot_path: /pxelinux.0 # Path of where to boot from first
dhcp_default_lease_time: 21600 # Default lease time
dhcp_max_lease_time: 43200 # Max lease time
ipxe_boot_file: "boot.ipxe" # Path of initial iPXE bootloader
# - List of DHCP Subnets - These are iterated though and each will be created
dhcp_list:
- netmask: 255.255.255.0 # Netmask
@ -23,6 +22,6 @@ dhcp_list:
subnet: 10.0.2.0 # Subnet mask
default_lease_time: 21600 # Subnet Default lease time - The default is used if this is not defined
max_lease_time: 43200 # Subnet Max lease time - The default is used if this is not defined
tftp_boot_path: /pxelinux.0 # Path for tftp of where to boot from first - The default is used if this is not defined
ipxe_boot_file: "boot.ipxe" # Path of initial iPXE bootloader to boot from first
tftp_server: "{{ tftp_server }}" # The server hosting the TFTP server - The default is used if this is not defined
dhcp_default_domain_name: openstackci.local

View File

@ -11,6 +11,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
pxelinux_url: "https://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.tar.gz"
pxelinux_name: "syslinux-6.03.tar.gz"
pxelinux_short_name: "syslinux-6.03"
ipxe_ubuntu_version: "1.0.0+git-20150424.a25a16d-1ubuntu1.2"

View File

@ -34,11 +34,6 @@ d-i netcfg/wireless_wep string
d-i preseed/early_command string \
umount /media || true
# Net Image
# Required at least for 12.10+
d-i live-installer/net-image string {{ tftp_server }}/images/{{ item.value.image_short_name }}/install/filesystem.squashfs
# The kernel image (meta) package to be installed; "none" can be used if no
# kernel is to be installed.
d-i base-installer/kernel/image string {{ default_ubuntu_kernel }}

View File

@ -34,11 +34,6 @@ d-i netcfg/wireless_wep string
d-i preseed/early_command string \
umount /media || true
# Net Image
# Required at least for 12.10+
d-i live-installer/net-image string {{ tftp_server }}/images/{{ item.value.image_short_name }}/install/filesystem.squashfs
# The kernel image (meta) package to be installed; "none" can be used if no
# kernel is to be installed.
d-i base-installer/kernel/image string {{ default_ubuntu_kernel }}

View File

@ -34,11 +34,6 @@ d-i netcfg/wireless_wep string
d-i preseed/early_command string \
umount /media || true
# Net Image
# Required at least for 12.10+
d-i live-installer/net-image string {{ tftp_server }}/images/{{ item.value.image_short_name }}/install/filesystem.squashfs
# The kernel image (meta) package to be installed; "none" can be used if no
# kernel is to be installed.
d-i base-installer/kernel/image string {{ default_ubuntu_kernel }}

View File

@ -34,11 +34,6 @@ d-i netcfg/wireless_wep string
d-i preseed/early_command string \
umount /media || true
# Net Image
# Required at least for 12.10+
d-i live-installer/net-image string {{ tftp_server }}/images/{{ item.value.image_short_name }}/install/filesystem.squashfs
# The kernel image (meta) package to be installed; "none" can be used if no
# kernel is to be installed.
d-i base-installer/kernel/image string {{ default_ubuntu_kernel }}

View File

@ -34,11 +34,6 @@ d-i netcfg/wireless_wep string
d-i preseed/early_command string \
umount /media || true
# Net Image
# Required at least for 12.10+
d-i live-installer/net-image string {{ tftp_server }}/images/{{ item.value.image_short_name }}/install/filesystem.squashfs
# The kernel image (meta) package to be installed; "none" can be used if no
# kernel is to be installed.
d-i base-installer/kernel/image string {{ default_ubuntu_kernel }}

View File

@ -0,0 +1,61 @@
#!ipxe
set esc:hex 1b
set bold ${esc:string}[1m
set boldoff ${esc:string}[22m
set space:hex 20:20
set space ${space:string}
set timeout 10
{% if ipxe_kernel_url is defined and ipxe_kernel_url|length > 0%}
iseq ${version} {{ ipxe_ubuntu_version }} && chain --autofree {{ ipxe_kernel_url }} ||
{% else %}
iseq ${version} {{ ipxe_ubuntu_version }} && chain --autofree ipxe.lkrn ||
{% endif %}
{% if ipxe_path_url is defined and ipxe_path_url| length > 0%}
echo Loading iPXE path defined in ipxe_path_url...
chain --autofree {{ ipxe_path_url }}
{% endif %}
:start
echo ${bold}Multi Node AIO Install${boldoff} starting...
prompt --key m --timeout 4000 Hit the ${bold}m${boldoff} key to load default menu... && goto menu || goto boot_mac
:boot_mac
chain --autofree ipxe/${net0/mac:hexhyp} ||
goto menu
:menu
clear choice
menu Multi Node AIO Installation Menu
item --gap Default:
item local ${space} Boot from local hdd
item --gap Automated Installs
{% for key, value in images.items() %}
{% for _key, _value in value.image_configs.items() %}
item {{ key }}-{{ _key }} ${space} {{ key }}-{{ _key }}
{% endfor %}
{% endfor %}
item --gap Tools
item shell ${space} iPXE shell
isset ${choice} && set timeout 0 || set timeout 300000
choose --timeout ${timeout} --default local choice && goto ${choice} || goto local
{% for key, value in images.items() %}
{% for _key, _value in value.image_configs.items() %}
:{{ key }}-{{ _key }}
kernel {{ value.image_netboot_kernel_url }}
initrd {{ value.image_netboot_initrd_url }}
{% if value.image_type == 'debian' %}
imgargs linux {{ value.image_kernel_options }} initrd=initrd.gz preseed/url={{ _value.url }} preseed/interactive=false netcfg/choose_interface={{ default_interface }}
{% endif %}
boot
{% endfor %}
{% endfor %}
:local
echo Booting from local disks ...
exit 0
:shell
echo Type "exit" to return to menu.
shell
goto menu

View File

@ -0,0 +1,10 @@
{% set server_vars = hostvars[item] %}
{% set image_properties = images[server_vars['server_image']] %}
#!ipxe
kernel {{ image_properties['image_netboot_kernel_url'] }}
initrd {{ image_properties['image_netboot_initrd_url'] }}
{% if image_properties['image_type'] == 'debian' %}
imgargs linux hostname={{ server_vars['server_hostname'] }} {{ image_properties['image_kernel_options'] }} preseed/url={{ image_properties['image_configs'][server_vars['server_preseed_ks']]['url'] }} preseed/interactive=false netcfg/choose_interface={{ server_vars['server_default_interface'] }} netcfg/get_domain={{ server_vars['server_domain_name'] }} initrd=initrd.gz {{ server_vars['server_extra_options'] | default('') }}
{% endif %}
boot

View File

@ -1,24 +0,0 @@
menu hshift 13
menu width 49
menu margin 8
menu tabmsg
menu title Boot Menu
label local
menu label ^Boot local hard drive
LOCALBOOT 0
{% for key, value in images.items() %}
{% for _key, _value in value.image_preseeds.items() %}
label {{ key }}-{{ _key }}
menu label ^{{ key }}-{{ _key }} automated install
kernel {{ value.image_kernel }}
{% if value.image_type == 'debian' %}
append {{ value.image_kernel_options }} initrd={{ value.image_initrd }} preseed/url={{ _value.url }} preseed/interactive=false netcfg/choose_interface={{ default_interface }}
{% endif %}
{% endfor %}
{% endfor %}
menu end

View File

@ -1,5 +0,0 @@
path boot-screens
include boot-screens/menu.cfg
default boot-screens/vesamenu.c32
prompt 0
timeout 100

View File

@ -1,11 +0,0 @@
{% set server_vars = hostvars[item] %}
{% set image_properties = images[server_vars['server_image']] %}
default linux
prompt 0
timeout 1
label linux
kernel {{ image_properties['image_kernel'] }}
{% if image_properties['image_type'] == 'debian' %}
append hostname={{ server_vars['server_hostname'] }} {{ image_properties['image_kernel_options'] }} initrd={{ image_properties['image_initrd'] }} preseed/url={{ image_properties['image_preseeds'][server_vars['server_preseed_ks']]['url'] }} preseed/interactive=false netcfg/choose_interface={{ server_vars['server_default_interface'] }} netcfg/get_domain={{ server_vars['server_domain_name'] }} {{ server_vars['server_extra_options'] | default('') }}
{% endif %}

View File

@ -129,7 +129,7 @@
- name: Drop host network interfaces
template:
src: "pxe/{{ ansible_os_family | lower }}/mnaio-bridges.cfg.j2"
src: "pxe/configs/{{ ansible_os_family | lower }}/mnaio-bridges.cfg.j2"
dest: /etc/network/interfaces.d/mnaio-bridges.cfg
mode: "0644"
owner: root