Project

General

Profile

Download (3.26 KB) Statistics
| Branch: | Tag: | Revision:
<%#
name: kickstart_network_interface
model: ProvisioningTemplate
snippet: true
model: ProvisioningTemplate
kind: snippet
description: |
Generates network directive for a given interface. It is not expected to be used directly.
-%>
<%#
# Variables: iface, host, use_slaac, static, static6
-%>
<%if @iface.managed? -%>
<%
network_options = []
nameservers = []
subnet4 = @iface.subnet
subnet6 = @iface.subnet6

rhel_compatible = @host.operatingsystem.family == 'Redhat' && @host.operatingsystem.name != 'Fedora'
is_fedora = @host.operatingsystem.name == 'Fedora'
os_major = @host.operatingsystem.major.to_i

# device and hostname
if @iface.bond? || @iface.bridge?
network_options.push("--device=#{@iface.identifier}")
else
network_options.push("--device=#{@iface.mac || @iface.identifier}")
end
network_options.push("--hostname #{@host.name}")

# single stack
network_options.push("--noipv6") if subnet4 && !subnet6
network_options.push("--noipv4") if !subnet4 && subnet6

# dual stack MTU check
raise("IPv4 and IPv6 subnets have different MTU") if subnet4 && subnet6 && subnet4.mtu.present? && subnet6.mtu.present? && subnet4.mtu != subnet6.mtu

# mtu method is taking into account both ipv4 and ipv6 stacks
if @iface.respond_to?(:mtu) && @iface.mtu
network_options.push("--mtu=#{@iface.mtu}")
end

# IPv4
if subnet4
if !subnet4.dhcp_boot_mode? || @static
network_options.push("--bootproto static")
network_options.push("--ip=#{@iface.ip}")
network_options.push("--netmask=#{subnet4.mask}")
network_options.push("--gateway=#{subnet4.gateway}")
elsif subnet4.dhcp_boot_mode?
network_options.push("--bootproto dhcp")
end

nameservers.concat(subnet4.dns_servers)
end

# IPv6
if subnet6
if !subnet6.dhcp_boot_mode? || @static6
network_options.push("--ipv6=#{@iface.ip6}/#{subnet6.cidr}")
network_options.push("--ipv6gateway=#{subnet6.gateway}")
elsif subnet6.dhcp_boot_mode?
if @use_slaac
network_options.push("--ipv6 auto")
else
network_options.push("--ipv6 dhcp")
end
end

nameservers.concat(subnet6.dns_servers)
end

# bond
if @iface.bond?
bond_slaves = @iface.attached_devices_identifiers.join(',')
network_options.push("--bondslaves=#{bond_slaves}")
network_options.push("--bondopts=mode=#{@iface.mode},#{@iface.bond_options.tr(' ', ',')}")
end

# bridge
if @iface.bridge?
bridge_slaves = @iface.attached_devices_identifiers.join(',')
network_options.push("--bridgeslaves=#{bridge_slaves}")
# Currently no support for bridge options in the interface.
end

# VLAN (only on physical is recognized)
if @iface.virtual? && @iface.tag.present? && @iface.attached_to.present?
network_options.push("--vlanid=#{@iface.tag}")
network_options.push("--interfacename=vlan#{@iface.tag}") if (is_fedora && os_major >= 21) || (rhel_compatible && os_major >= 7)
end

# DNS
if nameservers.empty?
network_options.push("--nodns")
else
network_options.push("--nameserver=#{nameservers.join(',')}")
end

# Search domain - available from Fedora 39 (RHEL 10)
if @iface.domain && ((is_fedora && os_major >= 39) || (rhel_compatible && os_major >= 10))
network_options.push("--ipv4-dns-search=#{@iface.domain}") if subnet4
network_options.push("--ipv6-dns-search=#{@iface.domain}") if subnet6
end
-%>
<%= "network #{network_options.join(' ')}\n" -%>
<% end -%>
(27-27/56)