From c03f4977274c79df9ba7fe184585ab9abf8a5637 Mon Sep 17 00:00:00 2001 From: James Kasten Date: Thu, 10 Sep 2015 15:28:01 -0700 Subject: [PATCH 1/6] Add dependencies for known used modules --- .../letsencrypt_apache/configurator.py | 39 ++++++++++++++++++- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/letsencrypt-apache/letsencrypt_apache/configurator.py b/letsencrypt-apache/letsencrypt_apache/configurator.py index 8403b974c..b8528c407 100644 --- a/letsencrypt-apache/letsencrypt_apache/configurator.py +++ b/letsencrypt-apache/letsencrypt_apache/configurator.py @@ -1004,18 +1004,53 @@ class ApacheConfigurator(augeas_configurator.AugeasConfigurator): "Unsupported directory layout. You may try to enable mod %s " "and try again." % mod_name) + deps = self._get_mod_deps(mod_name) + + # Enable all dependencies + for dep in deps: + if dep not in self.parser.modules: + self._enable_mod_debian(dep, temp) + self._add_parser_mod(dep) + + note = "Enabled dependency of module %s - %s" % (mod_name, dep) + self.save_notes += note + os.linesep + logger.debug(note) + + # Enable actual module self._enable_mod_debian(mod_name, temp) - self.save_notes += "Enabled %s module in Apache" % mod_name - logger.debug("Enabled Apache %s module", mod_name) + self._add_parser_mod(mod_name) + + self.save_notes += "Enabled %s module in Apache\n" % mod_name + logger.info("Enabled Apache %s module", mod_name) # Modules can enable additional config files. Variables may be defined # within these new configuration sections. # Restart is not necessary as DUMP_RUN_CFG uses latest config. self.parser.update_runtime_variables(self.conf("ctl")) + def _add_parser_mod(self, mod_name): + """Shortcut for updating parser modules.""" self.parser.modules.add(mod_name + "_module") self.parser.modules.add("mod_" + mod_name + ".c") + def _get_mod_deps(self, mod_name): + """Get known module dependencies. + + .. note:: This does not need to be accurate in order for the client to + run. This simply keeps things clean if the user decides to revert + changes. + .. warning:: If all deps are not included, it may cause incorrect parsing + behavior, due to enable_mod's shortcut for updating the parser's + currently defined modules (:method:`._add_parser_mod`) + This would only present a major problem in extremely atypical + configs that use ifmod for the missing deps. + + """ + deps = { + "ssl": ["setenvif", "mime", "socache_shmcb"] + } + return deps.get(mod_name, []) + def _enable_mod_debian(self, mod_name, temp): """Assumes mods-available, mods-enabled layout.""" # Generate reversal command. From 8b093032aefcd345d61decc8c7e4d8f675caf426 Mon Sep 17 00:00:00 2001 From: James Kasten Date: Thu, 10 Sep 2015 15:39:13 -0700 Subject: [PATCH 2/6] Change debug/info output --- letsencrypt-apache/letsencrypt_apache/configurator.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/letsencrypt-apache/letsencrypt_apache/configurator.py b/letsencrypt-apache/letsencrypt_apache/configurator.py index b8528c407..2da21a906 100644 --- a/letsencrypt-apache/letsencrypt_apache/configurator.py +++ b/letsencrypt-apache/letsencrypt_apache/configurator.py @@ -492,7 +492,6 @@ class ApacheConfigurator(augeas_configurator.AugeasConfigurator): """ if "ssl_module" not in self.parser.modules: - logger.info("Loading mod_ssl into Apache Server") self.enable_mod("ssl", temp=temp) # Check for Listen @@ -1012,7 +1011,7 @@ class ApacheConfigurator(augeas_configurator.AugeasConfigurator): self._enable_mod_debian(dep, temp) self._add_parser_mod(dep) - note = "Enabled dependency of module %s - %s" % (mod_name, dep) + note = "Enabled dependency of %s module - %s" % (mod_name, dep) self.save_notes += note + os.linesep logger.debug(note) From b2ef04178570768cd5a39f8a7092d0fa34b1234a Mon Sep 17 00:00:00 2001 From: James Kasten Date: Thu, 10 Sep 2015 15:57:27 -0700 Subject: [PATCH 3/6] Don't log notes if save is temporary --- letsencrypt-apache/letsencrypt_apache/configurator.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/letsencrypt-apache/letsencrypt_apache/configurator.py b/letsencrypt-apache/letsencrypt_apache/configurator.py index 2da21a906..2e1a7a824 100644 --- a/letsencrypt-apache/letsencrypt_apache/configurator.py +++ b/letsencrypt-apache/letsencrypt_apache/configurator.py @@ -1012,14 +1012,16 @@ class ApacheConfigurator(augeas_configurator.AugeasConfigurator): self._add_parser_mod(dep) note = "Enabled dependency of %s module - %s" % (mod_name, dep) - self.save_notes += note + os.linesep + if not temp: + self.save_notes += note + os.linesep logger.debug(note) # Enable actual module self._enable_mod_debian(mod_name, temp) self._add_parser_mod(mod_name) - self.save_notes += "Enabled %s module in Apache\n" % mod_name + if not temp: + self.save_notes += "Enabled %s module in Apache\n" % mod_name logger.info("Enabled Apache %s module", mod_name) # Modules can enable additional config files. Variables may be defined From 9c47b1061c7706ce19cb7a651c2a9332c2dd0e89 Mon Sep 17 00:00:00 2001 From: James Kasten Date: Thu, 10 Sep 2015 16:34:20 -0700 Subject: [PATCH 4/6] Search for correct module names in dependency list --- letsencrypt-apache/letsencrypt_apache/configurator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/letsencrypt-apache/letsencrypt_apache/configurator.py b/letsencrypt-apache/letsencrypt_apache/configurator.py index 2e1a7a824..579668aae 100644 --- a/letsencrypt-apache/letsencrypt_apache/configurator.py +++ b/letsencrypt-apache/letsencrypt_apache/configurator.py @@ -1007,7 +1007,7 @@ class ApacheConfigurator(augeas_configurator.AugeasConfigurator): # Enable all dependencies for dep in deps: - if dep not in self.parser.modules: + if (dep + "_module") not in self.parser.modules: self._enable_mod_debian(dep, temp) self._add_parser_mod(dep) From 7a66bfef28f8594936022d9b376828e02b52d8f4 Mon Sep 17 00:00:00 2001 From: James Kasten Date: Thu, 10 Sep 2015 16:49:50 -0700 Subject: [PATCH 5/6] method to func, thanks pylint --- .../letsencrypt_apache/configurator.py | 39 ++++++++++--------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/letsencrypt-apache/letsencrypt_apache/configurator.py b/letsencrypt-apache/letsencrypt_apache/configurator.py index 579668aae..e1af9c8a5 100644 --- a/letsencrypt-apache/letsencrypt_apache/configurator.py +++ b/letsencrypt-apache/letsencrypt_apache/configurator.py @@ -1003,7 +1003,7 @@ class ApacheConfigurator(augeas_configurator.AugeasConfigurator): "Unsupported directory layout. You may try to enable mod %s " "and try again." % mod_name) - deps = self._get_mod_deps(mod_name) + deps = _get_mod_deps(mod_name) # Enable all dependencies for dep in deps: @@ -1034,24 +1034,6 @@ class ApacheConfigurator(augeas_configurator.AugeasConfigurator): self.parser.modules.add(mod_name + "_module") self.parser.modules.add("mod_" + mod_name + ".c") - def _get_mod_deps(self, mod_name): - """Get known module dependencies. - - .. note:: This does not need to be accurate in order for the client to - run. This simply keeps things clean if the user decides to revert - changes. - .. warning:: If all deps are not included, it may cause incorrect parsing - behavior, due to enable_mod's shortcut for updating the parser's - currently defined modules (:method:`._add_parser_mod`) - This would only present a major problem in extremely atypical - configs that use ifmod for the missing deps. - - """ - deps = { - "ssl": ["setenvif", "mime", "socache_shmcb"] - } - return deps.get(mod_name, []) - def _enable_mod_debian(self, mod_name, temp): """Assumes mods-available, mods-enabled layout.""" # Generate reversal command. @@ -1176,6 +1158,25 @@ class ApacheConfigurator(augeas_configurator.AugeasConfigurator): self.parser.init_modules() +def _get_mod_deps(mod_name): + """Get known module dependencies. + + .. note:: This does not need to be accurate in order for the client to + run. This simply keeps things clean if the user decides to revert + changes. + .. warning:: If all deps are not included, it may cause incorrect parsing + behavior, due to enable_mod's shortcut for updating the parser's + currently defined modules (:method:`._add_parser_mod`) + This would only present a major problem in extremely atypical + configs that use ifmod for the missing deps. + + """ + deps = { + "ssl": ["setenvif", "mime", "socache_shmcb"] + } + return deps.get(mod_name, []) + + def apache_restart(apache_init_script): """Restarts the Apache Server. From 4fb27e035059cfead3fcfb5de63e2724cdca02ca Mon Sep 17 00:00:00 2001 From: James Kasten Date: Thu, 10 Sep 2015 18:48:44 -0700 Subject: [PATCH 6/6] fix documentation link --- letsencrypt-apache/letsencrypt_apache/configurator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/letsencrypt-apache/letsencrypt_apache/configurator.py b/letsencrypt-apache/letsencrypt_apache/configurator.py index e1af9c8a5..7e9ab9541 100644 --- a/letsencrypt-apache/letsencrypt_apache/configurator.py +++ b/letsencrypt-apache/letsencrypt_apache/configurator.py @@ -1166,7 +1166,7 @@ def _get_mod_deps(mod_name): changes. .. warning:: If all deps are not included, it may cause incorrect parsing behavior, due to enable_mod's shortcut for updating the parser's - currently defined modules (:method:`._add_parser_mod`) + currently defined modules (:method:`.ApacheConfigurator._add_parser_mod`) This would only present a major problem in extremely atypical configs that use ifmod for the missing deps.