diff options
author | Dan Prince <dprince@redhat.com> | 2015-07-01 17:18:49 -0400 |
---|---|---|
committer | Dan Prince <dprince@redhat.com> | 2015-07-01 17:18:49 -0400 |
commit | cb578ed9b94ff9a34b41d91ada94e3375436b60c (patch) | |
tree | 528009ce2c83c07e6b5f75511e9a90d10249e75f /os_net_config | |
parent | 9355a535e71407911332c228a382ee592452f5e7 (diff) |
Add support for dhclient_args
This patch adds an optional flag that can be used to
pass in args for dhclient when using DHCP.
This use case for this is to be able to control which
DHCP options dhclient listens for and we can thus
disable specific options (like routing) for some
network configurations.
Change-Id: Ic21de0615ea0ef304843c55cc5abe43cb1771169
Diffstat (limited to 'os_net_config')
-rw-r--r-- | os_net_config/impl_ifcfg.py | 2 | ||||
-rw-r--r-- | os_net_config/objects.py | 39 | ||||
-rw-r--r-- | os_net_config/tests/test_impl_ifcfg.py | 13 | ||||
-rw-r--r-- | os_net_config/tests/test_objects.py | 11 |
4 files changed, 50 insertions, 15 deletions
diff --git a/os_net_config/impl_ifcfg.py b/os_net_config/impl_ifcfg.py index daadd52..0fe8cc5 100644 --- a/os_net_config/impl_ifcfg.py +++ b/os_net_config/impl_ifcfg.py @@ -155,6 +155,8 @@ class IfcfgNetConfig(os_net_config.NetConfig): data += "OVS_EXTRA=\"%s\"\n" % " -- ".join(ovs_extra) if not base_opt.defroute: data += "DEFROUTE=no\n" + if base_opt.dhclient_args: + data += "DHCLIENTARGS=%s\n" % base_opt.dhclient_args return data def _add_routes(self, interface_name, routes=[]): diff --git a/os_net_config/objects.py b/os_net_config/objects.py index ea9c11c..8899164 100644 --- a/os_net_config/objects.py +++ b/os_net_config/objects.py @@ -130,7 +130,7 @@ class _BaseOpts(object): def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=[], routes=[], mtu=1500, primary=False, nic_mapping=None, - persist_mapping=False, defroute=True): + persist_mapping=False, defroute=True, dhclient_args=None): numbered_nic_names = _numbered_nics(nic_mapping) self.hwaddr = None self.hwname = None @@ -153,6 +153,7 @@ class _BaseOpts(object): self.routes = routes self.primary = primary self.defroute = defroute + self.dhclient_args = dhclient_args self.bridge_name = None # internal self.ovs_port = False # internal self.primary_interface_name = None # internal @@ -181,6 +182,7 @@ class _BaseOpts(object): defroute = strutils.bool_from_string(str(json.get('defroute', True))) mtu = json.get('mtu', 1500) + dhclient_args = json.get('dhclient_args') primary = strutils.bool_from_string(str(json.get('primary', False))) addresses = [] routes = [] @@ -210,10 +212,10 @@ class _BaseOpts(object): if include_primary: return (use_dhcp, use_dhcpv6, addresses, routes, mtu, primary, - nic_mapping, persist_mapping, defroute) + nic_mapping, persist_mapping, defroute, dhclient_args) else: return (use_dhcp, use_dhcpv6, addresses, routes, mtu, - nic_mapping, persist_mapping, defroute) + nic_mapping, persist_mapping, defroute, dhclient_args) class Interface(_BaseOpts): @@ -221,10 +223,11 @@ class Interface(_BaseOpts): def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=[], routes=[], mtu=1500, primary=False, nic_mapping=None, - persist_mapping=False, defroute=True): + persist_mapping=False, defroute=True, dhclient_args=None): super(Interface, self).__init__(name, use_dhcp, use_dhcpv6, addresses, routes, mtu, primary, nic_mapping, - persist_mapping, defroute) + persist_mapping, defroute, + dhclient_args) @staticmethod def from_json(json): @@ -242,11 +245,12 @@ class Vlan(_BaseOpts): def __init__(self, device, vlan_id, use_dhcp=False, use_dhcpv6=False, addresses=[], routes=[], mtu=1500, primary=False, - nic_mapping=None, persist_mapping=False, defroute=True): + nic_mapping=None, persist_mapping=False, defroute=True, + dhclient_args=None): name = 'vlan%i' % vlan_id super(Vlan, self).__init__(name, use_dhcp, use_dhcpv6, addresses, routes, mtu, primary, nic_mapping, - persist_mapping, defroute) + persist_mapping, defroute, dhclient_args) self.vlan_id = int(vlan_id) numbered_nic_names = _numbered_nics(nic_mapping) @@ -270,10 +274,11 @@ class OvsBridge(_BaseOpts): def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=[], routes=[], mtu=1500, members=[], ovs_options=None, ovs_extra=[], nic_mapping=None, persist_mapping=False, - defroute=True): + defroute=True, dhclient_args=None): super(OvsBridge, self).__init__(name, use_dhcp, use_dhcpv6, addresses, routes, mtu, False, nic_mapping, - persist_mapping, defroute) + persist_mapping, defroute, + dhclient_args) self.members = members self.ovs_options = ovs_options self.ovs_extra = ovs_extra @@ -293,7 +298,8 @@ class OvsBridge(_BaseOpts): def from_json(json): name = _get_required_field(json, 'name', 'OvsBridge') (use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping, - persist_mapping, defroute) = _BaseOpts.base_opts_from_json( + persist_mapping, defroute, + dhclient_args) = _BaseOpts.base_opts_from_json( json, include_primary=False) ovs_options = json.get('ovs_options') ovs_extra = json.get('ovs_extra', []) @@ -313,7 +319,8 @@ class OvsBridge(_BaseOpts): addresses=addresses, routes=routes, mtu=mtu, members=members, ovs_options=ovs_options, ovs_extra=ovs_extra, nic_mapping=nic_mapping, - persist_mapping=persist_mapping, defroute=defroute) + persist_mapping=persist_mapping, defroute=defroute, + dhclient_args=dhclient_args) class OvsBond(_BaseOpts): @@ -322,10 +329,10 @@ class OvsBond(_BaseOpts): def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=[], routes=[], mtu=1500, primary=False, members=[], ovs_options=None, ovs_extra=[], nic_mapping=None, - persist_mapping=False, defroute=True): + persist_mapping=False, defroute=True, dhclient_args=None): super(OvsBond, self).__init__(name, use_dhcp, use_dhcpv6, addresses, routes, mtu, primary, nic_mapping, - persist_mapping, defroute) + persist_mapping, defroute, dhclient_args) self.members = members self.ovs_options = ovs_options self.ovs_extra = ovs_extra @@ -347,7 +354,8 @@ class OvsBond(_BaseOpts): def from_json(json): name = _get_required_field(json, 'name', 'OvsBond') (use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping, - persist_mapping, defroute) = _BaseOpts.base_opts_from_json( + persist_mapping, defroute, + dhclient_args) = _BaseOpts.base_opts_from_json( json, include_primary=False) ovs_options = json.get('ovs_options') ovs_extra = json.get('ovs_extra', []) @@ -367,4 +375,5 @@ class OvsBond(_BaseOpts): addresses=addresses, routes=routes, mtu=mtu, members=members, ovs_options=ovs_options, ovs_extra=ovs_extra, nic_mapping=nic_mapping, - persist_mapping=persist_mapping, defroute=defroute) + persist_mapping=persist_mapping, defroute=defroute, + dhclient_args=dhclient_args) diff --git a/os_net_config/tests/test_impl_ifcfg.py b/os_net_config/tests/test_impl_ifcfg.py index 92ce828..e32aff2 100644 --- a/os_net_config/tests/test_impl_ifcfg.py +++ b/os_net_config/tests/test_impl_ifcfg.py @@ -318,6 +318,19 @@ DEFROUTE=no self.assertEqual(em1_config, self.get_interface_config('em1')) self.assertEqual(em2_config, self.get_interface_config('em2')) + def test_interface_dhclient_opts(self): + interface1 = objects.Interface('em1', dhclient_args='--foobar') + self.provider.add_interface(interface1) + em1_config = """# This file is autogenerated by os-net-config +DEVICE=em1 +ONBOOT=yes +HOTPLUG=no +NM_CONTROLLED=no +BOOTPROTO=none +DHCLIENTARGS=--foobar +""" + self.assertEqual(em1_config, self.get_interface_config('em1')) + class TestIfcfgNetConfigApply(base.TestCase): diff --git a/os_net_config/tests/test_objects.py b/os_net_config/tests/test_objects.py index 2e545d0..c824ba8 100644 --- a/os_net_config/tests/test_objects.py +++ b/os_net_config/tests/test_objects.py @@ -108,6 +108,17 @@ class TestInterface(base.TestCase): self.assertEqual(True, interface1.defroute) self.assertEqual(False, interface2.defroute) + def test_from_json_dhclient_args(self): + data = """{ +"type": "interface", +"name": "em1", +"use_dhcp": true, +"dhclient_args": "--foobar" +} +""" + interface1 = objects.object_from_json(json.loads(data)) + self.assertEqual("--foobar", interface1.dhclient_args) + def test_from_json_dhcp_nic1(self): def dummy_numbered_nics(nic_mapping=None): return {"nic1": "em3"} |