From e272efd9ab212440390f435adc7f2da225b83a50 Mon Sep 17 00:00:00 2001 From: Julien Fortin Date: Thu, 14 Jul 2016 20:09:42 +0100 Subject: [PATCH] ifupdown: networkinterfaces: not importing template engine if no mako keyword found Ticket: CM-11807 Reviewed By: Roopa, Daniel Testing Done: Loading the default template engine (mako) is adding an extra overhead: 100ms We also import the template engine even if we are dealing with a json input The overhead is noticable when using NCLU. With this change we are now important the template engine when a keyword is found in the configuration file. Signed-off-by: Julien Fortin --- ifupdown/networkinterfaces.py | 42 ++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/ifupdown/networkinterfaces.py b/ifupdown/networkinterfaces.py index bc7749d..9a2f9a8 100644 --- a/ifupdown/networkinterfaces.py +++ b/ifupdown/networkinterfaces.py @@ -60,8 +60,11 @@ class networkInterfaces(): self.interfacesfileiobuf = interfacesfileiobuf self.interfacesfileformat = interfacesfileformat self._filestack = [self.interfacesfile] - self._template_engine = templateEngine(template_engine, - template_lookuppath) + + self._template_engine = None + self._template_engine_name = template_engine + self._template_engine_path = template_lookuppath + self._currentfile_has_template = False self._ws_split_regex = re.compile(r'[\s\t]\s*') @@ -385,22 +388,25 @@ class networkInterfaces(): def read_filedata(self, filedata): self._currentfile_has_template = False # run through template engine - try: - rendered_filedata = self._template_engine.render(filedata) - if rendered_filedata is filedata: - self._currentfile_has_template = False - else: - self._currentfile_has_template = True - except Exception, e: - self._parse_error(self._currentfile, -1, - 'failed to render template (%s). ' %str(e) + - 'Continue without template rendering ...') - rendered_filedata = None - pass - if rendered_filedata: - self.process_interfaces(rendered_filedata) - else: - self.process_interfaces(filedata) + if filedata and '%' in filedata: + try: + self._template_engine = templateEngine( + self._template_engine_name, + self._template_engine_path) + rendered_filedata = self._template_engine.render(filedata) + if rendered_filedata is filedata: + self._currentfile_has_template = False + else: + self._currentfile_has_template = True + except Exception, e: + self._parse_error(self._currentfile, -1, + 'failed to render template (%s). Continue without template rendering ...' + % str(e)) + rendered_filedata = None + if rendered_filedata: + self.process_interfaces(rendered_filedata) + return + self.process_interfaces(filedata) def read_file(self, filename, fileiobuf=None): if fileiobuf: