@@ -48,6 +48,7 @@ class Meta:
48
48
"created_at" ,
49
49
"modified_at" ,
50
50
"status_message" ,
51
+ "awx_token_id" ,
51
52
]
52
53
read_only_fields = [
53
54
"id" ,
@@ -84,6 +85,7 @@ class Meta:
84
85
"created_at" ,
85
86
"modified_at" ,
86
87
"status_message" ,
88
+ "awx_token_id" ,
87
89
]
88
90
read_only_fields = ["id" , "created_at" , "modified_at" ]
89
91
@@ -111,12 +113,27 @@ def to_representation(self, activation):
111
113
"created_at" : activation .created_at ,
112
114
"modified_at" : activation .modified_at ,
113
115
"status_message" : activation .status_message ,
116
+ "awx_token_id" : activation .awx_token_id ,
114
117
}
115
118
116
119
117
120
class ActivationCreateSerializer (serializers .ModelSerializer ):
118
121
"""Serializer for creating the Activation."""
119
122
123
+ class Meta :
124
+ model = models .Activation
125
+ fields = [
126
+ "name" ,
127
+ "description" ,
128
+ "is_enabled" ,
129
+ "decision_environment_id" ,
130
+ "rulebook_id" ,
131
+ "extra_var_id" ,
132
+ "user" ,
133
+ "restart_policy" ,
134
+ "awx_token_id" ,
135
+ ]
136
+
120
137
rulebook_id = serializers .IntegerField (
121
138
validators = [validators .check_if_rulebook_exists ]
122
139
)
@@ -130,25 +147,26 @@ class ActivationCreateSerializer(serializers.ModelSerializer):
130
147
)
131
148
user = serializers .HiddenField (default = serializers .CurrentUserDefault ())
132
149
150
+ awx_token_id = serializers .IntegerField (
151
+ allow_null = True ,
152
+ validators = [validators .check_if_awx_token_exists ],
153
+ required = False ,
154
+ )
155
+
133
156
def validate (self , data ):
134
157
user = data ["user" ]
135
- validators .check_awx_tokens (user .id )
158
+ awx_token = models .AwxToken .objects .filter (
159
+ id = data .get ("awx_token_id" ),
160
+ ).first ()
161
+ if awx_token and awx_token .user != user :
162
+ raise serializers .ValidationError (
163
+ "The Awx Token does not belong to the user."
164
+ )
165
+ if not awx_token :
166
+ validate_rulebook_token (data ["rulebook_id" ])
136
167
137
168
return data
138
169
139
- class Meta :
140
- model = models .Activation
141
- fields = [
142
- "name" ,
143
- "description" ,
144
- "is_enabled" ,
145
- "decision_environment_id" ,
146
- "rulebook_id" ,
147
- "extra_var_id" ,
148
- "user" ,
149
- "restart_policy" ,
150
- ]
151
-
152
170
def create (self , validated_data ):
153
171
rulebook_id = validated_data ["rulebook_id" ]
154
172
rulebook = models .Rulebook .objects .get (id = rulebook_id )
@@ -225,6 +243,7 @@ class Meta:
225
243
"modified_at" ,
226
244
"restarted_at" ,
227
245
"status_message" ,
246
+ "awx_token_id" ,
228
247
]
229
248
read_only_fields = ["id" , "created_at" , "modified_at" , "restarted_at" ]
230
249
@@ -290,6 +309,7 @@ def to_representation(self, activation):
290
309
"modified_at" : activation .modified_at ,
291
310
"restarted_at" : restarted_at ,
292
311
"status_message" : activation .status_message ,
312
+ "awx_token_id" : activation .awx_token_id ,
293
313
}
294
314
295
315
@@ -305,10 +325,17 @@ class PostActivationSerializer(serializers.ModelSerializer):
305
325
allow_null = True ,
306
326
validators = [validators .check_if_extra_var_exists ],
307
327
)
328
+ awx_token_id = serializers .IntegerField (
329
+ allow_null = True ,
330
+ validators = [validators .check_if_awx_token_exists ],
331
+ )
332
+ rulebook_id = serializers .IntegerField (allow_null = True )
308
333
309
334
def validate (self , data ):
310
- user_id = self .initial_data ["user_id" ]
311
- validators .check_awx_tokens (user_id )
335
+ awx_token = data .get ("awx_token_id" )
336
+
337
+ if not awx_token :
338
+ validate_rulebook_token (data ["rulebook_id" ])
312
339
313
340
return data
314
341
@@ -323,6 +350,8 @@ class Meta:
323
350
"user_id" ,
324
351
"created_at" ,
325
352
"modified_at" ,
353
+ "awx_token_id" ,
354
+ "rulebook_id" ,
326
355
]
327
356
read_only_fields = [
328
357
"id" ,
@@ -356,3 +385,23 @@ def parse_validation_errors(errors: dict) -> str:
356
385
messages = {key : str (error [0 ]) for key , error in errors .items () if error }
357
386
358
387
return str (messages )
388
+
389
+
390
+ def validate_rulebook_token (rulebook_id : int ) -> None :
391
+ """Validate if the rulebook requires an Awx Token."""
392
+ rulebook = models .Rulebook .objects .get (id = rulebook_id )
393
+
394
+ # TODO: rulesets are stored as a string in the rulebook model
395
+ # proper instrospection should require a validation of the
396
+ # rulesets. https://issues.redhat.com/browse/AAP-19202
397
+ try :
398
+ rulesets_data = rulebook .get_rulesets_data ()
399
+ except ValueError :
400
+ raise serializers .ValidationError ("Invalid rulebook data." )
401
+
402
+ if validators .check_rulesets_require_token (
403
+ rulesets_data ,
404
+ ):
405
+ raise serializers .ValidationError (
406
+ "The rulebook requires an Awx Token." ,
407
+ )
0 commit comments