diff --git a/registry.json b/registry.json index 48f4782..22471d4 100644 --- a/registry.json +++ b/registry.json @@ -16,7 +16,20 @@ "start_port": 5001, "end_port": 5020, "v4_public": "dn42.higgsboson.tk", - "v6_public": "dn42.higgsboson.tk" + "v6_public": "dn42.higgsboson.tk", + "bird": { + "template_name": "dnpeer", + "reload_command": "birdc reload all" + }, + "openvpn": { + "start_command": "systemctl start 'openvpn@<%=peer_name%>'", + "stop_command": "systemctl stop 'openvpn@<%=peer_name%>'", + "enable_command": "systemctl enable 'openvpn@<%=peer_name%>'", + "disable_command": "systemctl disable 'openvpn@<%=peer_name%>'" + }, + "dns": { + "reload_command": "rndc reload" + } }, "network": { "hax404": { diff --git a/scripts/openvpn b/scripts/openvpn index d5be0ba..eefca66 100755 --- a/scripts/openvpn +++ b/scripts/openvpn @@ -24,6 +24,9 @@ class OpenvpnRegistry < Registry puts "==== openvpn.conf for #{name} =====" puts peer_template puts "===================================\n" + + service_command("start", name) + service_command("enable", name) end def remove_peer(peer) @@ -34,6 +37,9 @@ class OpenvpnRegistry < Registry unless File.exists?(key) FileUtils.rm_f(key) end + + service_command("stop", name) + service_command("disable", name) end def update_configurations @@ -105,6 +111,17 @@ class OpenvpnRegistry < Registry end die "no free local ports in range #{@start_port}:#{@end_port}" end + + def service_command(command_type, peer_name) + openvpn = @host["openvpn"] || {} + cmd_name = "#{command_type}_command" + command = openvpn[cmd_name] + if command.nil? + puts "skip to #{command_type} openvpn because #{cmd_name} is not defined" + else + CommandTemplate.new(command).execute(peer_name: peer_name) + end + end end GLOBAL_OPTIONS = OptionParser.new do |opts| diff --git a/scripts/utils.rb b/scripts/utils.rb index 58c4d94..d410700 100644 --- a/scripts/utils.rb +++ b/scripts/utils.rb @@ -55,3 +55,17 @@ class Template @erb.result(TemplateContext.new(params).get_binding) end end + +class CommandTemplate + def initialize(command) + @erb = ERB.new(command, nil, '-') + end + def execute(params={}) + args = params.dup + args.each do |k,v| + args[k] = Shellwords.escape(v) + end + cmd = @erb.result(TemplateContext.new(args).get_binding) + sh(cmd) + end +end