diff options
author | Christian Poessinger <christian@poessinger.com> | 2020-04-04 20:04:11 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-04 20:04:11 +0200 |
commit | 61ab4673b786abd29bd861a91975189d4614d3b6 (patch) | |
tree | 6377522d02db5de8905e9b7dc8ad634ccd8e641e /python | |
parent | 606a66a2770eb3853c22d6b601f6d386293c66bb (diff) | |
parent | ae72ab6de76dbc86cb881da7eafa64413819a9bc (diff) | |
download | vyos-1x-61ab4673b786abd29bd861a91975189d4614d3b6.tar.gz vyos-1x-61ab4673b786abd29bd861a91975189d4614d3b6.zip |
Merge pull request #302 from thomas-mangin/T2190
ifconfig: T2190: option to prevent Interface creation
Diffstat (limited to 'python')
-rw-r--r-- | python/vyos/ifconfig/interface.py | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/python/vyos/ifconfig/interface.py b/python/vyos/ifconfig/interface.py index 4a34f96d6..96057a943 100644 --- a/python/vyos/ifconfig/interface.py +++ b/python/vyos/ifconfig/interface.py @@ -39,6 +39,8 @@ class Interface(DHCP): required = [] default = { 'type': '', + 'debug': True, + 'create': True, } definition = { 'section': '', @@ -174,15 +176,26 @@ class Interface(DHCP): super().__init__(ifname, **kargs) if not os.path.exists('/sys/class/net/{}'.format(self.config['ifname'])): + # Any instance of Interface, such as Interface('eth0') + # can be used safely to access the generic function in this class + # as 'type' is unset, the class can not be created if not self.config['type']: raise Exception('interface "{}" not found'.format(self.config['ifname'])) - for k in self.required: - if k not in kargs: - name = self.default['type'] - raise ConfigError(f'missing required option {k} for {name} {ifname} creation') - - self._create() + # Should an Instance of a child class (EthernetIf, DummyIf, ..) + # be required, then create should be set to False to not accidentally create it. + # In case a subclass does not define it, we use get to set the default to True + if self.config.get('create',True): + for k in self.required: + if k not in kargs: + name = self.default['type'] + raise ConfigError(f'missing required option {k} for {name} {ifname} creation') + + self._create() + # If we can not connect to the interface then let the caller know + # as the class could not be correctly initialised + else: + raise Exception('interface "{}" not found'.format(self.config['ifname'])) # list of assigned IP addresses self._addr = [] |