1- import inspect
2- from typing import List , Union
31from enum import Enum
4- from . plugin_file import PluginFile
2+ from typing import List , Union
53from aztk .internal import ConfigurationBase
4+ from aztk .error import InvalidPluginConfigurationError
5+ from .plugin_file import PluginFile
6+
7+ class PluginTarget (Enum ):
8+ """
9+ Where this plugin should run
10+ """
11+ SparkContainer = "spark-container" ,
12+ Host = "host" ,
13+
14+
15+ class PluginTargetRole (Enum ):
16+ Master = "master"
17+ Worker = "worker"
18+ All = "all-nodes"
19+
20+
621
722class PluginPort :
823 """
@@ -12,8 +27,7 @@ class PluginPort:
1227 :param name: [Optional] name to differentiate ports if you have multiple
1328 """
1429
15- def __init__ (self , internal : int , public : Union [int , bool ] = False , name = None ):
16-
30+ def __init__ (self , internal : int , public : Union [int , bool ]= False , name = None ):
1731 self .internal = internal
1832 self .expose_publicly = bool (public )
1933 self .public_port = None
@@ -26,11 +40,6 @@ def __init__(self, internal: int, public: Union[int, bool] = False, name=None):
2640 self .name = name
2741
2842
29- class PluginRunTarget (Enum ):
30- Master = "master"
31- Worker = "worker"
32- All = "all-nodes"
33-
3443
3544
3645class PluginConfiguration (ConfigurationBase ):
@@ -45,15 +54,17 @@ class PluginConfiguration(ConfigurationBase):
4554
4655 def __init__ (self ,
4756 name : str ,
48- ports : List [PluginPort ] = None ,
49- files : List [PluginFile ] = None ,
50- execute : str = None ,
57+ ports : List [PluginPort ]= None ,
58+ files : List [PluginFile ]= None ,
59+ execute : str = None ,
5160 args = None ,
5261 env = None ,
53- run_on : PluginRunTarget = PluginRunTarget .Master ):
62+ target_role : PluginTargetRole = PluginTargetRole .Master ,
63+ target : PluginTarget = PluginTarget .SparkContainer ):
5464 self .name = name
5565 # self.docker_image = docker_image
56- self .run_on = run_on
66+ self .target = target
67+ self .target_role = target_role
5768 self .ports = ports or []
5869 self .files = files or []
5970 self .args = args or []
@@ -64,11 +75,18 @@ def has_arg(self, name: str):
6475 for x in self .args :
6576 if x .name == name :
6677 return True
67- else :
68- return False
78+ return False
6979
7080 def validate (self ):
7181 self ._validate_required ([
7282 "name" ,
7383 "execute" ,
7484 ])
85+
86+ if not isinstance (self .target , PluginTarget ):
87+ raise InvalidPluginConfigurationError (
88+ "Target must be of type Plugin target but was {0}" .format (self .target ))
89+
90+ if not isinstance (self .target_role , PluginTargetRole ):
91+ raise InvalidPluginConfigurationError (
92+ "Target role must be of type Plugin target role but was {0}" .format (self .target ))
0 commit comments