Skip to content

Commit 4c771e7

Browse files
committed
Initial Ironic config for multiarch baremetal
1 parent f15e519 commit 4c771e7

File tree

4 files changed

+125
-0
lines changed

4 files changed

+125
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
---
2+
- name: Configure Ironic for multiarch
3+
any_errors_fatal: True
4+
gather_facts: True
5+
hosts: controllers
6+
vars:
7+
ironic_volume_location: /var/lib/docker/volumes/ironic/_data
8+
stackhpc_ipa_image_version_aarch64: "2024.1-20250407T193151"
9+
stackhpc_ipa_image_url_aarch64: >-
10+
{{ stackhpc_release_pulp_content_url }}/ipa-images/\
11+
{{ openstack_release }}/{{ os_distribution }}/\
12+
{{ os_release }}-aarch64/{{ stackhpc_ipa_image_version_aarch64 }}
13+
ironic_aarch64_kernel_filename: ipa-aarch64.kernel
14+
ironic_aarch64_initramfs_filename: ipa-aarch64.initramfs
15+
16+
tasks:
17+
- name: Download aarch64 deployment kernel
18+
ansible.builtin.get_url:
19+
url: "{{ stackhpc_ipa_image_url_aarch64 }}/{{ ironic_aarch64_kernel_filename }}"
20+
dest: "{{ ironic_volume_location }}/httpboot/ironic-agent-aarch64.kernel"
21+
force_basic_auth: true
22+
username: "{{ stackhpc_release_pulp_username }}"
23+
password: "{{ stackhpc_release_pulp_password }}"
24+
unredirected_headers:
25+
- "Authorization"
26+
mode: '0644'
27+
become: true
28+
29+
- name: Download aarch64 deployment initramfs
30+
ansible.builtin.get_url:
31+
url: "{{ stackhpc_ipa_image_url_aarch64 }}/{{ ironic_aarch64_initramfs_filename }}"
32+
dest: "{{ ironic_volume_location }}/httpboot/ironic-agent-aarch64.initramfs"
33+
force_basic_auth: true
34+
username: "{{ stackhpc_release_pulp_username }}"
35+
password: "{{ stackhpc_release_pulp_password }}"
36+
unredirected_headers:
37+
- "Authorization"
38+
mode: '0644'
39+
become: true
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[pxe]
2+
ipxe_bootfile_name_by_arch = aarch64:ipxe-snponly-aarch64.efi
3+
4+
[conductor]
5+
deploy_kernel_by_arch = aarch64:glance-id-goes-here
6+
deploy_ramdisk_by_arch = aarch64:glance-id-goes-here
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{% raw %}#!ipxe
2+
3+
:retry_dhcp
4+
dhcp || goto retry_dhcp
5+
6+
set arch ${buildarch}
7+
echo ${arch}
8+
9+
{# Standalone ironic: use ironic-configured PXE configs #}
10+
{% if not enable_neutron | bool %}
11+
# load the MAC-specific file or fail if it's not found
12+
:boot_system
13+
chain pxelinux.cfg/${mac:hexhyp} || goto inspector_ipa
14+
{% endif %}
15+
16+
:inspector_ipa
17+
:retry_boot
18+
# Check architecture and set boot options accordingly
19+
set arch ${buildarch}
20+
21+
iseq ${arch} x86_64 && set kernel_url {{ ironic_http_url }}/ironic-agent.kernel ||
22+
iseq ${arch} x86_64 && set initrd_url {{ ironic_http_url }}/ironic-agent.initramfs ||
23+
iseq ${arch} x86_64 && set initrd_file ironic-agent.initramfs ||
24+
25+
iseq ${arch} arm64 && set kernel_url {{ ironic_http_url }}/ironic-agent-aarch64.kernel ||
26+
iseq ${arch} arm64 && set initrd_url {{ ironic_http_url }}/ironic-agent-aarch64.initramfs ||
27+
iseq ${arch} arm64 && set initrd_file ironic-agent-aarch64.initramfs ||
28+
imgfree
29+
kernel --timeout 30000 ${kernel_url} ipa-inspection-callback-url={{ ironic_inspector_internal_endpoint }}/v1/continue systemd.journald.forward_to_console=yes BOOTIF=${mac} initrd=${initrd_file} {{ ironic_inspector_kernel_cmdline_extras | join(' ') }}
30+
initrd --timeout 30000 ${initrd_url}
31+
boot
32+
{% endraw %}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
{% raw %}
2+
# NOTE(yoctozepto): ironic-dnsmasq is used to deliver DHCP(v6) service
3+
# DNS service is disabled:
4+
port=0
5+
6+
interface={{ ironic_dnsmasq_interface }}
7+
bind-interfaces
8+
9+
{% for item in ironic_dnsmasq_dhcp_ranges %}
10+
{% set tag = item.tag | default('range_' ~ loop.index) %}
11+
{% set lease_time = item.lease_time | default(ironic_dnsmasq_dhcp_default_lease_time) %}
12+
dhcp-range=set:{{ tag }},{{ item.range }},{{ lease_time }}
13+
{% if item.routers is defined %}dhcp-option=tag:{{ tag }},option:router,{{ item.routers }}{% endif %}
14+
{% if item.ntp_server is defined %}dhcp-option=tag:{{ tag }},option:ntp-server,{{ item.ntp_server }}{% endif %}
15+
{% endfor %}
16+
17+
{% if api_address_family == 'ipv6' %}
18+
{# TODO(yoctozepto): IPv6-only support - DHCPv6 PXE support #}
19+
{# different options must be used here #}
20+
{% else %}{# ipv4 #}
21+
dhcp-option=option:tftp-server,{{ api_interface_address }}
22+
dhcp-option=option:server-ip-address,{{ api_interface_address }}
23+
dhcp-option=210,/var/lib/ironic/tftpboot/
24+
{% if ironic_dnsmasq_serve_ipxe | bool %}
25+
dhcp-match=ipxe,175
26+
dhcp-match=set:efi,option:client-arch,7
27+
dhcp-match=set:efi,option:client-arch,9
28+
dhcp-match=set:aarchefi,option:client-arch,11
29+
# Client is already running iPXE; move to next stage of chainloading
30+
dhcp-option=tag:ipxe,option:bootfile-name,{{ ironic_http_url }}/inspector.ipxe
31+
# Client is PXE booting over EFI without iPXE ROM,
32+
# send EFI version of iPXE chainloader
33+
dhcp-option=tag:efi,tag:!ipxe,option:bootfile-name,{{ ironic_dnsmasq_uefi_ipxe_boot_file }}
34+
dhcp-option=tag:aarchefi,tag:!ipxe,option:bootfile-name,ipxe-snponly-aarch64.efi
35+
{% endif %}
36+
dhcp-option=option:bootfile-name,{{ ironic_dnsmasq_boot_file }}
37+
{% endif %}{# ipv6/ipv4 #}
38+
39+
log-async
40+
log-facility=/var/log/kolla/ironic/dnsmasq.log
41+
{% if ironic_logging_debug | bool %}
42+
log-dhcp
43+
{% endif %}
44+
45+
{% if ironic_inspector_pxe_filter == 'dnsmasq' %}
46+
dhcp-hostsdir=/etc/dnsmasq/dhcp-hostsdir
47+
{% endif %}
48+
{% endraw %}

0 commit comments

Comments
 (0)