mirror of
https://github.com/ansible/awx.git
synced 2026-02-16 10:40:01 -03:30
This JSONBlob field type is a wrapper around Django's new generic JSONField, but with the database column type forced to be text. This should behave close enough to our old wrapper around django-jsonfield's JSONField and will avoid needing to do the out-of-band database migration.
669 lines
26 KiB
Python
669 lines
26 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Python
|
|
from __future__ import unicode_literals
|
|
|
|
# Psycopg2
|
|
from psycopg2.extensions import AsIs
|
|
|
|
# Django
|
|
from django.db import connection, migrations, models, OperationalError, ProgrammingError
|
|
from django.conf import settings
|
|
import taggit.managers
|
|
|
|
# AWX
|
|
import awx.main.fields
|
|
from awx.main.models import Host
|
|
|
|
|
|
def replaces():
|
|
squashed = ['0005a_squashed_v310_v313_updates', '0005b_squashed_v310_v313_updates']
|
|
try:
|
|
recorder = migrations.recorder.MigrationRecorder(connection)
|
|
result = recorder.migration_qs.filter(app='main').filter(name__in=squashed).all()
|
|
return [('main', m.name) for m in result]
|
|
except (OperationalError, ProgrammingError):
|
|
return []
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
dependencies = [
|
|
('main', '0005_squashed_v310_v313_updates'),
|
|
]
|
|
|
|
replaces = replaces()
|
|
|
|
operations = [
|
|
# Release UJT unique_together constraint
|
|
migrations.AlterUniqueTogether(
|
|
name='unifiedjobtemplate',
|
|
unique_together=set([]),
|
|
),
|
|
# Inventory Refresh
|
|
migrations.RenameField('InventorySource', 'group', 'deprecated_group'),
|
|
migrations.AlterField(
|
|
model_name='inventorysource',
|
|
name='deprecated_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', on_delete=models.CASCADE, null=True),
|
|
),
|
|
# Smart Inventory
|
|
migrations.AddField(
|
|
model_name='inventory',
|
|
name='host_filter',
|
|
field=awx.main.fields.SmartFilterField(
|
|
default=None, help_text='Filter that will be applied to the hosts of this inventory.', null=True, blank=True
|
|
),
|
|
),
|
|
migrations.AddField(
|
|
model_name='inventory',
|
|
name='kind',
|
|
field=models.CharField(
|
|
default='',
|
|
help_text='Kind of inventory being represented.',
|
|
max_length=32,
|
|
blank=True,
|
|
choices=[('', 'Hosts have a direct link to this inventory.'), ('smart', 'Hosts for inventory generated using the host_filter property.')],
|
|
),
|
|
),
|
|
migrations.CreateModel(
|
|
name='SmartInventoryMembership',
|
|
fields=[
|
|
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
|
('host', models.ForeignKey(related_name='+', on_delete=models.CASCADE, to='main.Host')),
|
|
],
|
|
),
|
|
migrations.AddField(
|
|
model_name='smartinventorymembership',
|
|
name='inventory',
|
|
field=models.ForeignKey(on_delete=models.CASCADE, related_name='+', to='main.Inventory'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='host',
|
|
name='smart_inventories',
|
|
field=models.ManyToManyField(related_name='_host_smart_inventories_+', through='main.SmartInventoryMembership', to='main.Inventory'),
|
|
),
|
|
migrations.AlterUniqueTogether(
|
|
name='smartinventorymembership',
|
|
unique_together=set([('host', 'inventory')]),
|
|
),
|
|
# Background Inventory deletion
|
|
migrations.AddField(
|
|
model_name='inventory',
|
|
name='pending_deletion',
|
|
field=models.BooleanField(default=False, help_text='Flag indicating the inventory is being deleted.', editable=False),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='inventory',
|
|
name='organization',
|
|
field=models.ForeignKey(
|
|
related_name='inventories', on_delete=models.SET_NULL, to='main.Organization', help_text='Organization containing this inventory.', null=True
|
|
),
|
|
),
|
|
# Facts
|
|
migrations.AlterField(
|
|
model_name='fact',
|
|
name='facts',
|
|
field=models.JSONField(default=dict, help_text='Arbitrary JSON structure of module facts captured at timestamp for a single host.', blank=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='host',
|
|
name='ansible_facts',
|
|
field=models.JSONField(default=dict, help_text='Arbitrary JSON structure of most recent ansible_facts, per-host.', blank=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='host',
|
|
name='ansible_facts_modified',
|
|
field=models.DateTimeField(default=None, help_text='The date and time ansible_facts was last modified.', null=True, editable=False),
|
|
),
|
|
migrations.AddField(
|
|
model_name='job',
|
|
name='use_fact_cache',
|
|
field=models.BooleanField(
|
|
default=False,
|
|
help_text='If enabled, Tower will act as an Ansible Fact Cache Plugin; persisting facts at the end of a playbook run to the database and caching facts for use by Ansible.',
|
|
),
|
|
),
|
|
migrations.AddField(
|
|
model_name='jobtemplate',
|
|
name='use_fact_cache',
|
|
field=models.BooleanField(
|
|
default=False,
|
|
help_text='If enabled, Tower will act as an Ansible Fact Cache Plugin; persisting facts at the end of a playbook run to the database and caching facts for use by Ansible.',
|
|
),
|
|
),
|
|
migrations.RunSQL(
|
|
[("CREATE INDEX host_ansible_facts_default_gin ON %s USING gin" "(ansible_facts jsonb_path_ops);", [AsIs(Host._meta.db_table)])],
|
|
[('DROP INDEX host_ansible_facts_default_gin;', None)],
|
|
),
|
|
# SCM file-based inventories
|
|
migrations.AddField(
|
|
model_name='inventorysource',
|
|
name='scm_last_revision',
|
|
field=models.CharField(default='', max_length=1024, editable=False, blank=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='inventorysource',
|
|
name='source_project',
|
|
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',
|
|
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',
|
|
name='inventory_files',
|
|
field=awx.main.fields.JSONBlob(
|
|
default=list,
|
|
help_text='Suggested list of content that could be Ansible inventory in the project',
|
|
verbose_name='Inventory Files',
|
|
editable=False,
|
|
blank=True,
|
|
),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='inventorysource',
|
|
name='source',
|
|
field=models.CharField(
|
|
default='',
|
|
max_length=32,
|
|
blank=True,
|
|
choices=[
|
|
('', 'Manual'),
|
|
('file', 'File, Directory or Script'),
|
|
('scm', 'Sourced from a Project'),
|
|
('ec2', 'Amazon EC2'),
|
|
('gce', 'Google Compute Engine'),
|
|
('azure_rm', 'Microsoft Azure Resource Manager'),
|
|
('vmware', 'VMware vCenter'),
|
|
('satellite6', 'Red Hat Satellite 6'),
|
|
('cloudforms', 'Red Hat CloudForms'),
|
|
('openstack', 'OpenStack'),
|
|
('custom', 'Custom Script'),
|
|
],
|
|
),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='inventoryupdate',
|
|
name='source',
|
|
field=models.CharField(
|
|
default='',
|
|
max_length=32,
|
|
blank=True,
|
|
choices=[
|
|
('', 'Manual'),
|
|
('file', 'File, Directory or Script'),
|
|
('scm', 'Sourced from a Project'),
|
|
('ec2', 'Amazon EC2'),
|
|
('gce', 'Google Compute Engine'),
|
|
('azure_rm', 'Microsoft Azure Resource Manager'),
|
|
('vmware', 'VMware vCenter'),
|
|
('satellite6', 'Red Hat Satellite 6'),
|
|
('cloudforms', 'Red Hat CloudForms'),
|
|
('openstack', 'OpenStack'),
|
|
('custom', 'Custom Script'),
|
|
],
|
|
),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='inventorysource',
|
|
name='source_path',
|
|
field=models.CharField(default='', max_length=1024, blank=True),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='inventoryupdate',
|
|
name='source_path',
|
|
field=models.CharField(default='', max_length=1024, blank=True),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='unifiedjob',
|
|
name='launch_type',
|
|
field=models.CharField(
|
|
default='manual',
|
|
max_length=20,
|
|
editable=False,
|
|
choices=[
|
|
('manual', 'Manual'),
|
|
('relaunch', 'Relaunch'),
|
|
('callback', 'Callback'),
|
|
('scheduled', 'Scheduled'),
|
|
('dependency', 'Dependency'),
|
|
('workflow', 'Workflow'),
|
|
('sync', 'Sync'),
|
|
('scm', 'SCM Update'),
|
|
],
|
|
),
|
|
),
|
|
migrations.AddField(
|
|
model_name='inventorysource',
|
|
name='update_on_project_update',
|
|
field=models.BooleanField(default=False),
|
|
),
|
|
# Named URL
|
|
migrations.AlterField(
|
|
model_name='notificationtemplate',
|
|
name='name',
|
|
field=models.CharField(max_length=512),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='notificationtemplate',
|
|
name='organization',
|
|
field=models.ForeignKey(related_name='notification_templates', on_delete=models.CASCADE, to='main.Organization', null=True),
|
|
),
|
|
migrations.AlterUniqueTogether(
|
|
name='notificationtemplate',
|
|
unique_together=set([('organization', 'name')]),
|
|
),
|
|
# Add verbosity option to inventory updates
|
|
migrations.AddField(
|
|
model_name='inventorysource',
|
|
name='verbosity',
|
|
field=models.PositiveIntegerField(default=1, blank=True, choices=[(0, '0 (WARNING)'), (1, '1 (INFO)'), (2, '2 (DEBUG)')]),
|
|
),
|
|
migrations.AddField(
|
|
model_name='inventoryupdate',
|
|
name='verbosity',
|
|
field=models.PositiveIntegerField(default=1, blank=True, choices=[(0, '0 (WARNING)'), (1, '1 (INFO)'), (2, '2 (DEBUG)')]),
|
|
),
|
|
# Job Templates
|
|
migrations.AddField(
|
|
model_name='jobtemplate',
|
|
name='ask_verbosity_on_launch',
|
|
field=models.BooleanField(default=False),
|
|
),
|
|
# Workflows
|
|
migrations.AddField(
|
|
model_name='workflowjob',
|
|
name='allow_simultaneous',
|
|
field=models.BooleanField(default=False),
|
|
),
|
|
migrations.AddField(
|
|
model_name='workflowjobtemplate',
|
|
name='allow_simultaneous',
|
|
field=models.BooleanField(default=False),
|
|
),
|
|
# Permission and Deprecated Field Removal
|
|
migrations.RemoveField(
|
|
model_name='permission',
|
|
name='created_by',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='permission',
|
|
name='inventory',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='permission',
|
|
name='modified_by',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='permission',
|
|
name='project',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='permission',
|
|
name='tags',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='permission',
|
|
name='team',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='permission',
|
|
name='user',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='activitystream',
|
|
name='permission',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='credential',
|
|
name='deprecated_team',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='credential',
|
|
name='deprecated_user',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='organization',
|
|
name='deprecated_admins',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='organization',
|
|
name='deprecated_projects',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='organization',
|
|
name='deprecated_users',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='team',
|
|
name='deprecated_projects',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='team',
|
|
name='deprecated_users',
|
|
),
|
|
migrations.DeleteModel(
|
|
name='Permission',
|
|
),
|
|
# Insights
|
|
migrations.AddField(
|
|
model_name='host',
|
|
name='insights_system_id',
|
|
field=models.TextField(default=None, help_text='Red Hat Insights host unique identifier.', null=True, db_index=True, blank=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='inventory',
|
|
name='insights_credential',
|
|
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',
|
|
name='kind',
|
|
field=models.CharField(
|
|
default='',
|
|
help_text='Kind of inventory being represented.',
|
|
max_length=32,
|
|
blank=True,
|
|
choices=[('', 'Hosts have a direct link to this inventory.'), ('smart', 'Hosts for inventory generated using the host_filter property.')],
|
|
),
|
|
),
|
|
# Timeout help text update
|
|
migrations.AlterField(
|
|
model_name='inventorysource',
|
|
name='timeout',
|
|
field=models.IntegerField(default=0, help_text='The amount of time (in seconds) to run before the task is canceled.', blank=True),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='inventoryupdate',
|
|
name='timeout',
|
|
field=models.IntegerField(default=0, help_text='The amount of time (in seconds) to run before the task is canceled.', blank=True),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='job',
|
|
name='timeout',
|
|
field=models.IntegerField(default=0, help_text='The amount of time (in seconds) to run before the task is canceled.', blank=True),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='jobtemplate',
|
|
name='timeout',
|
|
field=models.IntegerField(default=0, help_text='The amount of time (in seconds) to run before the task is canceled.', blank=True),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='project',
|
|
name='timeout',
|
|
field=models.IntegerField(default=0, help_text='The amount of time (in seconds) to run before the task is canceled.', blank=True),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='projectupdate',
|
|
name='timeout',
|
|
field=models.IntegerField(default=0, help_text='The amount of time (in seconds) to run before the task is canceled.', blank=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='adhoccommand',
|
|
name='diff_mode',
|
|
field=models.BooleanField(default=False),
|
|
),
|
|
migrations.AddField(
|
|
model_name='jobtemplate',
|
|
name='ask_diff_mode_on_launch',
|
|
field=models.BooleanField(default=False),
|
|
),
|
|
migrations.AddField(
|
|
model_name='job',
|
|
name='diff_mode',
|
|
field=models.BooleanField(
|
|
default=False, help_text='If enabled, textual changes made to any templated files on the host are shown in the standard output'
|
|
),
|
|
),
|
|
migrations.AddField(
|
|
model_name='jobtemplate',
|
|
name='diff_mode',
|
|
field=models.BooleanField(
|
|
default=False, help_text='If enabled, textual changes made to any templated files on the host are shown in the standard output'
|
|
),
|
|
),
|
|
migrations.CreateModel(
|
|
name='CredentialType',
|
|
fields=[
|
|
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
|
('created', models.DateTimeField(default=None, editable=False)),
|
|
('modified', models.DateTimeField(default=None, editable=False)),
|
|
('description', models.TextField(default='', blank=True)),
|
|
('name', models.CharField(max_length=512)),
|
|
(
|
|
'kind',
|
|
models.CharField(
|
|
max_length=32,
|
|
choices=[
|
|
('ssh', 'Machine'),
|
|
('vault', 'Vault'),
|
|
('net', 'Network'),
|
|
('scm', 'Source Control'),
|
|
('cloud', 'Cloud'),
|
|
('insights', 'Insights'),
|
|
],
|
|
),
|
|
),
|
|
('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.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={
|
|
'ordering': ('kind', 'name'),
|
|
},
|
|
),
|
|
migrations.AlterModelOptions(
|
|
name='credential',
|
|
options={'ordering': ('name',)},
|
|
),
|
|
migrations.AddField(
|
|
model_name='credential',
|
|
name='inputs',
|
|
field=awx.main.fields.CredentialInputField(default=dict, blank=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='credential',
|
|
name='credential_type',
|
|
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.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.SET_NULL, default=None, blank=True, to='main.Credential', null=True
|
|
),
|
|
),
|
|
migrations.AddField(
|
|
model_name='job',
|
|
name='extra_credentials',
|
|
field=models.ManyToManyField(related_name='_job_extra_credentials_+', to='main.Credential'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='jobtemplate',
|
|
name='extra_credentials',
|
|
field=models.ManyToManyField(related_name='_jobtemplate_extra_credentials_+', to='main.Credential'),
|
|
),
|
|
migrations.AlterUniqueTogether(
|
|
name='credential',
|
|
unique_together=set([('organization', 'name', 'credential_type')]),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='credential',
|
|
name='become_method',
|
|
field=models.CharField(
|
|
default='',
|
|
help_text='Privilege escalation method.',
|
|
max_length=32,
|
|
blank=True,
|
|
choices=[
|
|
('', 'None'),
|
|
('sudo', 'Sudo'),
|
|
('su', 'Su'),
|
|
('pbrun', 'Pbrun'),
|
|
('pfexec', 'Pfexec'),
|
|
('dzdo', 'DZDO'),
|
|
('pmrun', 'Pmrun'),
|
|
('runas', 'Runas'),
|
|
],
|
|
),
|
|
),
|
|
# Connecting activity stream
|
|
migrations.AddField(
|
|
model_name='activitystream',
|
|
name='credential_type',
|
|
field=models.ManyToManyField(to='main.CredentialType', blank=True),
|
|
),
|
|
migrations.CreateModel(
|
|
name='InstanceGroup',
|
|
fields=[
|
|
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
|
('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',
|
|
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'
|
|
),
|
|
),
|
|
],
|
|
),
|
|
migrations.AddField(
|
|
model_name='inventory',
|
|
name='instance_groups',
|
|
field=models.ManyToManyField(to='main.InstanceGroup', blank=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='unifiedjob',
|
|
name='instance_group',
|
|
field=models.ForeignKey(
|
|
on_delete=models.SET_NULL, default=None, blank=True, to='main.InstanceGroup', help_text='The Instance group the job was run under', null=True
|
|
),
|
|
),
|
|
migrations.AddField(
|
|
model_name='unifiedjobtemplate',
|
|
name='instance_groups',
|
|
field=models.ManyToManyField(to='main.InstanceGroup', blank=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='organization',
|
|
name='instance_groups',
|
|
field=models.ManyToManyField(to='main.InstanceGroup', blank=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='activitystream',
|
|
name='instance_group',
|
|
field=models.ManyToManyField(to='main.InstanceGroup', blank=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='instance',
|
|
name='last_isolated_check',
|
|
field=models.DateTimeField(editable=False, null=True),
|
|
),
|
|
# Migrations that don't change db schema but simply to make Django ORM happy.
|
|
# e.g. Choice updates, help_text updates, etc.
|
|
migrations.AlterField(
|
|
model_name='schedule',
|
|
name='enabled',
|
|
field=models.BooleanField(default=True, help_text='Enables processing of this schedule.'),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='unifiedjob',
|
|
name='execution_node',
|
|
field=models.TextField(default='', help_text='The node the job executed on.', editable=False, blank=True),
|
|
),
|
|
]
|