Skip to content

Commit

Permalink
Fix application of network --mtu kickstart option in Anaconda
Browse files Browse the repository at this point in the history
This was broken when application of kickstart network command was moved
to Anaconda.

Resolves: rhbz#2018301
  • Loading branch information
rvykydal committed Nov 5, 2021
1 parent b784c84 commit f94fffd
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 1 deletion.
25 changes: 25 additions & 0 deletions pyanaconda/modules/network/nm_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,8 @@ def create_connections_from_ksdata(nm_client, network_data, device_name, ifname_
s390cfg = get_s390_settings(device_name)
_update_wired_connection_with_s390_settings(con, s390cfg)

update_connection_wired_settings_from_ksdata(con, network_data)

connections.insert(0, (con, device_to_activate))

return connections
Expand Down Expand Up @@ -577,6 +579,8 @@ def update_connection_from_ksdata(nm_client, connection, network_data, device_na
# IP configuration
update_connection_ip_settings_from_ksdata(connection, network_data)

update_connection_wired_settings_from_ksdata(connection, network_data)

s_con = connection.get_setting_connection()
s_con.set_property(NM.SETTING_CONNECTION_AUTOCONNECT, network_data.onboot)

Expand Down Expand Up @@ -655,6 +659,27 @@ def update_connection_ip_settings_from_ksdata(connection, network_data):
log.error("IP address %s is not valid", ns)


def update_connection_wired_settings_from_ksdata(connection, network_data):
"""Update NM connection wired settings from kickstart in place.
:param connection: existing NetworkManager connection to be updated
:type connection: NM.RemoteConnection
:param network_data: kickstart configuation to be applied to the connection
:type network_data: pykickstart NetworkData
"""
if network_data.mtu:
try:
mtu = int(network_data.mtu)
except ValueError as e:
log.error("Value of network --mtu option is not valid: %s", network_data.mtu)
else:
s_wired = connection.get_setting_wired()
if not s_wired:
s_wired = NM.SettingWired.new()
connection.add_setting(s_wired)
s_wired.props.mtu = mtu


def bind_settings_to_mac(nm_client, s_connection, s_wired, device_name=None, bind_exclusively=True):
"""Bind the settings to the mac address of the device.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
from unittest.mock import Mock, patch

from pyanaconda.modules.network.nm_client import get_slaves_from_connections, \
get_dracut_arguments_from_connection
get_dracut_arguments_from_connection, update_connection_wired_settings_from_ksdata

import gi
gi.require_version("NM", "1.0")
Expand Down Expand Up @@ -482,3 +482,38 @@ def get_dracut_arguments_from_connection_test(self, is_s390, get_slaves_from_con
"vlan=ens13.111:ens13",
"rd.znet=qeth,0.0.0900,0.0.0901,0.0.0902,layer2=1,portname=FOOBAR,portno=0"])
)

def update_connection_wired_settings_from_ksdata_test(self):
network_data = Mock()
connection = Mock()
wired_setting = Mock()

connection.get_setting_wired.return_value = wired_setting

# --mtu default value
network_data.mtu = ""
update_connection_wired_settings_from_ksdata(connection, network_data)
connection.get_setting_wired.assert_not_called()

# Invalid value
# --mtu=non-int
network_data.mtu = "non-int"
connection.reset_mock()
update_connection_wired_settings_from_ksdata(connection, network_data)
connection.get_setting_wired.assert_not_called()

# Valid value
# --mtu=9000
# The connection already has wired setting
connection.reset_mock()
network_data.mtu = "9000"
update_connection_wired_settings_from_ksdata(connection, network_data)
connection.get_setting_wired.assert_called_once()

# Valid value
# --mtu=9000
# The connection does not have wired setting yet
connection.get_setting_wired.return_value = None
connection.reset_mock()
update_connection_wired_settings_from_ksdata(connection, network_data)
connection.add_setting.assert_called_once()

0 comments on commit f94fffd

Please sign in to comment.