44 lines
1.3 KiB
Ruby
Executable File
44 lines
1.3 KiB
Ruby
Executable File
#!/usr/bin/ruby
|
|
require_relative "utils"
|
|
|
|
template_path = Pathname.new(File.expand_path("../../templates", __FILE__))
|
|
openvpn_path = Pathname.new(File.expand_path("../../openvpn", __FILE__))
|
|
openvpn_template = Template.new(template_path.join("openvpn.conf.erb"))
|
|
|
|
registry = Registry.new
|
|
|
|
host = registry.data["host"]
|
|
host["v4_tunnel"] || die("v4_tunnel not set for host")
|
|
|
|
registry.data["network"].each do |name, data|
|
|
next unless data["type"] == "openvpn"
|
|
key = openvpn_path.join("#{name}.key")
|
|
unless File.exists?(key)
|
|
sh("openvpn", "--genkey", "--secret", key)
|
|
end
|
|
required_params = [:proto, :lport, :tunnel_v4]
|
|
unless data["float"]
|
|
required_params += [:remote, :rport]
|
|
end
|
|
required_params.each do |param|
|
|
unless data[param.to_s]
|
|
die "#{param.to_s} not set for peer #{name}"
|
|
end
|
|
end
|
|
|
|
context = data.merge(own_v4_tunnel: host["v4_tunnel"])
|
|
atomic_write(openvpn_path.join("#{name}.conf"), openvpn_template.render(context))
|
|
end
|
|
|
|
GLOBAL_OPTIONS = OptionParser.new do |opts|
|
|
opts.banner = "Usage: dhcp [options] [subcommand [options]]"
|
|
opts.separator ""
|
|
opts.separator <<HELP
|
|
Available subcommands:
|
|
add [options] NAME MACADDRESS: add dhcp lease
|
|
remove [options] NAME: remove dhcp static lease
|
|
|
|
See 'dhcp COMMAND --help' for more information on a specific command.
|
|
HELP
|
|
end
|