]> granicus.if.org Git - pdns/commitdiff
rec_control: add reload-lua-config option
authorPieter Lexis <pieter.lexis@powerdns.com>
Fri, 1 Jul 2016 14:40:56 +0000 (16:40 +0200)
committerPieter Lexis <pieter.lexis@powerdns.com>
Mon, 4 Jul 2016 08:53:22 +0000 (10:53 +0200)
Closes #4085

docs/manpages/rec_control.1.md
pdns/rec_channel_rec.cc

index da0b383dc075d60b52f4bd384790633097f84d1a..b31fef1db5e57cd0b04bb4e327bce9449cae4462 100644 (file)
@@ -109,8 +109,15 @@ quit-nicely
 reload-acls
 :    Reloads ACLs.
 
-reload-lua-script *FILENAME*
-:    (Re)loads Lua script *FILENAME*. This replaces the script currently loaded.
+reload-lua-script [*FILENAME*]
+:    (Re)loads Lua script *FILENAME*. If *FILENAME* is empty, attempt to reload
+     the currently loaded script. This replaces the script currently loaded.
+
+reload-lua-config [*FILENAME*]
+:    (Re)loads Lua configuration *FILENAME*. If *FILENAME* is empty, attempt to
+     reload the currently loaded file. Note that *FILENAME* will be fully executed,
+     any settings changed at runtime that are not modified in this file, will
+     still be active.
 
 reload-zones
 :    Reload authoritative and forward zones. Retains current configuration
index 3e0b7c40e25c504d3cdb2eb1cef9cba7dca46cc9..296dded8745cd89309926c592f353970d526bd3c 100644 (file)
@@ -1103,6 +1103,7 @@ string RecursorControlParser::getAnswer(const string& question, RecursorControlP
 "quit-nicely                      stop the recursor daemon nicely\n"
 "reload-acls                      reload ACLS\n"
 "reload-lua-script [filename]     (re)load Lua script\n"
+"reload-lua-config [filename]     (re)load Lua configuration file\n"
 "reload-zones                     reload all auth and forward zones\n"
 "set-minimum-ttl value            set minimum-ttl-override\n"
 "set-carbon-server                set a carbon server for telemetry\n"
@@ -1154,6 +1155,23 @@ string RecursorControlParser::getAnswer(const string& question, RecursorControlP
   if(cmd=="reload-lua-script") 
     return doQueueReloadLuaScript(begin, end);
 
+  if(cmd=="reload-lua-config") {
+    if(begin != end)
+      ::arg().set("lua-config-file") = *begin;
+
+    try {
+      loadRecursorLuaConfig(::arg()["lua-config-file"]);
+      L<<Logger::Warning<<"Reloaded Lua configuration file '"<<::arg()["lua-config-file"]<<"', requested via control channel"<<endl;
+      return "Reloaded Lua configuration file '"+::arg()["lua-config-file"]+"'\n";
+    }
+    catch(std::exception& e) {
+      return "Unable to load Lua script from '"+::arg()["lua-config-file"]+"': "+e.what()+"\n";
+    }
+    catch(const PDNSException& e) {
+      return "Unable to load Lua script from '"+::arg()["lua-config-file"]+"': "+e.reason+"\n";
+    }
+  }
+
   if(cmd=="set-carbon-server") 
     return doSetCarbonServer(begin, end);