diff --git a/lib/App/Netdisco/Worker.pm b/lib/App/Netdisco/Worker.pm index c6d28f83..be2c6c8c 100644 --- a/lib/App/Netdisco/Worker.pm +++ b/lib/App/Netdisco/Worker.pm @@ -7,10 +7,9 @@ use Module::Load (); use Dancer ':syntax'; # load worker plugins for our workers -# NOTE: this package is loaded for all actions whether backend or netdisco-do sub load_worker_plugins { - my $plugin_list = shift; + my ($action, $plugin_list) = @_; foreach my $plugin (@$plugin_list) { $plugin =~ s/^X::/+App::NetdiscoX::Worker::Plugin::/; @@ -18,12 +17,17 @@ sub load_worker_plugins { if $plugin !~ m/^\+/; $plugin =~ s/^\+//; - $ENV{PLUGIN_LOAD_DEBUG} && debug "loading Netdisco plugin $plugin"; - eval { Module::Load::load $plugin }; + next unless $plugin =~ m/::Plugin::${action}(?:::|$)/i; + + debug "loading worker plugin $plugin"; + Module::Load::load $plugin; } } -load_worker_plugins( setting('extra_worker_plugins') || [] ); -load_worker_plugins( setting('worker_plugins') || [] ); +sub import { + my ($class, $action) = @_; + load_worker_plugins( $action, setting('extra_worker_plugins') || [] ); + load_worker_plugins( $action, setting('worker_plugins') || [] ); +} true; diff --git a/lib/App/Netdisco/Worker/Runner.pm b/lib/App/Netdisco/Worker/Runner.pm index 7d001450..f98e120a 100644 --- a/lib/App/Netdisco/Worker/Runner.pm +++ b/lib/App/Netdisco/Worker/Runner.pm @@ -2,12 +2,11 @@ package App::Netdisco::Worker::Runner; use Dancer qw/:moose :syntax/; use Dancer::Factory::Hook; - -use App::Netdisco::Worker; use aliased 'App::Netdisco::Worker::Status'; use Try::Tiny; use Moo::Role; +use Module::Load (); use Scope::Guard 'guard'; use namespace::clean; @@ -33,6 +32,9 @@ sub run { unless ref $job eq 'App::Netdisco::Backend::Job'; $self->job($job); + my $action = $job->action; + Module::Load::load 'App::Netdisco::Worker', $action; + my @newuserconf = (); my @userconf = @{ setting('device_auth') || [] }; @@ -57,7 +59,6 @@ sub run { my $guard = guard { set(device_auth => \@userconf) }; set(device_auth => \@newuserconf); - my $action = $job->action; my @phase_hooks = grep { m/^nd2_${action}_/ } @{ (setting('_nd2worker_hooks') || []) };