diff --git a/awx/main/migrations/0184_django_upgrade.py b/awx/main/migrations/0184_django_upgrade.py new file mode 100644 index 0000000000..e4552b81b1 --- /dev/null +++ b/awx/main/migrations/0184_django_upgrade.py @@ -0,0 +1,972 @@ +# Generated by Django 4.2 on 2023-04-21 14:43 + +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 = [ + ('contenttypes', '0002_remove_content_type_name'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('main', '0183_pre_django_upgrade'), + ] + + operations = [ + 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/tests/functional/models/test_inventory.py b/awx/main/tests/functional/models/test_inventory.py index 70b4425a06..27d2f46ec8 100644 --- a/awx/main/tests/functional/models/test_inventory.py +++ b/awx/main/tests/functional/models/test_inventory.py @@ -271,6 +271,7 @@ def test_inventory_update_excessively_long_name(inventory, inventory_source): class TestHostManager: def test_host_filter_not_smart(self, setup_ec2_gce, organization): smart_inventory = Inventory(name='smart', organization=organization, host_filter='inventory_sources__source=ec2') + smart_inventory.save() assert len(smart_inventory.hosts.all()) == 0 def test_host_distinctness(self, setup_inventory_groups, organization): diff --git a/licenses/psycopg-3.1.4.tar.gz b/licenses/psycopg-3.1.4.tar.gz deleted file mode 100644 index 97bc461e51..0000000000 Binary files a/licenses/psycopg-3.1.4.tar.gz and /dev/null differ diff --git a/licenses/psycopg-3.1.8.tar.gz b/licenses/psycopg-3.1.8.tar.gz new file mode 100644 index 0000000000..356031be05 Binary files /dev/null and b/licenses/psycopg-3.1.8.tar.gz differ diff --git a/requirements/requirements.in b/requirements/requirements.in index 7baef0c51e..1898d808a2 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -9,7 +9,7 @@ cryptography Cython<3 # Since the bump to PyYAML 5.4.1 this is now a mandatory dep daphne distro -django==3.2.16 # see UPGRADE BLOCKERs https://github.com/ansible/awx/security/dependabot/67 +django==4.2 # see UPGRADE BLOCKERs django-auth-ldap django-cors-headers django-crum @@ -22,7 +22,7 @@ django-redis django-solo django-split-settings==1.0.0 # We hit a strange issue where the release process errored when upgrading past 1.0.0 see UPGRADE BLOCKERS django-taggit -djangorestframework==3.13.1 +djangorestframework djangorestframework-yaml filelock GitPython>=3.1.30 # CVE-2022-24439 diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 5323500c42..ac9d63cd03 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -11,7 +11,7 @@ ansiconv==1.0.0 # via -r /awx_devel/requirements/requirements.in asciichartpy==1.5.25 # via -r /awx_devel/requirements/requirements.in -asgiref==3.5.2 +asgiref==3.6.0 # via # channels # channels-redis @@ -96,7 +96,7 @@ deprecated==1.2.13 # via jwcrypto distro==1.8.0 # via -r /awx_devel/requirements/requirements.in -django==3.2.16 +django==4.2 # via # -r /awx_devel/requirements/requirements.in # channels @@ -136,7 +136,7 @@ django-split-settings==1.0.0 # via -r /awx_devel/requirements/requirements.in django-taggit==3.1.0 # via -r /awx_devel/requirements/requirements.in -djangorestframework==3.13.1 +djangorestframework==3.14.0 # via -r /awx_devel/requirements/requirements.in djangorestframework-yaml==2.0.0 # via -r /awx_devel/requirements/requirements.in @@ -271,7 +271,7 @@ prometheus-client==0.15.0 # via -r /awx_devel/requirements/requirements.in psutil==5.9.4 # via -r /awx_devel/requirements/requirements.in -psycopg==3.1.4 +psycopg==3.1.8 # via -r /awx_devel/requirements/requirements.in psycopg2==2.9.5 # via -r /awx_devel/requirements/requirements.in @@ -334,7 +334,6 @@ python3-openid==3.2.0 # via -r /awx_devel/requirements/requirements_git.txt pytz==2022.6 # via - # django # djangorestframework # irc # tempora