From 09bd398a9ec02e16c07f5aaab72222d82a55bef2 Mon Sep 17 00:00:00 2001 From: John Westcott IV Date: Fri, 28 Apr 2023 11:27:01 -0400 Subject: [PATCH] Replacing depricated index_togeather with new indexes --- awx/main/migrations/0184_django_indexes.py | 1062 ++++++++++++++++++++ awx/main/models/events.py | 38 +- awx/main/models/rbac.py | 10 +- 3 files changed, 1086 insertions(+), 24 deletions(-) create mode 100644 awx/main/migrations/0184_django_indexes.py diff --git a/awx/main/migrations/0184_django_indexes.py b/awx/main/migrations/0184_django_indexes.py new file mode 100644 index 0000000000..cb9ad3aa1f --- /dev/null +++ b/awx/main/migrations/0184_django_indexes.py @@ -0,0 +1,1062 @@ +# Generated by Django 4.2 on 2023-05-09 19:02 + +import awx.main.fields +import awx.main.utils.polymorphic +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('contenttypes', '0002_remove_content_type_name'), + ('main', '0183_pre_django_upgrade'), + ] + + operations = [ + migrations.RenameIndex( + model_name='adhoccommandevent', + new_name='main_adhocc_ad_hoc__1e4d24_idx', + old_fields=('ad_hoc_command', 'job_created', 'uuid'), + ), + migrations.RenameIndex( + model_name='adhoccommandevent', + new_name='main_adhocc_ad_hoc__e72142_idx', + old_fields=('ad_hoc_command', 'job_created', 'event'), + ), + migrations.RenameIndex( + model_name='adhoccommandevent', + new_name='main_adhocc_ad_hoc__a57777_idx', + old_fields=('ad_hoc_command', 'job_created', 'counter'), + ), + migrations.RenameIndex( + model_name='inventoryupdateevent', + new_name='main_invent_invento_f72b21_idx', + old_fields=('inventory_update', 'job_created', 'uuid'), + ), + migrations.RenameIndex( + model_name='inventoryupdateevent', + new_name='main_invent_invento_364dcb_idx', + old_fields=('inventory_update', 'job_created', 'counter'), + ), + migrations.RenameIndex( + model_name='jobevent', + new_name='main_jobeve_job_id_40a56d_idx', + old_fields=('job', 'job_created', 'parent_uuid'), + ), + migrations.RenameIndex( + model_name='jobevent', + new_name='main_jobeve_job_id_3c4a4a_idx', + old_fields=('job', 'job_created', 'uuid'), + ), + migrations.RenameIndex( + model_name='jobevent', + new_name='main_jobeve_job_id_51c382_idx', + old_fields=('job', 'job_created', 'counter'), + ), + migrations.RenameIndex( + model_name='jobevent', + new_name='main_jobeve_job_id_0ddc6b_idx', + old_fields=('job', 'job_created', 'event'), + ), + migrations.RenameIndex( + model_name='projectupdateevent', + new_name='main_projec_project_449bbd_idx', + old_fields=('project_update', 'job_created', 'uuid'), + ), + migrations.RenameIndex( + model_name='projectupdateevent', + new_name='main_projec_project_69559a_idx', + old_fields=('project_update', 'job_created', 'counter'), + ), + migrations.RenameIndex( + model_name='projectupdateevent', + new_name='main_projec_project_c44b7c_idx', + old_fields=('project_update', 'job_created', 'event'), + ), + migrations.RenameIndex( + model_name='role', + new_name='main_rbac_r_content_979bdd_idx', + old_fields=('content_type', 'object_id'), + ), + migrations.RenameIndex( + model_name='roleancestorentry', + new_name='main_rbac_r_ancesto_b44606_idx', + old_fields=('ancestor', 'content_type_id', 'role_field'), + ), + migrations.RenameIndex( + model_name='roleancestorentry', + new_name='main_rbac_r_ancesto_22b9f0_idx', + old_fields=('ancestor', 'content_type_id', 'object_id'), + ), + migrations.RenameIndex( + model_name='roleancestorentry', + new_name='main_rbac_r_ancesto_c87b87_idx', + old_fields=('ancestor', 'descendent'), + ), + migrations.RenameIndex( + model_name='systemjobevent', + new_name='main_system_system__e39825_idx', + old_fields=('system_job', 'job_created', 'uuid'), + ), + migrations.RenameIndex( + model_name='systemjobevent', + new_name='main_system_system__73537a_idx', + old_fields=('system_job', 'job_created', 'counter'), + ), + migrations.AlterField( + model_name='activitystream', + name='unified_job', + field=models.ManyToManyField(blank=True, related_name='activity_stream_as_unified_job+', to='main.unifiedjob'), + ), + migrations.AlterField( + model_name='activitystream', + name='unified_job_template', + field=models.ManyToManyField(blank=True, related_name='activity_stream_as_unified_job_template+', to='main.unifiedjobtemplate'), + ), + migrations.AlterField( + model_name='credential', + name='created_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_created+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='credential', + name='modified_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_modified+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='credentialinputsource', + name='created_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_created+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='credentialinputsource', + name='modified_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_modified+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='credentialtype', + name='created_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_created+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='credentialtype', + name='modified_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_modified+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='custominventoryscript', + name='created_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_created+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='custominventoryscript', + name='modified_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_modified+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='executionenvironment', + name='created_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_created+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='executionenvironment', + name='credential', + field=models.ForeignKey( + blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)ss', to='main.credential' + ), + ), + migrations.AlterField( + model_name='executionenvironment', + name='modified_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_modified+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='executionenvironment', + name='organization', + field=models.ForeignKey( + blank=True, + default=None, + help_text='The organization used to determine access to this execution environment.', + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='main.organization', + ), + ), + migrations.AlterField( + model_name='group', + name='created_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_created+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='group', + name='modified_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_modified+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='host', + name='created_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_created+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='host', + name='modified_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_modified+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='host', + name='smart_inventories', + field=models.ManyToManyField(related_name='+', through='main.SmartInventoryMembership', to='main.inventory'), + ), + migrations.AlterField( + model_name='instancegroup', + name='credential', + field=models.ForeignKey( + blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)ss', to='main.credential' + ), + ), + migrations.AlterField( + model_name='inventory', + name='created_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_created+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='inventory', + name='modified_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_modified+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='job', + name='inventory', + field=models.ForeignKey( + blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)ss', to='main.inventory' + ), + ), + migrations.AlterField( + model_name='job', + name='project', + field=models.ForeignKey( + blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)ss', to='main.project' + ), + ), + migrations.AlterField( + model_name='job', + name='webhook_credential', + field=models.ForeignKey( + blank=True, + help_text='Personal Access Token for posting back the status to the service API', + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%(class)ss', + to='main.credential', + ), + ), + migrations.AlterField( + model_name='joblaunchconfig', + name='credentials', + field=models.ManyToManyField(related_name='%(class)ss', to='main.credential'), + ), + migrations.AlterField( + model_name='joblaunchconfig', + name='execution_environment', + field=models.ForeignKey( + blank=True, + default=None, + help_text='The container image to be used for execution.', + null=True, + on_delete=awx.main.utils.polymorphic.SET_NULL, + related_name='%(class)s_as_prompt', + to='main.executionenvironment', + ), + ), + migrations.AlterField( + model_name='joblaunchconfig', + name='instance_groups', + field=awx.main.fields.OrderedManyToManyField( + blank=True, editable=False, related_name='%(class)ss', through='main.JobLaunchConfigInstanceGroupMembership', to='main.instancegroup' + ), + ), + migrations.AlterField( + model_name='joblaunchconfig', + name='inventory', + field=models.ForeignKey( + blank=True, + default=None, + help_text='Inventory applied as a prompt, assuming job template prompts for inventory', + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%(class)ss', + to='main.inventory', + ), + ), + migrations.AlterField( + model_name='joblaunchconfig', + name='labels', + field=models.ManyToManyField(related_name='%(class)s_labels', to='main.label'), + ), + migrations.AlterField( + model_name='jobtemplate', + name='inventory', + field=models.ForeignKey( + blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)ss', to='main.inventory' + ), + ), + migrations.AlterField( + model_name='jobtemplate', + name='project', + field=models.ForeignKey( + blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)ss', to='main.project' + ), + ), + migrations.AlterField( + model_name='jobtemplate', + name='webhook_credential', + field=models.ForeignKey( + blank=True, + help_text='Personal Access Token for posting back the status to the service API', + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%(class)ss', + to='main.credential', + ), + ), + migrations.AlterField( + model_name='label', + name='created_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_created+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='label', + name='modified_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_modified+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='notificationtemplate', + name='created_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_created+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='notificationtemplate', + name='modified_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_modified+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='oauth2accesstoken', + name='user', + field=models.ForeignKey( + blank=True, + help_text='The user representing the token owner', + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(app_label)s_%(class)s', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='oauth2application', + name='user', + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s', to=settings.AUTH_USER_MODEL + ), + ), + migrations.AlterField( + model_name='organization', + name='created_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_created+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='organization', + name='galaxy_credentials', + field=awx.main.fields.OrderedManyToManyField( + blank=True, related_name='%(class)s_galaxy_credentials', through='main.OrganizationGalaxyCredentialMembership', to='main.credential' + ), + ), + migrations.AlterField( + model_name='organization', + name='modified_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_modified+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='organization', + name='notification_templates_approvals', + field=models.ManyToManyField(blank=True, related_name='%(class)s_notification_templates_for_approvals', to='main.notificationtemplate'), + ), + migrations.AlterField( + model_name='organization', + name='notification_templates_error', + field=models.ManyToManyField(blank=True, related_name='%(class)s_notification_templates_for_errors', to='main.notificationtemplate'), + ), + migrations.AlterField( + model_name='organization', + name='notification_templates_started', + field=models.ManyToManyField(blank=True, related_name='%(class)s_notification_templates_for_started', to='main.notificationtemplate'), + ), + migrations.AlterField( + model_name='organization', + name='notification_templates_success', + field=models.ManyToManyField(blank=True, related_name='%(class)s_notification_templates_for_success', to='main.notificationtemplate'), + ), + migrations.AlterField( + model_name='project', + name='credential', + field=models.ForeignKey( + blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)ss', to='main.credential' + ), + ), + migrations.AlterField( + model_name='project', + name='signature_validation_credential', + field=models.ForeignKey( + blank=True, + default=None, + help_text='An optional credential used for validating files in the project against unexpected changes.', + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%(class)ss_signature_validation', + to='main.credential', + ), + ), + migrations.AlterField( + model_name='projectupdate', + name='credential', + field=models.ForeignKey( + blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)ss', to='main.credential' + ), + ), + migrations.AlterField( + model_name='schedule', + name='created_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_created+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='schedule', + name='credentials', + field=models.ManyToManyField(related_name='%(class)ss', to='main.credential'), + ), + migrations.AlterField( + model_name='schedule', + name='execution_environment', + field=models.ForeignKey( + blank=True, + default=None, + help_text='The container image to be used for execution.', + null=True, + on_delete=awx.main.utils.polymorphic.SET_NULL, + related_name='%(class)s_as_prompt', + to='main.executionenvironment', + ), + ), + migrations.AlterField( + model_name='schedule', + name='inventory', + field=models.ForeignKey( + blank=True, + default=None, + help_text='Inventory applied as a prompt, assuming job template prompts for inventory', + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%(class)ss', + to='main.inventory', + ), + ), + migrations.AlterField( + model_name='schedule', + name='labels', + field=models.ManyToManyField(related_name='%(class)s_labels', to='main.label'), + ), + migrations.AlterField( + model_name='schedule', + name='modified_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_modified+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='team', + name='created_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_created+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='team', + name='modified_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_modified+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='unifiedjob', + name='created_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_created+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='unifiedjob', + name='credentials', + field=models.ManyToManyField(related_name='%(class)ss', to='main.credential'), + ), + migrations.AlterField( + model_name='unifiedjob', + name='dependent_jobs', + field=models.ManyToManyField(editable=False, related_name='%(class)s_blocked_jobs', to='main.unifiedjob'), + ), + migrations.AlterField( + model_name='unifiedjob', + name='execution_environment', + field=models.ForeignKey( + blank=True, + default=None, + help_text='The container image to be used for execution.', + null=True, + on_delete=awx.main.utils.polymorphic.SET_NULL, + related_name='%(class)ss', + to='main.executionenvironment', + ), + ), + migrations.AlterField( + model_name='unifiedjob', + name='labels', + field=models.ManyToManyField(blank=True, related_name='%(class)s_labels', to='main.label'), + ), + migrations.AlterField( + model_name='unifiedjob', + name='modified_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_modified+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='unifiedjob', + name='notifications', + field=models.ManyToManyField(editable=False, related_name='%(class)s_notifications', to='main.notification'), + ), + migrations.AlterField( + model_name='unifiedjob', + name='organization', + field=models.ForeignKey( + blank=True, + help_text='The organization used to determine access to this unified job.', + null=True, + on_delete=awx.main.utils.polymorphic.SET_NULL, + related_name='%(class)ss', + to='main.organization', + ), + ), + migrations.AlterField( + model_name='unifiedjob', + name='polymorphic_ctype', + field=models.ForeignKey( + editable=False, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='polymorphic_%(app_label)s.%(class)s_set+', + to='contenttypes.contenttype', + ), + ), + migrations.AlterField( + model_name='unifiedjob', + name='unified_job_template', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=awx.main.utils.polymorphic.SET_NULL, + related_name='%(class)s_unified_jobs', + to='main.unifiedjobtemplate', + ), + ), + migrations.AlterField( + model_name='unifiedjobtemplate', + name='created_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_created+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='unifiedjobtemplate', + name='credentials', + field=models.ManyToManyField(related_name='%(class)ss', to='main.credential'), + ), + migrations.AlterField( + model_name='unifiedjobtemplate', + name='current_job', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%(class)s_as_current_job+', + to='main.unifiedjob', + ), + ), + migrations.AlterField( + model_name='unifiedjobtemplate', + name='execution_environment', + field=models.ForeignKey( + blank=True, + default=None, + help_text='The container image to be used for execution.', + null=True, + on_delete=awx.main.utils.polymorphic.SET_NULL, + related_name='%(class)ss', + to='main.executionenvironment', + ), + ), + migrations.AlterField( + model_name='unifiedjobtemplate', + name='labels', + field=models.ManyToManyField(blank=True, related_name='%(class)s_labels', to='main.label'), + ), + migrations.AlterField( + model_name='unifiedjobtemplate', + name='last_job', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%(class)s_as_last_job+', + to='main.unifiedjob', + ), + ), + migrations.AlterField( + model_name='unifiedjobtemplate', + name='modified_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_modified+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='unifiedjobtemplate', + name='next_schedule', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=awx.main.utils.polymorphic.SET_NULL, + related_name='%(class)s_as_next_schedule+', + to='main.schedule', + ), + ), + migrations.AlterField( + model_name='unifiedjobtemplate', + name='notification_templates_error', + field=models.ManyToManyField(blank=True, related_name='%(class)s_notification_templates_for_errors', to='main.notificationtemplate'), + ), + migrations.AlterField( + model_name='unifiedjobtemplate', + name='notification_templates_started', + field=models.ManyToManyField(blank=True, related_name='%(class)s_notification_templates_for_started', to='main.notificationtemplate'), + ), + migrations.AlterField( + model_name='unifiedjobtemplate', + name='notification_templates_success', + field=models.ManyToManyField(blank=True, related_name='%(class)s_notification_templates_for_success', to='main.notificationtemplate'), + ), + migrations.AlterField( + model_name='unifiedjobtemplate', + name='organization', + field=models.ForeignKey( + blank=True, + help_text='The organization used to determine access to this template.', + null=True, + on_delete=awx.main.utils.polymorphic.SET_NULL, + related_name='%(class)ss', + to='main.organization', + ), + ), + migrations.AlterField( + model_name='unifiedjobtemplate', + name='polymorphic_ctype', + field=models.ForeignKey( + editable=False, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='polymorphic_%(app_label)s.%(class)s_set+', + to='contenttypes.contenttype', + ), + ), + migrations.AlterField( + model_name='workflowapproval', + name='approved_or_denied_by', + field=models.ForeignKey( + default=None, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%s(class)s_approved+', + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AlterField( + model_name='workflowjob', + name='inventory', + field=models.ForeignKey( + blank=True, + default=None, + help_text='Inventory applied as a prompt, assuming job template prompts for inventory', + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%(class)ss', + to='main.inventory', + ), + ), + migrations.AlterField( + model_name='workflowjob', + name='webhook_credential', + field=models.ForeignKey( + blank=True, + help_text='Personal Access Token for posting back the status to the service API', + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%(class)ss', + to='main.credential', + ), + ), + migrations.AlterField( + model_name='workflowjobnode', + name='always_nodes', + field=models.ManyToManyField(blank=True, related_name='%(class)ss_always', to='main.workflowjobnode'), + ), + migrations.AlterField( + model_name='workflowjobnode', + name='credentials', + field=models.ManyToManyField(related_name='%(class)ss', to='main.credential'), + ), + migrations.AlterField( + model_name='workflowjobnode', + name='execution_environment', + field=models.ForeignKey( + blank=True, + default=None, + help_text='The container image to be used for execution.', + null=True, + on_delete=awx.main.utils.polymorphic.SET_NULL, + related_name='%(class)s_as_prompt', + to='main.executionenvironment', + ), + ), + migrations.AlterField( + model_name='workflowjobnode', + name='failure_nodes', + field=models.ManyToManyField(blank=True, related_name='%(class)ss_failure', to='main.workflowjobnode'), + ), + migrations.AlterField( + model_name='workflowjobnode', + name='inventory', + field=models.ForeignKey( + blank=True, + default=None, + help_text='Inventory applied as a prompt, assuming job template prompts for inventory', + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%(class)ss', + to='main.inventory', + ), + ), + migrations.AlterField( + model_name='workflowjobnode', + name='labels', + field=models.ManyToManyField(related_name='%(class)s_labels', to='main.label'), + ), + migrations.AlterField( + model_name='workflowjobnode', + name='success_nodes', + field=models.ManyToManyField(blank=True, related_name='%(class)ss_success', to='main.workflowjobnode'), + ), + migrations.AlterField( + model_name='workflowjobnode', + name='unified_job_template', + field=models.ForeignKey( + blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)ss', to='main.unifiedjobtemplate' + ), + ), + migrations.AlterField( + model_name='workflowjobtemplate', + name='inventory', + field=models.ForeignKey( + blank=True, + default=None, + help_text='Inventory applied as a prompt, assuming job template prompts for inventory', + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%(class)ss', + to='main.inventory', + ), + ), + migrations.AlterField( + model_name='workflowjobtemplate', + name='notification_templates_approvals', + field=models.ManyToManyField(blank=True, related_name='%(class)s_notification_templates_for_approvals', to='main.notificationtemplate'), + ), + migrations.AlterField( + model_name='workflowjobtemplate', + name='webhook_credential', + field=models.ForeignKey( + blank=True, + help_text='Personal Access Token for posting back the status to the service API', + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%(class)ss', + to='main.credential', + ), + ), + migrations.AlterField( + model_name='workflowjobtemplatenode', + name='always_nodes', + field=models.ManyToManyField(blank=True, related_name='%(class)ss_always', to='main.workflowjobtemplatenode'), + ), + migrations.AlterField( + model_name='workflowjobtemplatenode', + name='credentials', + field=models.ManyToManyField(related_name='%(class)ss', to='main.credential'), + ), + migrations.AlterField( + model_name='workflowjobtemplatenode', + name='execution_environment', + field=models.ForeignKey( + blank=True, + default=None, + help_text='The container image to be used for execution.', + null=True, + on_delete=awx.main.utils.polymorphic.SET_NULL, + related_name='%(class)s_as_prompt', + to='main.executionenvironment', + ), + ), + migrations.AlterField( + model_name='workflowjobtemplatenode', + name='failure_nodes', + field=models.ManyToManyField(blank=True, related_name='%(class)ss_failure', to='main.workflowjobtemplatenode'), + ), + migrations.AlterField( + model_name='workflowjobtemplatenode', + name='inventory', + field=models.ForeignKey( + blank=True, + default=None, + help_text='Inventory applied as a prompt, assuming job template prompts for inventory', + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%(class)ss', + to='main.inventory', + ), + ), + migrations.AlterField( + model_name='workflowjobtemplatenode', + name='labels', + field=models.ManyToManyField(related_name='%(class)s_labels', to='main.label'), + ), + migrations.AlterField( + model_name='workflowjobtemplatenode', + name='success_nodes', + field=models.ManyToManyField(blank=True, related_name='%(class)ss_success', to='main.workflowjobtemplatenode'), + ), + migrations.AlterField( + model_name='workflowjobtemplatenode', + name='unified_job_template', + field=models.ForeignKey( + blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)ss', to='main.unifiedjobtemplate' + ), + ), + ] diff --git a/awx/main/models/events.py b/awx/main/models/events.py index c28c5de89b..b18a8ce5a2 100644 --- a/awx/main/models/events.py +++ b/awx/main/models/events.py @@ -470,11 +470,11 @@ class JobEvent(BasePlaybookEvent): class Meta: app_label = 'main' ordering = ('pk',) - index_together = [ - ('job', 'job_created', 'event'), - ('job', 'job_created', 'uuid'), - ('job', 'job_created', 'parent_uuid'), - ('job', 'job_created', 'counter'), + indexes = [ + models.Index(fields=['job', 'job_created', 'event']), + models.Index(fields=['job', 'job_created', 'uuid']), + models.Index(fields=['job', 'job_created', 'parent_uuid']), + models.Index(fields=['job', 'job_created', 'counter']), ] id = models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID') @@ -632,10 +632,10 @@ class ProjectUpdateEvent(BasePlaybookEvent): class Meta: app_label = 'main' ordering = ('pk',) - index_together = [ - ('project_update', 'job_created', 'event'), - ('project_update', 'job_created', 'uuid'), - ('project_update', 'job_created', 'counter'), + indexes = [ + models.Index(fields=['project_update', 'job_created', 'event']), + models.Index(fields=['project_update', 'job_created', 'uuid']), + models.Index(fields=['project_update', 'job_created', 'counter']), ] id = models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID') @@ -770,10 +770,10 @@ class AdHocCommandEvent(BaseCommandEvent): class Meta: app_label = 'main' ordering = ('-pk',) - index_together = [ - ('ad_hoc_command', 'job_created', 'event'), - ('ad_hoc_command', 'job_created', 'uuid'), - ('ad_hoc_command', 'job_created', 'counter'), + indexes = [ + models.Index(fields=['ad_hoc_command', 'job_created', 'event']), + models.Index(fields=['ad_hoc_command', 'job_created', 'uuid']), + models.Index(fields=['ad_hoc_command', 'job_created', 'counter']), ] EVENT_TYPES = [ @@ -875,9 +875,9 @@ class InventoryUpdateEvent(BaseCommandEvent): class Meta: app_label = 'main' ordering = ('-pk',) - index_together = [ - ('inventory_update', 'job_created', 'uuid'), - ('inventory_update', 'job_created', 'counter'), + indexes = [ + models.Index(fields=['inventory_update', 'job_created', 'uuid']), + models.Index(fields=['inventory_update', 'job_created', 'counter']), ] id = models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID') @@ -920,9 +920,9 @@ class SystemJobEvent(BaseCommandEvent): class Meta: app_label = 'main' ordering = ('-pk',) - index_together = [ - ('system_job', 'job_created', 'uuid'), - ('system_job', 'job_created', 'counter'), + indexes = [ + models.Index(fields=['system_job', 'job_created', 'uuid']), + models.Index(fields=['system_job', 'job_created', 'counter']), ] id = models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID') diff --git a/awx/main/models/rbac.py b/awx/main/models/rbac.py index 8f54cc3e43..5febf88eb2 100644 --- a/awx/main/models/rbac.py +++ b/awx/main/models/rbac.py @@ -141,7 +141,7 @@ class Role(models.Model): app_label = 'main' verbose_name_plural = _('roles') db_table = 'main_rbac_roles' - index_together = [("content_type", "object_id")] + indexes = [models.Index(fields=["content_type", "object_id"])] ordering = ("content_type", "object_id") role_field = models.TextField(null=False) @@ -447,10 +447,10 @@ class RoleAncestorEntry(models.Model): app_label = 'main' verbose_name_plural = _('role_ancestors') db_table = 'main_rbac_role_ancestors' - index_together = [ - ("ancestor", "content_type_id", "object_id"), # used by get_roles_on_resource - ("ancestor", "content_type_id", "role_field"), # used by accessible_objects - ("ancestor", "descendent"), # used by rebuild_role_ancestor_list in the NOT EXISTS clauses. + indexes = [ + models.Index(fields=["ancestor", "content_type_id", "object_id"]), # used by get_roles_on_resource + models.Index(fields=["ancestor", "content_type_id", "role_field"]), # used by accessible_objects + models.Index(fields=["ancestor", "descendent"]), # used by rebuild_role_ancestor_list in the NOT EXISTS clauses. ] descendent = models.ForeignKey(Role, null=False, on_delete=models.CASCADE, related_name='+')