You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ngcp-panel/lib/NGCP/Panel/Model/Storage.pm

64 lines
1.3 KiB

package NGCP::Panel::Model::Storage;
use Sipwise::Base;
use Moose;
use XML::Simple;
use NGCP::Schema;
use parent 'Catalyst::Component';
__PACKAGE__->config(
connectors => [],
);
has connectors => (
is => 'rw',
);
sub COMPONENT {
my ($class, $app, $args) = @_;
$args = $class->merge_config_hashes($class->config, $args);
my $self = $class->new($app, $args);
$self->connect_storage();
return $self;
}
sub get_config_filename {
return '/etc/ngcp-panel/provisioning.conf';
}
sub add_connector {
my ($self, $conn) = @_;
$self->connectors([@{$self->connectors // []},
NGCP::Schema->connect($conn)]);
return;
}
sub connect_storage {
my ($self, $c) = @_;
unless (@{$self->config->{connectors}}) {
my $conf = XML::Simple->new->XMLin(get_config_filename(), ForceArray => 1);
if ($conf && $conf->{ngcp_storage_info}) {
my $connectors = $conf->{ngcp_storage_info}->[0]->{connectors} // [];
map { $self->add_connector($_); } @$connectors;
}
}
return;
}
sub resultset {
my ($self, $rs) = @_;
return unless $self->connectors->[0];
# TODO: only one is used now, support multiple storages at once
return $self->connectors->[0]->resultset($rs);
}
1;
# vim: set tabstop=4 expandtab