mirror of
https://github.com/ansible/awx.git
synced 2026-10-30 06:13:24 -02:30
[AAP-86051] Wrap bulk job launch create in serializer persistence context
Use DAB serializer_mediated_persistence_context on BulkJobLaunchSerializer so validate() rejection logs are not duplicated by bulk workflow node audit. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -43,7 +43,7 @@ from rest_framework.utils.serializer_helpers import ReturnList
|
||||
from polymorphic.models import PolymorphicModel
|
||||
|
||||
# django-ansible-base
|
||||
from ansible_base.lib.serializers.mixins import CleanTextMixin
|
||||
from ansible_base.lib.serializers.mixins import CleanTextMixin, serializer_mediated_persistence_context
|
||||
from ansible_base.lib.utils.bulk_validation_audit import audit_bulk_model_instances
|
||||
from ansible_base.lib.utils.models import get_type_for_model
|
||||
from ansible_base.lib.utils.settings import get_setting
|
||||
@@ -5278,6 +5278,10 @@ class BulkJobLaunchSerializer(PromptFieldCleanTextMixin, serializers.Serializer)
|
||||
)
|
||||
|
||||
def create(self, validated_data):
|
||||
with serializer_mediated_persistence_context():
|
||||
return self._create_bulk_job_launch(validated_data)
|
||||
|
||||
def _create_bulk_job_launch(self, validated_data):
|
||||
request = self.context.get('request', None)
|
||||
launch_user = request.user if request else None
|
||||
job_node_data = validated_data.pop('jobs')
|
||||
|
||||
@@ -49,6 +49,19 @@ def test_audit_bulk_model_instances_logs_host_description_on_bulk_create(caplog)
|
||||
assert 'main.Host' in caplog.text
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_audit_workflow_job_nodes_skips_when_serializer_already_logged(caplog):
|
||||
from ansible_base.lib.utils.validation_signals import register_serializer_validation_rejection
|
||||
|
||||
wfj = WorkflowJob.objects.create(name='wf-audit-limit-dedupe')
|
||||
node = WorkflowJobNode(workflow_job=wfj, identifier='wf-node-1')
|
||||
node.limit = '<script>x</script>'
|
||||
register_serializer_validation_rejection('main.WorkflowJobNode', 'limit')
|
||||
with caplog.at_level(logging.WARNING, logger=LOGGER):
|
||||
audit_workflow_job_nodes_for_bulk_create([node])
|
||||
assert 'ORM bypass' not in caplog.text
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_audit_workflow_job_nodes_logs_limit_pseudo_field(caplog):
|
||||
wfj = WorkflowJob.objects.create(name='wf-audit-limit')
|
||||
|
||||
Reference in New Issue
Block a user