Skip to content

Commit 8441f2f

Browse files
authored
Merge pull request openstack-k8s-operators#625 from hjensas/OSPRH-20483
Fix IPv6 URL formatting in init scripts
2 parents 71dab70 + 0e5055f commit 8441f2f

File tree

4 files changed

+67
-5
lines changed

4 files changed

+67
-5
lines changed

templates/ironicconductor/bin/init.sh

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,28 @@ if [ -n "${ProvisionNetwork}" ]; then
3333
fi
3434

3535

36-
export DEPLOY_HTTP_URL=$(python3 -c 'import os; print(os.environ["DeployHTTPURL"] % os.environ)')
36+
export DEPLOY_HTTP_URL=$(python3 -c '
37+
import os
38+
import ipaddress
39+
40+
# Get the IP address
41+
ip_str = os.environ.get("ProvisionNetworkIP", "")
42+
43+
# Check if it is an IPv6 address and format accordingly
44+
try:
45+
ip = ipaddress.ip_address(ip_str)
46+
if isinstance(ip, ipaddress.IPv6Address):
47+
# For IPv6, we need to wrap the IP in brackets for URL formatting
48+
formatted_env = dict(os.environ)
49+
formatted_env["ProvisionNetworkIP"] = f"[{ip_str}]"
50+
print(os.environ["DeployHTTPURL"] % formatted_env)
51+
else:
52+
# For IPv4, use as-is
53+
print(os.environ["DeployHTTPURL"] % os.environ)
54+
except ValueError:
55+
# If IP parsing fails, use as-is (fallback)
56+
print(os.environ["DeployHTTPURL"] % os.environ)
57+
')
3758

3859
crudini --set ${INIT_CONFIG} deploy http_url ${DEPLOY_HTTP_URL}
3960
crudini --set ${INIT_CONFIG} conductor bootloader ${DEPLOY_HTTP_URL}esp.img

templates/ironicinspector/bin/inspector-pxe-init.sh

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,48 @@ export PODINDEX=$(echo ${HOSTNAME##*-})
2020

2121
# DHCP server configuration
2222
export InspectorNetworkIP=$(/usr/local/bin/container-scripts/get_net_ip ${InspectionNetwork})
23-
export INSPECTOR_HTTP_URL=$(python3 -c 'import os; print(os.environ["InspectorHTTPURL"] % os.environ)')
23+
export INSPECTOR_HTTP_URL=$(python3 -c '
24+
import os
25+
import ipaddress
26+
27+
# Get the IP address
28+
ip_str = os.environ.get("InspectorNetworkIP", "")
29+
30+
# Check if it is an IPv6 address and format accordingly
31+
try:
32+
ip = ipaddress.ip_address(ip_str)
33+
if isinstance(ip, ipaddress.IPv6Address):
34+
# For IPv6, we need to wrap the IP in brackets for URL formatting
35+
formatted_env = dict(os.environ)
36+
formatted_env["InspectorNetworkIP"] = f"[{ip_str}]"
37+
print(os.environ["InspectorHTTPURL"] % formatted_env)
38+
else:
39+
# For IPv4, use as-is
40+
print(os.environ["InspectorHTTPURL"] % os.environ)
41+
except ValueError:
42+
# If IP parsing fails, use as-is (fallback)
43+
print(os.environ["InspectorHTTPURL"] % os.environ)
44+
')
45+
46+
# Export URL-formatted IP for use in config templates
47+
export InspectorNetworkIPForURL=$(python3 -c '
48+
import os
49+
import ipaddress
50+
51+
# Get the IP address
52+
ip_str = os.environ.get("InspectorNetworkIP", "")
53+
54+
# Check if it is an IPv6 address and format accordingly
55+
try:
56+
ip = ipaddress.ip_address(ip_str)
57+
if isinstance(ip, ipaddress.IPv6Address):
58+
print(f"[{ip_str}]")
59+
else:
60+
print(ip_str)
61+
except ValueError:
62+
# If IP parsing fails, use as-is (fallback)
63+
print(ip_str)
64+
')
2465

2566
# Copy required config to modifiable location
2667
cp /var/lib/config-data/default/dnsmasq.conf /var/lib/ironic/

templates/ironicinspector/config/dnsmasq.conf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ dhcp-option=tag:ipxe6,option6:bootfile-url,${INSPECTOR_HTTP_URL}inspector.ipxe
6161

6262
# Client is PXE booting over EFI without iPXE ROM; send EFI version of iPXE chainloader
6363
dhcp-boot=tag:efi,tag:!ipxe,snponly.efi
64-
dhcp-option=tag:efi6,tag:!ipxe6,option6:bootfile-url,tftp://${InspectorNetworkIP}/snponly.efi
64+
dhcp-option=tag:efi6,tag:!ipxe6,option6:bootfile-url,tftp://${InspectorNetworkIPForURL}/snponly.efi
6565

6666
# Client is running PXE over BIOS; send BIOS version of iPXE chainloader
67-
dhcp-boot=undionly.kpxe,localhost.localdomain,${InspectorNetworkIP}
67+
dhcp-boot=undionly.kpxe,localhost.localdomain,${InspectorNetworkIPForURL}

templates/ironicinspector/config/inspector.ipxe

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22

33
:retry_boot
44
imgfree
5-
kernel --timeout 60000 ${INSPECTOR_HTTP_URL}ironic-python-agent.kernel ipa-inspection-callback-url=http://${InspectorNetworkIP}:5050/v1/continue ipa-inspection-collectors=default,extra-hardware,numa-topology,logs systemd.journald.forward_to_console=yes BOOTIF=${mac} ipa-inspection-dhcp-all-interfaces=1 ipa-collect-lldp=1 initrd=ironic-python-agent.initramfs || goto retry_boot
5+
kernel --timeout 60000 ${INSPECTOR_HTTP_URL}ironic-python-agent.kernel ipa-inspection-callback-url=http://${InspectorNetworkIPForURL}:5050/v1/continue ipa-inspection-collectors=default,extra-hardware,numa-topology,logs systemd.journald.forward_to_console=yes BOOTIF=${mac} ipa-inspection-dhcp-all-interfaces=1 ipa-collect-lldp=1 initrd=ironic-python-agent.initramfs || goto retry_boot
66
initrd --timeout 60000 ${INSPECTOR_HTTP_URL}ironic-python-agent.initramfs || goto retry_boot
77
boot

0 commit comments

Comments
 (0)