#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

@@ -20,7 +20,7 @@ swagger_path {
],
responses => { default => {} },
}, get '/api/v1/object/device/:ip' => require_role api => sub {
my $device = try { schema('netdisco')->resultset('Device')
my $device = try { schema(vars->{'tenant'})->resultset('Device')
->find( params->{ip} ) } or send_error('Bad Device', 404);
return to_json $device->TO_JSON;
};
@@ -39,7 +39,7 @@ foreach my $rel (qw/device_ips vlans ports modules port_vlans wireless_ports ssi
],
responses => { default => {} },
}, get "/api/v1/object/device/:ip/$rel" => require_role api => sub {
my $rows = try { schema('netdisco')->resultset('Device')
my $rows = try { schema(vars->{'tenant'})->resultset('Device')
->find( params->{ip} )->$rel } or send_error('Bad Device', 404);
return to_json [ map {$_->TO_JSON} $rows->all ];
};
@@ -65,7 +65,7 @@ foreach my $rel (qw/nodes active_nodes nodes_with_age active_nodes_with_age vlan
responses => { default => {} },
}, get qr{/api/v1/object/device/(?<ip>[^/]+)/port/(?<port>.+)/${rel}$} => require_role api => sub {
my $params = captures;
my $rows = try { schema('netdisco')->resultset('DevicePort')
my $rows = try { schema(vars->{'tenant'})->resultset('DevicePort')
->find( $$params{port}, $$params{ip} )->$rel }
or send_error('Bad Device or Port', 404);
return to_json [ map {$_->TO_JSON} $rows->all ];
@@ -92,7 +92,7 @@ foreach my $rel (qw/power properties ssid wireless agg_master neighbor last_node
responses => { default => {} },
}, get qr{/api/v1/object/device/(?<ip>[^/]+)/port/(?<port>.+)/${rel}$} => require_role api => sub {
my $params = captures;
my $row = try { schema('netdisco')->resultset('DevicePort')
my $row = try { schema(vars->{'tenant'})->resultset('DevicePort')
->find( $$params{port}, $$params{ip} )->$rel }
or send_error('Bad Device or Port', 404);
return to_json $row->TO_JSON;
@@ -119,7 +119,7 @@ swagger_path {
responses => { default => {} },
}, get qr{/api/v1/object/device/(?<ip>[^/]+)/port/(?<port>.+)$} => require_role api => sub {
my $params = captures;
my $port = try { schema('netdisco')->resultset('DevicePort')
my $port = try { schema(vars->{'tenant'})->resultset('DevicePort')
->find( $$params{port}, $$params{ip} ) }
or send_error('Bad Device or Port', 404);
return to_json $port->TO_JSON;
@@ -145,7 +145,7 @@ swagger_path {
responses => { default => {} },
}, get '/api/v1/object/device/:ip/nodes' => require_role api => sub {
my $active = (params->{active_only} and ('true' eq params->{active_only})) ? 1 : 0;
my $rows = try { schema('netdisco')->resultset('Node')
my $rows = try { schema(vars->{'tenant'})->resultset('Node')
->search({ switch => params->{ip}, ($active ? (-bool => 'active') : ()) }) }
or send_error('Bad Device', 404);
return to_json [ map {$_->TO_JSON} $rows->all ];
@@ -172,7 +172,7 @@ swagger_path {
responses => { default => {} },
}, get '/api/v1/object/vlan/:vlan/nodes' => require_role api => sub {
my $active = (params->{active_only} and ('true' eq params->{active_only})) ? 1 : 0;
my $rows = try { schema('netdisco')->resultset('Node')
my $rows = try { schema(vars->{'tenant'})->resultset('Node')
->search({ vlan => params->{vlan}, ($active ? (-bool => 'active') : ()) }) }
or send_error('Bad VLAN', 404);
return to_json [ map {$_->TO_JSON} $rows->all ];