From cb578ed9b94ff9a34b41d91ada94e3375436b60c Mon Sep 17 00:00:00 2001 From: Dan Prince Date: Wed, 1 Jul 2015 17:18:49 -0400 Subject: 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 --- os_net_config/objects.py | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) (limited to 'os_net_config/objects.py') 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) -- cgit 1.2.3-korg