MT#60575 dynamically load provisioning templates module

Change-Id: Ibff509825f82a75c9b0221505a1673d78b401989
mr12.5
Rene Krenn 9 months ago
parent 551cc2fb98
commit 9c103302c8

@ -9,7 +9,7 @@ use Data::HAL::Link qw();
use HTTP::Headers qw();
use HTTP::Status qw(:constants);
use NGCP::Panel::Utils::ProvisioningTemplates qw();
use NGCP::Panel::Utils::Generic qw(run_module_method get_module_var);
use NGCP::Panel::Utils::DateTime qw();
sub allowed_methods{
@ -60,7 +60,7 @@ sub create_item {
my ($self, $c, $resource, $form, $process_extras) = @_;
$resource->{yaml} = NGCP::Panel::Utils::ProvisioningTemplates::dump_template($c,
$resource->{yaml} = run_module_method('Utils::ProvisioningTemplates::dump_template',$c,
$resource->{id},
$resource->{name},
delete $resource->{template},

@ -11,7 +11,7 @@ require Catalyst::ActionRole::ACL;
require NGCP::Panel::Role::HTTPMethods;
require Catalyst::ActionRole::RequireSSL;
use Scalar::Util qw/blessed/;
use NGCP::Panel::Utils::ProvisioningTemplates qw();
use NGCP::Panel::Utils::Generic qw(run_module_method get_module_var);
use NGCP::Panel::Role::API::Subscribers qw();
sub allowed_methods{
@ -293,7 +293,7 @@ sub update_item_model {
my($self, $c, $item, $old_resource, $resource, $form, $process_extras) = @_;
$resource->{yaml} = NGCP::Panel::Utils::ProvisioningTemplates::dump_template($c,
$resource->{yaml} = run_module_method('Utils::ProvisioningTemplates::dump_template',$c,
$resource->{id},
$resource->{name},
delete $resource->{template},
@ -352,16 +352,16 @@ sub post {
if (!$non_json_data || !$data) {
my $context;
try {
$context = NGCP::Panel::Utils::ProvisioningTemplates::provision_begin(
$context = run_module_method('Utils::ProvisioningTemplates::provision_begin',
c => $c,
purge => $purge,
);
NGCP::Panel::Utils::ProvisioningTemplates::provision_commit_row(
run_module_method('Utils::ProvisioningTemplates::provision_commit_row',
c => $c,
context => $context,
'values' => $resource,
);
NGCP::Panel::Utils::ProvisioningTemplates::provision_finish(
run_module_method('Utils::ProvisioningTemplates::provision_finish',
c => $c,
context => $context,
);
@ -371,13 +371,13 @@ sub post {
));
$c->response->header(Location => sprintf('%s%d', NGCP::Panel::Role::API::Subscribers::dispatch_path(), $context->{subscriber}->{id}));
} catch($e) {
NGCP::Panel::Utils::ProvisioningTemplates::provision_cleanup($c, $context);
run_module_method('Utils::ProvisioningTemplates::provision_cleanup',$c, $context);
$self->error($c, HTTP_INTERNAL_SERVER_ERROR, "Provisioning template '$id' failed", $e);
return;
}
} else {
try {
my ($linecount,$errors) = NGCP::Panel::Utils::ProvisioningTemplates::process_csv(
my ($linecount,$errors) = run_module_method('Utils::ProvisioningTemplates::process_csv',
c => $c,
data => \$data,
purge => $purge,

@ -9,7 +9,7 @@ use NGCP::Panel::Utils::Message;
use NGCP::Panel::Utils::Navigation;
use NGCP::Panel::Utils::Datatables;
use NGCP::Panel::Utils::DateTime qw();
use NGCP::Panel::Utils::ProvisioningTemplates qw();
use NGCP::Panel::Utils::Generic qw(run_module_method get_module_var);
use NGCP::Panel::Form::ProvisioningTemplate::Admin qw();
use NGCP::Panel::Form::ProvisioningTemplate::Reseller qw();
@ -25,7 +25,7 @@ sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRol
sub template_list :Chained('/') :PathPart('batchprovisioning') :CaptureArgs(0) {
my ( $self, $c ) = @_;
NGCP::Panel::Utils::ProvisioningTemplates::load_template_map($c);
run_module_method('Utils::ProvisioningTemplates::load_template_map',$c);
$c->stash->{template_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [
{ name => "id", search => 1, title => $c->loc('#') },
@ -90,7 +90,7 @@ sub do_template_form :Chained('template_base') :PathPart('form') :Args(0) {
$c->log->debug($c->stash->{provisioning_template_name});
$c->log->debug($c->uri_for_action('/batchprovisioning/root'));
NGCP::Panel::Utils::ProvisioningTemplates::create_provisioning_template_form(
run_module_method('Utils::ProvisioningTemplates::create_provisioning_template_form',
c => $c,
base_uri => $c->uri_for_action('/batchprovisioning/root'),
);
@ -125,7 +125,7 @@ sub do_template_upload :Chained('template_base') :PathPart('upload') :Args(0) {
my $data = $upload->slurp;
try {
my ($linecount,$errors) = NGCP::Panel::Utils::ProvisioningTemplates::process_csv(
my ($linecount,$errors) = run_module_method('Utils::ProvisioningTemplates::process_csv',
c => $c,
data => \$data,
purge => $c->req->params->{purge_existing},

@ -4,7 +4,7 @@ use HTML::FormHandler::Moose;
extends 'HTML::FormHandler';
use HTML::FormHandler::Widget::Block::Bootstrap;
use NGCP::Panel::Utils::ProvisioningTemplates qw();
use NGCP::Panel::Utils::Generic qw(run_module_method get_module_var);
use NGCP::Panel::Utils::Generic qw(trim);
use Storable qw();
@ -137,8 +137,8 @@ sub validate_yaml {
my ($self, $field) = @_;
eval {
my $data = NGCP::Panel::Utils::ProvisioningTemplates::parse_template(undef, undef, undef, $field->value);
NGCP::Panel::Utils::ProvisioningTemplates::validate_template($data);
my $data = run_module_method('Utils::ProvisioningTemplates::parse_template',undef, undef, undef, $field->value);
run_module_method('Utils::ProvisioningTemplates::validate_template',$data);
};
if ($@) {
$field->add_error(trim($@));
@ -164,7 +164,7 @@ sub validate {
$reseller = $c->model('DB')->resultset('resellers')->find($resource->{reseller_id}) if $resource->{reseller_id};
eval {
NGCP::Panel::Utils::ProvisioningTemplates::validate_template_name($c,
run_module_method('Utils::ProvisioningTemplates::validate_template_name',$c,
$field->value,$c->stash->{old_name},$reseller);
};
if ($@) {

@ -12,7 +12,7 @@ use HTTP::Status qw(:constants);
use Scalar::Util qw/blessed/;
use JSON qw();
use NGCP::Panel::Utils::ProvisioningTemplates qw();
use NGCP::Panel::Utils::Generic qw(run_module_method get_module_var);
use NGCP::Panel::Utils::API qw();
use NGCP::Panel::Utils::Generic qw(trim);
@ -21,7 +21,7 @@ sub _item_rs {
my ($self, $c) = @_;
unless ($c->stash->{provisioning_templates}) {
NGCP::Panel::Utils::ProvisioningTemplates::load_template_map($c);
run_module_method('Utils::ProvisioningTemplates::load_template_map',$c);
}
my $editable;
@ -100,10 +100,10 @@ sub get_form {
my ($self, $c, $type, $id) = @_;
if ($type and 'form' eq lc($type)) {
unless ($c->stash->{provisioning_templates}) {
NGCP::Panel::Utils::ProvisioningTemplates::load_template_map($c);
run_module_method('Utils::ProvisioningTemplates::load_template_map',$c);
}
$c->stash->{provisioning_template_name} = $id;
return NGCP::Panel::Utils::ProvisioningTemplates::get_provisioning_template_form($c);
return run_module_method('Utils::ProvisioningTemplates::get_provisioning_template_form',$c);
} else {
if ($c->user->is_superuser) {
return NGCP::Panel::Form::get("NGCP::Panel::Form::ProvisioningTemplate::AdminAPI", $c);
@ -126,12 +126,12 @@ sub resource_from_item {
$resource{template} = delete $resource{yaml};
} elsif ('json' eq lc($c->req->param('format'))) {
eval {
$resource{template} = _template_as_json(NGCP::Panel::Utils::ProvisioningTemplates::parse_template($c, $resource{id}, $resource{name}, delete $resource{yaml}));
$resource{template} = _template_as_json(run_module_method('Utils::ProvisioningTemplates::parse_template',$c, $resource{id}, $resource{name}, delete $resource{yaml}));
};
}
} else {
eval {
$resource{template} = NGCP::Panel::Utils::ProvisioningTemplates::parse_template($c, $resource{id}, $resource{name}, delete $resource{yaml});
$resource{template} = run_module_method('Utils::ProvisioningTemplates::parse_template',$c, $resource{id}, $resource{name}, delete $resource{yaml});
};
}
} else {
@ -147,7 +147,7 @@ sub resource_from_item {
if ($c->req->param('format')) {
if (grep { $_ eq lc($c->req->param('format')); } qw(yml yaml)) {
eval {
$resource{template} = NGCP::Panel::Utils::ProvisioningTemplates::dump_template($c, $resource{id}, $resource{name}, $resource{template});
$resource{template} = run_module_method('Utils::ProvisioningTemplates::dump_template',$c, $resource{id}, $resource{name}, $resource{template});
};
} elsif ('json' eq lc($c->req->param('format'))) {
$resource{template} = _template_as_json($resource{template});
@ -183,7 +183,7 @@ sub item_by_id {
return unless length($id);
unless ($c->stash->{provisioning_templates}) {
NGCP::Panel::Utils::ProvisioningTemplates::load_template_map($c);
run_module_method('Utils::ProvisioningTemplates::load_template_map',$c);
}
my $item = $c->stash->{provisioning_templates}->{$id};
@ -212,7 +212,7 @@ sub check_resource {
my $reseller;
$reseller = $c->model('DB')->resultset('resellers')->find(
$resource->{reseller_id}) if $resource->{reseller_id};
NGCP::Panel::Utils::ProvisioningTemplates::validate_template_name($c,
run_module_method('Utils::ProvisioningTemplates::validate_template_name',$c,
$resource->{name},($old_resource ? $old_resource->{name} : undef),
$reseller);
};
@ -224,12 +224,12 @@ sub check_resource {
eval {
if ($c->req->param('format')) {
if (grep { $_ eq lc($c->req->param('format')); } qw(yml yaml)) {
$resource->{template} = NGCP::Panel::Utils::ProvisioningTemplates::parse_template($c, $resource->{id}, $resource->{name}, $resource->{template});
$resource->{template} = run_module_method('Utils::ProvisioningTemplates::parse_template',$c, $resource->{id}, $resource->{name}, $resource->{template});
} elsif ('json' eq lc($c->req->param('format'))) {
$resource->{template} = _template_from_json($resource->{template});
}
}
NGCP::Panel::Utils::ProvisioningTemplates::validate_template($resource->{template});
run_module_method('Utils::ProvisioningTemplates::validate_template',$resource->{template});
};
if ($@) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY,trim($@));

@ -8,9 +8,9 @@ use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
$VERSION = 1.00;
@ISA = qw(Exporter);
@EXPORT = ();
@EXPORT_OK = qw(is_int is_integer is_decimal merge compare is_false is_true get_inflated_columns_all hash2obj mime_type_to_extension extension_to_mime_type array_to_map escape_js escape_uri trim escape_search_string_pattern);
%EXPORT_TAGS = ( DEFAULT => [qw(&is_int &is_integer &is_decimal &merge &compare &is_false &is_true &mime_type_to_extension &extension_to_mime_type &array_to_map &escape_js &escape_uri &trim &escape_search_string_pattern)],
all => [qw(&is_int &is_integer &is_decimal &merge &compare &is_false &is_true &get_inflated_columns_all &hash2obj &mime_type_to_extension &extension_to_mime_type &array_to_map &escape_js &escape_uri &trim &escape_search_string_pattern)]);
@EXPORT_OK = qw(is_int is_integer is_decimal merge compare is_false is_true get_inflated_columns_all hash2obj mime_type_to_extension extension_to_mime_type array_to_map escape_js escape_uri trim escape_search_string_pattern run_module_method get_module_var);
%EXPORT_TAGS = ( DEFAULT => [qw(&is_int &is_integer &is_decimal &merge &compare &is_false &is_true &mime_type_to_extension &extension_to_mime_type &array_to_map &escape_js &escape_uri &trim &escape_search_string_pattern &run_module_method &get_module_var)],
all => [qw(&is_int &is_integer &is_decimal &merge &compare &is_false &is_true &get_inflated_columns_all &hash2obj &mime_type_to_extension &extension_to_mime_type &array_to_map &escape_js &escape_uri &trim &escape_search_string_pattern &run_module_method &get_module_var)]);
use Hash::Merge;
use Data::Compare qw//;
@ -263,4 +263,32 @@ sub escape_search_string_pattern {
}
sub _load_module {
my $package_element = shift;
eval {
(my $module = $package_element) =~ s/::[a-zA-Z_0-9]+$//g;
(my $file = $module) =~ s|::|/|g;
require $file . '.pm';
#$module->import();
1;
} or do {
die($@);
};
}
sub run_module_method {
my $method_name = 'NGCP::Panel::' . shift;
_load_module($method_name);
no strict "refs"; ## no critic (ProhibitNoStrict)
return $method_name->(@_);
}
sub get_module_var {
my $var_name = 'NGCP::Panel::' . shift;
_load_module($var_name);
no strict "refs"; ## no critic (ProhibitNoStrict)
return @{$var_name} if wantarray;
return ${$var_name};
}
1;

Loading…
Cancel
Save