#929 implement first half of multi tenancy with tenant_databases setting

This commit is contained in:
Oliver Gorwits
2022-09-24 19:01:05 +01:00
parent b391f83d60
commit 1d5f3ce316
71 changed files with 355 additions and 205 deletions

View File

@@ -13,8 +13,8 @@ register_admin_task({
});
ajax '/ajax/content/admin/duplicatedevices' => require_role admin => sub {
my @set = schema('netdisco')->resultset('Device')->search({
serial => { '-in' => schema('netdisco')->resultset('Device')->search({
my @set = schema(vars->{'tenant'})->resultset('Device')->search({
serial => { '-in' => schema(vars->{'tenant'})->resultset('Device')->search({
'-and' => [serial => { '!=', undef }, serial => { '!=', '' }],
}, {
group_by => ['serial'],

View File

@@ -24,8 +24,8 @@ sub _sanity_ok {
ajax '/ajax/control/admin/nodemonitor/add' => require_role admin => sub {
send_error('Bad Request', 400) unless _sanity_ok();
schema('netdisco')->txn_do(sub {
my $monitor = schema('netdisco')->resultset('NodeMonitor')
schema(vars->{'tenant'})->txn_do(sub {
my $monitor = schema(vars->{'tenant'})->resultset('NodeMonitor')
->create({
mac => param('mac'),
matchoui => (param('matchoui') ? \'true' : \'false'),
@@ -39,8 +39,8 @@ ajax '/ajax/control/admin/nodemonitor/add' => require_role admin => sub {
ajax '/ajax/control/admin/nodemonitor/del' => require_role admin => sub {
send_error('Bad Request', 400) unless _sanity_ok();
schema('netdisco')->txn_do(sub {
schema('netdisco')->resultset('NodeMonitor')
schema(vars->{'tenant'})->txn_do(sub {
schema(vars->{'tenant'})->resultset('NodeMonitor')
->find({mac => param('mac')})->delete;
});
};
@@ -48,8 +48,8 @@ ajax '/ajax/control/admin/nodemonitor/del' => require_role admin => sub {
ajax '/ajax/control/admin/nodemonitor/update' => require_role admin => sub {
send_error('Bad Request', 400) unless _sanity_ok();
schema('netdisco')->txn_do(sub {
my $monitor = schema('netdisco')->resultset('NodeMonitor')
schema(vars->{'tenant'})->txn_do(sub {
my $monitor = schema(vars->{'tenant'})->resultset('NodeMonitor')
->find({mac => param('mac')});
return unless $monitor;
@@ -65,7 +65,7 @@ ajax '/ajax/control/admin/nodemonitor/update' => require_role admin => sub {
};
ajax '/ajax/content/admin/nodemonitor' => require_role admin => sub {
my $set = schema('netdisco')->resultset('NodeMonitor')
my $set = schema(vars->{'tenant'})->resultset('NodeMonitor')
->search(undef, { order_by => [qw/active date mac/] });
content_type('text/html');

View File

@@ -17,11 +17,11 @@ register_admin_task(
get '/ajax/content/admin/orphaned' => require_role admin => sub {
my @tree = schema('netdisco')->resultset('Virtual::UnDirEdgesAgg')
my @tree = schema(vars->{'tenant'})->resultset('Virtual::UnDirEdgesAgg')
->search( undef, { prefetch => 'device' } )->hri->all;
my @orphans
= schema('netdisco')->resultset('Virtual::OrphanedDevices')->search()
= schema(vars->{'tenant'})->resultset('Virtual::OrphanedDevices')->search()
->order_by('ip')->hri->all;
return unless ( scalar @tree || scalar @orphans );

View File

@@ -13,7 +13,7 @@ register_admin_task({
});
ajax '/ajax/content/admin/performance' => require_role admin => sub {
my $set = schema('netdisco')->resultset('Virtual::PollerPerformance');
my $set = schema(vars->{'tenant'})->resultset('Virtual::PollerPerformance');
content_type('text/html');
template 'ajax/admintask/performance.tt', {

View File

@@ -32,8 +32,8 @@ sub _sanity_ok {
ajax '/ajax/control/admin/pseudodevice/add' => require_role admin => sub {
send_error('Bad Request', 400) unless _sanity_ok();
schema('netdisco')->txn_do(sub {
my $device = schema('netdisco')->resultset('Device')
schema(vars->{'tenant'})->txn_do(sub {
my $device = schema(vars->{'tenant'})->resultset('Device')
->create({
ip => param('ip'),
dns => (hostname_from_ip(param('ip')) || ''),
@@ -55,7 +55,7 @@ ajax '/ajax/control/admin/pseudodevice/add' => require_role admin => sub {
]);
# device_ip table is used to show whether topo is "broken"
schema('netdisco')->resultset('DeviceIp')
schema(vars->{'tenant'})->resultset('DeviceIp')
->create({
ip => param('ip'),
alias => param('ip'),
@@ -66,8 +66,8 @@ ajax '/ajax/control/admin/pseudodevice/add' => require_role admin => sub {
ajax '/ajax/control/admin/pseudodevice/update' => require_role admin => sub {
send_error('Bad Request', 400) unless _sanity_ok();
schema('netdisco')->txn_do(sub {
my $device = schema('netdisco')->resultset('Device')
schema(vars->{'tenant'})->txn_do(sub {
my $device = schema(vars->{'tenant'})->resultset('Device')
->with_port_count->find({ip => param('ip')});
return unless $device;
my $count = $device->port_count;
@@ -87,7 +87,7 @@ ajax '/ajax/control/admin/pseudodevice/update' => require_role admin => sub {
->single({port => "Port${port}"})->delete;
# clear outdated manual topology links
schema('netdisco')->resultset('Topology')->search({
schema(vars->{'tenant'})->resultset('Topology')->search({
-or => [
{ dev1 => $device->ip, port1 => "Port${port}" },
{ dev2 => $device->ip, port2 => "Port${port}" },
@@ -106,7 +106,7 @@ ajax '/ajax/control/admin/pseudodevice/update' => require_role admin => sub {
};
ajax '/ajax/content/admin/pseudodevice' => require_role admin => sub {
my $set = schema('netdisco')->resultset('Device')
my $set = schema(vars->{'tenant'})->resultset('Device')
->search(
{-bool => 'is_pseudo'},
{order_by => { -desc => 'last_discover' }},

View File

@@ -13,7 +13,7 @@ register_admin_task({
});
ajax '/ajax/content/admin/slowdevices' => require_role admin => sub {
my $set = schema('netdisco')->resultset('Virtual::SlowDevices');
my $set = schema(vars->{'tenant'})->resultset('Virtual::SlowDevices');
content_type('text/html');
template 'ajax/admintask/slowdevices.tt', {

View File

@@ -17,13 +17,13 @@ ajax '/ajax/control/admin/timedoutdevices/del' => require_role admin => sub {
send_error('Missing backend', 400) unless param('backend');
send_error('Missing device', 400) unless param('device');
schema('netdisco')->resultset('DeviceSkip')->find_or_create({
schema(vars->{'tenant'})->resultset('DeviceSkip')->find_or_create({
backend => param('backend'), device => param('device'),
},{ key => 'device_skip_pkey' })->update({ deferrals => 0 });
};
ajax '/ajax/content/admin/timedoutdevices' => require_role admin => sub {
my @set = schema('netdisco')->resultset('DeviceSkip')->search({
my @set = schema(vars->{'tenant'})->resultset('DeviceSkip')->search({
deferrals => { '>' => 0 }
},{ rows => (setting('dns')->{max_outstanding} || 50), order_by =>
[{ -desc => 'deferrals' }, { -asc => [qw/device backend/] }]

View File

@@ -35,7 +35,7 @@ sub _sanity_ok {
ajax '/ajax/control/admin/topology/add' => require_any_role [qw(admin port_control)] => sub {
send_error('Bad Request', 400) unless _sanity_ok();
my $device = schema('netdisco')->resultset('Topology')
my $device = schema(vars->{'tenant'})->resultset('Topology')
->create({
dev1 => param('dev1'),
port1 => param('port1'),
@@ -46,7 +46,7 @@ ajax '/ajax/control/admin/topology/add' => require_any_role [qw(admin port_contr
# re-set remote device details in affected ports
# could fail for bad device or port names
try {
schema('netdisco')->txn_do(sub {
schema(vars->{'tenant'})->txn_do(sub {
# only work on root_ips
my $left = get_device(param('dev1'));
my $right = get_device(param('dev2'));
@@ -84,8 +84,8 @@ ajax '/ajax/control/admin/topology/add' => require_any_role [qw(admin port_contr
ajax '/ajax/control/admin/topology/del' => require_any_role [qw(admin port_control)] => sub {
send_error('Bad Request', 400) unless _sanity_ok();
schema('netdisco')->txn_do(sub {
my $device = schema('netdisco')->resultset('Topology')
schema(vars->{'tenant'})->txn_do(sub {
my $device = schema(vars->{'tenant'})->resultset('Topology')
->search({
dev1 => param('dev1'),
port1 => param('port1'),
@@ -97,7 +97,7 @@ ajax '/ajax/control/admin/topology/del' => require_any_role [qw(admin port_contr
# re-set remote device details in affected ports
# could fail for bad device or port names
try {
schema('netdisco')->txn_do(sub {
schema(vars->{'tenant'})->txn_do(sub {
# only work on root_ips
my $left = get_device(param('dev1'));
my $right = get_device(param('dev2'));
@@ -133,7 +133,7 @@ ajax '/ajax/control/admin/topology/del' => require_any_role [qw(admin port_contr
};
ajax '/ajax/content/admin/topology' => require_any_role [qw(admin port_control)] => sub {
my $set = schema('netdisco')->resultset('Topology')
my $set = schema(vars->{'tenant'})->resultset('Topology')
->search({},{order_by => [qw/dev1 dev2 port1/]});
content_type('text/html');

View File

@@ -23,7 +23,7 @@ register_admin_task(
get '/ajax/content/admin/undiscoveredneighbors' => require_role admin => sub {
my @results
= schema('netdisco')->resultset('Virtual::UndiscoveredNeighbors')->hri->all;
= schema(vars->{'tenant'})->resultset('Virtual::UndiscoveredNeighbors')->hri->all;
return unless scalar @results;
if ( request->is_ajax ) {

View File

@@ -18,7 +18,7 @@ ajax '/ajax/control/admin/userlog/data' => require_role admin => sub {
send_error( 'Missing parameter', 400 )
unless ( param('draw') && param('draw') =~ /\d+/ );
my $rs = schema('netdisco')->resultset('UserLog');
my $rs = schema(vars->{'tenant'})->resultset('UserLog');
my $exp_params = expand_hash( scalar params );
@@ -41,18 +41,18 @@ ajax '/ajax/control/admin/userlog/data' => require_role admin => sub {
ajax '/ajax/control/admin/userlog/del' => require_role admin => sub {
send_error( 'Missing entry', 400 ) unless param('entry');
schema('netdisco')->txn_do(
schema(vars->{'tenant'})->txn_do(
sub {
my $device = schema('netdisco')->resultset('UserLog')
my $device = schema(vars->{'tenant'})->resultset('UserLog')
->search( { entry => param('entry') } )->delete;
}
);
};
ajax '/ajax/control/admin/userlog/delall' => require_role admin => sub {
schema('netdisco')->txn_do(
schema(vars->{'tenant'})->txn_do(
sub {
my $device = schema('netdisco')->resultset('UserLog')->delete;
my $device = schema(vars->{'tenant'})->resultset('UserLog')->delete;
}
);
};

View File

@@ -34,8 +34,8 @@ sub _make_password {
ajax '/ajax/control/admin/users/add' => require_role setting('defanged_admin') => sub {
send_error('Bad Request', 400) unless _sanity_ok();
schema('netdisco')->txn_do(sub {
my $user = schema('netdisco')->resultset('User')
schema(vars->{'tenant'})->txn_do(sub {
my $user = schema(vars->{'tenant'})->resultset('User')
->create({
username => param('username'),
password => _make_password(param('password')),
@@ -53,8 +53,8 @@ ajax '/ajax/control/admin/users/add' => require_role setting('defanged_admin') =
ajax '/ajax/control/admin/users/del' => require_role setting('defanged_admin') => sub {
send_error('Bad Request', 400) unless _sanity_ok();
schema('netdisco')->txn_do(sub {
schema('netdisco')->resultset('User')
schema(vars->{'tenant'})->txn_do(sub {
schema(vars->{'tenant'})->resultset('User')
->find({username => param('username')})->delete;
});
};
@@ -62,8 +62,8 @@ ajax '/ajax/control/admin/users/del' => require_role setting('defanged_admin') =
ajax '/ajax/control/admin/users/update' => require_role setting('defanged_admin') => sub {
send_error('Bad Request', 400) unless _sanity_ok();
schema('netdisco')->txn_do(sub {
my $user = schema('netdisco')->resultset('User')
schema(vars->{'tenant'})->txn_do(sub {
my $user = schema(vars->{'tenant'})->resultset('User')
->find({username => param('username')});
return unless $user;
@@ -83,7 +83,7 @@ ajax '/ajax/control/admin/users/update' => require_role setting('defanged_admin'
};
get '/ajax/content/admin/users' => require_role admin => sub {
my @results = schema('netdisco')->resultset('User')
my @results = schema(vars->{'tenant'})->resultset('User')
->search(undef, {
'+columns' => {
created => \"to_char(creation, 'YYYY-MM-DD HH24:MI')",