11
11
from utilities .permissions import get_permission_for_model
12
12
from utilities .utils import copy_safe_request
13
13
14
+ from .. import util
14
15
from ..choices import ScriptExecutionStatusChoices
15
16
from ..filtersets import ScriptArtifactFilterSet , ScriptExecutionFilterSet , ScriptInstanceFilterSet , ScriptLogLineFilterSet
16
17
from ..models import ScriptArtifact , ScriptExecution , ScriptInstance , ScriptLogLine
@@ -35,14 +36,43 @@ class ScriptInstanceViewSet(NetBoxModelViewSet):
35
36
queryset = ScriptInstance .objects .all ()
36
37
serializer_class = ScriptInstanceSerializer
37
38
filterset_class = ScriptInstanceFilterSet
38
- http_method_names = ["get" , "patch" , "delete" ]
39
+
40
+ @action (detail = False , methods = ["post" ])
41
+ def load (self , request ):
42
+ permission = get_permission_for_model (self .queryset .model , "add" )
43
+
44
+ if not request .user .has_perm (permission ):
45
+ raise PermissionDenied (f"Missing permission: { permission } " )
46
+
47
+ scripts = util .load_scripts ()
48
+ script_instances = {script_instance .script_path : script_instance for script_instance in ScriptInstance .objects .all ()}
49
+ loaded_scripts = []
50
+
51
+ for script_path , script in scripts .items ():
52
+ if script_path not in script_instances :
53
+ script_name = getattr (script .Meta , "name" , script_path )
54
+ module_path , class_name = script_path .rsplit ("." , 1 )
55
+
56
+ script_instance = ScriptInstance (
57
+ name = script_name ,
58
+ module_path = module_path ,
59
+ class_name = class_name ,
60
+ description = script .description ,
61
+ task_queues = script .task_queues ,
62
+ group = script .group ,
63
+ weight = script .weight ,
64
+ )
65
+ script_instance .full_clean ()
66
+ script_instance .save ()
67
+ loaded_scripts .append (script_instance )
68
+
69
+ return Response (ScriptInstanceSerializer (loaded_scripts , many = True , context = {"request" : request }).data )
39
70
40
71
@action (detail = True , methods = ["post" ])
41
72
def run (self , request , pk ):
42
73
# TODO: Add schema definitions.
43
- # TODO: Consider refactoring serializers
44
74
45
- permission = get_permission_for_model (self .queryset .model , "sync " )
75
+ permission = get_permission_for_model (self .queryset .model , "run " )
46
76
if not request .user .has_perm (permission ):
47
77
raise PermissionDenied (f"Missing permission: { permission } " )
48
78
0 commit comments