Project

General

Profile

« Previous | Next » 

Revision 62c9e22d

Added by Dmitri Dolguikh over 8 years ago

Fixes #11081: broke out dhcp providers into separate modules

View differences:

modules/dhcp/dhcp_api.rb
class Proxy::DhcpApi < ::Sinatra::Base
extend Proxy::DHCP::DependencyInjection::Injectors
helpers ::Proxy::Helpers
authorize_with_trusted_hosts
authorize_with_ssl_client
use Rack::MethodOverride
inject_attr :dhcp_provider, :server
before do
begin
raise "Smart Proxy is not configured to support DHCP" unless Proxy::DhcpPlugin.settings.enabled
case Proxy::DhcpPlugin.settings.dhcp_vendor.downcase
when "isc"
require 'dhcp/providers/server/isc'
unless Proxy::DhcpPlugin.settings.dhcp_config && Proxy::DhcpPlugin.settings.dhcp_leases \
&& File.exist?(Proxy::DhcpPlugin.settings.dhcp_config) && File.exist?(Proxy::DhcpPlugin.settings.dhcp_leases)
log_halt 400, "Unable to find the DHCP configuration or lease files"
end
@server = Proxy::DHCP::ISC.instance_with_default_parameters
when "native_ms"
require 'dhcp/providers/server/native_ms'
@server = Proxy::DHCP::NativeMS.instance_with_default_parameters
when "virsh"
require 'dhcp/providers/server/virsh'
@server = Proxy::DHCP::Virsh.instance_with_default_parameters
else
log_halt 400, "Unrecognized or missing DHCP vendor type: #{Proxy::DhcpPlugin.settings.dhcp_vendor.nil? ? 'MISSING' : Proxy::DhcpPlugin.settings.dhcp_vendor}"
end
@server.loadSubnets
server.load_subnets
rescue => e
log_halt 400, e
end
......
helpers do
def load_subnet
@subnet = @server.find_subnet(params[:network])
@subnet = server.find_subnet(params[:network])
log_halt 404, "Subnet #{params[:network]} not found" unless @subnet
@subnet
end
def load_subnet_data
@server.loadSubnetData(@subnet)
server.load_subnet_data(@subnet)
end
end
......
if request.accept? 'application/json'
content_type :json
log_halt 404, "No subnets found on server @{name}" unless @server.subnets
@server.subnets.map{|s| {:network => s.network, :netmask => s.netmask, :options => s.options}}.to_json
log_halt 404, "No subnets found on server @{name}" unless server.subnets
server.subnets.map{|s| {:network => s.network, :netmask => s.netmask, :options => s.options}}.to_json
else
erb :"dhcp/index"
end
......
if request.accept? 'application/json'
content_type :json
{:reservations => @server.all_hosts(@subnet.network), :leases => @server.all_leases(@subnet.network)}.to_json
{:reservations => server.all_hosts(@subnet.network), :leases => server.all_leases(@subnet.network)}.to_json
else
erb :"dhcp/show"
end
......
load_subnet
load_subnet_data
({:ip => @server.unused_ip(@subnet, params[:mac], params[:from], params[:to])}).to_json
({:ip => server.unused_ip(@subnet, params[:mac], params[:from], params[:to])}).to_json
rescue => e
log_halt 400, e
end
......
load_subnet
load_subnet_data
record = @server.find_record(@subnet.network, params[:record])
record = server.find_record(@subnet.network, params[:record])
log_halt 404, "Record #{params[:network]}/#{params[:record]} not found" unless record
record.options.to_json
rescue => e
......
load_subnet_data
content_type :json
@server.addRecord(params)
server.add_record(params)
rescue Proxy::DHCP::Collision => e
log_halt 409, e
rescue Proxy::DHCP::AlreadyExists # rubocop:disable Lint/HandleExceptions
......
load_subnet
load_subnet_data
record = @server.find_record(@subnet.network, params[:record])
record = server.find_record(@subnet.network, params[:record])
log_halt 404, "Record #{params[:network]}/#{params[:record]} not found" unless record
@server.delRecord @subnet, record
server.del_record @subnet, record
if request.accept? 'application/json'
content_type :json
{}

Also available in: Unified diff