diff options
-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"} |