diff --git a/awx/conf/migrations/0001_initial.py b/awx/conf/migrations/0001_initial.py index f9613b15d1..03654cac17 100644 --- a/awx/conf/migrations/0001_initial.py +++ b/awx/conf/migrations/0001_initial.py @@ -21,7 +21,7 @@ class Migration(migrations.Migration): ('modified', models.DateTimeField(default=None, editable=False)), ('key', models.CharField(max_length=255)), ('value', jsonfield.fields.JSONField(null=True)), - ('user', models.ForeignKey(related_name='settings', default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ('user', models.ForeignKey(related_name='settings', default=None, editable=False, to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True)), ], options={ 'abstract': False, diff --git a/awx/main/migrations/0001_initial.py b/awx/main/migrations/0001_initial.py index de265923a7..e14624911a 100644 --- a/awx/main/migrations/0001_initial.py +++ b/awx/main/migrations/0001_initial.py @@ -62,7 +62,7 @@ class Migration(migrations.Migration): ('expires', models.DateTimeField(default=django.utils.timezone.now)), ('request_hash', models.CharField(default='', max_length=40, blank=True)), ('reason', models.CharField(default='', help_text='Reason the auth token was invalidated.', max_length=1024, blank=True)), - ('user', models.ForeignKey(related_name='auth_tokens', to=settings.AUTH_USER_MODEL)), + ('user', models.ForeignKey(related_name='auth_tokens', on_delete=models.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), migrations.CreateModel( @@ -241,7 +241,7 @@ class Migration(migrations.Migration): ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('created', models.DateTimeField(auto_now_add=True)), ('modified', models.DateTimeField(auto_now=True)), - ('instance', models.ForeignKey(to='main.Instance')), + ('instance', models.ForeignKey(on_delete=models.CASCADE, to='main.Instance')), ], ), migrations.CreateModel( @@ -287,7 +287,7 @@ class Migration(migrations.Migration): ('created', models.DateTimeField(default=None, editable=False)), ('modified', models.DateTimeField(default=None, editable=False)), ('ldap_dn', models.CharField(default='', max_length=1024)), - ('user', awx.main.fields.AutoOneToOneField(related_name='profile', editable=False, to=settings.AUTH_USER_MODEL)), + ('user', awx.main.fields.AutoOneToOneField(related_name='profile', editable=False, on_delete=models.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), migrations.CreateModel( @@ -343,7 +343,7 @@ class Migration(migrations.Migration): ('name', models.CharField(max_length=512)), ('old_pk', models.PositiveIntegerField(default=None, null=True, editable=False)), ('launch_type', models.CharField(default='manual', max_length=20, editable=False, choices=[('manual', 'Manual'), ('relaunch', 'Relaunch'), ('callback', 'Callback'), ('scheduled', 'Scheduled'), ('dependency', 'Dependency')])), - ('cancel_flag', models.BooleanField(default=False, editable=False)), + ('cancel_flag', models.BooleanField(blank=True, default=False, editable=False)), ('status', models.CharField(default='new', max_length=20, editable=False, choices=[('new', 'New'), ('pending', 'Pending'), ('waiting', 'Waiting'), ('running', 'Running'), ('successful', 'Successful'), ('failed', 'Failed'), ('error', 'Error'), ('canceled', 'Canceled')])), ('failed', models.BooleanField(default=False, editable=False)), ('started', models.DateTimeField(default=None, null=True, editable=False)), @@ -380,7 +380,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='AdHocCommand', fields=[ - ('unifiedjob_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='main.UnifiedJob')), + ('unifiedjob_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, on_delete=django.db.models.deletion.CASCADE, serialize=False, to='main.UnifiedJob')), ('job_type', models.CharField(default='run', max_length=64, choices=[('run', 'Run'), ('check', 'Check')])), ('limit', models.CharField(default='', max_length=1024, blank=True)), ('module_name', models.CharField(default='', max_length=1024, blank=True)), @@ -394,7 +394,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='InventorySource', fields=[ - ('unifiedjobtemplate_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='main.UnifiedJobTemplate')), + ('unifiedjobtemplate_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, on_delete=django.db.models.deletion.CASCADE, serialize=False, to='main.UnifiedJobTemplate')), ('source', models.CharField(default='', max_length=32, blank=True, choices=[('', 'Manual'), ('file', 'Local File, Directory or Script'), ('rax', 'Rackspace Cloud Servers'), ('ec2', 'Amazon EC2'), ('gce', 'Google Compute Engine'), ('azure', 'Microsoft Azure'), ('vmware', 'VMware vCenter'), ('openstack', 'OpenStack'), ('custom', 'Custom Script')])), ('source_path', models.CharField(default='', max_length=1024, editable=False, blank=True)), ('source_vars', models.TextField(default='', help_text='Inventory source variables in YAML or JSON format.', blank=True)), @@ -411,7 +411,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='InventoryUpdate', fields=[ - ('unifiedjob_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='main.UnifiedJob')), + ('unifiedjob_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, on_delete=django.db.models.deletion.CASCADE, serialize=False, to='main.UnifiedJob')), ('source', models.CharField(default='', max_length=32, blank=True, choices=[('', 'Manual'), ('file', 'Local File, Directory or Script'), ('rax', 'Rackspace Cloud Servers'), ('ec2', 'Amazon EC2'), ('gce', 'Google Compute Engine'), ('azure', 'Microsoft Azure'), ('vmware', 'VMware vCenter'), ('openstack', 'OpenStack'), ('custom', 'Custom Script')])), ('source_path', models.CharField(default='', max_length=1024, editable=False, blank=True)), ('source_vars', models.TextField(default='', help_text='Inventory source variables in YAML or JSON format.', blank=True)), @@ -427,7 +427,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Job', fields=[ - ('unifiedjob_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='main.UnifiedJob')), + ('unifiedjob_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, on_delete=django.db.models.deletion.CASCADE, serialize=False, to='main.UnifiedJob')), ('job_type', models.CharField(default='run', max_length=64, choices=[('run', 'Run'), ('check', 'Check'), ('scan', 'Scan')])), ('playbook', models.CharField(default='', max_length=1024, blank=True)), ('forks', models.PositiveIntegerField(default=0, blank=True)), @@ -435,7 +435,7 @@ class Migration(migrations.Migration): ('verbosity', models.PositiveIntegerField(default=0, blank=True, choices=[(0, '0 (Normal)'), (1, '1 (Verbose)'), (2, '2 (More Verbose)'), (3, '3 (Debug)'), (4, '4 (Connection Debug)'), (5, '5 (WinRM Debug)')])), ('extra_vars', models.TextField(default='', blank=True)), ('job_tags', models.CharField(default='', max_length=1024, blank=True)), - ('force_handlers', models.BooleanField(default=False)), + ('force_handlers', models.BooleanField(blank=True, default=False)), ('skip_tags', models.CharField(default='', max_length=1024, blank=True)), ('start_at_task', models.CharField(default='', max_length=1024, blank=True)), ('become_enabled', models.BooleanField(default=False)), @@ -448,7 +448,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='JobTemplate', fields=[ - ('unifiedjobtemplate_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='main.UnifiedJobTemplate')), + ('unifiedjobtemplate_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, on_delete=django.db.models.deletion.CASCADE, serialize=False, to='main.UnifiedJobTemplate')), ('job_type', models.CharField(default='run', max_length=64, choices=[('run', 'Run'), ('check', 'Check'), ('scan', 'Scan')])), ('playbook', models.CharField(default='', max_length=1024, blank=True)), ('forks', models.PositiveIntegerField(default=0, blank=True)), @@ -456,7 +456,7 @@ class Migration(migrations.Migration): ('verbosity', models.PositiveIntegerField(default=0, blank=True, choices=[(0, '0 (Normal)'), (1, '1 (Verbose)'), (2, '2 (More Verbose)'), (3, '3 (Debug)'), (4, '4 (Connection Debug)'), (5, '5 (WinRM Debug)')])), ('extra_vars', models.TextField(default='', blank=True)), ('job_tags', models.CharField(default='', max_length=1024, blank=True)), - ('force_handlers', models.BooleanField(default=False)), + ('force_handlers', models.BooleanField(blank=True, default=False)), ('skip_tags', models.CharField(default='', max_length=1024, blank=True)), ('start_at_task', models.CharField(default='', max_length=1024, blank=True)), ('become_enabled', models.BooleanField(default=False)), @@ -473,7 +473,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Project', fields=[ - ('unifiedjobtemplate_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='main.UnifiedJobTemplate')), + ('unifiedjobtemplate_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, on_delete=django.db.models.deletion.CASCADE, serialize=False, to='main.UnifiedJobTemplate')), ('local_path', models.CharField(help_text='Local path (relative to PROJECTS_ROOT) containing playbooks and related files for this project.', max_length=1024, blank=True)), ('scm_type', models.CharField(default='', max_length=8, verbose_name='SCM Type', blank=True, choices=[('', 'Manual'), ('git', 'Git'), ('hg', 'Mercurial'), ('svn', 'Subversion')])), ('scm_url', models.CharField(default='', max_length=1024, verbose_name='SCM URL', blank=True)), @@ -492,7 +492,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='ProjectUpdate', fields=[ - ('unifiedjob_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='main.UnifiedJob')), + ('unifiedjob_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, on_delete=django.db.models.deletion.CASCADE, serialize=False, to='main.UnifiedJob')), ('local_path', models.CharField(help_text='Local path (relative to PROJECTS_ROOT) containing playbooks and related files for this project.', max_length=1024, blank=True)), ('scm_type', models.CharField(default='', max_length=8, verbose_name='SCM Type', blank=True, choices=[('', 'Manual'), ('git', 'Git'), ('hg', 'Mercurial'), ('svn', 'Subversion')])), ('scm_url', models.CharField(default='', max_length=1024, verbose_name='SCM URL', blank=True)), @@ -505,7 +505,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='SystemJob', fields=[ - ('unifiedjob_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='main.UnifiedJob')), + ('unifiedjob_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, on_delete=django.db.models.deletion.CASCADE, serialize=False, to='main.UnifiedJob')), ('job_type', models.CharField(default='', max_length=32, blank=True, choices=[('cleanup_jobs', 'Remove jobs older than a certain number of days'), ('cleanup_activitystream', 'Remove activity stream entries older than a certain number of days'), ('cleanup_deleted', 'Purge previously deleted items from the database'), ('cleanup_facts', 'Purge and/or reduce the granularity of system tracking data')])), ('extra_vars', models.TextField(default='', blank=True)), ], @@ -517,7 +517,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='SystemJobTemplate', fields=[ - ('unifiedjobtemplate_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='main.UnifiedJobTemplate')), + ('unifiedjobtemplate_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, on_delete=django.db.models.deletion.CASCADE, serialize=False, to='main.UnifiedJobTemplate')), ('job_type', models.CharField(default='', max_length=32, blank=True, choices=[('cleanup_jobs', 'Remove jobs older than a certain number of days'), ('cleanup_activitystream', 'Remove activity stream entries older than a certain number of days'), ('cleanup_deleted', 'Purge previously deleted items from the database'), ('cleanup_facts', 'Purge and/or reduce the granularity of system tracking data')])), ], bases=('main.unifiedjobtemplate', models.Model), @@ -550,7 +550,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='unifiedjobtemplate', name='polymorphic_ctype', - field=models.ForeignKey(related_name='polymorphic_main.unifiedjobtemplate_set+', editable=False, to='contenttypes.ContentType', null=True), + field=models.ForeignKey(related_name='polymorphic_main.unifiedjobtemplate_set+', editable=False, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType', null=True), ), migrations.AddField( model_name='unifiedjobtemplate', @@ -575,7 +575,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='unifiedjob', name='polymorphic_ctype', - field=models.ForeignKey(related_name='polymorphic_main.unifiedjob_set+', editable=False, to='contenttypes.ContentType', null=True), + field=models.ForeignKey(related_name='polymorphic_main.unifiedjob_set+', editable=False, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType', null=True), ), migrations.AddField( model_name='unifiedjob', @@ -595,7 +595,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='schedule', name='unified_job_template', - field=models.ForeignKey(related_name='schedules', to='main.UnifiedJobTemplate'), + field=models.ForeignKey(related_name='schedules', on_delete=django.db.models.deletion.CASCADE, to='main.UnifiedJobTemplate'), ), migrations.AddField( model_name='permission', @@ -610,12 +610,12 @@ class Migration(migrations.Migration): migrations.AddField( model_name='joborigin', name='unified_job', - field=models.OneToOneField(related_name='job_origin', to='main.UnifiedJob'), + field=models.OneToOneField(related_name='job_origin', on_delete=django.db.models.deletion.CASCADE, to='main.UnifiedJob'), ), migrations.AddField( model_name='inventory', name='organization', - field=models.ForeignKey(related_name='inventories', to='main.Organization', help_text='Organization containing this inventory.'), + field=models.ForeignKey(related_name='inventories', on_delete=django.db.models.deletion.CASCADE, to='main.Organization', help_text='Organization containing this inventory.'), ), migrations.AddField( model_name='inventory', @@ -625,7 +625,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='host', name='inventory', - field=models.ForeignKey(related_name='hosts', to='main.Inventory'), + field=models.ForeignKey(related_name='hosts', on_delete=django.db.models.deletion.CASCADE, to='main.Inventory'), ), migrations.AddField( model_name='host', @@ -650,7 +650,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='group', name='inventory', - field=models.ForeignKey(related_name='groups', to='main.Inventory'), + field=models.ForeignKey(related_name='groups', on_delete=django.db.models.deletion.CASCADE, to='main.Inventory'), ), migrations.AddField( model_name='group', @@ -680,12 +680,12 @@ class Migration(migrations.Migration): migrations.AddField( model_name='credential', name='team', - field=models.ForeignKey(related_name='credentials', default=None, blank=True, to='main.Team', null=True), + field=models.ForeignKey(related_name='credentials', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.Team', null=True), ), migrations.AddField( model_name='credential', name='user', - field=models.ForeignKey(related_name='credentials', default=None, blank=True, to=settings.AUTH_USER_MODEL, null=True), + field=models.ForeignKey(related_name='credentials', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to=settings.AUTH_USER_MODEL, null=True), ), migrations.AddField( model_name='adhoccommandevent', @@ -774,7 +774,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='projectupdate', name='project', - field=models.ForeignKey(related_name='project_updates', editable=False, to='main.Project'), + field=models.ForeignKey(related_name='project_updates', on_delete=django.db.models.deletion.CASCADE, editable=False, to='main.Project'), ), migrations.AddField( model_name='project', @@ -814,12 +814,12 @@ class Migration(migrations.Migration): migrations.AddField( model_name='jobhostsummary', name='job', - field=models.ForeignKey(related_name='job_host_summaries', editable=False, to='main.Job'), + field=models.ForeignKey(related_name='job_host_summaries', on_delete=django.db.models.deletion.CASCADE, editable=False, to='main.Job'), ), migrations.AddField( model_name='jobevent', name='job', - field=models.ForeignKey(related_name='job_events', editable=False, to='main.Job'), + field=models.ForeignKey(related_name='job_events', on_delete=django.db.models.deletion.CASCADE, editable=False, to='main.Job'), ), migrations.AddField( model_name='job', @@ -859,7 +859,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='inventoryupdate', name='inventory_source', - field=models.ForeignKey(related_name='inventory_updates', editable=False, to='main.InventorySource'), + field=models.ForeignKey(related_name='inventory_updates', on_delete=django.db.models.deletion.CASCADE, editable=False, to='main.InventorySource'), ), migrations.AddField( model_name='inventoryupdate', @@ -874,12 +874,12 @@ class Migration(migrations.Migration): migrations.AddField( model_name='inventorysource', name='group', - field=awx.main.fields.AutoOneToOneField(related_name='inventory_source', null=True, default=None, editable=False, to='main.Group'), + field=awx.main.fields.AutoOneToOneField(related_name='inventory_source', on_delete=django.db.models.deletion.SET_NULL, null=True, default=None, editable=False, to='main.Group'), ), migrations.AddField( model_name='inventorysource', name='inventory', - field=models.ForeignKey(related_name='inventory_sources', default=None, editable=False, to='main.Inventory', null=True), + field=models.ForeignKey(related_name='inventory_sources', on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to='main.Inventory', null=True), ), migrations.AddField( model_name='inventorysource', @@ -916,7 +916,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='adhoccommandevent', name='ad_hoc_command', - field=models.ForeignKey(related_name='ad_hoc_command_events', editable=False, to='main.AdHocCommand'), + field=models.ForeignKey(related_name='ad_hoc_command_events', on_delete=django.db.models.deletion.CASCADE, editable=False, to='main.AdHocCommand'), ), migrations.AddField( model_name='adhoccommand', diff --git a/awx/main/migrations/0002_squashed_v300_release.py b/awx/main/migrations/0002_squashed_v300_release.py index 28d6b00966..89fce679ea 100644 --- a/awx/main/migrations/0002_squashed_v300_release.py +++ b/awx/main/migrations/0002_squashed_v300_release.py @@ -143,7 +143,7 @@ class Migration(migrations.Migration): ('category', models.CharField(max_length=128)), ('value', models.TextField(blank=True)), ('value_type', models.CharField(max_length=12, choices=[('string', 'String'), ('int', 'Integer'), ('float', 'Decimal'), ('json', 'JSON'), ('bool', 'Boolean'), ('password', 'Password'), ('list', 'List')])), - ('user', models.ForeignKey(related_name='settings', default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ('user', models.ForeignKey(related_name='settings', default=None, editable=False, to=settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True)), ], ), # Notification changes @@ -184,7 +184,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='notification', name='notification_template', - field=models.ForeignKey(related_name='notifications', editable=False, to='main.NotificationTemplate'), + field=models.ForeignKey(related_name='notifications', editable=False, on_delete=models.CASCADE, to='main.NotificationTemplate'), ), migrations.AddField( model_name='activitystream', @@ -239,7 +239,7 @@ class Migration(migrations.Migration): ('timestamp', models.DateTimeField(default=None, help_text='Date and time of the corresponding fact scan gathering time.', editable=False)), ('module', models.CharField(max_length=128)), ('facts', awx.main.fields.JSONBField(default=dict, help_text='Arbitrary JSON structure of module facts captured at timestamp for a single host.', blank=True)), - ('host', models.ForeignKey(related_name='facts', to='main.Host', help_text='Host for the facts that the fact scan captured.')), + ('host', models.ForeignKey(related_name='facts', to='main.Host', on_delete=models.CASCADE, help_text='Host for the facts that the fact scan captured.')), ], ), migrations.AlterIndexTogether( @@ -317,7 +317,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='project', name='organization', - field=models.ForeignKey(related_name='projects', to='main.Organization', blank=True, null=True), + field=models.ForeignKey(related_name='projects', to='main.Organization', on_delete=models.CASCADE, blank=True, null=True), ), migrations.AlterField( model_name='team', @@ -366,7 +366,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='credential', name='organization', - field=models.ForeignKey(related_name='credentials', default=None, blank=True, to='main.Organization', null=True), + field=models.ForeignKey(related_name='credentials', on_delete=models.CASCADE, default=None, blank=True, to='main.Organization', null=True), ), # @@ -381,7 +381,7 @@ class Migration(migrations.Migration): ('members', models.ManyToManyField(related_name='roles', to=settings.AUTH_USER_MODEL)), ('parents', models.ManyToManyField(related_name='children', to='main.Role')), ('implicit_parents', models.TextField(default='[]')), - ('content_type', models.ForeignKey(default=None, to='contenttypes.ContentType', null=True)), + ('content_type', models.ForeignKey(default=None, to='contenttypes.ContentType', on_delete=models.CASCADE, null=True)), ('object_id', models.PositiveIntegerField(default=None, null=True)), ], @@ -397,8 +397,8 @@ class Migration(migrations.Migration): ('role_field', models.TextField()), ('content_type_id', models.PositiveIntegerField()), ('object_id', models.PositiveIntegerField()), - ('ancestor', models.ForeignKey(related_name='+', to='main.Role')), - ('descendent', models.ForeignKey(related_name='+', to='main.Role')), + ('ancestor', models.ForeignKey(on_delete=models.CASCADE, related_name='+', to='main.Role')), + ('descendent', models.ForeignKey(on_delete=models.CASCADE, related_name='+', to='main.Role')), ], options={ 'db_table': 'main_rbac_role_ancestors', @@ -568,7 +568,7 @@ class Migration(migrations.Migration): ('name', models.CharField(max_length=512)), ('created_by', models.ForeignKey(related_name="{u'class': 'label', u'app_label': 'main'}(class)s_created+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), ('modified_by', models.ForeignKey(related_name="{u'class': 'label', u'app_label': 'main'}(class)s_modified+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), - ('organization', models.ForeignKey(related_name='labels', to='main.Organization', help_text='Organization this label belongs to.')), + ('organization', models.ForeignKey(related_name='labels', on_delete=django.db.models.deletion.CASCADE, to='main.Organization', help_text='Organization this label belongs to.')), ('tags', taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags')), ], options={ @@ -598,12 +598,12 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='label', name='organization', - field=models.ForeignKey(related_name='labels', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.Organization', help_text='Organization this label belongs to.', null=True), + field=models.ForeignKey(related_name='labels', on_delete=django.db.models.deletion.CASCADE, default=None, blank=True, to='main.Organization', help_text='Organization this label belongs to.', null=True), ), migrations.AlterField( model_name='label', name='organization', - field=models.ForeignKey(related_name='labels', to='main.Organization', help_text='Organization this label belongs to.'), + field=models.ForeignKey(related_name='labels', on_delete=django.db.models.deletion.CASCADE, to='main.Organization', help_text='Organization this label belongs to.'), ), # InventorySource Credential migrations.AddField( @@ -629,12 +629,12 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='credential', name='deprecated_team', - field=models.ForeignKey(related_name='deprecated_credentials', default=None, blank=True, to='main.Team', null=True), + field=models.ForeignKey(related_name='deprecated_credentials', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.Team', null=True), ), migrations.AlterField( model_name='credential', name='deprecated_user', - field=models.ForeignKey(related_name='deprecated_credentials', default=None, blank=True, to=settings.AUTH_USER_MODEL, null=True), + field=models.ForeignKey(related_name='deprecated_credentials', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to=settings.AUTH_USER_MODEL, null=True), ), migrations.AlterField( model_name='credential', diff --git a/awx/main/migrations/0003_squashed_v300_v303_updates.py b/awx/main/migrations/0003_squashed_v300_v303_updates.py index 3c3680a4e7..d58ffc2dfe 100644 --- a/awx/main/migrations/0003_squashed_v300_v303_updates.py +++ b/awx/main/migrations/0003_squashed_v300_v303_updates.py @@ -116,7 +116,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='team', name='organization', - field=models.ForeignKey(related_name='teams', to='main.Organization'), + field=models.ForeignKey(related_name='teams', on_delete=models.CASCADE, to='main.Organization'), preserve_default=False, ), ] + _squashed.operations(SQUASHED_30, applied=True) diff --git a/awx/main/migrations/0004_squashed_v310_release.py b/awx/main/migrations/0004_squashed_v310_release.py index 236c1119ca..88a33d146c 100644 --- a/awx/main/migrations/0004_squashed_v310_release.py +++ b/awx/main/migrations/0004_squashed_v310_release.py @@ -74,7 +74,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='WorkflowJob', fields=[ - ('unifiedjob_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='main.UnifiedJob')), + ('unifiedjob_ptr', models.OneToOneField(parent_link=True, auto_created=True, on_delete=models.CASCADE, primary_key=True, serialize=False, to='main.UnifiedJob')), ('extra_vars', models.TextField(default='', blank=True)), ], options={ @@ -100,7 +100,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='WorkflowJobTemplate', fields=[ - ('unifiedjobtemplate_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='main.UnifiedJobTemplate')), + ('unifiedjobtemplate_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, on_delete=models.CASCADE, serialize=False, to='main.UnifiedJobTemplate')), ('extra_vars', models.TextField(default='', blank=True)), ('admin_role', awx.main.fields.ImplicitRoleField(related_name='+', parent_role='singleton:system_administrator', to='main.Role', null='True')), ], @@ -116,7 +116,7 @@ class Migration(migrations.Migration): ('failure_nodes', models.ManyToManyField(related_name='workflowjobtemplatenodes_failure', to='main.WorkflowJobTemplateNode', blank=True)), ('success_nodes', models.ManyToManyField(related_name='workflowjobtemplatenodes_success', to='main.WorkflowJobTemplateNode', blank=True)), ('unified_job_template', models.ForeignKey(related_name='workflowjobtemplatenodes', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.UnifiedJobTemplate', null=True)), - ('workflow_job_template', models.ForeignKey(related_name='workflow_job_template_nodes', default=None, blank=True, to='main.WorkflowJobTemplate', null=True)), + ('workflow_job_template', models.ForeignKey(related_name='workflow_job_template_nodes', on_delete=models.SET_NULL, default=None, blank=True, to='main.WorkflowJobTemplate', null=True)), ], options={ 'abstract': False, @@ -211,7 +211,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='workflowjobnode', name='workflow_job', - field=models.ForeignKey(related_name='workflow_job_nodes', default=None, blank=True, to='main.WorkflowJob', null=True), + field=models.ForeignKey(related_name='workflow_job_nodes', on_delete=django.db.models.deletion.CASCADE, default=None, blank=True, to='main.WorkflowJob', null=True), ), migrations.AlterField( model_name='workflowjobtemplate', diff --git a/awx/main/migrations/0006_v320_release.py b/awx/main/migrations/0006_v320_release.py index 88cbe130ef..d5712f8e0a 100644 --- a/awx/main/migrations/0006_v320_release.py +++ b/awx/main/migrations/0006_v320_release.py @@ -55,12 +55,12 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='inventorysource', name='deprecated_group', - field=models.OneToOneField(related_name='deprecated_inventory_source', null=True, default=None, to='main.Group'), + field=models.OneToOneField(related_name='deprecated_inventory_source', on_delete=models.CASCADE, null=True, default=None, to='main.Group'), ), migrations.AlterField( model_name='inventorysource', name='inventory', - field=models.ForeignKey(related_name='inventory_sources', default=None, to='main.Inventory', null=True), + field=models.ForeignKey(related_name='inventory_sources', default=None, to='main.Inventory', on_delete=models.CASCADE, null=True), ), # Smart Inventory @@ -78,13 +78,13 @@ class Migration(migrations.Migration): name='SmartInventoryMembership', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('host', models.ForeignKey(related_name='+', to='main.Host')), + ('host', models.ForeignKey(related_name='+', on_delete=models.CASCADE, to='main.Host')), ], ), migrations.AddField( model_name='smartinventorymembership', name='inventory', - field=models.ForeignKey(related_name='+', to='main.Inventory'), + field=models.ForeignKey(on_delete=models.CASCADE, related_name='+', to='main.Inventory'), ), migrations.AddField( model_name='host', @@ -105,7 +105,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='inventory', name='organization', - field=models.ForeignKey(related_name='inventories', on_delete=models.deletion.SET_NULL, to='main.Organization', help_text='Organization containing this inventory.', null=True), + field=models.ForeignKey(related_name='inventories', on_delete=models.SET_NULL, to='main.Organization', help_text='Organization containing this inventory.', null=True), ), # Facts @@ -148,12 +148,12 @@ class Migration(migrations.Migration): migrations.AddField( model_name='inventorysource', name='source_project', - field=models.ForeignKey(related_name='scm_inventory_sources', default=None, blank=True, to='main.Project', help_text='Project containing inventory file used as source.', null=True), + field=models.ForeignKey(related_name='scm_inventory_sources', on_delete=models.CASCADE, default=None, blank=True, to='main.Project', help_text='Project containing inventory file used as source.', null=True), ), migrations.AddField( model_name='inventoryupdate', name='source_project_update', - field=models.ForeignKey(related_name='scm_inventory_updates', default=None, blank=True, to='main.ProjectUpdate', help_text='Inventory files from this Project Update were used for the inventory update.', null=True), + field=models.ForeignKey(related_name='scm_inventory_updates', on_delete=models.CASCADE, default=None, blank=True, to='main.ProjectUpdate', help_text='Inventory files from this Project Update were used for the inventory update.', null=True), ), migrations.AddField( model_name='project', @@ -200,7 +200,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='notificationtemplate', name='organization', - field=models.ForeignKey(related_name='notification_templates', to='main.Organization', null=True), + field=models.ForeignKey(related_name='notification_templates', on_delete=models.CASCADE, to='main.Organization', null=True), ), migrations.AlterUniqueTogether( name='notificationtemplate', @@ -312,7 +312,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='inventory', name='insights_credential', - field=models.ForeignKey(related_name='insights_inventories', on_delete=models.deletion.SET_NULL, default=None, blank=True, to='main.Credential', help_text='Credentials to be used by hosts belonging to this inventory when accessing Red Hat Insights API.', null=True), + field=models.ForeignKey(related_name='insights_inventories', on_delete=models.SET_NULL, default=None, blank=True, to='main.Credential', help_text='Credentials to be used by hosts belonging to this inventory when accessing Red Hat Insights API.', null=True), ), migrations.AlterField( model_name='inventory', @@ -384,8 +384,8 @@ class Migration(migrations.Migration): ('managed_by_tower', models.BooleanField(default=False, editable=False)), ('inputs', awx.main.fields.CredentialTypeInputField(default=dict, blank=True, help_text='Enter inputs using either JSON or YAML syntax. Use the radio button to toggle between the two. Refer to the Ansible Tower documentation for example syntax.')), ('injectors', awx.main.fields.CredentialTypeInjectorField(default=dict, blank=True, help_text='Enter injectors using either JSON or YAML syntax. Use the radio button to toggle between the two. Refer to the Ansible Tower documentation for example syntax.')), - ('created_by', models.ForeignKey(related_name="{u'class': 'credentialtype', u'app_label': 'main'}(class)s_created+", on_delete=models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), - ('modified_by', models.ForeignKey(related_name="{u'class': 'credentialtype', u'app_label': 'main'}(class)s_modified+", on_delete=models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ('created_by', models.ForeignKey(related_name="{u'class': 'credentialtype', u'app_label': 'main'}(class)s_created+", on_delete=models.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), + ('modified_by', models.ForeignKey(related_name="{u'class': 'credentialtype', u'app_label': 'main'}(class)s_modified+", on_delete=models.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)), ('tags', taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags')), ], options={ @@ -404,18 +404,18 @@ class Migration(migrations.Migration): migrations.AddField( model_name='credential', name='credential_type', - field=models.ForeignKey(related_name='credentials', to='main.CredentialType', null=True), + field=models.ForeignKey(related_name='credentials', on_delete=models.CASCADE, to='main.CredentialType', null=True), preserve_default=False, ), migrations.AddField( model_name='job', name='vault_credential', - field=models.ForeignKey(related_name='jobs_as_vault_credential+', on_delete=models.deletion.SET_NULL, default=None, blank=True, to='main.Credential', null=True), + field=models.ForeignKey(related_name='jobs_as_vault_credential+', on_delete=models.SET_NULL, default=None, blank=True, to='main.Credential', null=True), ), migrations.AddField( model_name='jobtemplate', name='vault_credential', - field=models.ForeignKey(related_name='jobtemplates_as_vault_credential+', on_delete=models.deletion.SET_NULL, default=None, blank=True, to='main.Credential', null=True), + field=models.ForeignKey(related_name='jobtemplates_as_vault_credential+', on_delete=models.SET_NULL, default=None, blank=True, to='main.Credential', null=True), ), migrations.AddField( model_name='job', @@ -452,7 +452,7 @@ class Migration(migrations.Migration): ('name', models.CharField(unique=True, max_length=250)), ('created', models.DateTimeField(auto_now_add=True)), ('modified', models.DateTimeField(auto_now=True)), - ('controller', models.ForeignKey(related_name='controlled_groups', default=None, editable=False, to='main.InstanceGroup', help_text='Instance Group to remotely control this group.', null=True)), + ('controller', models.ForeignKey(related_name='controlled_groups', on_delete=models.CASCADE, default=None, editable=False, to='main.InstanceGroup', help_text='Instance Group to remotely control this group.', null=True)), ('instances', models.ManyToManyField(help_text='Instances that are members of this InstanceGroup', related_name='rampart_groups', editable=False, to='main.Instance')), ], ), @@ -464,7 +464,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='unifiedjob', name='instance_group', - field=models.ForeignKey(on_delete=models.deletion.SET_NULL, default=None, blank=True, to='main.InstanceGroup', help_text='The Rampart/Instance group the job was run under', null=True), + field=models.ForeignKey(on_delete=models.SET_NULL, default=None, blank=True, to='main.InstanceGroup', help_text='The Rampart/Instance group the job was run under', null=True), ), migrations.AddField( model_name='unifiedjobtemplate', diff --git a/awx/main/migrations/0008_v320_drop_v1_credential_fields.py b/awx/main/migrations/0008_v320_drop_v1_credential_fields.py index 677221acc3..f2fc44397e 100644 --- a/awx/main/migrations/0008_v320_drop_v1_credential_fields.py +++ b/awx/main/migrations/0008_v320_drop_v1_credential_fields.py @@ -103,7 +103,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='credential', name='credential_type', - field=models.ForeignKey(related_name='credentials', to='main.CredentialType', null=False, help_text='Specify the type of credential you want to create. Refer to the Ansible Tower documentation for details on each type.') + field=models.ForeignKey(related_name='credentials', to='main.CredentialType', on_delete=models.CASCADE, null=False, help_text='Specify the type of credential you want to create. Refer to the Ansible Tower documentation for details on each type.') ), migrations.AlterField( model_name='credential', diff --git a/awx/main/migrations/0014_v330_saved_launchtime_configs.py b/awx/main/migrations/0014_v330_saved_launchtime_configs.py index 3d78f9d6cc..d9c7b105d9 100644 --- a/awx/main/migrations/0014_v330_saved_launchtime_configs.py +++ b/awx/main/migrations/0014_v330_saved_launchtime_configs.py @@ -94,51 +94,51 @@ class Migration(migrations.Migration): migrations.AddField( model_name='workflowjobtemplate', name='ask_variables_on_launch', - field=awx.main.fields.AskForField(default=False), + field=awx.main.fields.AskForField(blank=True, default=False), ), migrations.AlterField( model_name='jobtemplate', name='ask_credential_on_launch', - field=awx.main.fields.AskForField(default=False), + field=awx.main.fields.AskForField(blank=True, default=False), ), migrations.AlterField( model_name='jobtemplate', name='ask_diff_mode_on_launch', - field=awx.main.fields.AskForField(default=False), + field=awx.main.fields.AskForField(blank=True, default=False), ), migrations.AlterField( model_name='jobtemplate', name='ask_inventory_on_launch', - field=awx.main.fields.AskForField(default=False), + field=awx.main.fields.AskForField(blank=True, default=False), ), migrations.AlterField( model_name='jobtemplate', name='ask_job_type_on_launch', - field=awx.main.fields.AskForField(default=False), + field=awx.main.fields.AskForField(blank=True, default=False), ), migrations.AlterField( model_name='jobtemplate', name='ask_limit_on_launch', - field=awx.main.fields.AskForField(default=False), + field=awx.main.fields.AskForField(blank=True, default=False), ), migrations.AlterField( model_name='jobtemplate', name='ask_skip_tags_on_launch', - field=awx.main.fields.AskForField(default=False), + field=awx.main.fields.AskForField(blank=True, default=False), ), migrations.AlterField( model_name='jobtemplate', name='ask_tags_on_launch', - field=awx.main.fields.AskForField(default=False), + field=awx.main.fields.AskForField(blank=True, default=False), ), migrations.AlterField( model_name='jobtemplate', name='ask_variables_on_launch', - field=awx.main.fields.AskForField(default=False), + field=awx.main.fields.AskForField(blank=True, default=False), ), migrations.AlterField( model_name='jobtemplate', name='ask_verbosity_on_launch', - field=awx.main.fields.AskForField(default=False), + field=awx.main.fields.AskForField(blank=True, default=False), ), ] diff --git a/awx/main/migrations/0053_v340_workflow_inventory.py b/awx/main/migrations/0053_v340_workflow_inventory.py index 7ff40ad4c4..c519a27e25 100644 --- a/awx/main/migrations/0053_v340_workflow_inventory.py +++ b/awx/main/migrations/0053_v340_workflow_inventory.py @@ -27,7 +27,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='workflowjobtemplate', name='ask_inventory_on_launch', - field=awx.main.fields.AskForField(default=False), + field=awx.main.fields.AskForField(blank=True, default=False), ), migrations.AddField( model_name='workflowjobtemplate', diff --git a/awx/main/models/__init__.py b/awx/main/models/__init__.py index 9a810a73a5..01a44c58b7 100644 --- a/awx/main/models/__init__.py +++ b/awx/main/models/__init__.py @@ -140,7 +140,7 @@ User.add_to_class('is_system_auditor', user_is_system_auditor) def user_is_in_enterprise_category(user, category): - ret = (category,) in user.enterprise_auth.all().values_list('provider') and not user.has_usable_password() + ret = (category,) in user.enterprise_auth.values_list('provider') and not user.has_usable_password() # NOTE: this if-else block ensures existing enterprise users are still able to # log in. Remove it in a future release if category == 'radius': diff --git a/awx/sso/migrations/0001_initial.py b/awx/sso/migrations/0001_initial.py index 540215cf7f..69bc5ec7c7 100644 --- a/awx/sso/migrations/0001_initial.py +++ b/awx/sso/migrations/0001_initial.py @@ -17,7 +17,7 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('provider', models.CharField(max_length=32, choices=[(b'radius', 'RADIUS'), (b'tacacs+', 'TACACS+')])), - ('user', models.ForeignKey(related_name='enterprise_auth', to=settings.AUTH_USER_MODEL)), + ('user', models.ForeignKey(related_name='enterprise_auth', on_delete=models.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), migrations.AlterUniqueTogether(