From 99c62f1261d04efec4d22184932bbc440362cd5f Mon Sep 17 00:00:00 2001 From: Chris Church Date: Mon, 24 Mar 2014 16:09:49 -0400 Subject: [PATCH] AC-1040 Inserted migration 34 from master, defined additional model changes needed, regenerated previous migrations 34/35/36/37 as 35/36/37/38. --- awx/main/migrations/0034_v148_changes.py | 986 ++----------------- awx/main/migrations/0035_v148_changes.py | 1142 ++++++++++++++++------ awx/main/migrations/0036_v148_changes.py | 871 ++++++++++------- awx/main/migrations/0037_v148_changes.py | 567 ++++++++--- awx/main/migrations/0038_v148_changes.py | 500 ++++++++++ awx/main/models/activity_stream.py | 1 + awx/main/models/base.py | 16 + awx/main/models/inventory.py | 34 +- awx/main/models/jobs.py | 11 +- awx/main/models/organization.py | 15 +- awx/main/models/projects.py | 3 + awx/main/models/schedules.py | 12 +- awx/main/models/unified_jobs.py | 35 +- 13 files changed, 2399 insertions(+), 1794 deletions(-) create mode 100644 awx/main/migrations/0038_v148_changes.py diff --git a/awx/main/migrations/0034_v148_changes.py b/awx/main/migrations/0034_v148_changes.py index a9234cbbc5..be0d8f88ed 100644 --- a/awx/main/migrations/0034_v148_changes.py +++ b/awx/main/migrations/0034_v148_changes.py @@ -8,726 +8,31 @@ from django.db import models class Migration(SchemaMigration): def forwards(self, orm): - # Adding model 'InventoryUpdateNew' - db.create_table(u'main_inventoryupdatenew', ( - (u'unifiedjob_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['main.UnifiedJob'], unique=True, primary_key=True)), - ('source', self.gf('django.db.models.fields.CharField')(default='', max_length=32, blank=True)), - ('source_path', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('source_vars', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('credential', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='inventoryupdatenews', null=True, blank=True, to=orm['main.Credential'])), - ('source_regions', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('overwrite', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('overwrite_vars', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('license_error', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('inventory_source', self.gf('django.db.models.fields.related.ForeignKey')(related_name='inventory_updates', to=orm['main.InventorySourceNew'])), - )) - db.send_create_signal('main', ['InventoryUpdateNew']) - - # Adding model 'JobNew' - db.create_table(u'main_jobnew', ( - (u'unifiedjob_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['main.UnifiedJob'], unique=True, primary_key=True)), - ('job_type', self.gf('django.db.models.fields.CharField')(max_length=64)), - ('inventory', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobnews', null=True, on_delete=models.SET_NULL, to=orm['main.Inventory'])), - ('playbook', self.gf('django.db.models.fields.CharField')(default='', max_length=1024)), - ('credential', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobnews', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True)), - ('cloud_credential', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobnews_as_cloud_credential+', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True)), - ('forks', self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True)), - ('limit', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('verbosity', self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True)), - ('extra_vars', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('job_tags', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('job_template', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobs', on_delete=models.SET_NULL, default=None, to=orm['main.JobTemplateNew'], blank=True, null=True)), - ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobs', null=True, on_delete=models.SET_NULL, to=orm['main.ProjectNew'])), - )) - db.send_create_signal('main', ['JobNew']) - - # Adding model 'UnifiedJob' - db.create_table(u'main_unifiedjob', ( - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('polymorphic_ctype', self.gf('django.db.models.fields.related.ForeignKey')(related_name='polymorphic_main.unifiedjob_set', null=True, to=orm['contenttypes.ContentType'])), - ('created', self.gf('django.db.models.fields.DateTimeField')(default=None)), - ('modified', self.gf('django.db.models.fields.DateTimeField')(default=None)), - ('description', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('created_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'unifiedjob', 'app_label': 'main'}(class)s_created+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), - ('modified_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'unifiedjob', 'app_label': 'main'}(class)s_modified+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), - ('active', self.gf('django.db.models.fields.BooleanField')(default=True)), - ('old_pk', self.gf('django.db.models.fields.PositiveIntegerField')(default=None, null=True)), - ('unified_job_template', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='unifiedjob_unified_jobs', null=True, to=orm['main.UnifiedJobTemplate'])), - ('launch_type', self.gf('django.db.models.fields.CharField')(default='manual', max_length=20)), - ('schedule', self.gf('django.db.models.fields.related.ForeignKey')(default=None, to=orm['main.Schedule'], null=True)), - ('cancel_flag', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('status', self.gf('django.db.models.fields.CharField')(default='new', max_length=20)), - ('failed', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('started', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)), - ('finished', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)), - ('elapsed', self.gf('django.db.models.fields.DecimalField')(max_digits=12, decimal_places=3)), - ('job_args', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('job_cwd', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('job_env', self.gf('jsonfield.fields.JSONField')(default={}, blank=True)), - ('start_args', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('result_stdout_text', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('result_stdout_file', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('result_traceback', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('celery_task_id', self.gf('django.db.models.fields.CharField')(default='', max_length=100, blank=True)), - )) - db.send_create_signal('main', ['UnifiedJob']) - - # Adding M2M table for field depends_on on 'UnifiedJob' - m2m_table_name = db.shorten_name(u'main_unifiedjob_depends_on') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('from_unifiedjob', models.ForeignKey(orm['main.unifiedjob'], null=False)), - ('to_unifiedjob', models.ForeignKey(orm['main.unifiedjob'], null=False)) - )) - db.create_unique(m2m_table_name, ['from_unifiedjob_id', 'to_unifiedjob_id']) - - # Adding model 'Schedule' - db.create_table(u'main_schedule', ( - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('created', self.gf('django.db.models.fields.DateTimeField')(default=None)), - ('modified', self.gf('django.db.models.fields.DateTimeField')(default=None)), - ('description', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('created_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'schedule', 'app_label': 'main'}(class)s_created+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), - ('modified_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'schedule', 'app_label': 'main'}(class)s_modified+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), - ('active', self.gf('django.db.models.fields.BooleanField')(default=True)), - ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512)), - ('job_template', self.gf('django.db.models.fields.related.ForeignKey')(related_name='schedules', to=orm['main.UnifiedJobTemplate'])), - ('dtstart', self.gf('django.db.models.fields.DateTimeField')()), - ('dtend', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)), - ('rrule', self.gf('django.db.models.fields.CharField')(max_length=255)), - )) - db.send_create_signal('main', ['Schedule']) - - # Adding model 'InventorySourceNew' - db.create_table(u'main_inventorysourcenew', ( - (u'unifiedjobtemplate_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['main.UnifiedJobTemplate'], unique=True, primary_key=True)), - ('source', self.gf('django.db.models.fields.CharField')(default='', max_length=32, blank=True)), - ('source_path', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('source_vars', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('credential', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='inventorysourcenews', null=True, blank=True, to=orm['main.Credential'])), - ('source_regions', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('overwrite', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('overwrite_vars', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('update_on_launch', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('update_cache_timeout', self.gf('django.db.models.fields.PositiveIntegerField')(default=0)), - ('inventory', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='new_inventory_sources', null=True, to=orm['main.Inventory'])), - ('group', self.gf('awx.main.fields.AutoOneToOneField')(related_name='new_inventory_source', null=True, default=None, to=orm['main.Group'], blank=True, unique=True)), - )) - db.send_create_signal('main', ['InventorySourceNew']) - - # Adding model 'JobTemplateNew' - db.create_table('main_jobtemplatenew', ( - (u'unifiedjobtemplate_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['main.UnifiedJobTemplate'], unique=True, primary_key=True)), - ('job_type', self.gf('django.db.models.fields.CharField')(max_length=64)), - ('inventory', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobtemplatenews', null=True, on_delete=models.SET_NULL, to=orm['main.Inventory'])), - ('playbook', self.gf('django.db.models.fields.CharField')(default='', max_length=1024)), - ('credential', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobtemplatenews', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True)), - ('cloud_credential', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobtemplatenews_as_cloud_credential+', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True)), - ('forks', self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True)), - ('limit', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('verbosity', self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True)), - ('extra_vars', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('job_tags', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('host_config_key', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='job_templates', null=True, on_delete=models.SET_NULL, to=orm['main.ProjectNew'])), - )) - db.send_create_signal('main', ['JobTemplateNew']) - - # Adding model 'ProjectNew' - db.create_table(u'main_projectnew', ( - (u'unifiedjobtemplate_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['main.UnifiedJobTemplate'], unique=True, primary_key=True)), - ('local_path', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)), - ('scm_type', self.gf('django.db.models.fields.CharField')(default='', max_length=8, blank=True)), - ('scm_url', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('scm_branch', self.gf('django.db.models.fields.CharField')(default='', max_length=256, blank=True)), - ('scm_clean', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('scm_delete_on_update', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('credential', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='projectnews', null=True, blank=True, to=orm['main.Credential'])), - ('scm_delete_on_next_update', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('scm_update_on_launch', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('scm_update_cache_timeout', self.gf('django.db.models.fields.PositiveIntegerField')(default=0)), - )) - db.send_create_signal('main', ['ProjectNew']) - - # Adding model 'ProjectUpdateNew' - db.create_table(u'main_projectupdatenew', ( - (u'unifiedjob_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['main.UnifiedJob'], unique=True, primary_key=True)), - ('local_path', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)), - ('scm_type', self.gf('django.db.models.fields.CharField')(default='', max_length=8, blank=True)), - ('scm_url', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('scm_branch', self.gf('django.db.models.fields.CharField')(default='', max_length=256, blank=True)), - ('scm_clean', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('scm_delete_on_update', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('credential', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='projectupdatenews', null=True, blank=True, to=orm['main.Credential'])), - ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='project_updates', to=orm['main.ProjectNew'])), - )) - db.send_create_signal('main', ['ProjectUpdateNew']) - - # Adding model 'UnifiedJobTemplate' - db.create_table(u'main_unifiedjobtemplate', ( - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('polymorphic_ctype', self.gf('django.db.models.fields.related.ForeignKey')(related_name='polymorphic_main.unifiedjobtemplate_set', null=True, to=orm['contenttypes.ContentType'])), - ('created', self.gf('django.db.models.fields.DateTimeField')(default=None)), - ('modified', self.gf('django.db.models.fields.DateTimeField')(default=None)), - ('description', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('created_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'unifiedjobtemplate', 'app_label': 'main'}(class)s_created+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), - ('modified_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'unifiedjobtemplate', 'app_label': 'main'}(class)s_modified+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), - ('active', self.gf('django.db.models.fields.BooleanField')(default=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=512)), - ('old_pk', self.gf('django.db.models.fields.PositiveIntegerField')(default=None, null=True)), - ('current_job', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='unifiedjobtemplate_as_current_job+', null=True, to=orm['main.UnifiedJob'])), - ('last_job', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='unifiedjobtemplate_as_last_job+', null=True, to=orm['main.UnifiedJob'])), - ('last_job_failed', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('last_job_run', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)), - ('has_schedules', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('next_job_run', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)), - ('status', self.gf('django.db.models.fields.CharField')(default='ok', max_length=32)), - )) - db.send_create_signal('main', ['UnifiedJobTemplate']) - - # Adding unique constraint on 'UnifiedJobTemplate', fields ['polymorphic_ctype', 'name'] - db.create_unique(u'main_unifiedjobtemplate', ['polymorphic_ctype_id', 'name']) - - - # Changing field 'Profile.created' - db.alter_column(u'main_profile', 'created', self.gf('django.db.models.fields.DateTimeField')()) - - # Changing field 'Profile.modified' - db.alter_column(u'main_profile', 'modified', self.gf('django.db.models.fields.DateTimeField')()) - # Adding field 'ProjectUpdate.local_path' - db.add_column(u'main_projectupdate', 'local_path', - self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True), - keep_default=False) - - # Adding field 'ProjectUpdate.scm_type' - db.add_column(u'main_projectupdate', 'scm_type', - self.gf('django.db.models.fields.CharField')(default='', max_length=8, blank=True), - keep_default=False) - - # Adding field 'ProjectUpdate.scm_url' - db.add_column(u'main_projectupdate', 'scm_url', - self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True), - keep_default=False) - - # Adding field 'ProjectUpdate.scm_branch' - db.add_column(u'main_projectupdate', 'scm_branch', - self.gf('django.db.models.fields.CharField')(default='', max_length=256, blank=True), - keep_default=False) - - # Adding field 'ProjectUpdate.scm_clean' - db.add_column(u'main_projectupdate', 'scm_clean', - self.gf('django.db.models.fields.BooleanField')(default=False), - keep_default=False) - - # Adding field 'ProjectUpdate.scm_delete_on_update' - db.add_column(u'main_projectupdate', 'scm_delete_on_update', - self.gf('django.db.models.fields.BooleanField')(default=False), - keep_default=False) - - # Adding field 'ProjectUpdate.credential' - db.add_column(u'main_projectupdate', 'credential', - self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='projectupdates', null=True, blank=True, to=orm['main.Credential']), - keep_default=False) - - - # Changing field 'ProjectUpdate.created' - db.alter_column(u'main_projectupdate', 'created', self.gf('django.db.models.fields.DateTimeField')()) - - # Changing field 'ProjectUpdate.modified' - db.alter_column(u'main_projectupdate', 'modified', self.gf('django.db.models.fields.DateTimeField')()) - # Adding M2M table for field new_inventory_sources on 'Group' - m2m_table_name = db.shorten_name(u'main_group_new_inventory_sources') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('group', models.ForeignKey(orm['main.group'], null=False)), - ('inventorysourcenew', models.ForeignKey(orm['main.inventorysourcenew'], null=False)) - )) - db.create_unique(m2m_table_name, ['group_id', 'inventorysourcenew_id']) - - - # Changing field 'Group.created' - db.alter_column(u'main_group', 'created', self.gf('django.db.models.fields.DateTimeField')()) - - # Changing field 'Group.modified' - db.alter_column(u'main_group', 'modified', self.gf('django.db.models.fields.DateTimeField')()) - - # Changing field 'Job.created' - db.alter_column(u'main_job', 'created', self.gf('django.db.models.fields.DateTimeField')()) - - # Changing field 'Job.modified' - db.alter_column(u'main_job', 'modified', self.gf('django.db.models.fields.DateTimeField')()) - - # Changing field 'Inventory.created' - db.alter_column(u'main_inventory', 'created', self.gf('django.db.models.fields.DateTimeField')()) - - # Changing field 'Inventory.modified' - db.alter_column(u'main_inventory', 'modified', self.gf('django.db.models.fields.DateTimeField')()) - # Adding field 'Host.new_last_job' - db.add_column(u'main_host', 'new_last_job', - self.gf('django.db.models.fields.related.ForeignKey')(related_name='hosts_as_last_job+', on_delete=models.SET_NULL, default=None, to=orm['main.JobNew'], blank=True, null=True), - keep_default=False) - - # Adding M2M table for field new_inventory_sources on 'Host' - m2m_table_name = db.shorten_name(u'main_host_new_inventory_sources') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('host', models.ForeignKey(orm['main.host'], null=False)), - ('inventorysourcenew', models.ForeignKey(orm['main.inventorysourcenew'], null=False)) - )) - db.create_unique(m2m_table_name, ['host_id', 'inventorysourcenew_id']) - - - # Changing field 'Host.created' - db.alter_column(u'main_host', 'created', self.gf('django.db.models.fields.DateTimeField')()) - - # Changing field 'Host.modified' - db.alter_column(u'main_host', 'modified', self.gf('django.db.models.fields.DateTimeField')()) - # Adding field 'JobHostSummary.new_job' - db.add_column(u'main_jobhostsummary', 'new_job', - self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='new_job_host_summaries', null=True, to=orm['main.JobNew']), - keep_default=False) - - - # Changing field 'JobHostSummary.created' - db.alter_column(u'main_jobhostsummary', 'created', self.gf('django.db.models.fields.DateTimeField')()) - - # Changing field 'JobHostSummary.modified' - db.alter_column(u'main_jobhostsummary', 'modified', self.gf('django.db.models.fields.DateTimeField')()) - # Adding unique constraint on 'JobHostSummary', fields ['new_job', 'host'] - db.create_unique(u'main_jobhostsummary', ['new_job_id', 'host_id']) - - # Adding field 'InventoryUpdate.source' - db.add_column(u'main_inventoryupdate', 'source', - self.gf('django.db.models.fields.CharField')(default='', max_length=32, blank=True), - keep_default=False) - - # Adding field 'InventoryUpdate.source_path' - db.add_column(u'main_inventoryupdate', 'source_path', - self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True), - keep_default=False) - - # Adding field 'InventoryUpdate.source_vars' - db.add_column(u'main_inventoryupdate', 'source_vars', + # Adding field 'ProjectUpdate.start_args' + db.add_column(u'main_projectupdate', 'start_args', self.gf('django.db.models.fields.TextField')(default='', blank=True), keep_default=False) - # Adding field 'InventoryUpdate.credential' - db.add_column(u'main_inventoryupdate', 'credential', - self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='inventoryupdates', null=True, blank=True, to=orm['main.Credential']), + # Adding field 'Job.start_args' + db.add_column(u'main_job', 'start_args', + self.gf('django.db.models.fields.TextField')(default='', blank=True), keep_default=False) - # Adding field 'InventoryUpdate.source_regions' - db.add_column(u'main_inventoryupdate', 'source_regions', - self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True), - keep_default=False) - - # Adding field 'InventoryUpdate.overwrite' - db.add_column(u'main_inventoryupdate', 'overwrite', - self.gf('django.db.models.fields.BooleanField')(default=False), - keep_default=False) - - # Adding field 'InventoryUpdate.overwrite_vars' - db.add_column(u'main_inventoryupdate', 'overwrite_vars', - self.gf('django.db.models.fields.BooleanField')(default=False), - keep_default=False) - - - # Changing field 'InventoryUpdate.created' - db.alter_column(u'main_inventoryupdate', 'created', self.gf('django.db.models.fields.DateTimeField')()) - - # Changing field 'InventoryUpdate.modified' - db.alter_column(u'main_inventoryupdate', 'modified', self.gf('django.db.models.fields.DateTimeField')()) - - # Changing field 'Credential.created' - db.alter_column(u'main_credential', 'created', self.gf('django.db.models.fields.DateTimeField')()) - - # Changing field 'Credential.modified' - db.alter_column(u'main_credential', 'modified', self.gf('django.db.models.fields.DateTimeField')()) - - # Changing field 'JobTemplate.created' - db.alter_column(u'main_jobtemplate', 'created', self.gf('django.db.models.fields.DateTimeField')()) - - # Changing field 'JobTemplate.modified' - db.alter_column(u'main_jobtemplate', 'modified', self.gf('django.db.models.fields.DateTimeField')()) - # Adding M2M table for field unified_job_template on 'ActivityStream' - m2m_table_name = db.shorten_name(u'main_activitystream_unified_job_template') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), - ('unifiedjobtemplate', models.ForeignKey(orm['main.unifiedjobtemplate'], null=False)) - )) - db.create_unique(m2m_table_name, ['activitystream_id', 'unifiedjobtemplate_id']) - - # Adding M2M table for field unified_job on 'ActivityStream' - m2m_table_name = db.shorten_name(u'main_activitystream_unified_job') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), - ('unifiedjob', models.ForeignKey(orm['main.unifiedjob'], null=False)) - )) - db.create_unique(m2m_table_name, ['activitystream_id', 'unifiedjob_id']) - - # Adding M2M table for field new_inventory_source on 'ActivityStream' - m2m_table_name = db.shorten_name(u'main_activitystream_new_inventory_source') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), - ('inventorysourcenew', models.ForeignKey(orm['main.inventorysourcenew'], null=False)) - )) - db.create_unique(m2m_table_name, ['activitystream_id', 'inventorysourcenew_id']) - - # Adding M2M table for field new_inventory_update on 'ActivityStream' - m2m_table_name = db.shorten_name(u'main_activitystream_new_inventory_update') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), - ('inventoryupdatenew', models.ForeignKey(orm['main.inventoryupdatenew'], null=False)) - )) - db.create_unique(m2m_table_name, ['activitystream_id', 'inventoryupdatenew_id']) - - # Adding M2M table for field new_project on 'ActivityStream' - m2m_table_name = db.shorten_name(u'main_activitystream_new_project') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), - ('projectnew', models.ForeignKey(orm['main.projectnew'], null=False)) - )) - db.create_unique(m2m_table_name, ['activitystream_id', 'projectnew_id']) - - # Adding M2M table for field new_project_update on 'ActivityStream' - m2m_table_name = db.shorten_name(u'main_activitystream_new_project_update') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), - ('projectupdatenew', models.ForeignKey(orm['main.projectupdatenew'], null=False)) - )) - db.create_unique(m2m_table_name, ['activitystream_id', 'projectupdatenew_id']) - - # Adding M2M table for field new_job_template on 'ActivityStream' - m2m_table_name = db.shorten_name(u'main_activitystream_new_job_template') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), - ('jobtemplatenew', models.ForeignKey(orm['main.jobtemplatenew'], null=False)) - )) - db.create_unique(m2m_table_name, ['activitystream_id', 'jobtemplatenew_id']) - - # Adding M2M table for field new_job on 'ActivityStream' - m2m_table_name = db.shorten_name(u'main_activitystream_new_job') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), - ('jobnew', models.ForeignKey(orm['main.jobnew'], null=False)) - )) - db.create_unique(m2m_table_name, ['activitystream_id', 'jobnew_id']) - - # Adding M2M table for field new_projects on 'Team' - m2m_table_name = db.shorten_name(u'main_team_new_projects') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('team', models.ForeignKey(orm['main.team'], null=False)), - ('projectnew', models.ForeignKey(orm['main.projectnew'], null=False)) - )) - db.create_unique(m2m_table_name, ['team_id', 'projectnew_id']) - - - # Changing field 'Team.created' - db.alter_column(u'main_team', 'created', self.gf('django.db.models.fields.DateTimeField')()) - - # Changing field 'Team.modified' - db.alter_column(u'main_team', 'modified', self.gf('django.db.models.fields.DateTimeField')()) - # Adding field 'Project.scm_update_cache_timeout' - db.add_column(u'main_project', 'scm_update_cache_timeout', - self.gf('django.db.models.fields.PositiveIntegerField')(default=0), - keep_default=False) - - - # Changing field 'Project.created' - db.alter_column(u'main_project', 'created', self.gf('django.db.models.fields.DateTimeField')()) - - # Changing field 'Project.modified' - db.alter_column(u'main_project', 'modified', self.gf('django.db.models.fields.DateTimeField')()) - # Adding M2M table for field new_projects on 'Organization' - m2m_table_name = db.shorten_name(u'main_organization_new_projects') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('organization', models.ForeignKey(orm['main.organization'], null=False)), - ('projectnew', models.ForeignKey(orm['main.projectnew'], null=False)) - )) - db.create_unique(m2m_table_name, ['organization_id', 'projectnew_id']) - - - # Changing field 'Organization.created' - db.alter_column(u'main_organization', 'created', self.gf('django.db.models.fields.DateTimeField')()) - - # Changing field 'Organization.modified' - db.alter_column(u'main_organization', 'modified', self.gf('django.db.models.fields.DateTimeField')()) - # Adding field 'Permission.new_project' - db.add_column(u'main_permission', 'new_project', - self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='permissions', null=True, on_delete=models.SET_NULL, to=orm['main.ProjectNew']), - keep_default=False) - - - # Changing field 'Permission.created' - db.alter_column(u'main_permission', 'created', self.gf('django.db.models.fields.DateTimeField')()) - - # Changing field 'Permission.modified' - db.alter_column(u'main_permission', 'modified', self.gf('django.db.models.fields.DateTimeField')()) - # Deleting field 'InventorySource.update_interval' - db.delete_column(u'main_inventorysource', 'update_interval') - - # Adding field 'InventorySource.update_cache_timeout' - db.add_column(u'main_inventorysource', 'update_cache_timeout', - self.gf('django.db.models.fields.PositiveIntegerField')(default=0), - keep_default=False) - - - # Changing field 'InventorySource.created' - db.alter_column(u'main_inventorysource', 'created', self.gf('django.db.models.fields.DateTimeField')()) - - # Changing field 'InventorySource.modified' - db.alter_column(u'main_inventorysource', 'modified', self.gf('django.db.models.fields.DateTimeField')()) - # Adding field 'JobEvent.role' - db.add_column(u'main_jobevent', 'role', - self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True), - keep_default=False) - - # Adding field 'JobEvent.new_job' - db.add_column(u'main_jobevent', 'new_job', - self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='new_job_events', null=True, to=orm['main.JobNew']), + # Adding field 'InventoryUpdate.start_args' + db.add_column(u'main_inventoryupdate', 'start_args', + self.gf('django.db.models.fields.TextField')(default='', blank=True), keep_default=False) def backwards(self, orm): - # Removing unique constraint on 'JobHostSummary', fields ['new_job', 'host'] - db.delete_unique(u'main_jobhostsummary', ['new_job_id', 'host_id']) + # Deleting field 'ProjectUpdate.start_args' + db.delete_column(u'main_projectupdate', 'start_args') - # Removing unique constraint on 'UnifiedJobTemplate', fields ['polymorphic_ctype', 'name'] - db.delete_unique(u'main_unifiedjobtemplate', ['polymorphic_ctype_id', 'name']) + # Deleting field 'Job.start_args' + db.delete_column(u'main_job', 'start_args') - # Deleting model 'InventoryUpdateNew' - db.delete_table(u'main_inventoryupdatenew') - - # Deleting model 'JobNew' - db.delete_table(u'main_jobnew') - - # Deleting model 'UnifiedJob' - db.delete_table(u'main_unifiedjob') - - # Removing M2M table for field depends_on on 'UnifiedJob' - db.delete_table(db.shorten_name(u'main_unifiedjob_depends_on')) - - # Deleting model 'Schedule' - db.delete_table(u'main_schedule') - - # Deleting model 'InventorySourceNew' - db.delete_table(u'main_inventorysourcenew') - - # Deleting model 'JobTemplateNew' - db.delete_table('main_jobtemplatenew') - - # Deleting model 'ProjectNew' - db.delete_table(u'main_projectnew') - - # Deleting model 'ProjectUpdateNew' - db.delete_table(u'main_projectupdatenew') - - # Deleting model 'UnifiedJobTemplate' - db.delete_table(u'main_unifiedjobtemplate') - - - # Changing field 'Profile.created' - db.alter_column(u'main_profile', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) - - # Changing field 'Profile.modified' - db.alter_column(u'main_profile', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) - # Deleting field 'ProjectUpdate.local_path' - db.delete_column(u'main_projectupdate', 'local_path') - - # Deleting field 'ProjectUpdate.scm_type' - db.delete_column(u'main_projectupdate', 'scm_type') - - # Deleting field 'ProjectUpdate.scm_url' - db.delete_column(u'main_projectupdate', 'scm_url') - - # Deleting field 'ProjectUpdate.scm_branch' - db.delete_column(u'main_projectupdate', 'scm_branch') - - # Deleting field 'ProjectUpdate.scm_clean' - db.delete_column(u'main_projectupdate', 'scm_clean') - - # Deleting field 'ProjectUpdate.scm_delete_on_update' - db.delete_column(u'main_projectupdate', 'scm_delete_on_update') - - # Deleting field 'ProjectUpdate.credential' - db.delete_column(u'main_projectupdate', 'credential_id') - - - # Changing field 'ProjectUpdate.created' - db.alter_column(u'main_projectupdate', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) - - # Changing field 'ProjectUpdate.modified' - db.alter_column(u'main_projectupdate', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) - # Removing M2M table for field new_inventory_sources on 'Group' - db.delete_table(db.shorten_name(u'main_group_new_inventory_sources')) - - - # Changing field 'Group.created' - db.alter_column(u'main_group', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) - - # Changing field 'Group.modified' - db.alter_column(u'main_group', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) - - # Changing field 'Job.created' - db.alter_column(u'main_job', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) - - # Changing field 'Job.modified' - db.alter_column(u'main_job', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) - - # Changing field 'Inventory.created' - db.alter_column(u'main_inventory', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) - - # Changing field 'Inventory.modified' - db.alter_column(u'main_inventory', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) - # Deleting field 'Host.new_last_job' - db.delete_column(u'main_host', 'new_last_job_id') - - # Removing M2M table for field new_inventory_sources on 'Host' - db.delete_table(db.shorten_name(u'main_host_new_inventory_sources')) - - - # Changing field 'Host.created' - db.alter_column(u'main_host', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) - - # Changing field 'Host.modified' - db.alter_column(u'main_host', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) - # Deleting field 'JobHostSummary.new_job' - db.delete_column(u'main_jobhostsummary', 'new_job_id') - - - # Changing field 'JobHostSummary.created' - db.alter_column(u'main_jobhostsummary', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) - - # Changing field 'JobHostSummary.modified' - db.alter_column(u'main_jobhostsummary', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) - # Deleting field 'InventoryUpdate.source' - db.delete_column(u'main_inventoryupdate', 'source') - - # Deleting field 'InventoryUpdate.source_path' - db.delete_column(u'main_inventoryupdate', 'source_path') - - # Deleting field 'InventoryUpdate.source_vars' - db.delete_column(u'main_inventoryupdate', 'source_vars') - - # Deleting field 'InventoryUpdate.credential' - db.delete_column(u'main_inventoryupdate', 'credential_id') - - # Deleting field 'InventoryUpdate.source_regions' - db.delete_column(u'main_inventoryupdate', 'source_regions') - - # Deleting field 'InventoryUpdate.overwrite' - db.delete_column(u'main_inventoryupdate', 'overwrite') - - # Deleting field 'InventoryUpdate.overwrite_vars' - db.delete_column(u'main_inventoryupdate', 'overwrite_vars') - - - # Changing field 'InventoryUpdate.created' - db.alter_column(u'main_inventoryupdate', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) - - # Changing field 'InventoryUpdate.modified' - db.alter_column(u'main_inventoryupdate', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) - - # Changing field 'Credential.created' - db.alter_column(u'main_credential', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) - - # Changing field 'Credential.modified' - db.alter_column(u'main_credential', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) - - # Changing field 'JobTemplate.created' - db.alter_column(u'main_jobtemplate', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) - - # Changing field 'JobTemplate.modified' - db.alter_column(u'main_jobtemplate', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) - # Removing M2M table for field unified_job_template on 'ActivityStream' - db.delete_table(db.shorten_name(u'main_activitystream_unified_job_template')) - - # Removing M2M table for field unified_job on 'ActivityStream' - db.delete_table(db.shorten_name(u'main_activitystream_unified_job')) - - # Removing M2M table for field new_inventory_source on 'ActivityStream' - db.delete_table(db.shorten_name(u'main_activitystream_new_inventory_source')) - - # Removing M2M table for field new_inventory_update on 'ActivityStream' - db.delete_table(db.shorten_name(u'main_activitystream_new_inventory_update')) - - # Removing M2M table for field new_project on 'ActivityStream' - db.delete_table(db.shorten_name(u'main_activitystream_new_project')) - - # Removing M2M table for field new_project_update on 'ActivityStream' - db.delete_table(db.shorten_name(u'main_activitystream_new_project_update')) - - # Removing M2M table for field new_job_template on 'ActivityStream' - db.delete_table(db.shorten_name(u'main_activitystream_new_job_template')) - - # Removing M2M table for field new_job on 'ActivityStream' - db.delete_table(db.shorten_name(u'main_activitystream_new_job')) - - # Removing M2M table for field new_projects on 'Team' - db.delete_table(db.shorten_name(u'main_team_new_projects')) - - - # Changing field 'Team.created' - db.alter_column(u'main_team', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) - - # Changing field 'Team.modified' - db.alter_column(u'main_team', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) - # Deleting field 'Project.scm_update_cache_timeout' - db.delete_column(u'main_project', 'scm_update_cache_timeout') - - - # Changing field 'Project.created' - db.alter_column(u'main_project', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) - - # Changing field 'Project.modified' - db.alter_column(u'main_project', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) - # Removing M2M table for field new_projects on 'Organization' - db.delete_table(db.shorten_name(u'main_organization_new_projects')) - - - # Changing field 'Organization.created' - db.alter_column(u'main_organization', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) - - # Changing field 'Organization.modified' - db.alter_column(u'main_organization', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) - # Deleting field 'Permission.new_project' - db.delete_column(u'main_permission', 'new_project_id') - - - # Changing field 'Permission.created' - db.alter_column(u'main_permission', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) - - # Changing field 'Permission.modified' - db.alter_column(u'main_permission', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) - # Adding field 'InventorySource.update_interval' - db.add_column(u'main_inventorysource', 'update_interval', - self.gf('django.db.models.fields.PositiveIntegerField')(default=0), - keep_default=False) - - # Deleting field 'InventorySource.update_cache_timeout' - db.delete_column(u'main_inventorysource', 'update_cache_timeout') - - - # Changing field 'InventorySource.created' - db.alter_column(u'main_inventorysource', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) - - # Changing field 'InventorySource.modified' - db.alter_column(u'main_inventorysource', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) - # Deleting field 'JobEvent.role' - db.delete_column(u'main_jobevent', 'role') - - # Deleting field 'JobEvent.new_job' - db.delete_column(u'main_jobevent', 'new_job_id') + # Deleting field 'InventoryUpdate.start_args' + db.delete_column(u'main_inventoryupdate', 'start_args') models = { @@ -780,12 +85,6 @@ class Migration(SchemaMigration): 'inventory_update': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.InventoryUpdate']", 'symmetrical': 'False', 'blank': 'True'}), 'job': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Job']", 'symmetrical': 'False', 'blank': 'True'}), 'job_template': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.JobTemplate']", 'symmetrical': 'False', 'blank': 'True'}), - 'new_inventory_source': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.InventorySourceNew']", 'symmetrical': 'False', 'blank': 'True'}), - 'new_inventory_update': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.InventoryUpdateNew']", 'symmetrical': 'False', 'blank': 'True'}), - 'new_job': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.JobNew']", 'symmetrical': 'False', 'blank': 'True'}), - 'new_job_template': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.JobTemplateNew']", 'symmetrical': 'False', 'blank': 'True'}), - 'new_project': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.ProjectNew']", 'symmetrical': 'False', 'blank': 'True'}), - 'new_project_update': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.ProjectUpdateNew']", 'symmetrical': 'False', 'blank': 'True'}), 'object1': ('django.db.models.fields.TextField', [], {}), 'object2': ('django.db.models.fields.TextField', [], {}), 'object_relationship_type': ('django.db.models.fields.TextField', [], {'blank': 'True'}), @@ -796,8 +95,6 @@ class Migration(SchemaMigration): 'project_update': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.ProjectUpdate']", 'symmetrical': 'False', 'blank': 'True'}), 'team': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Team']", 'symmetrical': 'False', 'blank': 'True'}), 'timestamp': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'unified_job': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'activity_stream_as_unified_job+'", 'blank': 'True', 'to': "orm['main.UnifiedJob']"}), - 'unified_job_template': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'activity_stream_as_unified_job_template+'", 'blank': 'True', 'to': "orm['main.UnifiedJobTemplate']"}), 'user': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.User']", 'symmetrical': 'False', 'blank': 'True'}) }, 'main.authtoken': { @@ -813,12 +110,12 @@ class Migration(SchemaMigration): 'Meta': {'unique_together': "[('user', 'team', 'kind', 'name')]", 'object_name': 'Credential'}, 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'cloud': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'credential\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'kind': ('django.db.models.fields.CharField', [], {'default': "'ssh'", 'max_length': '32'}), - 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now': 'True', 'blank': 'True'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'credential\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), 'password': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), @@ -833,7 +130,7 @@ class Migration(SchemaMigration): 'main.group': { 'Meta': {'unique_together': "(('name', 'inventory'),)", 'object_name': 'Group'}, 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'group\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'groups_with_active_failures': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), @@ -844,10 +141,9 @@ class Migration(SchemaMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'groups'", 'to': "orm['main.Inventory']"}), 'inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'groups'", 'blank': 'True', 'to': "orm['main.InventorySource']"}), - 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now': 'True', 'blank': 'True'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'group\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), - 'new_inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'groups'", 'blank': 'True', 'to': "orm['main.InventorySourceNew']"}), 'parents': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'children'", 'blank': 'True', 'to': "orm['main.Group']"}), 'total_groups': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), 'total_hosts': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), @@ -856,7 +152,7 @@ class Migration(SchemaMigration): 'main.host': { 'Meta': {'unique_together': "(('name', 'inventory'),)", 'object_name': 'Host'}, 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'host\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), @@ -868,17 +164,15 @@ class Migration(SchemaMigration): 'inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'hosts'", 'blank': 'True', 'to': "orm['main.InventorySource']"}), 'last_job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'hosts_as_last_job+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Job']", 'blank': 'True', 'null': 'True'}), 'last_job_host_summary': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'hosts_as_last_job_summary+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.JobHostSummary']", 'blank': 'True', 'null': 'True'}), - 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now': 'True', 'blank': 'True'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'host\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), - 'new_inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'hosts'", 'blank': 'True', 'to': "orm['main.InventorySourceNew']"}), - 'new_last_job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'hosts_as_last_job+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.JobNew']", 'blank': 'True', 'null': 'True'}), 'variables': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}) }, 'main.inventory': { 'Meta': {'unique_together': "[('name', 'organization')]", 'object_name': 'Inventory'}, 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'inventory\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'groups_with_active_failures': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), @@ -887,7 +181,7 @@ class Migration(SchemaMigration): 'hosts_with_active_failures': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'inventory_sources_with_failures': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), - 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now': 'True', 'blank': 'True'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'inventory\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}), 'organization': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventories'", 'to': "orm['main.Organization']"}), @@ -899,9 +193,9 @@ class Migration(SchemaMigration): 'main.inventorysource': { 'Meta': {'object_name': 'InventorySource'}, 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'inventorysource\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventorysources'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventory_sources'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), 'current_update': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventory_source_as_current_update+'", 'null': 'True', 'to': "orm['main.InventoryUpdate']"}), 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'group': ('awx.main.fields.AutoOneToOneField', [], {'related_name': "'inventory_source'", 'null': 'True', 'default': 'None', 'to': "orm['main.Group']", 'blank': 'True', 'unique': 'True'}), @@ -910,7 +204,7 @@ class Migration(SchemaMigration): 'last_update': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventory_source_as_last_update+'", 'null': 'True', 'to': "orm['main.InventoryUpdate']"}), 'last_update_failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'last_updated': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), - 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now': 'True', 'blank': 'True'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'inventorysource\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'overwrite': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'overwrite_vars': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), @@ -919,22 +213,7 @@ class Migration(SchemaMigration): 'source_regions': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'source_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'status': ('django.db.models.fields.CharField', [], {'default': "'none'", 'max_length': '32'}), - 'update_cache_timeout': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), - 'update_on_launch': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'main.inventorysourcenew': { - 'Meta': {'object_name': 'InventorySourceNew', '_ormbases': ['main.UnifiedJobTemplate']}, - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventorysourcenews'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), - 'group': ('awx.main.fields.AutoOneToOneField', [], {'related_name': "'new_inventory_source'", 'null': 'True', 'default': 'None', 'to': "orm['main.Group']", 'blank': 'True', 'unique': 'True'}), - 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'new_inventory_sources'", 'null': 'True', 'to': "orm['main.Inventory']"}), - 'overwrite': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'overwrite_vars': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'source': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '32', 'blank': 'True'}), - 'source_path': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - 'source_regions': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - 'source_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), - u'unifiedjobtemplate_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJobTemplate']", 'unique': 'True', 'primary_key': 'True'}), - 'update_cache_timeout': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'update_interval': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), 'update_on_launch': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) }, 'main.inventoryupdate': { @@ -943,9 +222,8 @@ class Migration(SchemaMigration): 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'cancel_flag': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'celery_task_id': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}), - 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'inventoryupdate\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventoryupdates'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), @@ -954,31 +232,13 @@ class Migration(SchemaMigration): 'job_cwd': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'job_env': ('jsonfield.fields.JSONField', [], {'default': '{}', 'blank': 'True'}), 'license_error': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now': 'True', 'blank': 'True'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'inventoryupdate\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), - 'overwrite': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'overwrite_vars': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'result_stdout_file': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'result_traceback': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), - 'source': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '32', 'blank': 'True'}), - 'source_path': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - 'source_regions': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - 'source_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'start_args': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'status': ('django.db.models.fields.CharField', [], {'default': "'new'", 'max_length': '20'}) }, - 'main.inventoryupdatenew': { - 'Meta': {'object_name': 'InventoryUpdateNew', '_ormbases': ['main.UnifiedJob']}, - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventoryupdatenews'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), - 'inventory_source': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventory_updates'", 'to': "orm['main.InventorySourceNew']"}), - 'license_error': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'overwrite': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'overwrite_vars': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'source': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '32', 'blank': 'True'}), - 'source_path': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - 'source_regions': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - 'source_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), - u'unifiedjob_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJob']", 'unique': 'True', 'primary_key': 'True'}) - }, 'main.job': { 'Meta': {'object_name': 'Job'}, '_result_stdout': ('django.db.models.fields.TextField', [], {'default': "''", 'db_column': "'result_stdout'", 'blank': 'True'}), @@ -986,9 +246,9 @@ class Migration(SchemaMigration): 'cancel_flag': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'celery_task_id': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}), 'cloud_credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs_as_cloud_credential+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), - 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'job\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Credential']"}), 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'extra_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), @@ -1004,12 +264,13 @@ class Migration(SchemaMigration): 'job_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), 'launch_type': ('django.db.models.fields.CharField', [], {'default': "'manual'", 'max_length': '20'}), 'limit': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now': 'True', 'blank': 'True'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'job\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), - 'playbook': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), + 'playbook': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Project']"}), 'result_stdout_file': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'result_traceback': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'start_args': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'status': ('django.db.models.fields.CharField', [], {'default': "'new'", 'max_length': '20'}), 'verbosity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}) }, @@ -1025,111 +286,73 @@ class Migration(SchemaMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_events'", 'to': "orm['main.Job']"}), 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), - 'new_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'new_job_events'", 'null': 'True', 'to': "orm['main.JobNew']"}), 'parent': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'children'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.JobEvent']", 'blank': 'True', 'null': 'True'}), 'play': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - 'role': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'task': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}) }, 'main.jobhostsummary': { - 'Meta': {'ordering': "('-pk',)", 'unique_together': "[('job', 'host'), ('new_job', 'host')]", 'object_name': 'JobHostSummary'}, + 'Meta': {'ordering': "('-pk',)", 'unique_together': "[('job', 'host')]", 'object_name': 'JobHostSummary'}, 'changed': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), - 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now_add': 'True', 'blank': 'True'}), 'dark': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'failures': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), 'host': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_host_summaries'", 'to': "orm['main.Host']"}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_host_summaries'", 'to': "orm['main.Job']"}), - 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), - 'new_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'new_job_host_summaries'", 'null': 'True', 'to': "orm['main.JobNew']"}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now': 'True', 'blank': 'True'}), 'ok': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), 'processed': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), 'skipped': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}) }, - 'main.jobnew': { - 'Meta': {'object_name': 'JobNew', '_ormbases': ['main.UnifiedJob']}, - 'cloud_credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobnews_as_cloud_credential+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobnews'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), - 'extra_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), - 'forks': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), - 'hosts': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'jobnews'", 'blank': 'True', 'through': "orm['main.JobHostSummary']", 'to': "orm['main.Host']"}), - 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobnews'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Inventory']"}), - 'job_tags': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - 'job_template': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.JobTemplateNew']", 'blank': 'True', 'null': 'True'}), - 'job_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'limit': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - 'playbook': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.ProjectNew']"}), - u'unifiedjob_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJob']", 'unique': 'True', 'primary_key': 'True'}), - 'verbosity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}) - }, 'main.jobtemplate': { 'Meta': {'object_name': 'JobTemplate'}, 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'cloud_credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobtemplates_as_cloud_credential+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), - 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'cloud_credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_templates_as_cloud_credential+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'jobtemplate\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobtemplates'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_templates'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'extra_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'forks': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), 'host_config_key': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobtemplates'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Inventory']"}), + 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_templates'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Inventory']"}), 'job_tags': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'job_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), 'limit': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now': 'True', 'blank': 'True'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'jobtemplate\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}), 'playbook': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_templates'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Project']"}), 'verbosity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}) }, - 'main.jobtemplatenew': { - 'Meta': {'object_name': 'JobTemplateNew', '_ormbases': ['main.UnifiedJobTemplate']}, - 'cloud_credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobtemplatenews_as_cloud_credential+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobtemplatenews'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), - 'extra_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), - 'forks': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), - 'host_config_key': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobtemplatenews'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Inventory']"}), - 'job_tags': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - 'job_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'limit': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - 'playbook': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_templates'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.ProjectNew']"}), - u'unifiedjobtemplate_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJobTemplate']", 'unique': 'True', 'primary_key': 'True'}), - 'verbosity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}) - }, 'main.organization': { 'Meta': {'object_name': 'Organization'}, 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'admins': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'admin_of_organizations'", 'blank': 'True', 'to': u"orm['auth.User']"}), - 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'organization\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now': 'True', 'blank': 'True'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'organization\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}), - 'new_projects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'organizations'", 'blank': 'True', 'to': "orm['main.ProjectNew']"}), 'projects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'organizations'", 'blank': 'True', 'to': "orm['main.Project']"}), 'users': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'organizations'", 'blank': 'True', 'to': u"orm['auth.User']"}) }, 'main.permission': { 'Meta': {'object_name': 'Permission'}, 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'permission\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'permissions'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Inventory']"}), - 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now': 'True', 'blank': 'True'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'permission\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), - 'new_project': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'permissions'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.ProjectNew']"}), 'permission_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), 'project': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'permissions'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Project']"}), 'team': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'permissions'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Team']"}), @@ -1137,16 +360,16 @@ class Migration(SchemaMigration): }, 'main.profile': { 'Meta': {'object_name': 'Profile'}, - 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'ldap_dn': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), - 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), 'user': ('awx.main.fields.AutoOneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': u"orm['auth.User']"}) }, 'main.project': { 'Meta': {'object_name': 'Project'}, 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'project\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'projects'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), 'current_update': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'project_as_current_update+'", 'null': 'True', 'to': "orm['main.ProjectUpdate']"}), @@ -1156,7 +379,7 @@ class Migration(SchemaMigration): 'last_update_failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'last_updated': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), 'local_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), - 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now': 'True', 'blank': 'True'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'project\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}), 'scm_branch': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '256', 'blank': 'True'}), @@ -1164,145 +387,46 @@ class Migration(SchemaMigration): 'scm_delete_on_next_update': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'scm_delete_on_update': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'scm_type': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '8', 'blank': 'True'}), - 'scm_update_cache_timeout': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), 'scm_update_on_launch': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'scm_url': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'status': ('django.db.models.fields.CharField', [], {'default': "'ok'", 'max_length': '32', 'null': 'True'}) }, - 'main.projectnew': { - 'Meta': {'object_name': 'ProjectNew', '_ormbases': ['main.UnifiedJobTemplate']}, - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'projectnews'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), - 'local_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), - 'scm_branch': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '256', 'blank': 'True'}), - 'scm_clean': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'scm_delete_on_next_update': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'scm_delete_on_update': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'scm_type': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '8', 'blank': 'True'}), - 'scm_update_cache_timeout': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), - 'scm_update_on_launch': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'scm_url': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - u'unifiedjobtemplate_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJobTemplate']", 'unique': 'True', 'primary_key': 'True'}) - }, 'main.projectupdate': { 'Meta': {'object_name': 'ProjectUpdate'}, '_result_stdout': ('django.db.models.fields.TextField', [], {'default': "''", 'db_column': "'result_stdout'", 'blank': 'True'}), 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'cancel_flag': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'celery_task_id': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}), - 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'projectupdate\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'projectupdates'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'job_args': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'job_cwd': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'job_env': ('jsonfield.fields.JSONField', [], {'default': '{}', 'blank': 'True'}), - 'local_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), - 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now': 'True', 'blank': 'True'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'projectupdate\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'project_updates'", 'to': "orm['main.Project']"}), 'result_stdout_file': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'result_traceback': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), - 'scm_branch': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '256', 'blank': 'True'}), - 'scm_clean': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'scm_delete_on_update': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'scm_type': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '8', 'blank': 'True'}), - 'scm_url': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'start_args': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'status': ('django.db.models.fields.CharField', [], {'default': "'new'", 'max_length': '20'}) }, - 'main.projectupdatenew': { - 'Meta': {'object_name': 'ProjectUpdateNew', '_ormbases': ['main.UnifiedJob']}, - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'projectupdatenews'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), - 'local_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'project_updates'", 'to': "orm['main.ProjectNew']"}), - 'scm_branch': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '256', 'blank': 'True'}), - 'scm_clean': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'scm_delete_on_update': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'scm_type': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '8', 'blank': 'True'}), - 'scm_url': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - u'unifiedjob_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJob']", 'unique': 'True', 'primary_key': 'True'}) - }, - 'main.schedule': { - 'Meta': {'object_name': 'Schedule'}, - 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), - 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'schedule\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), - 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), - 'dtend': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), - 'dtstart': ('django.db.models.fields.DateTimeField', [], {}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'job_template': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'schedules'", 'to': "orm['main.UnifiedJobTemplate']"}), - 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), - 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'schedule\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}), - 'rrule': ('django.db.models.fields.CharField', [], {'max_length': '255'}) - }, 'main.team': { 'Meta': {'unique_together': "[('organization', 'name')]", 'object_name': 'Team'}, 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'team\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now': 'True', 'blank': 'True'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'team\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), - 'new_projects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'teams'", 'blank': 'True', 'to': "orm['main.ProjectNew']"}), 'organization': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'teams'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Organization']"}), 'projects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'teams'", 'blank': 'True', 'to': "orm['main.Project']"}), 'users': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'teams'", 'blank': 'True', 'to': u"orm['auth.User']"}) }, - 'main.unifiedjob': { - 'Meta': {'object_name': 'UnifiedJob'}, - 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'cancel_flag': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'celery_task_id': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}), - 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), - 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'unifiedjob\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), - 'depends_on': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'depends_on_rel_+'", 'to': "orm['main.UnifiedJob']"}), - 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), - 'elapsed': ('django.db.models.fields.DecimalField', [], {'max_digits': '12', 'decimal_places': '3'}), - 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'finished': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'job_args': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), - 'job_cwd': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - 'job_env': ('jsonfield.fields.JSONField', [], {'default': '{}', 'blank': 'True'}), - 'launch_type': ('django.db.models.fields.CharField', [], {'default': "'manual'", 'max_length': '20'}), - 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), - 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'unifiedjob\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), - 'old_pk': ('django.db.models.fields.PositiveIntegerField', [], {'default': 'None', 'null': 'True'}), - 'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_main.unifiedjob_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}), - 'result_stdout_file': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), - 'result_stdout_text': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), - 'result_traceback': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), - 'schedule': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['main.Schedule']", 'null': 'True'}), - 'start_args': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), - 'started': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), - 'status': ('django.db.models.fields.CharField', [], {'default': "'new'", 'max_length': '20'}), - 'unified_job_template': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjob_unified_jobs'", 'null': 'True', 'to': "orm['main.UnifiedJobTemplate']"}) - }, - 'main.unifiedjobtemplate': { - 'Meta': {'unique_together': "[('polymorphic_ctype', 'name')]", 'object_name': 'UnifiedJobTemplate'}, - 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), - 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'unifiedjobtemplate\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), - 'current_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjobtemplate_as_current_job+'", 'null': 'True', 'to': "orm['main.UnifiedJob']"}), - 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), - 'has_schedules': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'last_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjobtemplate_as_last_job+'", 'null': 'True', 'to': "orm['main.UnifiedJob']"}), - 'last_job_failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_job_run': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), - 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), - 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'unifiedjobtemplate\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), - 'next_job_run': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), - 'old_pk': ('django.db.models.fields.PositiveIntegerField', [], {'default': 'None', 'null': 'True'}), - 'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_main.unifiedjobtemplate_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}), - 'status': ('django.db.models.fields.CharField', [], {'default': "'ok'", 'max_length': '32'}) - }, u'taggit.tag': { 'Meta': {'object_name': 'Tag'}, u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), diff --git a/awx/main/migrations/0035_v148_changes.py b/awx/main/migrations/0035_v148_changes.py index 0801683e42..354b7b166f 100644 --- a/awx/main/migrations/0035_v148_changes.py +++ b/awx/main/migrations/0035_v148_changes.py @@ -1,299 +1,814 @@ # -*- coding: utf-8 -*- from south.utils import datetime_utils as datetime from south.db import db -from south.v2 import DataMigration +from south.v2 import SchemaMigration from django.db import models -from django.utils.encoding import smart_text -class Migration(DataMigration): - def _get_dict_from_primordial_model(self, instance): - return { - 'description': instance.description, - 'created': instance.created, - 'modified': instance.modified, - 'created_by': instance.created_by, - 'modified_by': instance.modified_by, - 'active': instance.active, - 'old_pk': instance.pk, - } - - def _get_dict_from_common_model(self, instance): - d = self._get_dict_from_primordial_model(instance) - if hasattr(instance, 'name'): - d['name'] = instance.name - else: - d['name'] = u'%s-%s' % (instance._meta.verbose_name, instance.pk) - return d - - def _get_dict_from_common_task_model(self, instance): - d = self._get_dict_from_primordial_model(instance) - td = instance.modified - instance.created - elapsed = (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / (10**6 * 1.0) - d.update({ - 'launch_type': getattr(instance, 'launch_type', 'manual'), - 'cancel_flag': instance.cancel_flag, - 'status': instance.status, - 'failed': instance.failed, - 'started': instance.created, - 'finished': instance.modified, - 'elapsed': elapsed, - 'job_args': instance.job_args, - 'job_env': instance.job_env, - 'result_stdout_text': instance._result_stdout, - 'result_stdout_file': instance.result_stdout_file, - 'result_traceback': instance.result_traceback, - 'celery_task_id': instance.celery_task_id, - }) - return d - - def _get_content_type_for_model(self, orm, model): - app_label = model._meta.app_label - model_name = model._meta.module_name - defaults = {'name': smart_text(model._meta.verbose_name_raw)} - content_type, created = orm['contenttypes.ContentType'].objects.get_or_create(app_label=app_label, model=model_name, defaults=defaults) - return content_type +class Migration(SchemaMigration): def forwards(self, orm): - "Write your forwards methods here." + # Adding model 'InventoryUpdateNew' + db.create_table(u'main_inventoryupdatenew', ( + (u'unifiedjob_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['main.UnifiedJob'], unique=True, primary_key=True)), + ('source', self.gf('django.db.models.fields.CharField')(default='', max_length=32, blank=True)), + ('source_path', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('source_vars', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('credential', self.gf('django.db.models.fields.related.ForeignKey')(related_name='inventoryupdatenews', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True)), + ('source_regions', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('overwrite', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('overwrite_vars', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('license_error', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('inventory_source', self.gf('django.db.models.fields.related.ForeignKey')(related_name='inventory_updates', to=orm['main.InventorySourceNew'])), + )) + db.send_create_signal('main', ['InventoryUpdateNew']) - # Copy Project old to new. - new_ctype = self._get_content_type_for_model(orm, orm.Project) - for project in orm.Project.objects.order_by('pk'): - d = self._get_dict_from_common_model(project) - d.update({ - 'polymorphic_ctype_id': new_ctype.pk, - 'local_path': project.local_path, - 'scm_type': project.scm_type, - 'scm_url': project.scm_url, - 'scm_branch': project.scm_branch, - 'scm_clean': project.scm_clean, - 'scm_delete_on_update': project.scm_delete_on_update, - 'credential_id': project.credential_id, - 'scm_delete_on_next_update': project.scm_delete_on_next_update, - 'scm_update_on_launch': project.scm_update_on_launch, - }) - new_project, created = orm.ProjectNew.objects.get_or_create(old_pk=project.pk, defaults=d) + # Adding model 'JobNew' + db.create_table(u'main_jobnew', ( + (u'unifiedjob_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['main.UnifiedJob'], unique=True, primary_key=True)), + ('job_type', self.gf('django.db.models.fields.CharField')(max_length=64)), + ('inventory', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobnews', null=True, on_delete=models.SET_NULL, to=orm['main.Inventory'])), + ('playbook', self.gf('django.db.models.fields.CharField')(default='', max_length=1024)), + ('credential', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobnews', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True)), + ('cloud_credential', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobnews_as_cloud_credential+', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True)), + ('forks', self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True)), + ('limit', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('verbosity', self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True)), + ('extra_vars', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('job_tags', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('job_template', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobs', on_delete=models.SET_NULL, default=None, to=orm['main.JobTemplateNew'], blank=True, null=True)), + ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobs', null=True, on_delete=models.SET_NULL, to=orm['main.ProjectNew'])), + )) + db.send_create_signal('main', ['JobNew']) - # Copy ProjectUpdate old to new. - new_ctype = self._get_content_type_for_model(orm, orm.ProjectUpdate) - for project_update in orm.ProjectUpdate.objects.order_by('pk'): - project = project_update.project - new_project = orm.ProjectNew.objects.get(old_pk=project_update.project_id) - d = self._get_dict_from_common_task_model(project_update) - d.update({ - 'polymorphic_ctype_id': new_ctype.pk, - 'project_id': new_project.pk, - 'unified_job_template_id': new_project.pk, - 'local_path': project.local_path, - 'scm_type': project.scm_type, - 'scm_url': project.scm_url, - 'scm_branch': project.scm_branch, - 'scm_clean': project.scm_clean, - 'scm_delete_on_update': project.scm_delete_on_update, - 'credential_id': project.credential_id, - }) - new_project_update, created = orm.ProjectUpdateNew.objects.get_or_create(old_pk=project_update.pk, defaults=d) + # Adding model 'UnifiedJob' + db.create_table(u'main_unifiedjob', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('polymorphic_ctype', self.gf('django.db.models.fields.related.ForeignKey')(related_name='polymorphic_main.unifiedjob_set', null=True, to=orm['contenttypes.ContentType'])), + ('created', self.gf('django.db.models.fields.DateTimeField')(default=None)), + ('modified', self.gf('django.db.models.fields.DateTimeField')(default=None)), + ('description', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('created_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'unifiedjob', 'app_label': 'main'}(class)s_created+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), + ('modified_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'unifiedjob', 'app_label': 'main'}(class)s_modified+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), + ('active', self.gf('django.db.models.fields.BooleanField')(default=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=512)), + ('old_pk', self.gf('django.db.models.fields.PositiveIntegerField')(default=None, null=True)), + ('unified_job_template', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='unifiedjob_unified_jobs', null=True, on_delete=models.SET_NULL, to=orm['main.UnifiedJobTemplate'])), + ('launch_type', self.gf('django.db.models.fields.CharField')(default='manual', max_length=20)), + ('schedule', self.gf('django.db.models.fields.related.ForeignKey')(default=None, to=orm['main.Schedule'], null=True, on_delete=models.SET_NULL)), + ('cancel_flag', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('status', self.gf('django.db.models.fields.CharField')(default='new', max_length=20)), + ('failed', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('started', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)), + ('finished', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)), + ('elapsed', self.gf('django.db.models.fields.DecimalField')(max_digits=12, decimal_places=3)), + ('job_args', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('job_cwd', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('job_env', self.gf('jsonfield.fields.JSONField')(default={}, blank=True)), + ('start_args', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('result_stdout_text', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('result_stdout_file', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('result_traceback', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('celery_task_id', self.gf('django.db.models.fields.CharField')(default='', max_length=100, blank=True)), + )) + db.send_create_signal('main', ['UnifiedJob']) - # Update Project last run. - for project in orm.Project.objects.order_by('pk'): - new_project = orm.ProjectNew.objects.get(old_pk=project.pk) - if project.current_update: - new_project.current_job = orm.ProjectUpdateNew.objects.get(old_pk=project.current_update_id) - if project.last_update: - new_project.last_job = orm.ProjectUpdateNew.objects.get(old_pk=project.last_update_id) - new_project.last_job_failed = project.last_update_failed - new_project.last_job_run = project.last_updated - new_project.status = project.status - new_project.save() + # Adding M2M table for field dependent_jobs on 'UnifiedJob' + m2m_table_name = db.shorten_name(u'main_unifiedjob_dependent_jobs') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('from_unifiedjob', models.ForeignKey(orm['main.unifiedjob'], null=False)), + ('to_unifiedjob', models.ForeignKey(orm['main.unifiedjob'], null=False)) + )) + db.create_unique(m2m_table_name, ['from_unifiedjob_id', 'to_unifiedjob_id']) - # Update Organization projects. - for organization in orm.Organization.objects.order_by('pk'): - for project in organization.projects.order_by('pk'): - new_project = orm.ProjectNew.objects.get(old_pk=project.pk) - organization.new_projects.add(new_project) + # Adding model 'Schedule' + db.create_table(u'main_schedule', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('created', self.gf('django.db.models.fields.DateTimeField')(default=None)), + ('modified', self.gf('django.db.models.fields.DateTimeField')(default=None)), + ('description', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('created_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'schedule', 'app_label': 'main'}(class)s_created+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), + ('modified_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'schedule', 'app_label': 'main'}(class)s_modified+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), + ('active', self.gf('django.db.models.fields.BooleanField')(default=True)), + ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512)), + ('unified_job_template', self.gf('django.db.models.fields.related.ForeignKey')(related_name='schedules', to=orm['main.UnifiedJobTemplate'])), + ('enabled', self.gf('django.db.models.fields.BooleanField')(default=True)), + ('dtstart', self.gf('django.db.models.fields.DateTimeField')()), + ('dtend', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)), + ('rrule', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('next_run', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)), + )) + db.send_create_signal('main', ['Schedule']) - # Update Team projects. - for team in orm.Team.objects.order_by('pk'): - for project in team.projects.order_by('pk'): - new_project = orm.ProjectNew.objects.get(old_pk=project.pk) - team.new_projects.add(new_project) + # Adding model 'InventorySourceNew' + db.create_table(u'main_inventorysourcenew', ( + (u'unifiedjobtemplate_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['main.UnifiedJobTemplate'], unique=True, primary_key=True)), + ('source', self.gf('django.db.models.fields.CharField')(default='', max_length=32, blank=True)), + ('source_path', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('source_vars', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('credential', self.gf('django.db.models.fields.related.ForeignKey')(related_name='inventorysourcenews', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True)), + ('source_regions', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('overwrite', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('overwrite_vars', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('update_on_launch', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('update_cache_timeout', self.gf('django.db.models.fields.PositiveIntegerField')(default=0)), + ('inventory', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='new_inventory_sources', null=True, to=orm['main.Inventory'])), + ('group', self.gf('awx.main.fields.AutoOneToOneField')(default=None, related_name='new_inventory_source', unique=True, null=True, to=orm['main.Group'])), + )) + db.send_create_signal('main', ['InventorySourceNew']) - # Update Permission project. - for permission in orm.Permission.objects.order_by('pk'): - if not permission.project_id: - continue - new_project = orm.ProjectNew.objects.get(old_pk=permission.project_id) - permission.new_project = new_project - permission.save() + # Adding model 'JobTemplateNew' + db.create_table('main_jobtemplatenew', ( + (u'unifiedjobtemplate_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['main.UnifiedJobTemplate'], unique=True, primary_key=True)), + ('job_type', self.gf('django.db.models.fields.CharField')(max_length=64)), + ('inventory', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobtemplatenews', null=True, on_delete=models.SET_NULL, to=orm['main.Inventory'])), + ('playbook', self.gf('django.db.models.fields.CharField')(default='', max_length=1024)), + ('credential', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobtemplatenews', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True)), + ('cloud_credential', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobtemplatenews_as_cloud_credential+', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True)), + ('forks', self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True)), + ('limit', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('verbosity', self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True)), + ('extra_vars', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('job_tags', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('host_config_key', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='job_templates', null=True, on_delete=models.SET_NULL, to=orm['main.ProjectNew'])), + )) + db.send_create_signal('main', ['JobTemplateNew']) - # Copy InventorySource old to new. - new_ctype = self._get_content_type_for_model(orm, orm.InventorySource) - for inventory_source in orm.InventorySource.objects.order_by('pk'): - d = self._get_dict_from_common_model(inventory_source) - d.update({ - 'polymorphic_ctype_id': new_ctype.pk, - 'source': inventory_source.source, - 'source_path': inventory_source.source_path, - 'source_vars': inventory_source.source_vars, - 'credential_id': inventory_source.credential_id, - 'source_regions': inventory_source.source_regions, - 'overwrite': inventory_source.overwrite, - 'overwrite_vars': inventory_source.overwrite_vars, - 'update_on_launch': inventory_source.update_on_launch, - 'inventory_id': inventory_source.inventory_id, - 'group_id': inventory_source.group_id, - }) - new_inventory_source, created = orm.InventorySourceNew.objects.get_or_create(old_pk=inventory_source.pk, defaults=d) + # Adding model 'ProjectNew' + db.create_table(u'main_projectnew', ( + (u'unifiedjobtemplate_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['main.UnifiedJobTemplate'], unique=True, primary_key=True)), + ('local_path', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)), + ('scm_type', self.gf('django.db.models.fields.CharField')(default='', max_length=8, blank=True)), + ('scm_url', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('scm_branch', self.gf('django.db.models.fields.CharField')(default='', max_length=256, blank=True)), + ('scm_clean', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('scm_delete_on_update', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('credential', self.gf('django.db.models.fields.related.ForeignKey')(related_name='projectnews', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True)), + ('scm_delete_on_next_update', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('scm_update_on_launch', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('scm_update_cache_timeout', self.gf('django.db.models.fields.PositiveIntegerField')(default=0)), + )) + db.send_create_signal('main', ['ProjectNew']) - # Copy InventoryUpdate old to new. - new_ctype = self._get_content_type_for_model(orm, orm.InventoryUpdate) - for inventory_update in orm.InventoryUpdate.objects.order_by('pk'): - inventory_source = inventory_update.inventory_source - new_inventory_source = orm.InventorySourceNew.objects.get(old_pk=inventory_update.inventory_source_id) - d = self._get_dict_from_common_task_model(inventory_update) - d.update({ - 'polymorphic_ctype_id': new_ctype.pk, - 'source': inventory_source.source, - 'source_path': inventory_source.source_path, - 'source_vars': inventory_source.source_vars, - 'credential_id': inventory_source.credential_id, - 'source_regions': inventory_source.source_regions, - 'overwrite': inventory_source.overwrite, - 'overwrite_vars': inventory_source.overwrite_vars, - 'inventory_source_id': new_inventory_source.pk, - 'unified_job_template_id': new_inventory_source.pk, - 'license_error': inventory_update.license_error, - }) - new_inventory_update, created = orm.InventoryUpdateNew.objects.get_or_create(old_pk=inventory_update.pk, defaults=d) + # Adding model 'ProjectUpdateNew' + db.create_table(u'main_projectupdatenew', ( + (u'unifiedjob_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['main.UnifiedJob'], unique=True, primary_key=True)), + ('local_path', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)), + ('scm_type', self.gf('django.db.models.fields.CharField')(default='', max_length=8, blank=True)), + ('scm_url', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('scm_branch', self.gf('django.db.models.fields.CharField')(default='', max_length=256, blank=True)), + ('scm_clean', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('scm_delete_on_update', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('credential', self.gf('django.db.models.fields.related.ForeignKey')(related_name='projectupdatenews', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True)), + ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='project_updates', to=orm['main.ProjectNew'])), + )) + db.send_create_signal('main', ['ProjectUpdateNew']) - # Update InventorySource last run. - for inventory_source in orm.InventorySource.objects.order_by('pk'): - new_inventory_source = orm.InventorySourceNew.objects.get(old_pk=inventory_source.pk) - if inventory_source.current_update: - new_inventory_source.current_job = orm.InventoryUpdateNew.objects.get(old_pk=inventory_source.current_update_id) - if inventory_source.last_update: - new_inventory_source.last_job = orm.InventoryUpdateNew.objects.get(old_pk=inventory_source.last_update_id) - new_inventory_source.last_job_failed = inventory_source.last_update_failed - new_inventory_source.last_job_run = inventory_source.last_updated - new_inventory_source.status = inventory_source.status - new_inventory_source.save() + # Adding model 'UnifiedJobTemplate' + db.create_table(u'main_unifiedjobtemplate', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('polymorphic_ctype', self.gf('django.db.models.fields.related.ForeignKey')(related_name='polymorphic_main.unifiedjobtemplate_set', null=True, to=orm['contenttypes.ContentType'])), + ('created', self.gf('django.db.models.fields.DateTimeField')(default=None)), + ('modified', self.gf('django.db.models.fields.DateTimeField')(default=None)), + ('description', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('created_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'unifiedjobtemplate', 'app_label': 'main'}(class)s_created+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), + ('modified_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'unifiedjobtemplate', 'app_label': 'main'}(class)s_modified+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), + ('active', self.gf('django.db.models.fields.BooleanField')(default=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=512)), + ('old_pk', self.gf('django.db.models.fields.PositiveIntegerField')(default=None, null=True)), + ('current_job', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='unifiedjobtemplate_as_current_job+', null=True, on_delete=models.SET_NULL, to=orm['main.UnifiedJob'])), + ('last_job', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='unifiedjobtemplate_as_last_job+', null=True, on_delete=models.SET_NULL, to=orm['main.UnifiedJob'])), + ('last_job_failed', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('last_job_run', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)), + ('has_schedules', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('next_job_run', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)), + ('next_schedule', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='unifiedjobtemplate_as_next_schedule+', null=True, on_delete=models.SET_NULL, to=orm['main.Schedule'])), + ('status', self.gf('django.db.models.fields.CharField')(default='ok', max_length=32)), + )) + db.send_create_signal('main', ['UnifiedJobTemplate']) - # Update Group inventory_sources. - for group in orm.Group.objects.order_by('pk'): - for inventory_source in group.inventory_sources.order_by('pk'): - new_inventory_source = orm.InventorySourceNew.objects.get(old_pk=inventory_source.pk) - group.new_inventory_sources.add(new_inventory_source) - - # Update Host inventory_sources. - for host in orm.Host.objects.order_by('pk'): - for inventory_source in host.inventory_sources.order_by('pk'): - new_inventory_source = orm.InventorySourceNew.objects.get(old_pk=inventory_source.pk) - host.new_inventory_sources.add(new_inventory_source) + # Adding unique constraint on 'UnifiedJobTemplate', fields ['polymorphic_ctype', 'name'] + db.create_unique(u'main_unifiedjobtemplate', ['polymorphic_ctype_id', 'name']) - # Copy JobTemplate old to new. - new_ctype = self._get_content_type_for_model(orm, orm.JobTemplate) - for job_template in orm.JobTemplate.objects.order_by('pk'): - d = self._get_dict_from_common_model(job_template) - d.update({ - 'polymorphic_ctype_id': new_ctype.pk, - 'job_type': job_template.job_type, - 'inventory_id': job_template.inventory_id, - 'playbook': job_template.playbook, - 'credential_id': job_template.credential_id, - 'cloud_credential_id': job_template.cloud_credential_id, - 'forks': job_template.forks, - 'limit': job_template.limit, - 'extra_vars': job_template.extra_vars, - 'job_tags': job_template.job_tags, - 'host_config_key': job_template.host_config_key, - }) - if job_template.project: - d['project_id'] = orm.ProjectNew.objects.get(old_pk=job_template.project_id).pk - new_job_template, created = orm.JobTemplateNew.objects.get_or_create(old_pk=job_template.pk, defaults=d) - # Copy Job old to new. - new_ctype = self._get_content_type_for_model(orm, orm.Job) - for job in orm.Job.objects.order_by('pk'): - d = self._get_dict_from_common_task_model(job) - d.update({ - 'polymorphic_ctype_id': new_ctype.pk, - 'job_type': job_template.job_type, - 'inventory_id': job_template.inventory_id, - 'playbook': job_template.playbook, - 'credential_id': job_template.credential_id, - 'cloud_credential_id': job_template.cloud_credential_id, - 'forks': job_template.forks, - 'limit': job_template.limit, - 'extra_vars': job_template.extra_vars, - 'job_tags': job_template.job_tags, - }) - if job.project: - d['project_id'] = orm.ProjectNew.objects.get(old_pk=job.project_id).pk - if job.job_template: - new_job_template = orm.JobTemplateNew.objects.get(old_pk=job.job_template_id) - d['job_template_id'] = new_job_template.pk - d['unified_job_template_id'] = new_job_template.pk - new_job, created = orm.JobNew.objects.get_or_create(old_pk=job.pk, defaults=d) + # Changing field 'Profile.created' + db.alter_column(u'main_profile', 'created', self.gf('django.db.models.fields.DateTimeField')()) - # Update JobTemplate last run. - for new_job_template in orm.JobTemplateNew.objects.order_by('pk'): - try: - new_last_job = new_job_template.jobs.order_by('-pk')[0] - new_job_template.last_job = new_last_job - new_job_template.last_job_failed = new_last_job.failed - new_job_template.last_job_run = new_last_job.finished - new_job_template.status = 'failed' if new_last_job.failed else 'successful' - except IndexError: - new_job_template.status = 'never updated' - new_inventory_source.save() + # Changing field 'Profile.modified' + db.alter_column(u'main_profile', 'modified', self.gf('django.db.models.fields.DateTimeField')()) + # Adding field 'ProjectUpdate.local_path' + db.add_column(u'main_projectupdate', 'local_path', + self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True), + keep_default=False) - # Update JobHostSummary job. - for job_host_summary in orm.JobHostSummary.objects.order_by('pk'): - new_job = orm.JobNew.objects.get(old_pk=job_host_summary.job_id) - job_host_summary.new_job = new_job - job_host_summary.save() + # Adding field 'ProjectUpdate.scm_type' + db.add_column(u'main_projectupdate', 'scm_type', + self.gf('django.db.models.fields.CharField')(default='', max_length=8, blank=True), + keep_default=False) - # Update JobEvent job. - for job_event in orm.JobEvent.objects.order_by('pk'): - new_job = orm.JobNew.objects.get(old_pk=job_event.job_id) - job_event.new_job = new_job - job_event.save() + # Adding field 'ProjectUpdate.scm_url' + db.add_column(u'main_projectupdate', 'scm_url', + self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True), + keep_default=False) - # Update Host last_job. - for host in orm.Host.objects.order_by('pk'): - if not host.last_job: - continue - new_job = orm.JobNew.objects.get(old_pk=host.last_job_id) - host.new_last_job = new_job - host.save() + # Adding field 'ProjectUpdate.scm_branch' + db.add_column(u'main_projectupdate', 'scm_branch', + self.gf('django.db.models.fields.CharField')(default='', max_length=256, blank=True), + keep_default=False) - # Update ActivityStream - for a_s in orm.ActivityStream.objects.order_by('pk'): - for project in a_s.project.all(): - new_project = orm.ProjectNew.objects.get(old_pk=project.pk) - a_s.new_project.add(new_project) - for project_update in a_s.project_update.all(): - new_project_update = orm.ProjectUpdateNew.objects.get(old_pk=project_update.pk) - a_s.new_project_update.add(new_project_update) - for inventory_source in a_s.inventory_source.all(): - new_inventory_source = orm.InventorySourceNew.objects.get(old_pk=inventory_source.pk) - a_s.new_inventory_source.add(new_inventory_source) - for inventory_update in a_s.inventory_update.all(): - new_inventory_update = orm.InventoryUpdateNew.objects.get(old_pk=inventory_update.pk) - a_s.new_inventory_update.add(new_inventory_update) - for job_template in a_s.job_template.all(): - new_job_template = orm.JobTemplateNew.objects.get(old_pk=job_template.pk) - a_s.new_job_template.add(new_job_template) - for job in a_s.job.all(): - new_job = orm.JobNew.objects.get(old_pk=job.pk) - a_s.new_job.add(new_job) + # Adding field 'ProjectUpdate.scm_clean' + db.add_column(u'main_projectupdate', 'scm_clean', + self.gf('django.db.models.fields.BooleanField')(default=False), + keep_default=False) + + # Adding field 'ProjectUpdate.scm_delete_on_update' + db.add_column(u'main_projectupdate', 'scm_delete_on_update', + self.gf('django.db.models.fields.BooleanField')(default=False), + keep_default=False) + + # Adding field 'ProjectUpdate.credential' + db.add_column(u'main_projectupdate', 'credential', + self.gf('django.db.models.fields.related.ForeignKey')(related_name='projectupdates', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True), + keep_default=False) + + + # Changing field 'ProjectUpdate.created' + db.alter_column(u'main_projectupdate', 'created', self.gf('django.db.models.fields.DateTimeField')()) + + # Changing field 'ProjectUpdate.modified' + db.alter_column(u'main_projectupdate', 'modified', self.gf('django.db.models.fields.DateTimeField')()) + # Adding M2M table for field new_inventory_sources on 'Group' + m2m_table_name = db.shorten_name(u'main_group_new_inventory_sources') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('group', models.ForeignKey(orm['main.group'], null=False)), + ('inventorysourcenew', models.ForeignKey(orm['main.inventorysourcenew'], null=False)) + )) + db.create_unique(m2m_table_name, ['group_id', 'inventorysourcenew_id']) + + + # Changing field 'Group.created' + db.alter_column(u'main_group', 'created', self.gf('django.db.models.fields.DateTimeField')()) + + # Changing field 'Group.modified' + db.alter_column(u'main_group', 'modified', self.gf('django.db.models.fields.DateTimeField')()) + + # Changing field 'Job.created' + db.alter_column(u'main_job', 'created', self.gf('django.db.models.fields.DateTimeField')()) + + # Changing field 'Job.modified' + db.alter_column(u'main_job', 'modified', self.gf('django.db.models.fields.DateTimeField')()) + + # Changing field 'Inventory.created' + db.alter_column(u'main_inventory', 'created', self.gf('django.db.models.fields.DateTimeField')()) + + # Changing field 'Inventory.modified' + db.alter_column(u'main_inventory', 'modified', self.gf('django.db.models.fields.DateTimeField')()) + # Adding field 'Host.new_last_job' + db.add_column(u'main_host', 'new_last_job', + self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='hosts_as_last_job+', null=True, on_delete=models.SET_NULL, to=orm['main.JobNew']), + keep_default=False) + + # Adding M2M table for field new_inventory_sources on 'Host' + m2m_table_name = db.shorten_name(u'main_host_new_inventory_sources') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('host', models.ForeignKey(orm['main.host'], null=False)), + ('inventorysourcenew', models.ForeignKey(orm['main.inventorysourcenew'], null=False)) + )) + db.create_unique(m2m_table_name, ['host_id', 'inventorysourcenew_id']) + + + # Changing field 'Host.created' + db.alter_column(u'main_host', 'created', self.gf('django.db.models.fields.DateTimeField')()) + + # Changing field 'Host.modified' + db.alter_column(u'main_host', 'modified', self.gf('django.db.models.fields.DateTimeField')()) + # Adding field 'JobHostSummary.new_job' + db.add_column(u'main_jobhostsummary', 'new_job', + self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='new_job_host_summaries', null=True, to=orm['main.JobNew']), + keep_default=False) + + + # Changing field 'JobHostSummary.created' + db.alter_column(u'main_jobhostsummary', 'created', self.gf('django.db.models.fields.DateTimeField')()) + + # Changing field 'JobHostSummary.modified' + db.alter_column(u'main_jobhostsummary', 'modified', self.gf('django.db.models.fields.DateTimeField')()) + + # Changing field 'JobHostSummary.job' + db.alter_column(u'main_jobhostsummary', 'job_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['main.Job'])) + # Adding unique constraint on 'JobHostSummary', fields ['new_job', 'host'] + db.create_unique(u'main_jobhostsummary', ['new_job_id', 'host_id']) + + # Adding field 'InventoryUpdate.source' + db.add_column(u'main_inventoryupdate', 'source', + self.gf('django.db.models.fields.CharField')(default='', max_length=32, blank=True), + keep_default=False) + + # Adding field 'InventoryUpdate.source_path' + db.add_column(u'main_inventoryupdate', 'source_path', + self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True), + keep_default=False) + + # Adding field 'InventoryUpdate.source_vars' + db.add_column(u'main_inventoryupdate', 'source_vars', + self.gf('django.db.models.fields.TextField')(default='', blank=True), + keep_default=False) + + # Adding field 'InventoryUpdate.credential' + db.add_column(u'main_inventoryupdate', 'credential', + self.gf('django.db.models.fields.related.ForeignKey')(related_name='inventoryupdates', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True), + keep_default=False) + + # Adding field 'InventoryUpdate.source_regions' + db.add_column(u'main_inventoryupdate', 'source_regions', + self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True), + keep_default=False) + + # Adding field 'InventoryUpdate.overwrite' + db.add_column(u'main_inventoryupdate', 'overwrite', + self.gf('django.db.models.fields.BooleanField')(default=False), + keep_default=False) + + # Adding field 'InventoryUpdate.overwrite_vars' + db.add_column(u'main_inventoryupdate', 'overwrite_vars', + self.gf('django.db.models.fields.BooleanField')(default=False), + keep_default=False) + + + # Changing field 'InventoryUpdate.created' + db.alter_column(u'main_inventoryupdate', 'created', self.gf('django.db.models.fields.DateTimeField')()) + + # Changing field 'InventoryUpdate.modified' + db.alter_column(u'main_inventoryupdate', 'modified', self.gf('django.db.models.fields.DateTimeField')()) + # Adding field 'Credential.ssh_key_path' + db.add_column(u'main_credential', 'ssh_key_path', + self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True), + keep_default=False) + + # Adding field 'Credential.vault_password' + db.add_column(u'main_credential', 'vault_password', + self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True), + keep_default=False) + + + # Changing field 'Credential.created' + db.alter_column(u'main_credential', 'created', self.gf('django.db.models.fields.DateTimeField')()) + + # Changing field 'Credential.modified' + db.alter_column(u'main_credential', 'modified', self.gf('django.db.models.fields.DateTimeField')()) + + # Changing field 'JobTemplate.created' + db.alter_column(u'main_jobtemplate', 'created', self.gf('django.db.models.fields.DateTimeField')()) + + # Changing field 'JobTemplate.modified' + db.alter_column(u'main_jobtemplate', 'modified', self.gf('django.db.models.fields.DateTimeField')()) + # Adding M2M table for field schedule on 'ActivityStream' + m2m_table_name = db.shorten_name(u'main_activitystream_schedule') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), + ('schedule', models.ForeignKey(orm['main.schedule'], null=False)) + )) + db.create_unique(m2m_table_name, ['activitystream_id', 'schedule_id']) + + # Adding M2M table for field unified_job_template on 'ActivityStream' + m2m_table_name = db.shorten_name(u'main_activitystream_unified_job_template') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), + ('unifiedjobtemplate', models.ForeignKey(orm['main.unifiedjobtemplate'], null=False)) + )) + db.create_unique(m2m_table_name, ['activitystream_id', 'unifiedjobtemplate_id']) + + # Adding M2M table for field unified_job on 'ActivityStream' + m2m_table_name = db.shorten_name(u'main_activitystream_unified_job') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), + ('unifiedjob', models.ForeignKey(orm['main.unifiedjob'], null=False)) + )) + db.create_unique(m2m_table_name, ['activitystream_id', 'unifiedjob_id']) + + # Adding M2M table for field new_inventory_source on 'ActivityStream' + m2m_table_name = db.shorten_name(u'main_activitystream_new_inventory_source') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), + ('inventorysourcenew', models.ForeignKey(orm['main.inventorysourcenew'], null=False)) + )) + db.create_unique(m2m_table_name, ['activitystream_id', 'inventorysourcenew_id']) + + # Adding M2M table for field new_inventory_update on 'ActivityStream' + m2m_table_name = db.shorten_name(u'main_activitystream_new_inventory_update') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), + ('inventoryupdatenew', models.ForeignKey(orm['main.inventoryupdatenew'], null=False)) + )) + db.create_unique(m2m_table_name, ['activitystream_id', 'inventoryupdatenew_id']) + + # Adding M2M table for field new_project on 'ActivityStream' + m2m_table_name = db.shorten_name(u'main_activitystream_new_project') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), + ('projectnew', models.ForeignKey(orm['main.projectnew'], null=False)) + )) + db.create_unique(m2m_table_name, ['activitystream_id', 'projectnew_id']) + + # Adding M2M table for field new_project_update on 'ActivityStream' + m2m_table_name = db.shorten_name(u'main_activitystream_new_project_update') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), + ('projectupdatenew', models.ForeignKey(orm['main.projectupdatenew'], null=False)) + )) + db.create_unique(m2m_table_name, ['activitystream_id', 'projectupdatenew_id']) + + # Adding M2M table for field new_job_template on 'ActivityStream' + m2m_table_name = db.shorten_name(u'main_activitystream_new_job_template') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), + ('jobtemplatenew', models.ForeignKey(orm['main.jobtemplatenew'], null=False)) + )) + db.create_unique(m2m_table_name, ['activitystream_id', 'jobtemplatenew_id']) + + # Adding M2M table for field new_job on 'ActivityStream' + m2m_table_name = db.shorten_name(u'main_activitystream_new_job') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), + ('jobnew', models.ForeignKey(orm['main.jobnew'], null=False)) + )) + db.create_unique(m2m_table_name, ['activitystream_id', 'jobnew_id']) + + # Adding M2M table for field new_projects on 'Team' + m2m_table_name = db.shorten_name(u'main_team_new_projects') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('team', models.ForeignKey(orm['main.team'], null=False)), + ('projectnew', models.ForeignKey(orm['main.projectnew'], null=False)) + )) + db.create_unique(m2m_table_name, ['team_id', 'projectnew_id']) + + + # Changing field 'Team.created' + db.alter_column(u'main_team', 'created', self.gf('django.db.models.fields.DateTimeField')()) + + # Changing field 'Team.modified' + db.alter_column(u'main_team', 'modified', self.gf('django.db.models.fields.DateTimeField')()) + # Adding field 'Project.scm_update_cache_timeout' + db.add_column(u'main_project', 'scm_update_cache_timeout', + self.gf('django.db.models.fields.PositiveIntegerField')(default=0), + keep_default=False) + + + # Changing field 'Project.current_update' + db.alter_column(u'main_project', 'current_update_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, on_delete=models.SET_NULL, to=orm['main.ProjectUpdate'])) + + # Changing field 'Project.last_update' + db.alter_column(u'main_project', 'last_update_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, on_delete=models.SET_NULL, to=orm['main.ProjectUpdate'])) + + # Changing field 'Project.credential' + db.alter_column(u'main_project', 'credential_id', self.gf('django.db.models.fields.related.ForeignKey')(on_delete=models.SET_NULL, to=orm['main.Credential'], null=True)) + + # Changing field 'Project.created' + db.alter_column(u'main_project', 'created', self.gf('django.db.models.fields.DateTimeField')()) + + # Changing field 'Project.modified' + db.alter_column(u'main_project', 'modified', self.gf('django.db.models.fields.DateTimeField')()) + # Adding M2M table for field new_projects on 'Organization' + m2m_table_name = db.shorten_name(u'main_organization_new_projects') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('organization', models.ForeignKey(orm['main.organization'], null=False)), + ('projectnew', models.ForeignKey(orm['main.projectnew'], null=False)) + )) + db.create_unique(m2m_table_name, ['organization_id', 'projectnew_id']) + + + # Changing field 'Organization.created' + db.alter_column(u'main_organization', 'created', self.gf('django.db.models.fields.DateTimeField')()) + + # Changing field 'Organization.modified' + db.alter_column(u'main_organization', 'modified', self.gf('django.db.models.fields.DateTimeField')()) + # Adding field 'Permission.new_project' + db.add_column(u'main_permission', 'new_project', + self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='permissions', null=True, on_delete=models.SET_NULL, to=orm['main.ProjectNew']), + keep_default=False) + + + # Changing field 'Permission.created' + db.alter_column(u'main_permission', 'created', self.gf('django.db.models.fields.DateTimeField')()) + + # Changing field 'Permission.modified' + db.alter_column(u'main_permission', 'modified', self.gf('django.db.models.fields.DateTimeField')()) + # Deleting field 'InventorySource.update_interval' + db.delete_column(u'main_inventorysource', 'update_interval') + + # Adding field 'InventorySource.update_cache_timeout' + db.add_column(u'main_inventorysource', 'update_cache_timeout', + self.gf('django.db.models.fields.PositiveIntegerField')(default=0), + keep_default=False) + + + # Changing field 'InventorySource.current_update' + db.alter_column(u'main_inventorysource', 'current_update_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, on_delete=models.SET_NULL, to=orm['main.InventoryUpdate'])) + + # Changing field 'InventorySource.last_update' + db.alter_column(u'main_inventorysource', 'last_update_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, on_delete=models.SET_NULL, to=orm['main.InventoryUpdate'])) + + # Changing field 'InventorySource.credential' + db.alter_column(u'main_inventorysource', 'credential_id', self.gf('django.db.models.fields.related.ForeignKey')(on_delete=models.SET_NULL, to=orm['main.Credential'], null=True)) + + # Changing field 'InventorySource.created' + db.alter_column(u'main_inventorysource', 'created', self.gf('django.db.models.fields.DateTimeField')()) + + # Changing field 'InventorySource.modified' + db.alter_column(u'main_inventorysource', 'modified', self.gf('django.db.models.fields.DateTimeField')()) + # Adding field 'JobEvent.role' + db.add_column(u'main_jobevent', 'role', + self.gf('django.db.models.fields.CharField')(default='', max_length=1024), + keep_default=False) + + # Adding field 'JobEvent.new_job' + db.add_column(u'main_jobevent', 'new_job', + self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='new_job_events', null=True, to=orm['main.JobNew']), + keep_default=False) + + + # Changing field 'JobEvent.job' + db.alter_column(u'main_jobevent', 'job_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['main.Job'])) def backwards(self, orm): - "Write your backwards methods here." - - # FIXME: Would like to have this, but not required. - raise NotImplementedError() + # Removing unique constraint on 'JobHostSummary', fields ['new_job', 'host'] + db.delete_unique(u'main_jobhostsummary', ['new_job_id', 'host_id']) + + # Removing unique constraint on 'UnifiedJobTemplate', fields ['polymorphic_ctype', 'name'] + db.delete_unique(u'main_unifiedjobtemplate', ['polymorphic_ctype_id', 'name']) + + # Deleting model 'InventoryUpdateNew' + db.delete_table(u'main_inventoryupdatenew') + + # Deleting model 'JobNew' + db.delete_table(u'main_jobnew') + + # Deleting model 'UnifiedJob' + db.delete_table(u'main_unifiedjob') + + # Removing M2M table for field dependent_jobs on 'UnifiedJob' + db.delete_table(db.shorten_name(u'main_unifiedjob_dependent_jobs')) + + # Deleting model 'Schedule' + db.delete_table(u'main_schedule') + + # Deleting model 'InventorySourceNew' + db.delete_table(u'main_inventorysourcenew') + + # Deleting model 'JobTemplateNew' + db.delete_table('main_jobtemplatenew') + + # Deleting model 'ProjectNew' + db.delete_table(u'main_projectnew') + + # Deleting model 'ProjectUpdateNew' + db.delete_table(u'main_projectupdatenew') + + # Deleting model 'UnifiedJobTemplate' + db.delete_table(u'main_unifiedjobtemplate') + + + # Changing field 'Profile.created' + db.alter_column(u'main_profile', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) + + # Changing field 'Profile.modified' + db.alter_column(u'main_profile', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) + # Deleting field 'ProjectUpdate.local_path' + db.delete_column(u'main_projectupdate', 'local_path') + + # Deleting field 'ProjectUpdate.scm_type' + db.delete_column(u'main_projectupdate', 'scm_type') + + # Deleting field 'ProjectUpdate.scm_url' + db.delete_column(u'main_projectupdate', 'scm_url') + + # Deleting field 'ProjectUpdate.scm_branch' + db.delete_column(u'main_projectupdate', 'scm_branch') + + # Deleting field 'ProjectUpdate.scm_clean' + db.delete_column(u'main_projectupdate', 'scm_clean') + + # Deleting field 'ProjectUpdate.scm_delete_on_update' + db.delete_column(u'main_projectupdate', 'scm_delete_on_update') + + # Deleting field 'ProjectUpdate.credential' + db.delete_column(u'main_projectupdate', 'credential_id') + + + # Changing field 'ProjectUpdate.created' + db.alter_column(u'main_projectupdate', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) + + # Changing field 'ProjectUpdate.modified' + db.alter_column(u'main_projectupdate', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) + # Removing M2M table for field new_inventory_sources on 'Group' + db.delete_table(db.shorten_name(u'main_group_new_inventory_sources')) + + + # Changing field 'Group.created' + db.alter_column(u'main_group', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) + + # Changing field 'Group.modified' + db.alter_column(u'main_group', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) + + # Changing field 'Job.created' + db.alter_column(u'main_job', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) + + # Changing field 'Job.modified' + db.alter_column(u'main_job', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) + + # Changing field 'Inventory.created' + db.alter_column(u'main_inventory', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) + + # Changing field 'Inventory.modified' + db.alter_column(u'main_inventory', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) + # Deleting field 'Host.new_last_job' + db.delete_column(u'main_host', 'new_last_job_id') + + # Removing M2M table for field new_inventory_sources on 'Host' + db.delete_table(db.shorten_name(u'main_host_new_inventory_sources')) + + + # Changing field 'Host.created' + db.alter_column(u'main_host', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) + + # Changing field 'Host.modified' + db.alter_column(u'main_host', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) + # Deleting field 'JobHostSummary.new_job' + db.delete_column(u'main_jobhostsummary', 'new_job_id') + + + # Changing field 'JobHostSummary.created' + db.alter_column(u'main_jobhostsummary', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) + + # Changing field 'JobHostSummary.modified' + db.alter_column(u'main_jobhostsummary', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) + + # Changing field 'JobHostSummary.job' + db.alter_column(u'main_jobhostsummary', 'job_id', self.gf('django.db.models.fields.related.ForeignKey')(default=None, to=orm['main.Job'])) + # Deleting field 'InventoryUpdate.source' + db.delete_column(u'main_inventoryupdate', 'source') + + # Deleting field 'InventoryUpdate.source_path' + db.delete_column(u'main_inventoryupdate', 'source_path') + + # Deleting field 'InventoryUpdate.source_vars' + db.delete_column(u'main_inventoryupdate', 'source_vars') + + # Deleting field 'InventoryUpdate.credential' + db.delete_column(u'main_inventoryupdate', 'credential_id') + + # Deleting field 'InventoryUpdate.source_regions' + db.delete_column(u'main_inventoryupdate', 'source_regions') + + # Deleting field 'InventoryUpdate.overwrite' + db.delete_column(u'main_inventoryupdate', 'overwrite') + + # Deleting field 'InventoryUpdate.overwrite_vars' + db.delete_column(u'main_inventoryupdate', 'overwrite_vars') + + + # Changing field 'InventoryUpdate.created' + db.alter_column(u'main_inventoryupdate', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) + + # Changing field 'InventoryUpdate.modified' + db.alter_column(u'main_inventoryupdate', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) + # Deleting field 'Credential.ssh_key_path' + db.delete_column(u'main_credential', 'ssh_key_path') + + # Deleting field 'Credential.vault_password' + db.delete_column(u'main_credential', 'vault_password') + + + # Changing field 'Credential.created' + db.alter_column(u'main_credential', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) + + # Changing field 'Credential.modified' + db.alter_column(u'main_credential', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) + + # Changing field 'JobTemplate.created' + db.alter_column(u'main_jobtemplate', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) + + # Changing field 'JobTemplate.modified' + db.alter_column(u'main_jobtemplate', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) + # Removing M2M table for field schedule on 'ActivityStream' + db.delete_table(db.shorten_name(u'main_activitystream_schedule')) + + # Removing M2M table for field unified_job_template on 'ActivityStream' + db.delete_table(db.shorten_name(u'main_activitystream_unified_job_template')) + + # Removing M2M table for field unified_job on 'ActivityStream' + db.delete_table(db.shorten_name(u'main_activitystream_unified_job')) + + # Removing M2M table for field new_inventory_source on 'ActivityStream' + db.delete_table(db.shorten_name(u'main_activitystream_new_inventory_source')) + + # Removing M2M table for field new_inventory_update on 'ActivityStream' + db.delete_table(db.shorten_name(u'main_activitystream_new_inventory_update')) + + # Removing M2M table for field new_project on 'ActivityStream' + db.delete_table(db.shorten_name(u'main_activitystream_new_project')) + + # Removing M2M table for field new_project_update on 'ActivityStream' + db.delete_table(db.shorten_name(u'main_activitystream_new_project_update')) + + # Removing M2M table for field new_job_template on 'ActivityStream' + db.delete_table(db.shorten_name(u'main_activitystream_new_job_template')) + + # Removing M2M table for field new_job on 'ActivityStream' + db.delete_table(db.shorten_name(u'main_activitystream_new_job')) + + # Removing M2M table for field new_projects on 'Team' + db.delete_table(db.shorten_name(u'main_team_new_projects')) + + + # Changing field 'Team.created' + db.alter_column(u'main_team', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) + + # Changing field 'Team.modified' + db.alter_column(u'main_team', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) + # Deleting field 'Project.scm_update_cache_timeout' + db.delete_column(u'main_project', 'scm_update_cache_timeout') + + + # Changing field 'Project.current_update' + db.alter_column(u'main_project', 'current_update_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['main.ProjectUpdate'])) + + # Changing field 'Project.last_update' + db.alter_column(u'main_project', 'last_update_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['main.ProjectUpdate'])) + + # Changing field 'Project.credential' + db.alter_column(u'main_project', 'credential_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['main.Credential'])) + + # Changing field 'Project.created' + db.alter_column(u'main_project', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) + + # Changing field 'Project.modified' + db.alter_column(u'main_project', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) + # Removing M2M table for field new_projects on 'Organization' + db.delete_table(db.shorten_name(u'main_organization_new_projects')) + + + # Changing field 'Organization.created' + db.alter_column(u'main_organization', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) + + # Changing field 'Organization.modified' + db.alter_column(u'main_organization', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) + # Deleting field 'Permission.new_project' + db.delete_column(u'main_permission', 'new_project_id') + + + # Changing field 'Permission.created' + db.alter_column(u'main_permission', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) + + # Changing field 'Permission.modified' + db.alter_column(u'main_permission', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) + # Adding field 'InventorySource.update_interval' + db.add_column(u'main_inventorysource', 'update_interval', + self.gf('django.db.models.fields.PositiveIntegerField')(default=0), + keep_default=False) + + # Deleting field 'InventorySource.update_cache_timeout' + db.delete_column(u'main_inventorysource', 'update_cache_timeout') + + + # Changing field 'InventorySource.current_update' + db.alter_column(u'main_inventorysource', 'current_update_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['main.InventoryUpdate'])) + + # Changing field 'InventorySource.last_update' + db.alter_column(u'main_inventorysource', 'last_update_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['main.InventoryUpdate'])) + + # Changing field 'InventorySource.credential' + db.alter_column(u'main_inventorysource', 'credential_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['main.Credential'])) + + # Changing field 'InventorySource.created' + db.alter_column(u'main_inventorysource', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) + + # Changing field 'InventorySource.modified' + db.alter_column(u'main_inventorysource', 'modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True)) + # Deleting field 'JobEvent.role' + db.delete_column(u'main_jobevent', 'role') + + # Deleting field 'JobEvent.new_job' + db.delete_column(u'main_jobevent', 'new_job_id') + + + # Changing field 'JobEvent.job' + db.alter_column(u'main_jobevent', 'job_id', self.gf('django.db.models.fields.related.ForeignKey')(default=None, to=orm['main.Job'])) models = { u'auth.group': { @@ -359,6 +874,7 @@ class Migration(DataMigration): 'permission': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Permission']", 'symmetrical': 'False', 'blank': 'True'}), 'project': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Project']", 'symmetrical': 'False', 'blank': 'True'}), 'project_update': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.ProjectUpdate']", 'symmetrical': 'False', 'blank': 'True'}), + 'schedule': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Schedule']", 'symmetrical': 'False', 'blank': 'True'}), 'team': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Team']", 'symmetrical': 'False', 'blank': 'True'}), 'timestamp': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), 'unified_job': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'activity_stream_as_unified_job+'", 'blank': 'True', 'to': "orm['main.UnifiedJob']"}), @@ -388,12 +904,14 @@ class Migration(DataMigration): 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), 'password': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'ssh_key_data': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'ssh_key_path': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'ssh_key_unlock': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'sudo_password': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'sudo_username': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'team': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'credentials'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Team']"}), 'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'credentials'", 'null': 'True', 'blank': 'True', 'to': u"orm['auth.User']"}), - 'username': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}) + 'username': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'vault_password': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}) }, 'main.group': { 'Meta': {'unique_together': "(('name', 'inventory'),)", 'object_name': 'Group'}, @@ -408,11 +926,11 @@ class Migration(DataMigration): 'hosts_with_active_failures': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'groups'", 'to': "orm['main.Inventory']"}), - 'inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'groups'", 'blank': 'True', 'to': "orm['main.InventorySource']"}), + 'inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'groups'", 'symmetrical': 'False', 'to': "orm['main.InventorySource']"}), 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'group\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), - 'new_inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'groups'", 'blank': 'True', 'to': "orm['main.InventorySourceNew']"}), + 'new_inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'groups'", 'symmetrical': 'False', 'to': "orm['main.InventorySourceNew']"}), 'parents': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'children'", 'blank': 'True', 'to': "orm['main.Group']"}), 'total_groups': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), 'total_hosts': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), @@ -430,14 +948,14 @@ class Migration(DataMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'instance_id': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}), 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'hosts'", 'to': "orm['main.Inventory']"}), - 'inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'hosts'", 'blank': 'True', 'to': "orm['main.InventorySource']"}), - 'last_job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'hosts_as_last_job+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Job']", 'blank': 'True', 'null': 'True'}), + 'inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'hosts'", 'symmetrical': 'False', 'to': "orm['main.InventorySource']"}), + 'last_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'hosts_as_last_job+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Job']"}), 'last_job_host_summary': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'hosts_as_last_job_summary+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.JobHostSummary']", 'blank': 'True', 'null': 'True'}), 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'host\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), - 'new_inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'hosts'", 'blank': 'True', 'to': "orm['main.InventorySourceNew']"}), - 'new_last_job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'hosts_as_last_job+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.JobNew']", 'blank': 'True', 'null': 'True'}), + 'new_inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'hosts'", 'symmetrical': 'False', 'to': "orm['main.InventorySourceNew']"}), + 'new_last_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'hosts_as_last_job+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.JobNew']"}), 'variables': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}) }, 'main.inventory': { @@ -466,13 +984,13 @@ class Migration(DataMigration): 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'inventorysource\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventorysources'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), - 'current_update': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventory_source_as_current_update+'", 'null': 'True', 'to': "orm['main.InventoryUpdate']"}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventorysources'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'current_update': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventory_source_as_current_update+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.InventoryUpdate']"}), 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), - 'group': ('awx.main.fields.AutoOneToOneField', [], {'related_name': "'inventory_source'", 'null': 'True', 'default': 'None', 'to': "orm['main.Group']", 'blank': 'True', 'unique': 'True'}), + 'group': ('awx.main.fields.AutoOneToOneField', [], {'default': 'None', 'related_name': "'inventory_source'", 'unique': 'True', 'null': 'True', 'to': "orm['main.Group']"}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventory_sources'", 'null': 'True', 'to': "orm['main.Inventory']"}), - 'last_update': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventory_source_as_last_update+'", 'null': 'True', 'to': "orm['main.InventoryUpdate']"}), + 'last_update': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventory_source_as_last_update+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.InventoryUpdate']"}), 'last_update_failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'last_updated': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), @@ -489,8 +1007,8 @@ class Migration(DataMigration): }, 'main.inventorysourcenew': { 'Meta': {'object_name': 'InventorySourceNew', '_ormbases': ['main.UnifiedJobTemplate']}, - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventorysourcenews'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), - 'group': ('awx.main.fields.AutoOneToOneField', [], {'related_name': "'new_inventory_source'", 'null': 'True', 'default': 'None', 'to': "orm['main.Group']", 'blank': 'True', 'unique': 'True'}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventorysourcenews'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'group': ('awx.main.fields.AutoOneToOneField', [], {'default': 'None', 'related_name': "'new_inventory_source'", 'unique': 'True', 'null': 'True', 'to': "orm['main.Group']"}), 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'new_inventory_sources'", 'null': 'True', 'to': "orm['main.Inventory']"}), 'overwrite': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'overwrite_vars': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), @@ -510,7 +1028,7 @@ class Migration(DataMigration): 'celery_task_id': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}), 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'inventoryupdate\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventoryupdates'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventoryupdates'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), @@ -529,11 +1047,12 @@ class Migration(DataMigration): 'source_path': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'source_regions': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'source_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'start_args': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'status': ('django.db.models.fields.CharField', [], {'default': "'new'", 'max_length': '20'}) }, 'main.inventoryupdatenew': { 'Meta': {'object_name': 'InventoryUpdateNew', '_ormbases': ['main.UnifiedJob']}, - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventoryupdatenews'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventoryupdatenews'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), 'inventory_source': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventory_updates'", 'to': "orm['main.InventorySourceNew']"}), 'license_error': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'overwrite': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), @@ -558,7 +1077,7 @@ class Migration(DataMigration): 'extra_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'forks': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), - 'hosts': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'jobs'", 'blank': 'True', 'through': "orm['main.JobHostSummary']", 'to': "orm['main.Host']"}), + 'hosts': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'jobs'", 'symmetrical': 'False', 'through': "orm['main.JobHostSummary']", 'to': "orm['main.Host']"}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Inventory']"}), 'job_args': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), @@ -575,6 +1094,7 @@ class Migration(DataMigration): 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Project']"}), 'result_stdout_file': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'result_traceback': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'start_args': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'status': ('django.db.models.fields.CharField', [], {'default': "'new'", 'max_length': '20'}), 'verbosity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}) }, @@ -585,16 +1105,16 @@ class Migration(DataMigration): 'event': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'event_data': ('jsonfield.fields.JSONField', [], {'default': '{}', 'blank': 'True'}), 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'host': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_events_as_primary_host'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Host']", 'blank': 'True', 'null': 'True'}), - 'hosts': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'job_events'", 'blank': 'True', 'to': "orm['main.Host']"}), + 'host': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'job_events_as_primary_host'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Host']"}), + 'hosts': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'job_events'", 'symmetrical': 'False', 'to': "orm['main.Host']"}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_events'", 'to': "orm['main.Job']"}), + 'job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'job_events'", 'null': 'True', 'to': "orm['main.Job']"}), 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'new_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'new_job_events'", 'null': 'True', 'to': "orm['main.JobNew']"}), - 'parent': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'children'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.JobEvent']", 'blank': 'True', 'null': 'True'}), - 'play': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - 'role': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - 'task': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}) + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'children'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.JobEvent']"}), + 'play': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), + 'role': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), + 'task': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}) }, 'main.jobhostsummary': { 'Meta': {'ordering': "('-pk',)", 'unique_together': "[('job', 'host'), ('new_job', 'host')]", 'object_name': 'JobHostSummary'}, @@ -605,7 +1125,7 @@ class Migration(DataMigration): 'failures': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), 'host': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_host_summaries'", 'to': "orm['main.Host']"}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_host_summaries'", 'to': "orm['main.Job']"}), + 'job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'job_host_summaries'", 'null': 'True', 'to': "orm['main.Job']"}), 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'new_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'new_job_host_summaries'", 'null': 'True', 'to': "orm['main.JobNew']"}), 'ok': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), @@ -618,7 +1138,7 @@ class Migration(DataMigration): 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobnews'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), 'extra_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'forks': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), - 'hosts': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'jobnews'", 'blank': 'True', 'through': "orm['main.JobHostSummary']", 'to': "orm['main.Host']"}), + 'hosts': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'jobnews'", 'symmetrical': 'False', 'through': "orm['main.JobHostSummary']", 'to': "orm['main.Host']"}), 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobnews'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Inventory']"}), 'job_tags': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'job_template': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.JobTemplateNew']", 'blank': 'True', 'null': 'True'}), @@ -713,11 +1233,11 @@ class Migration(DataMigration): 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'project\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'projects'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), - 'current_update': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'project_as_current_update+'", 'null': 'True', 'to': "orm['main.ProjectUpdate']"}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'current_update': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'project_as_current_update+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.ProjectUpdate']"}), 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'last_update': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'project_as_last_update+'", 'null': 'True', 'to': "orm['main.ProjectUpdate']"}), + 'last_update': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'project_as_last_update+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.ProjectUpdate']"}), 'last_update_failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'last_updated': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), 'local_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), @@ -736,7 +1256,7 @@ class Migration(DataMigration): }, 'main.projectnew': { 'Meta': {'object_name': 'ProjectNew', '_ormbases': ['main.UnifiedJobTemplate']}, - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'projectnews'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projectnews'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), 'local_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), 'scm_branch': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '256', 'blank': 'True'}), 'scm_clean': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), @@ -756,7 +1276,7 @@ class Migration(DataMigration): 'celery_task_id': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}), 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'projectupdate\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'projectupdates'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projectupdates'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), @@ -774,11 +1294,12 @@ class Migration(DataMigration): 'scm_delete_on_update': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'scm_type': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '8', 'blank': 'True'}), 'scm_url': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'start_args': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'status': ('django.db.models.fields.CharField', [], {'default': "'new'", 'max_length': '20'}) }, 'main.projectupdatenew': { 'Meta': {'object_name': 'ProjectUpdateNew', '_ormbases': ['main.UnifiedJob']}, - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'projectupdatenews'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projectupdatenews'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), 'local_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'project_updates'", 'to': "orm['main.ProjectNew']"}), 'scm_branch': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '256', 'blank': 'True'}), @@ -796,12 +1317,14 @@ class Migration(DataMigration): 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'dtend': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), 'dtstart': ('django.db.models.fields.DateTimeField', [], {}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'job_template': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'schedules'", 'to': "orm['main.UnifiedJobTemplate']"}), 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'schedule\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}), - 'rrule': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + 'next_run': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), + 'rrule': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'unified_job_template': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'schedules'", 'to': "orm['main.UnifiedJobTemplate']"}) }, 'main.team': { 'Meta': {'unique_together': "[('organization', 'name')]", 'object_name': 'Team'}, @@ -825,7 +1348,7 @@ class Migration(DataMigration): 'celery_task_id': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}), 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'unifiedjob\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), - 'depends_on': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'depends_on_rel_+'", 'to': "orm['main.UnifiedJob']"}), + 'dependent_jobs': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'dependent_jobs_rel_+'", 'to': "orm['main.UnifiedJob']"}), 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'elapsed': ('django.db.models.fields.DecimalField', [], {'max_digits': '12', 'decimal_places': '3'}), 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), @@ -837,33 +1360,35 @@ class Migration(DataMigration): 'launch_type': ('django.db.models.fields.CharField', [], {'default': "'manual'", 'max_length': '20'}), 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'unifiedjob\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), 'old_pk': ('django.db.models.fields.PositiveIntegerField', [], {'default': 'None', 'null': 'True'}), 'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_main.unifiedjob_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}), 'result_stdout_file': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'result_stdout_text': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'result_traceback': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), - 'schedule': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['main.Schedule']", 'null': 'True'}), + 'schedule': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['main.Schedule']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), 'start_args': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'started': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), 'status': ('django.db.models.fields.CharField', [], {'default': "'new'", 'max_length': '20'}), - 'unified_job_template': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjob_unified_jobs'", 'null': 'True', 'to': "orm['main.UnifiedJobTemplate']"}) + 'unified_job_template': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjob_unified_jobs'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.UnifiedJobTemplate']"}) }, 'main.unifiedjobtemplate': { 'Meta': {'unique_together': "[('polymorphic_ctype', 'name')]", 'object_name': 'UnifiedJobTemplate'}, 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'unifiedjobtemplate\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), - 'current_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjobtemplate_as_current_job+'", 'null': 'True', 'to': "orm['main.UnifiedJob']"}), + 'current_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjobtemplate_as_current_job+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.UnifiedJob']"}), 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'has_schedules': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'last_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjobtemplate_as_last_job+'", 'null': 'True', 'to': "orm['main.UnifiedJob']"}), + 'last_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjobtemplate_as_last_job+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.UnifiedJob']"}), 'last_job_failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'last_job_run': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'unifiedjobtemplate\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), 'next_job_run': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), + 'next_schedule': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjobtemplate_as_next_schedule+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Schedule']"}), 'old_pk': ('django.db.models.fields.PositiveIntegerField', [], {'default': 'None', 'null': 'True'}), 'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_main.unifiedjobtemplate_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}), 'status': ('django.db.models.fields.CharField', [], {'default': "'ok'", 'max_length': '32'}) @@ -883,5 +1408,4 @@ class Migration(DataMigration): } } - complete_apps = ['main'] - symmetrical = True + complete_apps = ['main'] \ No newline at end of file diff --git a/awx/main/migrations/0036_v148_changes.py b/awx/main/migrations/0036_v148_changes.py index 2947003bea..efaa270b8d 100644 --- a/awx/main/migrations/0036_v148_changes.py +++ b/awx/main/migrations/0036_v148_changes.py @@ -1,380 +1,308 @@ # -*- coding: utf-8 -*- from south.utils import datetime_utils as datetime from south.db import db -from south.v2 import SchemaMigration +from south.v2 import DataMigration from django.db import models +from django.utils.encoding import smart_text +class Migration(DataMigration): -class Migration(SchemaMigration): + def _get_dict_from_primordial_model(self, instance): + return { + 'description': instance.description, + 'created': instance.created, + 'modified': instance.modified, + 'created_by': instance.created_by, + 'modified_by': instance.modified_by, + 'active': instance.active, + 'old_pk': instance.pk, + } + + def _get_dict_from_common_model(self, instance): + d = self._get_dict_from_primordial_model(instance) + if hasattr(instance, 'name'): + d['name'] = instance.name + elif getattr(instance, 'inventory', None) and getattr(instance, 'group', None): + d['name'] = ': '.join([instance.inventory.name, instance.group.name]) + elif getattr(instance, 'inventory', None): + d['name'] = u'%s-%s' % (instance.inventory.name, instance.pk) + else: + d['name'] = u'%s-%s' % (instance._meta.verbose_name, instance.pk) + return d + + def _get_dict_from_common_task_model(self, instance): + d = self._get_dict_from_primordial_model(instance) + td = instance.modified - instance.created + elapsed = (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / (10**6 * 1.0) + d.update({ + 'launch_type': getattr(instance, 'launch_type', 'manual'), + 'cancel_flag': instance.cancel_flag, + 'status': instance.status, + 'failed': instance.failed, + 'started': instance.created, + 'finished': instance.modified, + 'elapsed': elapsed, + 'job_args': instance.job_args, + 'job_env': instance.job_env, + 'result_stdout_text': instance._result_stdout, + 'result_stdout_file': instance.result_stdout_file, + 'result_traceback': instance.result_traceback, + 'celery_task_id': instance.celery_task_id, + }) + return d + + def _get_content_type_for_model(self, orm, model): + app_label = model._meta.app_label + model_name = model._meta.module_name + defaults = {'name': smart_text(model._meta.verbose_name_raw)} + content_type, created = orm['contenttypes.ContentType'].objects.get_or_create(app_label=app_label, model=model_name, defaults=defaults) + return content_type def forwards(self, orm): - # Removing unique constraint on 'JobHostSummary', fields ['job', 'host'] - db.delete_unique(u'main_jobhostsummary', ['job_id', 'host_id']) + "Write your forwards methods here." - # Deleting model 'JobTemplate' - db.delete_table(u'main_jobtemplate') + # Copy Project old to new. + new_ctype = self._get_content_type_for_model(orm, orm.Project) + for project in orm.Project.objects.order_by('pk'): + d = self._get_dict_from_common_model(project) + d.update({ + 'polymorphic_ctype_id': new_ctype.pk, + 'local_path': project.local_path, + 'scm_type': project.scm_type, + 'scm_url': project.scm_url, + 'scm_branch': project.scm_branch, + 'scm_clean': project.scm_clean, + 'scm_delete_on_update': project.scm_delete_on_update, + 'credential_id': project.credential_id, + 'scm_delete_on_next_update': project.scm_delete_on_next_update, + 'scm_update_on_launch': project.scm_update_on_launch, + }) + new_project, created = orm.ProjectNew.objects.get_or_create(old_pk=project.pk, defaults=d) - # Deleting model 'InventorySource' - db.delete_table(u'main_inventorysource') + # Copy ProjectUpdate old to new. + new_ctype = self._get_content_type_for_model(orm, orm.ProjectUpdate) + for project_update in orm.ProjectUpdate.objects.order_by('pk'): + project = project_update.project + new_project = orm.ProjectNew.objects.get(old_pk=project_update.project_id) + d = self._get_dict_from_common_task_model(project_update) + d.update({ + 'polymorphic_ctype_id': new_ctype.pk, + 'project_id': new_project.pk, + 'name': new_project.name, + 'unified_job_template_id': new_project.pk, + 'local_path': project.local_path, + 'scm_type': project.scm_type, + 'scm_url': project.scm_url, + 'scm_branch': project.scm_branch, + 'scm_clean': project.scm_clean, + 'scm_delete_on_update': project.scm_delete_on_update, + 'credential_id': project.credential_id, + }) + new_project_update, created = orm.ProjectUpdateNew.objects.get_or_create(old_pk=project_update.pk, defaults=d) - # Deleting model 'Project' - db.delete_table(u'main_project') + # Update Project last run. + for project in orm.Project.objects.order_by('pk'): + new_project = orm.ProjectNew.objects.get(old_pk=project.pk) + if project.current_update: + new_project.current_job = orm.ProjectUpdateNew.objects.get(old_pk=project.current_update_id) + if project.last_update: + new_project.last_job = orm.ProjectUpdateNew.objects.get(old_pk=project.last_update_id) + new_project.last_job_failed = project.last_update_failed + new_project.last_job_run = project.last_updated + new_project.status = project.status + new_project.save() - # Deleting model 'ProjectUpdate' - db.delete_table(u'main_projectupdate') + # Update Organization projects. + for organization in orm.Organization.objects.order_by('pk'): + for project in organization.projects.order_by('pk'): + new_project = orm.ProjectNew.objects.get(old_pk=project.pk) + organization.new_projects.add(new_project) - # Deleting model 'InventoryUpdate' - db.delete_table(u'main_inventoryupdate') + # Update Team projects. + for team in orm.Team.objects.order_by('pk'): + for project in team.projects.order_by('pk'): + new_project = orm.ProjectNew.objects.get(old_pk=project.pk) + team.new_projects.add(new_project) - # Deleting model 'Job' - db.delete_table(u'main_job') + # Update Permission project. + for permission in orm.Permission.objects.order_by('pk'): + if not permission.project_id: + continue + new_project = orm.ProjectNew.objects.get(old_pk=permission.project_id) + permission.new_project = new_project + permission.save() - # Deleting field 'Host.last_job' - db.delete_column(u'main_host', 'last_job_id') + # Copy InventorySource old to new. + new_ctype = self._get_content_type_for_model(orm, orm.InventorySource) + for inventory_source in orm.InventorySource.objects.order_by('pk'): + d = self._get_dict_from_common_model(inventory_source) + d.update({ + 'polymorphic_ctype_id': new_ctype.pk, + 'source': inventory_source.source, + 'source_path': inventory_source.source_path, + 'source_vars': inventory_source.source_vars, + 'credential_id': inventory_source.credential_id, + 'source_regions': inventory_source.source_regions, + 'overwrite': inventory_source.overwrite, + 'overwrite_vars': inventory_source.overwrite_vars, + 'update_on_launch': inventory_source.update_on_launch, + 'inventory_id': inventory_source.inventory_id, + 'group_id': inventory_source.group_id, + }) + new_inventory_source, created = orm.InventorySourceNew.objects.get_or_create(old_pk=inventory_source.pk, defaults=d) - # Removing M2M table for field inventory_sources on 'Host' - db.delete_table(db.shorten_name(u'main_host_inventory_sources')) + # Copy InventoryUpdate old to new. + new_ctype = self._get_content_type_for_model(orm, orm.InventoryUpdate) + for inventory_update in orm.InventoryUpdate.objects.order_by('pk'): + inventory_source = inventory_update.inventory_source + new_inventory_source = orm.InventorySourceNew.objects.get(old_pk=inventory_update.inventory_source_id) + d = self._get_dict_from_common_task_model(inventory_update) + d.update({ + 'polymorphic_ctype_id': new_ctype.pk, + 'name': new_inventory_source.name, + 'source': inventory_source.source, + 'source_path': inventory_source.source_path, + 'source_vars': inventory_source.source_vars, + 'credential_id': inventory_source.credential_id, + 'source_regions': inventory_source.source_regions, + 'overwrite': inventory_source.overwrite, + 'overwrite_vars': inventory_source.overwrite_vars, + 'inventory_source_id': new_inventory_source.pk, + 'unified_job_template_id': new_inventory_source.pk, + 'license_error': inventory_update.license_error, + }) + new_inventory_update, created = orm.InventoryUpdateNew.objects.get_or_create(old_pk=inventory_update.pk, defaults=d) - # Removing M2M table for field projects on 'Organization' - db.delete_table(db.shorten_name(u'main_organization_projects')) + # Update InventorySource last run. + for inventory_source in orm.InventorySource.objects.order_by('pk'): + new_inventory_source = orm.InventorySourceNew.objects.get(old_pk=inventory_source.pk) + if inventory_source.current_update: + new_inventory_source.current_job = orm.InventoryUpdateNew.objects.get(old_pk=inventory_source.current_update_id) + if inventory_source.last_update: + new_inventory_source.last_job = orm.InventoryUpdateNew.objects.get(old_pk=inventory_source.last_update_id) + new_inventory_source.last_job_failed = inventory_source.last_update_failed + new_inventory_source.last_job_run = inventory_source.last_updated + new_inventory_source.status = inventory_source.status + new_inventory_source.save() - # Removing M2M table for field projects on 'Team' - db.delete_table(db.shorten_name(u'main_team_projects')) + # Update Group inventory_sources. + for group in orm.Group.objects.order_by('pk'): + for inventory_source in group.inventory_sources.order_by('pk'): + new_inventory_source = orm.InventorySourceNew.objects.get(old_pk=inventory_source.pk) + group.new_inventory_sources.add(new_inventory_source) + + # Update Host inventory_sources. + for host in orm.Host.objects.order_by('pk'): + for inventory_source in host.inventory_sources.order_by('pk'): + new_inventory_source = orm.InventorySourceNew.objects.get(old_pk=inventory_source.pk) + host.new_inventory_sources.add(new_inventory_source) - # Deleting field 'Permission.project' - db.delete_column(u'main_permission', 'project_id') + # Copy JobTemplate old to new. + new_ctype = self._get_content_type_for_model(orm, orm.JobTemplate) + for job_template in orm.JobTemplate.objects.order_by('pk'): + d = self._get_dict_from_common_model(job_template) + d.update({ + 'polymorphic_ctype_id': new_ctype.pk, + 'job_type': job_template.job_type, + 'inventory_id': job_template.inventory_id, + 'playbook': job_template.playbook, + 'credential_id': job_template.credential_id, + 'cloud_credential_id': job_template.cloud_credential_id, + 'forks': job_template.forks, + 'limit': job_template.limit, + 'extra_vars': job_template.extra_vars, + 'job_tags': job_template.job_tags, + 'host_config_key': job_template.host_config_key, + }) + if job_template.project: + d['project_id'] = orm.ProjectNew.objects.get(old_pk=job_template.project_id).pk + new_job_template, created = orm.JobTemplateNew.objects.get_or_create(old_pk=job_template.pk, defaults=d) - # Deleting field 'JobHostSummary.job' - db.delete_column(u'main_jobhostsummary', 'job_id') + # Copy Job old to new. + new_ctype = self._get_content_type_for_model(orm, orm.Job) + for job in orm.Job.objects.order_by('pk'): + d = self._get_dict_from_common_task_model(job) + d.update({ + 'polymorphic_ctype_id': new_ctype.pk, + 'job_type': job_template.job_type, + 'inventory_id': job_template.inventory_id, + 'playbook': job_template.playbook, + 'credential_id': job_template.credential_id, + 'cloud_credential_id': job_template.cloud_credential_id, + 'forks': job_template.forks, + 'limit': job_template.limit, + 'extra_vars': job_template.extra_vars, + 'job_tags': job_template.job_tags, + }) + if job.project: + d['project_id'] = orm.ProjectNew.objects.get(old_pk=job.project_id).pk + if job.job_template: + new_job_template = orm.JobTemplateNew.objects.get(old_pk=job.job_template_id) + d['job_template_id'] = new_job_template.pk + d['unified_job_template_id'] = new_job_template.pk + d['name'] = new_job_template.name + else: + d['name'] = 'ad-hoc job' + new_job, created = orm.JobNew.objects.get_or_create(old_pk=job.pk, defaults=d) - # Changing field 'JobHostSummary.new_job' - db.alter_column(u'main_jobhostsummary', 'new_job_id', self.gf('django.db.models.fields.related.ForeignKey')(default=None, to=orm['main.JobNew'])) + # Update JobTemplate last run. + for new_job_template in orm.JobTemplateNew.objects.order_by('pk'): + try: + new_last_job = new_job_template.jobs.order_by('-pk')[0] + new_job_template.last_job = new_last_job + new_job_template.last_job_failed = new_last_job.failed + new_job_template.last_job_run = new_last_job.finished + new_job_template.status = 'failed' if new_last_job.failed else 'successful' + except IndexError: + new_job_template.status = 'never updated' + new_inventory_source.save() - # Removing M2M table for field inventory_sources on 'Group' - db.delete_table(db.shorten_name(u'main_group_inventory_sources')) + # Update JobHostSummary job. + for job_host_summary in orm.JobHostSummary.objects.order_by('pk'): + new_job = orm.JobNew.objects.get(old_pk=job_host_summary.job_id) + job_host_summary.new_job = new_job + job_host_summary.save() - # Deleting field 'JobEvent.job' - db.delete_column(u'main_jobevent', 'job_id') + # Update JobEvent job. + for job_event in orm.JobEvent.objects.order_by('pk'): + new_job = orm.JobNew.objects.get(old_pk=job_event.job_id) + job_event.new_job = new_job + job_event.save() - # Changing field 'JobEvent.new_job' - db.alter_column(u'main_jobevent', 'new_job_id', self.gf('django.db.models.fields.related.ForeignKey')(default=None, to=orm['main.JobNew'])) - - # Removing M2M table for field job_template on 'ActivityStream' - db.delete_table(db.shorten_name(u'main_activitystream_job_template')) - - # Removing M2M table for field inventory_update on 'ActivityStream' - db.delete_table(db.shorten_name(u'main_activitystream_inventory_update')) - - # Removing M2M table for field job on 'ActivityStream' - db.delete_table(db.shorten_name(u'main_activitystream_job')) - - # Removing M2M table for field project_update on 'ActivityStream' - db.delete_table(db.shorten_name(u'main_activitystream_project_update')) - - # Removing M2M table for field inventory_source on 'ActivityStream' - db.delete_table(db.shorten_name(u'main_activitystream_inventory_source')) - - # Removing M2M table for field project on 'ActivityStream' - db.delete_table(db.shorten_name(u'main_activitystream_project')) + # Update Host last_job. + for host in orm.Host.objects.order_by('pk'): + if not host.last_job: + continue + new_job = orm.JobNew.objects.get(old_pk=host.last_job_id) + host.new_last_job = new_job + host.save() + # Update ActivityStream + for a_s in orm.ActivityStream.objects.order_by('pk'): + for project in a_s.project.all(): + new_project = orm.ProjectNew.objects.get(old_pk=project.pk) + a_s.new_project.add(new_project) + for project_update in a_s.project_update.all(): + new_project_update = orm.ProjectUpdateNew.objects.get(old_pk=project_update.pk) + a_s.new_project_update.add(new_project_update) + for inventory_source in a_s.inventory_source.all(): + new_inventory_source = orm.InventorySourceNew.objects.get(old_pk=inventory_source.pk) + a_s.new_inventory_source.add(new_inventory_source) + for inventory_update in a_s.inventory_update.all(): + new_inventory_update = orm.InventoryUpdateNew.objects.get(old_pk=inventory_update.pk) + a_s.new_inventory_update.add(new_inventory_update) + for job_template in a_s.job_template.all(): + new_job_template = orm.JobTemplateNew.objects.get(old_pk=job_template.pk) + a_s.new_job_template.add(new_job_template) + for job in a_s.job.all(): + new_job = orm.JobNew.objects.get(old_pk=job.pk) + a_s.new_job.add(new_job) def backwards(self, orm): - # Adding model 'JobTemplate' - db.create_table(u'main_jobtemplate', ( - ('credential', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobtemplates', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True)), - ('modified_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'jobtemplate', 'app_label': 'main'}(class)s_modified+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), - ('description', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('created', self.gf('django.db.models.fields.DateTimeField')(default=None)), - ('extra_vars', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('verbosity', self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True)), - ('job_tags', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('job_type', self.gf('django.db.models.fields.CharField')(max_length=64)), - ('modified', self.gf('django.db.models.fields.DateTimeField')(default=None)), - ('created_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'jobtemplate', 'app_label': 'main'}(class)s_created+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='job_templates', null=True, on_delete=models.SET_NULL, to=orm['main.Project'])), - ('host_config_key', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('limit', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('inventory', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobtemplates', null=True, on_delete=models.SET_NULL, to=orm['main.Inventory'])), - ('active', self.gf('django.db.models.fields.BooleanField')(default=True)), - ('forks', self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True)), - ('playbook', self.gf('django.db.models.fields.CharField')(default='', max_length=1024)), - ('cloud_credential', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobtemplates_as_cloud_credential+', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=512, unique=True)), - )) - db.send_create_signal('main', ['JobTemplate']) - - # Adding model 'InventorySource' - db.create_table(u'main_inventorysource', ( - ('last_updated', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)), - ('source_regions', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('current_update', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='inventory_source_as_current_update+', null=True, to=orm['main.InventoryUpdate'])), - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('overwrite', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('source_vars', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('group', self.gf('awx.main.fields.AutoOneToOneField')(related_name='inventory_source', null=True, default=None, to=orm['main.Group'], blank=True, unique=True)), - ('last_update_failed', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('created_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'inventorysource', 'app_label': 'main'}(class)s_created+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), - ('last_update', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='inventory_source_as_last_update+', null=True, to=orm['main.InventoryUpdate'])), - ('source', self.gf('django.db.models.fields.CharField')(default='', max_length=32, blank=True)), - ('inventory', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='inventory_sources', null=True, to=orm['main.Inventory'])), - ('update_cache_timeout', self.gf('django.db.models.fields.PositiveIntegerField')(default=0)), - ('status', self.gf('django.db.models.fields.CharField')(default='none', max_length=32)), - ('credential', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='inventorysources', null=True, to=orm['main.Credential'], blank=True)), - ('description', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('overwrite_vars', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('active', self.gf('django.db.models.fields.BooleanField')(default=True)), - ('modified_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'inventorysource', 'app_label': 'main'}(class)s_modified+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), - ('update_on_launch', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('created', self.gf('django.db.models.fields.DateTimeField')(default=None)), - ('source_path', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('modified', self.gf('django.db.models.fields.DateTimeField')(default=None)), - )) - db.send_create_signal('main', ['InventorySource']) - - # Adding model 'Project' - db.create_table(u'main_project', ( - ('scm_branch', self.gf('django.db.models.fields.CharField')(default='', max_length=256, blank=True)), - ('scm_update_cache_timeout', self.gf('django.db.models.fields.PositiveIntegerField')(default=0)), - ('scm_clean', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('scm_delete_on_update', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('current_update', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='project_as_current_update+', null=True, to=orm['main.ProjectUpdate'])), - ('last_updated', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)), - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('modified_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'project', 'app_label': 'main'}(class)s_modified+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), - ('last_update_failed', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('created_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'project', 'app_label': 'main'}(class)s_created+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), - ('last_update', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='project_as_last_update+', null=True, to=orm['main.ProjectUpdate'])), - ('local_path', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)), - ('scm_delete_on_next_update', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('status', self.gf('django.db.models.fields.CharField')(default='ok', max_length=32, null=True)), - ('credential', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='projects', null=True, to=orm['main.Credential'], blank=True)), - ('description', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('scm_type', self.gf('django.db.models.fields.CharField')(default='', max_length=8, blank=True)), - ('scm_update_on_launch', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('active', self.gf('django.db.models.fields.BooleanField')(default=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=512, unique=True)), - ('created', self.gf('django.db.models.fields.DateTimeField')(default=None)), - ('modified', self.gf('django.db.models.fields.DateTimeField')(default=None)), - ('scm_url', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - )) - db.send_create_signal('main', ['Project']) - - # Adding model 'ProjectUpdate' - db.create_table(u'main_projectupdate', ( - ('cancel_flag', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('scm_branch', self.gf('django.db.models.fields.CharField')(default='', max_length=256, blank=True)), - ('scm_clean', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('scm_delete_on_update', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('celery_task_id', self.gf('django.db.models.fields.CharField')(default='', max_length=100, blank=True)), - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('modified_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'projectupdate', 'app_label': 'main'}(class)s_modified+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), - ('job_cwd', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('created_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'projectupdate', 'app_label': 'main'}(class)s_created+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), - ('failed', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('local_path', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)), - ('status', self.gf('django.db.models.fields.CharField')(default='new', max_length=20)), - ('credential', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='projectupdates', null=True, to=orm['main.Credential'], blank=True)), - ('description', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('result_traceback', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('scm_type', self.gf('django.db.models.fields.CharField')(default='', max_length=8, blank=True)), - ('job_env', self.gf('jsonfield.fields.JSONField')(default={}, blank=True)), - ('active', self.gf('django.db.models.fields.BooleanField')(default=True)), - ('result_stdout_file', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('created', self.gf('django.db.models.fields.DateTimeField')(default=None)), - ('job_args', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('modified', self.gf('django.db.models.fields.DateTimeField')(default=None)), - ('scm_url', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='project_updates', to=orm['main.Project'])), - ('_result_stdout', self.gf('django.db.models.fields.TextField')(default='', db_column='result_stdout', blank=True)), - )) - db.send_create_signal('main', ['ProjectUpdate']) - - # Adding model 'InventoryUpdate' - db.create_table(u'main_inventoryupdate', ( - ('cancel_flag', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('source_regions', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('license_error', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('celery_task_id', self.gf('django.db.models.fields.CharField')(default='', max_length=100, blank=True)), - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('overwrite', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('source_vars', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('modified_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'inventoryupdate', 'app_label': 'main'}(class)s_modified+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), - ('job_cwd', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('source', self.gf('django.db.models.fields.CharField')(default='', max_length=32, blank=True)), - ('created_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'inventoryupdate', 'app_label': 'main'}(class)s_created+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), - ('failed', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('status', self.gf('django.db.models.fields.CharField')(default='new', max_length=20)), - ('credential', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='inventoryupdates', null=True, to=orm['main.Credential'], blank=True)), - ('description', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('overwrite_vars', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('result_traceback', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('job_env', self.gf('jsonfield.fields.JSONField')(default={}, blank=True)), - ('active', self.gf('django.db.models.fields.BooleanField')(default=True)), - ('result_stdout_file', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('inventory_source', self.gf('django.db.models.fields.related.ForeignKey')(related_name='inventory_updates', to=orm['main.InventorySource'])), - ('created', self.gf('django.db.models.fields.DateTimeField')(default=None)), - ('job_args', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('source_path', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('modified', self.gf('django.db.models.fields.DateTimeField')(default=None)), - ('_result_stdout', self.gf('django.db.models.fields.TextField')(default='', db_column='result_stdout', blank=True)), - )) - db.send_create_signal('main', ['InventoryUpdate']) - - # Adding model 'Job' - db.create_table(u'main_job', ( - ('cancel_flag', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('credential', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobs', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True)), - ('description', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('result_traceback', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('job_type', self.gf('django.db.models.fields.CharField')(max_length=64)), - ('job_tags', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('celery_task_id', self.gf('django.db.models.fields.CharField')(default='', max_length=100, blank=True)), - ('playbook', self.gf('django.db.models.fields.CharField')(default='', max_length=1024)), - ('job_env', self.gf('jsonfield.fields.JSONField')(default={}, blank=True)), - ('active', self.gf('django.db.models.fields.BooleanField')(default=True)), - ('result_stdout_file', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('status', self.gf('django.db.models.fields.CharField')(default='new', max_length=20)), - ('modified_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'job', 'app_label': 'main'}(class)s_modified+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), - ('job_cwd', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('job_template', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobs', on_delete=models.SET_NULL, default=None, to=orm['main.JobTemplate'], blank=True, null=True)), - ('created', self.gf('django.db.models.fields.DateTimeField')(default=None)), - ('extra_vars', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('verbosity', self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True)), - ('job_args', self.gf('django.db.models.fields.TextField')(default='', blank=True)), - ('modified', self.gf('django.db.models.fields.DateTimeField')(default=None)), - ('created_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'job', 'app_label': 'main'}(class)s_created+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), - ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobs', null=True, on_delete=models.SET_NULL, to=orm['main.Project'])), - ('failed', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('inventory', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobs', null=True, on_delete=models.SET_NULL, to=orm['main.Inventory'])), - ('_result_stdout', self.gf('django.db.models.fields.TextField')(default='', db_column='result_stdout', blank=True)), - ('limit', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), - ('forks', self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True)), - ('cloud_credential', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobs_as_cloud_credential+', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True)), - ('launch_type', self.gf('django.db.models.fields.CharField')(default='manual', max_length=20)), - )) - db.send_create_signal('main', ['Job']) - - # Adding field 'Host.last_job' - db.add_column(u'main_host', 'last_job', - self.gf('django.db.models.fields.related.ForeignKey')(related_name='hosts_as_last_job+', on_delete=models.SET_NULL, default=None, to=orm['main.Job'], blank=True, null=True), - keep_default=False) - - # Adding M2M table for field inventory_sources on 'Host' - m2m_table_name = db.shorten_name(u'main_host_inventory_sources') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('host', models.ForeignKey(orm['main.host'], null=False)), - ('inventorysource', models.ForeignKey(orm['main.inventorysource'], null=False)) - )) - db.create_unique(m2m_table_name, ['host_id', 'inventorysource_id']) - - # Adding M2M table for field projects on 'Organization' - m2m_table_name = db.shorten_name(u'main_organization_projects') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('organization', models.ForeignKey(orm['main.organization'], null=False)), - ('project', models.ForeignKey(orm['main.project'], null=False)) - )) - db.create_unique(m2m_table_name, ['organization_id', 'project_id']) - - # Adding M2M table for field projects on 'Team' - m2m_table_name = db.shorten_name(u'main_team_projects') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('team', models.ForeignKey(orm['main.team'], null=False)), - ('project', models.ForeignKey(orm['main.project'], null=False)) - )) - db.create_unique(m2m_table_name, ['team_id', 'project_id']) - - # Adding field 'Permission.project' - db.add_column(u'main_permission', 'project', - self.gf('django.db.models.fields.related.ForeignKey')(related_name='permissions', null=True, to=orm['main.Project'], on_delete=models.SET_NULL, blank=True), - keep_default=False) - - # Adding field 'JobHostSummary.job' - db.add_column(u'main_jobhostsummary', 'job', - self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='job_host_summaries', to=orm['main.Job']), - keep_default=False) - - - # Changing field 'JobHostSummary.new_job' - db.alter_column(u'main_jobhostsummary', 'new_job_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['main.JobNew'])) - # Adding unique constraint on 'JobHostSummary', fields ['job', 'host'] - db.create_unique(u'main_jobhostsummary', ['job_id', 'host_id']) - - # Adding M2M table for field inventory_sources on 'Group' - m2m_table_name = db.shorten_name(u'main_group_inventory_sources') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('group', models.ForeignKey(orm['main.group'], null=False)), - ('inventorysource', models.ForeignKey(orm['main.inventorysource'], null=False)) - )) - db.create_unique(m2m_table_name, ['group_id', 'inventorysource_id']) - - # Adding field 'JobEvent.job' - db.add_column(u'main_jobevent', 'job', - self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='job_events', to=orm['main.Job']), - keep_default=False) - - - # Changing field 'JobEvent.new_job' - db.alter_column(u'main_jobevent', 'new_job_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['main.JobNew'])) - # Adding M2M table for field job_template on 'ActivityStream' - m2m_table_name = db.shorten_name(u'main_activitystream_job_template') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), - ('jobtemplate', models.ForeignKey(orm['main.jobtemplate'], null=False)) - )) - db.create_unique(m2m_table_name, ['activitystream_id', 'jobtemplate_id']) - - # Adding M2M table for field inventory_update on 'ActivityStream' - m2m_table_name = db.shorten_name(u'main_activitystream_inventory_update') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), - ('inventoryupdate', models.ForeignKey(orm['main.inventoryupdate'], null=False)) - )) - db.create_unique(m2m_table_name, ['activitystream_id', 'inventoryupdate_id']) - - # Adding M2M table for field job on 'ActivityStream' - m2m_table_name = db.shorten_name(u'main_activitystream_job') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), - ('job', models.ForeignKey(orm['main.job'], null=False)) - )) - db.create_unique(m2m_table_name, ['activitystream_id', 'job_id']) - - # Adding M2M table for field project_update on 'ActivityStream' - m2m_table_name = db.shorten_name(u'main_activitystream_project_update') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), - ('projectupdate', models.ForeignKey(orm['main.projectupdate'], null=False)) - )) - db.create_unique(m2m_table_name, ['activitystream_id', 'projectupdate_id']) - - # Adding M2M table for field inventory_source on 'ActivityStream' - m2m_table_name = db.shorten_name(u'main_activitystream_inventory_source') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), - ('inventorysource', models.ForeignKey(orm['main.inventorysource'], null=False)) - )) - db.create_unique(m2m_table_name, ['activitystream_id', 'inventorysource_id']) - - # Adding M2M table for field project on 'ActivityStream' - m2m_table_name = db.shorten_name(u'main_activitystream_project') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), - ('project', models.ForeignKey(orm['main.project'], null=False)) - )) - db.create_unique(m2m_table_name, ['activitystream_id', 'project_id']) + "Write your backwards methods here." + # FIXME: Would like to have this, but not required. + raise NotImplementedError() models = { u'auth.group': { @@ -422,6 +350,10 @@ class Migration(SchemaMigration): 'host': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Host']", 'symmetrical': 'False', 'blank': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'inventory': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Inventory']", 'symmetrical': 'False', 'blank': 'True'}), + 'inventory_source': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.InventorySource']", 'symmetrical': 'False', 'blank': 'True'}), + 'inventory_update': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.InventoryUpdate']", 'symmetrical': 'False', 'blank': 'True'}), + 'job': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Job']", 'symmetrical': 'False', 'blank': 'True'}), + 'job_template': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.JobTemplate']", 'symmetrical': 'False', 'blank': 'True'}), 'new_inventory_source': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.InventorySourceNew']", 'symmetrical': 'False', 'blank': 'True'}), 'new_inventory_update': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.InventoryUpdateNew']", 'symmetrical': 'False', 'blank': 'True'}), 'new_job': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.JobNew']", 'symmetrical': 'False', 'blank': 'True'}), @@ -434,6 +366,9 @@ class Migration(SchemaMigration): 'operation': ('django.db.models.fields.CharField', [], {'max_length': '13'}), 'organization': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Organization']", 'symmetrical': 'False', 'blank': 'True'}), 'permission': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'project': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Project']", 'symmetrical': 'False', 'blank': 'True'}), + 'project_update': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.ProjectUpdate']", 'symmetrical': 'False', 'blank': 'True'}), + 'schedule': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Schedule']", 'symmetrical': 'False', 'blank': 'True'}), 'team': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Team']", 'symmetrical': 'False', 'blank': 'True'}), 'timestamp': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), 'unified_job': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'activity_stream_as_unified_job+'", 'blank': 'True', 'to': "orm['main.UnifiedJob']"}), @@ -463,12 +398,14 @@ class Migration(SchemaMigration): 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), 'password': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'ssh_key_data': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'ssh_key_path': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'ssh_key_unlock': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'sudo_password': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'sudo_username': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'team': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'credentials'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Team']"}), 'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'credentials'", 'null': 'True', 'blank': 'True', 'to': u"orm['auth.User']"}), - 'username': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}) + 'username': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'vault_password': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}) }, 'main.group': { 'Meta': {'unique_together': "(('name', 'inventory'),)", 'object_name': 'Group'}, @@ -483,10 +420,11 @@ class Migration(SchemaMigration): 'hosts_with_active_failures': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'groups'", 'to': "orm['main.Inventory']"}), + 'inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'groups'", 'symmetrical': 'False', 'to': "orm['main.InventorySource']"}), 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'group\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), - 'new_inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'groups'", 'blank': 'True', 'to': "orm['main.InventorySourceNew']"}), + 'new_inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'groups'", 'symmetrical': 'False', 'to': "orm['main.InventorySourceNew']"}), 'parents': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'children'", 'blank': 'True', 'to': "orm['main.Group']"}), 'total_groups': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), 'total_hosts': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), @@ -504,12 +442,14 @@ class Migration(SchemaMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'instance_id': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}), 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'hosts'", 'to': "orm['main.Inventory']"}), + 'inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'hosts'", 'symmetrical': 'False', 'to': "orm['main.InventorySource']"}), + 'last_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'hosts_as_last_job+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Job']"}), 'last_job_host_summary': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'hosts_as_last_job_summary+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.JobHostSummary']", 'blank': 'True', 'null': 'True'}), 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'host\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), - 'new_inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'hosts'", 'blank': 'True', 'to': "orm['main.InventorySourceNew']"}), - 'new_last_job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'hosts_as_last_job+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.JobNew']", 'blank': 'True', 'null': 'True'}), + 'new_inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'hosts'", 'symmetrical': 'False', 'to': "orm['main.InventorySourceNew']"}), + 'new_last_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'hosts_as_last_job+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.JobNew']"}), 'variables': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}) }, 'main.inventory': { @@ -533,10 +473,36 @@ class Migration(SchemaMigration): 'total_inventory_sources': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), 'variables': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}) }, + 'main.inventorysource': { + 'Meta': {'object_name': 'InventorySource'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'inventorysource\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventorysources'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'current_update': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventory_source_as_current_update+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.InventoryUpdate']"}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'group': ('awx.main.fields.AutoOneToOneField', [], {'default': 'None', 'related_name': "'inventory_source'", 'unique': 'True', 'null': 'True', 'to': "orm['main.Group']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventory_sources'", 'null': 'True', 'to': "orm['main.Inventory']"}), + 'last_update': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventory_source_as_last_update+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.InventoryUpdate']"}), + 'last_update_failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_updated': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'inventorysource\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'overwrite': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'overwrite_vars': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'source': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '32', 'blank': 'True'}), + 'source_path': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'source_regions': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'source_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'status': ('django.db.models.fields.CharField', [], {'default': "'none'", 'max_length': '32'}), + 'update_cache_timeout': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'update_on_launch': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, 'main.inventorysourcenew': { 'Meta': {'object_name': 'InventorySourceNew', '_ormbases': ['main.UnifiedJobTemplate']}, - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventorysourcenews'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), - 'group': ('awx.main.fields.AutoOneToOneField', [], {'related_name': "'new_inventory_source'", 'null': 'True', 'default': 'None', 'to': "orm['main.Group']", 'blank': 'True', 'unique': 'True'}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventorysourcenews'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'group': ('awx.main.fields.AutoOneToOneField', [], {'default': 'None', 'related_name': "'new_inventory_source'", 'unique': 'True', 'null': 'True', 'to': "orm['main.Group']"}), 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'new_inventory_sources'", 'null': 'True', 'to': "orm['main.Inventory']"}), 'overwrite': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'overwrite_vars': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), @@ -548,9 +514,39 @@ class Migration(SchemaMigration): 'update_cache_timeout': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), 'update_on_launch': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) }, + 'main.inventoryupdate': { + 'Meta': {'object_name': 'InventoryUpdate'}, + '_result_stdout': ('django.db.models.fields.TextField', [], {'default': "''", 'db_column': "'result_stdout'", 'blank': 'True'}), + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'cancel_flag': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'celery_task_id': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'inventoryupdate\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventoryupdates'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'inventory_source': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventory_updates'", 'to': "orm['main.InventorySource']"}), + 'job_args': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'job_cwd': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'job_env': ('jsonfield.fields.JSONField', [], {'default': '{}', 'blank': 'True'}), + 'license_error': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'inventoryupdate\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'overwrite': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'overwrite_vars': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'result_stdout_file': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'result_traceback': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'source': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '32', 'blank': 'True'}), + 'source_path': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'source_regions': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'source_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'start_args': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'status': ('django.db.models.fields.CharField', [], {'default': "'new'", 'max_length': '20'}) + }, 'main.inventoryupdatenew': { 'Meta': {'object_name': 'InventoryUpdateNew', '_ormbases': ['main.UnifiedJob']}, - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventoryupdatenews'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventoryupdatenews'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), 'inventory_source': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventory_updates'", 'to': "orm['main.InventorySourceNew']"}), 'license_error': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'overwrite': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), @@ -561,6 +557,41 @@ class Migration(SchemaMigration): 'source_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), u'unifiedjob_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJob']", 'unique': 'True', 'primary_key': 'True'}) }, + 'main.job': { + 'Meta': {'object_name': 'Job'}, + '_result_stdout': ('django.db.models.fields.TextField', [], {'default': "''", 'db_column': "'result_stdout'", 'blank': 'True'}), + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'cancel_flag': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'celery_task_id': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}), + 'cloud_credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs_as_cloud_credential+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'job\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'extra_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'forks': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'hosts': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'jobs'", 'symmetrical': 'False', 'through': "orm['main.JobHostSummary']", 'to': "orm['main.Host']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Inventory']"}), + 'job_args': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'job_cwd': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'job_env': ('jsonfield.fields.JSONField', [], {'default': '{}', 'blank': 'True'}), + 'job_tags': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'job_template': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.JobTemplate']", 'blank': 'True', 'null': 'True'}), + 'job_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'launch_type': ('django.db.models.fields.CharField', [], {'default': "'manual'", 'max_length': '20'}), + 'limit': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'job\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'playbook': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Project']"}), + 'result_stdout_file': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'result_traceback': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'start_args': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'status': ('django.db.models.fields.CharField', [], {'default': "'new'", 'max_length': '20'}), + 'verbosity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}) + }, 'main.jobevent': { 'Meta': {'ordering': "('pk',)", 'object_name': 'JobEvent'}, 'changed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), @@ -568,18 +599,19 @@ class Migration(SchemaMigration): 'event': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'event_data': ('jsonfield.fields.JSONField', [], {'default': '{}', 'blank': 'True'}), 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'host': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_events_as_primary_host'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Host']", 'blank': 'True', 'null': 'True'}), - 'hosts': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'job_events'", 'blank': 'True', 'to': "orm['main.Host']"}), + 'host': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'job_events_as_primary_host'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Host']"}), + 'hosts': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'job_events'", 'symmetrical': 'False', 'to': "orm['main.Host']"}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'job_events'", 'null': 'True', 'to': "orm['main.Job']"}), 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), - 'new_job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'new_job_events'", 'to': "orm['main.JobNew']"}), - 'parent': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'children'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.JobEvent']", 'blank': 'True', 'null': 'True'}), - 'play': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - 'role': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - 'task': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}) + 'new_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'new_job_events'", 'null': 'True', 'to': "orm['main.JobNew']"}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'children'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.JobEvent']"}), + 'play': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), + 'role': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), + 'task': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}) }, 'main.jobhostsummary': { - 'Meta': {'ordering': "('-pk',)", 'unique_together': "[('new_job', 'host')]", 'object_name': 'JobHostSummary'}, + 'Meta': {'ordering': "('-pk',)", 'unique_together': "[('job', 'host'), ('new_job', 'host')]", 'object_name': 'JobHostSummary'}, 'changed': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'dark': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), @@ -587,8 +619,9 @@ class Migration(SchemaMigration): 'failures': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), 'host': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_host_summaries'", 'to': "orm['main.Host']"}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'job_host_summaries'", 'null': 'True', 'to': "orm['main.Job']"}), 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), - 'new_job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'new_job_host_summaries'", 'to': "orm['main.JobNew']"}), + 'new_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'new_job_host_summaries'", 'null': 'True', 'to': "orm['main.JobNew']"}), 'ok': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), 'processed': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), 'skipped': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}) @@ -599,7 +632,7 @@ class Migration(SchemaMigration): 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobnews'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), 'extra_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'forks': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), - 'hosts': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'jobnews'", 'blank': 'True', 'through': "orm['main.JobHostSummary']", 'to': "orm['main.Host']"}), + 'hosts': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'jobnews'", 'symmetrical': 'False', 'through': "orm['main.JobHostSummary']", 'to': "orm['main.Host']"}), 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobnews'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Inventory']"}), 'job_tags': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'job_template': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.JobTemplateNew']", 'blank': 'True', 'null': 'True'}), @@ -610,6 +643,29 @@ class Migration(SchemaMigration): u'unifiedjob_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJob']", 'unique': 'True', 'primary_key': 'True'}), 'verbosity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}) }, + 'main.jobtemplate': { + 'Meta': {'object_name': 'JobTemplate'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'cloud_credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobtemplates_as_cloud_credential+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'jobtemplate\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobtemplates'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'extra_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'forks': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'host_config_key': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobtemplates'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Inventory']"}), + 'job_tags': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'job_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'limit': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'jobtemplate\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}), + 'playbook': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_templates'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Project']"}), + 'verbosity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}) + }, 'main.jobtemplatenew': { 'Meta': {'object_name': 'JobTemplateNew', '_ormbases': ['main.UnifiedJobTemplate']}, 'cloud_credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobtemplatenews_as_cloud_credential+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), @@ -638,6 +694,7 @@ class Migration(SchemaMigration): 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'organization\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}), 'new_projects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'organizations'", 'blank': 'True', 'to': "orm['main.ProjectNew']"}), + 'projects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'organizations'", 'blank': 'True', 'to': "orm['main.Project']"}), 'users': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'organizations'", 'blank': 'True', 'to': u"orm['auth.User']"}) }, 'main.permission': { @@ -653,6 +710,7 @@ class Migration(SchemaMigration): 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), 'new_project': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'permissions'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.ProjectNew']"}), 'permission_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'permissions'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Project']"}), 'team': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'permissions'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Team']"}), 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'permissions'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}) }, @@ -664,9 +722,35 @@ class Migration(SchemaMigration): 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'user': ('awx.main.fields.AutoOneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': u"orm['auth.User']"}) }, + 'main.project': { + 'Meta': {'object_name': 'Project'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'project\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'current_update': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'project_as_current_update+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.ProjectUpdate']"}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_update': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'project_as_last_update+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.ProjectUpdate']"}), + 'last_update_failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_updated': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), + 'local_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'project\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}), + 'scm_branch': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '256', 'blank': 'True'}), + 'scm_clean': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'scm_delete_on_next_update': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'scm_delete_on_update': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'scm_type': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '8', 'blank': 'True'}), + 'scm_update_cache_timeout': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'scm_update_on_launch': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'scm_url': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'status': ('django.db.models.fields.CharField', [], {'default': "'ok'", 'max_length': '32', 'null': 'True'}) + }, 'main.projectnew': { 'Meta': {'object_name': 'ProjectNew', '_ormbases': ['main.UnifiedJobTemplate']}, - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'projectnews'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projectnews'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), 'local_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), 'scm_branch': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '256', 'blank': 'True'}), 'scm_clean': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), @@ -678,9 +762,38 @@ class Migration(SchemaMigration): 'scm_url': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), u'unifiedjobtemplate_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJobTemplate']", 'unique': 'True', 'primary_key': 'True'}) }, + 'main.projectupdate': { + 'Meta': {'object_name': 'ProjectUpdate'}, + '_result_stdout': ('django.db.models.fields.TextField', [], {'default': "''", 'db_column': "'result_stdout'", 'blank': 'True'}), + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'cancel_flag': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'celery_task_id': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'projectupdate\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projectupdates'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'job_args': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'job_cwd': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'job_env': ('jsonfield.fields.JSONField', [], {'default': '{}', 'blank': 'True'}), + 'local_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'projectupdate\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'project_updates'", 'to': "orm['main.Project']"}), + 'result_stdout_file': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'result_traceback': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'scm_branch': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '256', 'blank': 'True'}), + 'scm_clean': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'scm_delete_on_update': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'scm_type': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '8', 'blank': 'True'}), + 'scm_url': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'start_args': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'status': ('django.db.models.fields.CharField', [], {'default': "'new'", 'max_length': '20'}) + }, 'main.projectupdatenew': { 'Meta': {'object_name': 'ProjectUpdateNew', '_ormbases': ['main.UnifiedJob']}, - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'projectupdatenews'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projectupdatenews'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), 'local_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'project_updates'", 'to': "orm['main.ProjectNew']"}), 'scm_branch': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '256', 'blank': 'True'}), @@ -698,12 +811,14 @@ class Migration(SchemaMigration): 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'dtend': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), 'dtstart': ('django.db.models.fields.DateTimeField', [], {}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'job_template': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'schedules'", 'to': "orm['main.UnifiedJobTemplate']"}), 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'schedule\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}), - 'rrule': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + 'next_run': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), + 'rrule': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'unified_job_template': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'schedules'", 'to': "orm['main.UnifiedJobTemplate']"}) }, 'main.team': { 'Meta': {'unique_together': "[('organization', 'name')]", 'object_name': 'Team'}, @@ -717,6 +832,7 @@ class Migration(SchemaMigration): 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), 'new_projects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'teams'", 'blank': 'True', 'to': "orm['main.ProjectNew']"}), 'organization': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'teams'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Organization']"}), + 'projects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'teams'", 'blank': 'True', 'to': "orm['main.Project']"}), 'users': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'teams'", 'blank': 'True', 'to': u"orm['auth.User']"}) }, 'main.unifiedjob': { @@ -726,7 +842,7 @@ class Migration(SchemaMigration): 'celery_task_id': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}), 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'unifiedjob\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), - 'depends_on': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'depends_on_rel_+'", 'to': "orm['main.UnifiedJob']"}), + 'dependent_jobs': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'dependent_jobs_rel_+'", 'to': "orm['main.UnifiedJob']"}), 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'elapsed': ('django.db.models.fields.DecimalField', [], {'max_digits': '12', 'decimal_places': '3'}), 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), @@ -738,33 +854,35 @@ class Migration(SchemaMigration): 'launch_type': ('django.db.models.fields.CharField', [], {'default': "'manual'", 'max_length': '20'}), 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'unifiedjob\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), 'old_pk': ('django.db.models.fields.PositiveIntegerField', [], {'default': 'None', 'null': 'True'}), 'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_main.unifiedjob_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}), 'result_stdout_file': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'result_stdout_text': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'result_traceback': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), - 'schedule': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['main.Schedule']", 'null': 'True'}), + 'schedule': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['main.Schedule']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), 'start_args': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'started': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), 'status': ('django.db.models.fields.CharField', [], {'default': "'new'", 'max_length': '20'}), - 'unified_job_template': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjob_unified_jobs'", 'null': 'True', 'to': "orm['main.UnifiedJobTemplate']"}) + 'unified_job_template': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjob_unified_jobs'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.UnifiedJobTemplate']"}) }, 'main.unifiedjobtemplate': { 'Meta': {'unique_together': "[('polymorphic_ctype', 'name')]", 'object_name': 'UnifiedJobTemplate'}, 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'unifiedjobtemplate\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), - 'current_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjobtemplate_as_current_job+'", 'null': 'True', 'to': "orm['main.UnifiedJob']"}), + 'current_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjobtemplate_as_current_job+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.UnifiedJob']"}), 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'has_schedules': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'last_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjobtemplate_as_last_job+'", 'null': 'True', 'to': "orm['main.UnifiedJob']"}), + 'last_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjobtemplate_as_last_job+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.UnifiedJob']"}), 'last_job_failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'last_job_run': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'unifiedjobtemplate\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), 'next_job_run': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), + 'next_schedule': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjobtemplate_as_next_schedule+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Schedule']"}), 'old_pk': ('django.db.models.fields.PositiveIntegerField', [], {'default': 'None', 'null': 'True'}), 'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_main.unifiedjobtemplate_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}), 'status': ('django.db.models.fields.CharField', [], {'default': "'ok'", 'max_length': '32'}) @@ -784,4 +902,5 @@ class Migration(SchemaMigration): } } - complete_apps = ['main'] \ No newline at end of file + complete_apps = ['main'] + symmetrical = True diff --git a/awx/main/migrations/0037_v148_changes.py b/awx/main/migrations/0037_v148_changes.py index fb8a90b956..587f471430 100644 --- a/awx/main/migrations/0037_v148_changes.py +++ b/awx/main/migrations/0037_v148_changes.py @@ -6,81 +6,375 @@ from django.db import models class Migration(SchemaMigration): - ''' - Rename tables/columns to be consistent with model/field names. - ''' def forwards(self, orm): - db.rename_table(u'main_projectnew', 'main_project') - db.rename_table(u'main_projectupdatenew', 'main_projectupdate') - db.rename_table(u'main_inventorysourcenew', 'main_inventorysource') - db.rename_table(u'main_inventoryupdatenew', 'main_inventoryupdate') - db.rename_table(u'main_jobtemplatenew', 'main_jobtemplate') - db.rename_table(u'main_jobnew', 'main_job') + # Removing unique constraint on 'JobHostSummary', fields ['job', 'host'] + db.delete_unique(u'main_jobhostsummary', ['job_id', 'host_id']) - db.rename_table(db.shorten_name(u'main_team_new_projects'), db.shorten_name(u'main_team_projects')) - db.rename_column(db.shorten_name(u'main_team_projects'), 'projectnew_id', 'project_id') - db.rename_table(db.shorten_name(u'main_organization_new_projects'), db.shorten_name(u'main_organization_projects')) - db.rename_column(db.shorten_name(u'main_organization_projects'), 'projectnew_id', 'project_id') - db.rename_column(u'main_permission', 'new_project_id', 'project_id') + # Deleting model 'JobTemplate' + db.delete_table(u'main_jobtemplate') - db.rename_column(u'main_host', 'new_last_job_id', 'last_job_id') - db.rename_table(db.shorten_name(u'main_host_new_inventory_sources'), db.shorten_name(u'main_host_inventory_sources')) - db.rename_column(db.shorten_name(u'main_host_inventory_sources'), 'inventorysourcenew_id', 'inventorysource_id') - db.rename_table(db.shorten_name(u'main_group_new_inventory_sources'), db.shorten_name(u'main_group_inventory_sources')) - db.rename_column(db.shorten_name(u'main_group_inventory_sources'), 'inventorysourcenew_id', 'inventorysource_id') - - db.rename_column(u'main_jobhostsummary', 'new_job_id', 'job_id') - db.rename_column(u'main_jobevent', 'new_job_id', 'job_id') + # Deleting model 'InventorySource' + db.delete_table(u'main_inventorysource') + + # Deleting model 'Project' + db.delete_table(u'main_project') + + # Deleting model 'ProjectUpdate' + db.delete_table(u'main_projectupdate') + + # Deleting model 'InventoryUpdate' + db.delete_table(u'main_inventoryupdate') + + # Deleting model 'Job' + db.delete_table(u'main_job') + + # Deleting field 'Host.last_job' + db.delete_column(u'main_host', 'last_job_id') + + # Removing M2M table for field inventory_sources on 'Host' + db.delete_table(db.shorten_name(u'main_host_inventory_sources')) + + # Removing M2M table for field projects on 'Organization' + db.delete_table(db.shorten_name(u'main_organization_projects')) + + # Removing M2M table for field projects on 'Team' + db.delete_table(db.shorten_name(u'main_team_projects')) + + # Deleting field 'Permission.project' + db.delete_column(u'main_permission', 'project_id') + + # Deleting field 'JobHostSummary.job' + db.delete_column(u'main_jobhostsummary', 'job_id') + + # Changing field 'JobHostSummary.new_job' + db.alter_column(u'main_jobhostsummary', 'new_job_id', self.gf('django.db.models.fields.related.ForeignKey')(default=None, to=orm['main.JobNew'])) + + # Removing M2M table for field inventory_sources on 'Group' + db.delete_table(db.shorten_name(u'main_group_inventory_sources')) + + # Deleting field 'JobEvent.job' + db.delete_column(u'main_jobevent', 'job_id') + + # Changing field 'JobEvent.new_job' + db.alter_column(u'main_jobevent', 'new_job_id', self.gf('django.db.models.fields.related.ForeignKey')(default=None, to=orm['main.JobNew'])) + # Removing M2M table for field inventory_update on 'ActivityStream' + db.delete_table(db.shorten_name(u'main_activitystream_inventory_update')) + + # Removing M2M table for field project_update on 'ActivityStream' + db.delete_table(db.shorten_name(u'main_activitystream_project_update')) + + # Removing M2M table for field inventory_source on 'ActivityStream' + db.delete_table(db.shorten_name(u'main_activitystream_inventory_source')) + + # Removing M2M table for field job_template on 'ActivityStream' + db.delete_table(db.shorten_name(u'main_activitystream_job_template')) + + # Removing M2M table for field job on 'ActivityStream' + db.delete_table(db.shorten_name(u'main_activitystream_job')) + + # Removing M2M table for field project on 'ActivityStream' + db.delete_table(db.shorten_name(u'main_activitystream_project')) - db.rename_table(db.shorten_name(u'main_activitystream_new_project'), db.shorten_name(u'main_activitystream_project')) - db.rename_column(db.shorten_name(u'main_activitystream_project'), 'projectnew_id', 'project_id') - db.rename_table(db.shorten_name(u'main_activitystream_new_project_update'), db.shorten_name(u'main_activitystream_project_update')) - db.rename_column(db.shorten_name(u'main_activitystream_project_update'), 'projectupdatenew_id', 'projectupdate_id') - db.rename_table(db.shorten_name(u'main_activitystream_new_inventory_source'), db.shorten_name(u'main_activitystream_inventory_source')) - db.rename_column(db.shorten_name(u'main_activitystream_inventory_source'), 'inventorysourcenew_id', 'inventorysource_id') - db.rename_table(db.shorten_name(u'main_activitystream_new_inventory_update'), db.shorten_name(u'main_activitystream_inventory_update')) - db.rename_column(db.shorten_name(u'main_activitystream_inventory_update'), 'inventoryupdatenew_id', 'inventoryupdate_id') - db.rename_table(db.shorten_name(u'main_activitystream_new_job_template'), db.shorten_name(u'main_activitystream_job_template')) - db.rename_column(db.shorten_name(u'main_activitystream_job_template'), 'jobtemplatenew_id', 'jobtemplate_id') - db.rename_table(db.shorten_name(u'main_activitystream_new_job'), db.shorten_name(u'main_activitystream_job')) - db.rename_column(db.shorten_name(u'main_activitystream_job'), 'jobnew_id', 'job_id') def backwards(self, orm): - db.rename_column(db.shorten_name(u'main_activitystream_job'), 'job_id', 'jobnew_id') - db.rename_table(db.shorten_name(u'main_activitystream_job'), db.shorten_name(u'main_activitystream_new_job')) - db.rename_column(db.shorten_name(u'main_activitystream_job_template'), 'jobtemplate_id', 'jobtemplatenew_id') - db.rename_table(db.shorten_name(u'main_activitystream_job_template'), db.shorten_name(u'main_activitystream_new_job_template')) - db.rename_column(db.shorten_name(u'main_activitystream_inventory_update'), 'inventoryupdate_id', 'inventoryupdatenew_id') - db.rename_table(db.shorten_name(u'main_activitystream_inventory_update'), db.shorten_name(u'main_activitystream_new_inventory_update')) - db.rename_column(db.shorten_name(u'main_activitystream_inventory_source'), 'inventorysource_id', 'inventorysourcenew_id') - db.rename_table(db.shorten_name(u'main_activitystream_inventory_source'), db.shorten_name(u'main_activitystream_new_inventory_source')) - db.rename_column(db.shorten_name(u'main_activitystream_project_update'), 'projectupdate_id', 'projectupdatenew_id') - db.rename_table(db.shorten_name(u'main_activitystream_project_update'), db.shorten_name(u'main_activitystream_new_project_update')) - db.rename_column(db.shorten_name(u'main_activitystream_project'), 'project_id', 'projectnew_id') - db.rename_table(db.shorten_name(u'main_activitystream_project'), db.shorten_name(u'main_activitystream_new_project')) + # Adding model 'JobTemplate' + db.create_table(u'main_jobtemplate', ( + ('credential', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobtemplates', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True)), + ('modified_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'jobtemplate', 'app_label': 'main'}(class)s_modified+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), + ('description', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('created', self.gf('django.db.models.fields.DateTimeField')(default=None)), + ('extra_vars', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('verbosity', self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True)), + ('job_tags', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('job_type', self.gf('django.db.models.fields.CharField')(max_length=64)), + ('modified', self.gf('django.db.models.fields.DateTimeField')(default=None)), + ('created_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'jobtemplate', 'app_label': 'main'}(class)s_created+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='job_templates', null=True, on_delete=models.SET_NULL, to=orm['main.Project'])), + ('host_config_key', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('limit', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('inventory', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobtemplates', null=True, on_delete=models.SET_NULL, to=orm['main.Inventory'])), + ('active', self.gf('django.db.models.fields.BooleanField')(default=True)), + ('forks', self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True)), + ('playbook', self.gf('django.db.models.fields.CharField')(default='', max_length=1024)), + ('cloud_credential', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobtemplates_as_cloud_credential+', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=512, unique=True)), + )) + db.send_create_signal('main', ['JobTemplate']) - db.rename_column(u'main_jobevent', 'job_id', 'new_job_id') - db.rename_column(u'main_jobhostsummary', 'job_id', 'new_job_id') + # Adding model 'InventorySource' + db.create_table(u'main_inventorysource', ( + ('last_updated', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)), + ('source_regions', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('current_update', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='inventory_source_as_current_update+', null=True, on_delete=models.SET_NULL, to=orm['main.InventoryUpdate'])), + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('overwrite', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('source_vars', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('group', self.gf('awx.main.fields.AutoOneToOneField')(default=None, related_name='inventory_source', unique=True, null=True, to=orm['main.Group'])), + ('last_update_failed', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('created_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'inventorysource', 'app_label': 'main'}(class)s_created+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), + ('last_update', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='inventory_source_as_last_update+', null=True, on_delete=models.SET_NULL, to=orm['main.InventoryUpdate'])), + ('source', self.gf('django.db.models.fields.CharField')(default='', max_length=32, blank=True)), + ('inventory', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='inventory_sources', null=True, to=orm['main.Inventory'])), + ('update_cache_timeout', self.gf('django.db.models.fields.PositiveIntegerField')(default=0)), + ('status', self.gf('django.db.models.fields.CharField')(default='none', max_length=32)), + ('credential', self.gf('django.db.models.fields.related.ForeignKey')(related_name='inventorysources', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True)), + ('description', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('overwrite_vars', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('active', self.gf('django.db.models.fields.BooleanField')(default=True)), + ('modified_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'inventorysource', 'app_label': 'main'}(class)s_modified+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), + ('update_on_launch', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('created', self.gf('django.db.models.fields.DateTimeField')(default=None)), + ('source_path', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('modified', self.gf('django.db.models.fields.DateTimeField')(default=None)), + )) + db.send_create_signal('main', ['InventorySource']) - db.rename_column(db.shorten_name(u'main_group_inventory_sources'), 'inventorysource_id', 'inventorysourcenew_id') - db.rename_table(db.shorten_name(u'main_group_inventory_sources'), db.shorten_name(u'main_group_new_inventory_sources')) - db.rename_column(db.shorten_name(u'main_host_inventory_sources'), 'inventorysource_id', 'inventorysourcenew_id') - db.rename_table(db.shorten_name(u'main_host_inventory_sources'), db.shorten_name(u'main_host_new_inventory_sources')) - db.rename_column(u'main_host', 'last_job_id', 'new_last_job_id') + # Adding model 'Project' + db.create_table(u'main_project', ( + ('scm_branch', self.gf('django.db.models.fields.CharField')(default='', max_length=256, blank=True)), + ('scm_update_cache_timeout', self.gf('django.db.models.fields.PositiveIntegerField')(default=0)), + ('scm_clean', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('scm_delete_on_update', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('current_update', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='project_as_current_update+', null=True, on_delete=models.SET_NULL, to=orm['main.ProjectUpdate'])), + ('last_updated', self.gf('django.db.models.fields.DateTimeField')(default=None, null=True)), + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('modified_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'project', 'app_label': 'main'}(class)s_modified+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), + ('last_update_failed', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('created_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'project', 'app_label': 'main'}(class)s_created+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), + ('last_update', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='project_as_last_update+', null=True, on_delete=models.SET_NULL, to=orm['main.ProjectUpdate'])), + ('local_path', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)), + ('scm_delete_on_next_update', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('status', self.gf('django.db.models.fields.CharField')(default='ok', max_length=32, null=True)), + ('credential', self.gf('django.db.models.fields.related.ForeignKey')(related_name='projects', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True)), + ('description', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('scm_type', self.gf('django.db.models.fields.CharField')(default='', max_length=8, blank=True)), + ('scm_update_on_launch', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('active', self.gf('django.db.models.fields.BooleanField')(default=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=512, unique=True)), + ('created', self.gf('django.db.models.fields.DateTimeField')(default=None)), + ('modified', self.gf('django.db.models.fields.DateTimeField')(default=None)), + ('scm_url', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + )) + db.send_create_signal('main', ['Project']) - db.rename_column(u'main_permission', 'project_id', 'new_project_id') - db.rename_column(db.shorten_name(u'main_organization_projects'), 'project_id', 'projectnew_id') - db.rename_table(db.shorten_name(u'main_organization_projects'), db.shorten_name(u'main_organization_new_projects')) - db.rename_column(db.shorten_name(u'main_team_projects'), 'project_id', 'projectnew_id') - db.rename_table(db.shorten_name(u'main_team_projects'), db.shorten_name(u'main_team_new_projects')) - - db.rename_table(u'main_job', 'main_jobnew') - db.rename_table(u'main_jobtemplate', 'main_jobtemplatenew') - db.rename_table(u'main_inventoryupdate', 'main_inventoryupdatenew') - db.rename_table(u'main_inventorysource', 'main_inventorysourcenew') - db.rename_table(u'main_projectupdate', 'main_projectupdatenew') - db.rename_table(u'main_project', 'main_projectnew') + # Adding model 'ProjectUpdate' + db.create_table(u'main_projectupdate', ( + ('cancel_flag', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('scm_branch', self.gf('django.db.models.fields.CharField')(default='', max_length=256, blank=True)), + ('scm_clean', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('scm_delete_on_update', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('start_args', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('celery_task_id', self.gf('django.db.models.fields.CharField')(default='', max_length=100, blank=True)), + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('modified_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'projectupdate', 'app_label': 'main'}(class)s_modified+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), + ('job_cwd', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('created_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'projectupdate', 'app_label': 'main'}(class)s_created+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), + ('failed', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('local_path', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)), + ('status', self.gf('django.db.models.fields.CharField')(default='new', max_length=20)), + ('credential', self.gf('django.db.models.fields.related.ForeignKey')(related_name='projectupdates', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True)), + ('description', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('result_traceback', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('scm_type', self.gf('django.db.models.fields.CharField')(default='', max_length=8, blank=True)), + ('job_env', self.gf('jsonfield.fields.JSONField')(default={}, blank=True)), + ('active', self.gf('django.db.models.fields.BooleanField')(default=True)), + ('result_stdout_file', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('created', self.gf('django.db.models.fields.DateTimeField')(default=None)), + ('job_args', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('modified', self.gf('django.db.models.fields.DateTimeField')(default=None)), + ('scm_url', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='project_updates', to=orm['main.Project'])), + ('_result_stdout', self.gf('django.db.models.fields.TextField')(default='', db_column='result_stdout', blank=True)), + )) + db.send_create_signal('main', ['ProjectUpdate']) + + # Adding model 'InventoryUpdate' + db.create_table(u'main_inventoryupdate', ( + ('cancel_flag', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('source_regions', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('license_error', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('start_args', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('celery_task_id', self.gf('django.db.models.fields.CharField')(default='', max_length=100, blank=True)), + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('overwrite', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('source_vars', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('modified_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'inventoryupdate', 'app_label': 'main'}(class)s_modified+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), + ('job_cwd', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('source', self.gf('django.db.models.fields.CharField')(default='', max_length=32, blank=True)), + ('created_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'inventoryupdate', 'app_label': 'main'}(class)s_created+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), + ('failed', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('status', self.gf('django.db.models.fields.CharField')(default='new', max_length=20)), + ('credential', self.gf('django.db.models.fields.related.ForeignKey')(related_name='inventoryupdates', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True)), + ('description', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('overwrite_vars', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('result_traceback', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('job_env', self.gf('jsonfield.fields.JSONField')(default={}, blank=True)), + ('active', self.gf('django.db.models.fields.BooleanField')(default=True)), + ('result_stdout_file', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('inventory_source', self.gf('django.db.models.fields.related.ForeignKey')(related_name='inventory_updates', to=orm['main.InventorySource'])), + ('created', self.gf('django.db.models.fields.DateTimeField')(default=None)), + ('job_args', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('source_path', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('modified', self.gf('django.db.models.fields.DateTimeField')(default=None)), + ('_result_stdout', self.gf('django.db.models.fields.TextField')(default='', db_column='result_stdout', blank=True)), + )) + db.send_create_signal('main', ['InventoryUpdate']) + + # Adding model 'Job' + db.create_table(u'main_job', ( + ('cancel_flag', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('credential', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobs', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True)), + ('description', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('result_traceback', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('job_type', self.gf('django.db.models.fields.CharField')(max_length=64)), + ('start_args', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('job_tags', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('celery_task_id', self.gf('django.db.models.fields.CharField')(default='', max_length=100, blank=True)), + ('playbook', self.gf('django.db.models.fields.CharField')(default='', max_length=1024)), + ('job_env', self.gf('jsonfield.fields.JSONField')(default={}, blank=True)), + ('active', self.gf('django.db.models.fields.BooleanField')(default=True)), + ('result_stdout_file', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('status', self.gf('django.db.models.fields.CharField')(default='new', max_length=20)), + ('modified_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'job', 'app_label': 'main'}(class)s_modified+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), + ('job_cwd', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('job_template', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobs', on_delete=models.SET_NULL, default=None, to=orm['main.JobTemplate'], blank=True, null=True)), + ('created', self.gf('django.db.models.fields.DateTimeField')(default=None)), + ('extra_vars', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('verbosity', self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True)), + ('job_args', self.gf('django.db.models.fields.TextField')(default='', blank=True)), + ('modified', self.gf('django.db.models.fields.DateTimeField')(default=None)), + ('created_by', self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name="{'class': 'job', 'app_label': 'main'}(class)s_created+", null=True, on_delete=models.SET_NULL, to=orm['auth.User'])), + ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobs', null=True, on_delete=models.SET_NULL, to=orm['main.Project'])), + ('failed', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('inventory', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobs', null=True, on_delete=models.SET_NULL, to=orm['main.Inventory'])), + ('_result_stdout', self.gf('django.db.models.fields.TextField')(default='', db_column='result_stdout', blank=True)), + ('limit', self.gf('django.db.models.fields.CharField')(default='', max_length=1024, blank=True)), + ('forks', self.gf('django.db.models.fields.PositiveIntegerField')(default=0, blank=True)), + ('cloud_credential', self.gf('django.db.models.fields.related.ForeignKey')(related_name='jobs_as_cloud_credential+', on_delete=models.SET_NULL, default=None, to=orm['main.Credential'], blank=True, null=True)), + ('launch_type', self.gf('django.db.models.fields.CharField')(default='manual', max_length=20)), + )) + db.send_create_signal('main', ['Job']) + + # Adding field 'Host.last_job' + db.add_column(u'main_host', 'last_job', + self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='hosts_as_last_job+', null=True, on_delete=models.SET_NULL, to=orm['main.Job']), + keep_default=False) + + # Adding M2M table for field inventory_sources on 'Host' + m2m_table_name = db.shorten_name(u'main_host_inventory_sources') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('host', models.ForeignKey(orm['main.host'], null=False)), + ('inventorysource', models.ForeignKey(orm['main.inventorysource'], null=False)) + )) + db.create_unique(m2m_table_name, ['host_id', 'inventorysource_id']) + + # Adding M2M table for field projects on 'Organization' + m2m_table_name = db.shorten_name(u'main_organization_projects') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('organization', models.ForeignKey(orm['main.organization'], null=False)), + ('project', models.ForeignKey(orm['main.project'], null=False)) + )) + db.create_unique(m2m_table_name, ['organization_id', 'project_id']) + + # Adding M2M table for field projects on 'Team' + m2m_table_name = db.shorten_name(u'main_team_projects') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('team', models.ForeignKey(orm['main.team'], null=False)), + ('project', models.ForeignKey(orm['main.project'], null=False)) + )) + db.create_unique(m2m_table_name, ['team_id', 'project_id']) + + # Adding field 'Permission.project' + db.add_column(u'main_permission', 'project', + self.gf('django.db.models.fields.related.ForeignKey')(related_name='permissions', null=True, to=orm['main.Project'], on_delete=models.SET_NULL, blank=True), + keep_default=False) + + # Adding field 'JobHostSummary.job' + db.add_column(u'main_jobhostsummary', 'job', + self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='job_host_summaries', null=True, to=orm['main.Job']), + keep_default=False) + + # Changing field 'JobHostSummary.new_job' + db.alter_column(u'main_jobhostsummary', 'new_job_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['main.JobNew'])) + + # Adding unique constraint on 'JobHostSummary', fields ['job', 'host'] + db.create_unique(u'main_jobhostsummary', ['job_id', 'host_id']) + + # Adding M2M table for field inventory_sources on 'Group' + m2m_table_name = db.shorten_name(u'main_group_inventory_sources') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('group', models.ForeignKey(orm['main.group'], null=False)), + ('inventorysource', models.ForeignKey(orm['main.inventorysource'], null=False)) + )) + db.create_unique(m2m_table_name, ['group_id', 'inventorysource_id']) + + # Adding field 'JobEvent.job' + db.add_column(u'main_jobevent', 'job', + self.gf('django.db.models.fields.related.ForeignKey')(default=None, related_name='job_events', null=True, to=orm['main.Job']), + keep_default=False) + + # Changing field 'JobEvent.new_job' + db.alter_column(u'main_jobevent', 'new_job_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['main.JobNew'])) + # Adding M2M table for field inventory_update on 'ActivityStream' + m2m_table_name = db.shorten_name(u'main_activitystream_inventory_update') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), + ('inventoryupdate', models.ForeignKey(orm['main.inventoryupdate'], null=False)) + )) + db.create_unique(m2m_table_name, ['activitystream_id', 'inventoryupdate_id']) + + # Adding M2M table for field project_update on 'ActivityStream' + m2m_table_name = db.shorten_name(u'main_activitystream_project_update') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), + ('projectupdate', models.ForeignKey(orm['main.projectupdate'], null=False)) + )) + db.create_unique(m2m_table_name, ['activitystream_id', 'projectupdate_id']) + + # Adding M2M table for field inventory_source on 'ActivityStream' + m2m_table_name = db.shorten_name(u'main_activitystream_inventory_source') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), + ('inventorysource', models.ForeignKey(orm['main.inventorysource'], null=False)) + )) + db.create_unique(m2m_table_name, ['activitystream_id', 'inventorysource_id']) + + # Adding M2M table for field job_template on 'ActivityStream' + m2m_table_name = db.shorten_name(u'main_activitystream_job_template') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), + ('jobtemplate', models.ForeignKey(orm['main.jobtemplate'], null=False)) + )) + db.create_unique(m2m_table_name, ['activitystream_id', 'jobtemplate_id']) + + # Adding M2M table for field job on 'ActivityStream' + m2m_table_name = db.shorten_name(u'main_activitystream_job') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), + ('job', models.ForeignKey(orm['main.job'], null=False)) + )) + db.create_unique(m2m_table_name, ['activitystream_id', 'job_id']) + + # Adding M2M table for field project on 'ActivityStream' + m2m_table_name = db.shorten_name(u'main_activitystream_project') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('activitystream', models.ForeignKey(orm['main.activitystream'], null=False)), + ('project', models.ForeignKey(orm['main.project'], null=False)) + )) + db.create_unique(m2m_table_name, ['activitystream_id', 'project_id']) models = { @@ -129,18 +423,19 @@ class Migration(SchemaMigration): 'host': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Host']", 'symmetrical': 'False', 'blank': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'inventory': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Inventory']", 'symmetrical': 'False', 'blank': 'True'}), - 'inventory_source': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.InventorySource']", 'symmetrical': 'False', 'blank': 'True'}), - 'inventory_update': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.InventoryUpdate']", 'symmetrical': 'False', 'blank': 'True'}), - 'job': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Job']", 'symmetrical': 'False', 'blank': 'True'}), - 'job_template': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.JobTemplate']", 'symmetrical': 'False', 'blank': 'True'}), + 'new_inventory_source': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.InventorySourceNew']", 'symmetrical': 'False', 'blank': 'True'}), + 'new_inventory_update': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.InventoryUpdateNew']", 'symmetrical': 'False', 'blank': 'True'}), + 'new_job': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.JobNew']", 'symmetrical': 'False', 'blank': 'True'}), + 'new_job_template': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.JobTemplateNew']", 'symmetrical': 'False', 'blank': 'True'}), + 'new_project': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.ProjectNew']", 'symmetrical': 'False', 'blank': 'True'}), + 'new_project_update': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.ProjectUpdateNew']", 'symmetrical': 'False', 'blank': 'True'}), 'object1': ('django.db.models.fields.TextField', [], {}), 'object2': ('django.db.models.fields.TextField', [], {}), 'object_relationship_type': ('django.db.models.fields.TextField', [], {'blank': 'True'}), 'operation': ('django.db.models.fields.CharField', [], {'max_length': '13'}), 'organization': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Organization']", 'symmetrical': 'False', 'blank': 'True'}), 'permission': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'project': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Project']", 'symmetrical': 'False', 'blank': 'True'}), - 'project_update': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.ProjectUpdate']", 'symmetrical': 'False', 'blank': 'True'}), + 'schedule': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Schedule']", 'symmetrical': 'False', 'blank': 'True'}), 'team': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Team']", 'symmetrical': 'False', 'blank': 'True'}), 'timestamp': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), 'unified_job': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'activity_stream_as_unified_job+'", 'blank': 'True', 'to': "orm['main.UnifiedJob']"}), @@ -170,12 +465,14 @@ class Migration(SchemaMigration): 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), 'password': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'ssh_key_data': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'ssh_key_path': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'ssh_key_unlock': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'sudo_password': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'sudo_username': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'team': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'credentials'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Team']"}), 'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'credentials'", 'null': 'True', 'blank': 'True', 'to': u"orm['auth.User']"}), - 'username': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}) + 'username': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'vault_password': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}) }, 'main.group': { 'Meta': {'unique_together': "(('name', 'inventory'),)", 'object_name': 'Group'}, @@ -190,10 +487,10 @@ class Migration(SchemaMigration): 'hosts_with_active_failures': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'groups'", 'to': "orm['main.Inventory']"}), - 'inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'groups'", 'blank': 'True', 'to': "orm['main.InventorySource']"}), 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'group\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'new_inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'groups'", 'symmetrical': 'False', 'to': "orm['main.InventorySourceNew']"}), 'parents': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'children'", 'blank': 'True', 'to': "orm['main.Group']"}), 'total_groups': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), 'total_hosts': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), @@ -211,12 +508,12 @@ class Migration(SchemaMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'instance_id': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}), 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'hosts'", 'to': "orm['main.Inventory']"}), - 'inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'hosts'", 'blank': 'True', 'to': "orm['main.InventorySource']"}), - 'last_job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'hosts_as_last_job+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Job']", 'blank': 'True', 'null': 'True'}), 'last_job_host_summary': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'hosts_as_last_job_summary+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.JobHostSummary']", 'blank': 'True', 'null': 'True'}), 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'host\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'new_inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'hosts'", 'symmetrical': 'False', 'to': "orm['main.InventorySourceNew']"}), + 'new_last_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'hosts_as_last_job+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.JobNew']"}), 'variables': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}) }, 'main.inventory': { @@ -240,11 +537,11 @@ class Migration(SchemaMigration): 'total_inventory_sources': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), 'variables': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}) }, - 'main.inventorysource': { - 'Meta': {'object_name': 'InventorySource', '_ormbases': ['main.UnifiedJobTemplate']}, - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventorysources'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), - 'group': ('awx.main.fields.AutoOneToOneField', [], {'related_name': "'inventory_source'", 'null': 'True', 'default': 'None', 'to': "orm['main.Group']", 'blank': 'True', 'unique': 'True'}), - 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventory_sources'", 'null': 'True', 'to': "orm['main.Inventory']"}), + 'main.inventorysourcenew': { + 'Meta': {'object_name': 'InventorySourceNew', '_ormbases': ['main.UnifiedJobTemplate']}, + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventorysourcenews'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'group': ('awx.main.fields.AutoOneToOneField', [], {'default': 'None', 'related_name': "'new_inventory_source'", 'unique': 'True', 'null': 'True', 'to': "orm['main.Group']"}), + 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'new_inventory_sources'", 'null': 'True', 'to': "orm['main.Inventory']"}), 'overwrite': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'overwrite_vars': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'source': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '32', 'blank': 'True'}), @@ -255,10 +552,10 @@ class Migration(SchemaMigration): 'update_cache_timeout': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), 'update_on_launch': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) }, - 'main.inventoryupdate': { - 'Meta': {'object_name': 'InventoryUpdate', '_ormbases': ['main.UnifiedJob']}, - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventoryupdates'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), - 'inventory_source': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventory_updates'", 'to': "orm['main.InventorySource']"}), + 'main.inventoryupdatenew': { + 'Meta': {'object_name': 'InventoryUpdateNew', '_ormbases': ['main.UnifiedJob']}, + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventoryupdatenews'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'inventory_source': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventory_updates'", 'to': "orm['main.InventorySourceNew']"}), 'license_error': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'overwrite': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'overwrite_vars': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), @@ -268,23 +565,6 @@ class Migration(SchemaMigration): 'source_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), u'unifiedjob_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJob']", 'unique': 'True', 'primary_key': 'True'}) }, - 'main.job': { - 'Meta': {'object_name': 'Job', '_ormbases': ['main.UnifiedJob']}, - 'cloud_credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs_as_cloud_credential+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), - 'extra_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), - 'forks': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), - 'hosts': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'jobs'", 'blank': 'True', 'through': "orm['main.JobHostSummary']", 'to': "orm['main.Host']"}), - 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Inventory']"}), - 'job_tags': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - 'job_template': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.JobTemplate']", 'blank': 'True', 'null': 'True'}), - 'job_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'limit': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - 'playbook': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Project']"}), - u'unifiedjob_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJob']", 'unique': 'True', 'primary_key': 'True'}), - 'verbosity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}) - }, 'main.jobevent': { 'Meta': {'ordering': "('pk',)", 'object_name': 'JobEvent'}, 'changed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), @@ -292,18 +572,18 @@ class Migration(SchemaMigration): 'event': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 'event_data': ('jsonfield.fields.JSONField', [], {'default': '{}', 'blank': 'True'}), 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'host': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_events_as_primary_host'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Host']", 'blank': 'True', 'null': 'True'}), - 'hosts': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'job_events'", 'blank': 'True', 'to': "orm['main.Host']"}), + 'host': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'job_events_as_primary_host'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Host']"}), + 'hosts': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'job_events'", 'symmetrical': 'False', 'to': "orm['main.Host']"}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_events'", 'to': "orm['main.Job']"}), 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), - 'parent': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'children'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.JobEvent']", 'blank': 'True', 'null': 'True'}), - 'play': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - 'role': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - 'task': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}) + 'new_job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'new_job_events'", 'to': "orm['main.JobNew']"}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'children'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.JobEvent']"}), + 'play': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), + 'role': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), + 'task': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}) }, 'main.jobhostsummary': { - 'Meta': {'ordering': "('-pk',)", 'unique_together': "[('job', 'host')]", 'object_name': 'JobHostSummary'}, + 'Meta': {'ordering': "('-pk',)", 'unique_together': "[('new_job', 'host')]", 'object_name': 'JobHostSummary'}, 'changed': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'dark': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), @@ -311,25 +591,42 @@ class Migration(SchemaMigration): 'failures': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), 'host': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_host_summaries'", 'to': "orm['main.Host']"}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_host_summaries'", 'to': "orm['main.Job']"}), 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'new_job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'new_job_host_summaries'", 'to': "orm['main.JobNew']"}), 'ok': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), 'processed': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), 'skipped': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}) }, - 'main.jobtemplate': { - 'Meta': {'object_name': 'JobTemplate', '_ormbases': ['main.UnifiedJobTemplate']}, - 'cloud_credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobtemplates_as_cloud_credential+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobtemplates'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'main.jobnew': { + 'Meta': {'object_name': 'JobNew', '_ormbases': ['main.UnifiedJob']}, + 'cloud_credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobnews_as_cloud_credential+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobnews'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'extra_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'forks': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'hosts': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'jobnews'", 'symmetrical': 'False', 'through': "orm['main.JobHostSummary']", 'to': "orm['main.Host']"}), + 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobnews'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Inventory']"}), + 'job_tags': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'job_template': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.JobTemplateNew']", 'blank': 'True', 'null': 'True'}), + 'job_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'limit': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'playbook': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.ProjectNew']"}), + u'unifiedjob_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJob']", 'unique': 'True', 'primary_key': 'True'}), + 'verbosity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}) + }, + 'main.jobtemplatenew': { + 'Meta': {'object_name': 'JobTemplateNew', '_ormbases': ['main.UnifiedJobTemplate']}, + 'cloud_credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobtemplatenews_as_cloud_credential+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobtemplatenews'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), 'extra_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'forks': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), 'host_config_key': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), - 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobtemplates'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Inventory']"}), + 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobtemplatenews'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Inventory']"}), 'job_tags': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'job_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), 'limit': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), 'playbook': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_templates'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Project']"}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_templates'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.ProjectNew']"}), u'unifiedjobtemplate_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJobTemplate']", 'unique': 'True', 'primary_key': 'True'}), 'verbosity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}) }, @@ -344,7 +641,7 @@ class Migration(SchemaMigration): 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'organization\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}), - 'projects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'organizations'", 'blank': 'True', 'to': "orm['main.Project']"}), + 'new_projects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'organizations'", 'blank': 'True', 'to': "orm['main.ProjectNew']"}), 'users': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'organizations'", 'blank': 'True', 'to': u"orm['auth.User']"}) }, 'main.permission': { @@ -358,8 +655,8 @@ class Migration(SchemaMigration): 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'permission\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'new_project': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'permissions'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.ProjectNew']"}), 'permission_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'permissions'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Project']"}), 'team': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'permissions'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Team']"}), 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'permissions'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}) }, @@ -371,9 +668,9 @@ class Migration(SchemaMigration): 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'user': ('awx.main.fields.AutoOneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': u"orm['auth.User']"}) }, - 'main.project': { - 'Meta': {'object_name': 'Project', '_ormbases': ['main.UnifiedJobTemplate']}, - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'projects'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), + 'main.projectnew': { + 'Meta': {'object_name': 'ProjectNew', '_ormbases': ['main.UnifiedJobTemplate']}, + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projectnews'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), 'local_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), 'scm_branch': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '256', 'blank': 'True'}), 'scm_clean': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), @@ -385,11 +682,11 @@ class Migration(SchemaMigration): 'scm_url': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), u'unifiedjobtemplate_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJobTemplate']", 'unique': 'True', 'primary_key': 'True'}) }, - 'main.projectupdate': { - 'Meta': {'object_name': 'ProjectUpdate', '_ormbases': ['main.UnifiedJob']}, - 'credential': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'projectupdates'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Credential']"}), + 'main.projectupdatenew': { + 'Meta': {'object_name': 'ProjectUpdateNew', '_ormbases': ['main.UnifiedJob']}, + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projectupdatenews'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), 'local_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'project_updates'", 'to': "orm['main.Project']"}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'project_updates'", 'to': "orm['main.ProjectNew']"}), 'scm_branch': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '256', 'blank': 'True'}), 'scm_clean': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'scm_delete_on_update': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), @@ -405,12 +702,14 @@ class Migration(SchemaMigration): 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'dtend': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), 'dtstart': ('django.db.models.fields.DateTimeField', [], {}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'job_template': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'schedules'", 'to': "orm['main.UnifiedJobTemplate']"}), 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'schedule\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}), - 'rrule': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + 'next_run': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), + 'rrule': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'unified_job_template': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'schedules'", 'to': "orm['main.UnifiedJobTemplate']"}) }, 'main.team': { 'Meta': {'unique_together': "[('organization', 'name')]", 'object_name': 'Team'}, @@ -422,8 +721,8 @@ class Migration(SchemaMigration): 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'team\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'new_projects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'teams'", 'blank': 'True', 'to': "orm['main.ProjectNew']"}), 'organization': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'teams'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Organization']"}), - 'projects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'teams'", 'blank': 'True', 'to': "orm['main.Project']"}), 'users': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'teams'", 'blank': 'True', 'to': u"orm['auth.User']"}) }, 'main.unifiedjob': { @@ -433,7 +732,7 @@ class Migration(SchemaMigration): 'celery_task_id': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}), 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'unifiedjob\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), - 'depends_on': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'depends_on_rel_+'", 'to': "orm['main.UnifiedJob']"}), + 'dependent_jobs': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'dependent_jobs_rel_+'", 'to': "orm['main.UnifiedJob']"}), 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'elapsed': ('django.db.models.fields.DecimalField', [], {'max_digits': '12', 'decimal_places': '3'}), 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), @@ -445,33 +744,35 @@ class Migration(SchemaMigration): 'launch_type': ('django.db.models.fields.CharField', [], {'default': "'manual'", 'max_length': '20'}), 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'unifiedjob\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), 'old_pk': ('django.db.models.fields.PositiveIntegerField', [], {'default': 'None', 'null': 'True'}), 'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_main.unifiedjob_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}), 'result_stdout_file': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'result_stdout_text': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'result_traceback': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), - 'schedule': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['main.Schedule']", 'null': 'True'}), + 'schedule': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['main.Schedule']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), 'start_args': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'started': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), 'status': ('django.db.models.fields.CharField', [], {'default': "'new'", 'max_length': '20'}), - 'unified_job_template': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjob_unified_jobs'", 'null': 'True', 'to': "orm['main.UnifiedJobTemplate']"}) + 'unified_job_template': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjob_unified_jobs'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.UnifiedJobTemplate']"}) }, 'main.unifiedjobtemplate': { 'Meta': {'unique_together': "[('polymorphic_ctype', 'name')]", 'object_name': 'UnifiedJobTemplate'}, 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'unifiedjobtemplate\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), - 'current_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjobtemplate_as_current_job+'", 'null': 'True', 'to': "orm['main.UnifiedJob']"}), + 'current_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjobtemplate_as_current_job+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.UnifiedJob']"}), 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), 'has_schedules': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'last_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjobtemplate_as_last_job+'", 'null': 'True', 'to': "orm['main.UnifiedJob']"}), + 'last_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjobtemplate_as_last_job+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.UnifiedJob']"}), 'last_job_failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'last_job_run': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'unifiedjobtemplate\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), 'next_job_run': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), + 'next_schedule': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjobtemplate_as_next_schedule+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Schedule']"}), 'old_pk': ('django.db.models.fields.PositiveIntegerField', [], {'default': 'None', 'null': 'True'}), 'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_main.unifiedjobtemplate_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}), 'status': ('django.db.models.fields.CharField', [], {'default': "'ok'", 'max_length': '32'}) diff --git a/awx/main/migrations/0038_v148_changes.py b/awx/main/migrations/0038_v148_changes.py new file mode 100644 index 0000000000..4c1d877d7e --- /dev/null +++ b/awx/main/migrations/0038_v148_changes.py @@ -0,0 +1,500 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + ''' + Rename tables/columns to be consistent with model/field names. + ''' + + def forwards(self, orm): + db.rename_table(u'main_projectnew', 'main_project') + db.rename_table(u'main_projectupdatenew', 'main_projectupdate') + db.rename_table(u'main_inventorysourcenew', 'main_inventorysource') + db.rename_table(u'main_inventoryupdatenew', 'main_inventoryupdate') + db.rename_table(u'main_jobtemplatenew', 'main_jobtemplate') + db.rename_table(u'main_jobnew', 'main_job') + + db.rename_table(db.shorten_name(u'main_team_new_projects'), db.shorten_name(u'main_team_projects')) + db.rename_column(db.shorten_name(u'main_team_projects'), 'projectnew_id', 'project_id') + db.rename_table(db.shorten_name(u'main_organization_new_projects'), db.shorten_name(u'main_organization_projects')) + db.rename_column(db.shorten_name(u'main_organization_projects'), 'projectnew_id', 'project_id') + db.rename_column(u'main_permission', 'new_project_id', 'project_id') + + db.rename_column(u'main_host', 'new_last_job_id', 'last_job_id') + db.rename_table(db.shorten_name(u'main_host_new_inventory_sources'), db.shorten_name(u'main_host_inventory_sources')) + db.rename_column(db.shorten_name(u'main_host_inventory_sources'), 'inventorysourcenew_id', 'inventorysource_id') + db.rename_table(db.shorten_name(u'main_group_new_inventory_sources'), db.shorten_name(u'main_group_inventory_sources')) + db.rename_column(db.shorten_name(u'main_group_inventory_sources'), 'inventorysourcenew_id', 'inventorysource_id') + + db.rename_column(u'main_jobhostsummary', 'new_job_id', 'job_id') + db.rename_column(u'main_jobevent', 'new_job_id', 'job_id') + + db.rename_table(db.shorten_name(u'main_activitystream_new_project'), db.shorten_name(u'main_activitystream_project')) + db.rename_column(db.shorten_name(u'main_activitystream_project'), 'projectnew_id', 'project_id') + db.rename_table(db.shorten_name(u'main_activitystream_new_project_update'), db.shorten_name(u'main_activitystream_project_update')) + db.rename_column(db.shorten_name(u'main_activitystream_project_update'), 'projectupdatenew_id', 'projectupdate_id') + db.rename_table(db.shorten_name(u'main_activitystream_new_inventory_source'), db.shorten_name(u'main_activitystream_inventory_source')) + db.rename_column(db.shorten_name(u'main_activitystream_inventory_source'), 'inventorysourcenew_id', 'inventorysource_id') + db.rename_table(db.shorten_name(u'main_activitystream_new_inventory_update'), db.shorten_name(u'main_activitystream_inventory_update')) + db.rename_column(db.shorten_name(u'main_activitystream_inventory_update'), 'inventoryupdatenew_id', 'inventoryupdate_id') + db.rename_table(db.shorten_name(u'main_activitystream_new_job_template'), db.shorten_name(u'main_activitystream_job_template')) + db.rename_column(db.shorten_name(u'main_activitystream_job_template'), 'jobtemplatenew_id', 'jobtemplate_id') + db.rename_table(db.shorten_name(u'main_activitystream_new_job'), db.shorten_name(u'main_activitystream_job')) + db.rename_column(db.shorten_name(u'main_activitystream_job'), 'jobnew_id', 'job_id') + + def backwards(self, orm): + db.rename_column(db.shorten_name(u'main_activitystream_job'), 'job_id', 'jobnew_id') + db.rename_table(db.shorten_name(u'main_activitystream_job'), db.shorten_name(u'main_activitystream_new_job')) + db.rename_column(db.shorten_name(u'main_activitystream_job_template'), 'jobtemplate_id', 'jobtemplatenew_id') + db.rename_table(db.shorten_name(u'main_activitystream_job_template'), db.shorten_name(u'main_activitystream_new_job_template')) + db.rename_column(db.shorten_name(u'main_activitystream_inventory_update'), 'inventoryupdate_id', 'inventoryupdatenew_id') + db.rename_table(db.shorten_name(u'main_activitystream_inventory_update'), db.shorten_name(u'main_activitystream_new_inventory_update')) + db.rename_column(db.shorten_name(u'main_activitystream_inventory_source'), 'inventorysource_id', 'inventorysourcenew_id') + db.rename_table(db.shorten_name(u'main_activitystream_inventory_source'), db.shorten_name(u'main_activitystream_new_inventory_source')) + db.rename_column(db.shorten_name(u'main_activitystream_project_update'), 'projectupdate_id', 'projectupdatenew_id') + db.rename_table(db.shorten_name(u'main_activitystream_project_update'), db.shorten_name(u'main_activitystream_new_project_update')) + db.rename_column(db.shorten_name(u'main_activitystream_project'), 'project_id', 'projectnew_id') + db.rename_table(db.shorten_name(u'main_activitystream_project'), db.shorten_name(u'main_activitystream_new_project')) + + db.rename_column(u'main_jobevent', 'job_id', 'new_job_id') + db.rename_column(u'main_jobhostsummary', 'job_id', 'new_job_id') + + db.rename_column(db.shorten_name(u'main_group_inventory_sources'), 'inventorysource_id', 'inventorysourcenew_id') + db.rename_table(db.shorten_name(u'main_group_inventory_sources'), db.shorten_name(u'main_group_new_inventory_sources')) + db.rename_column(db.shorten_name(u'main_host_inventory_sources'), 'inventorysource_id', 'inventorysourcenew_id') + db.rename_table(db.shorten_name(u'main_host_inventory_sources'), db.shorten_name(u'main_host_new_inventory_sources')) + db.rename_column(u'main_host', 'last_job_id', 'new_last_job_id') + + db.rename_column(u'main_permission', 'project_id', 'new_project_id') + db.rename_column(db.shorten_name(u'main_organization_projects'), 'project_id', 'projectnew_id') + db.rename_table(db.shorten_name(u'main_organization_projects'), db.shorten_name(u'main_organization_new_projects')) + db.rename_column(db.shorten_name(u'main_team_projects'), 'project_id', 'projectnew_id') + db.rename_table(db.shorten_name(u'main_team_projects'), db.shorten_name(u'main_team_new_projects')) + + db.rename_table(u'main_job', 'main_jobnew') + db.rename_table(u'main_jobtemplate', 'main_jobtemplatenew') + db.rename_table(u'main_inventoryupdate', 'main_inventoryupdatenew') + db.rename_table(u'main_inventorysource', 'main_inventorysourcenew') + db.rename_table(u'main_projectupdate', 'main_projectupdatenew') + db.rename_table(u'main_project', 'main_projectnew') + + models = { + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + u'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'main.activitystream': { + 'Meta': {'object_name': 'ActivityStream'}, + 'actor': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'activity_stream'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'changes': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'credential': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Credential']", 'symmetrical': 'False', 'blank': 'True'}), + 'group': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'host': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Host']", 'symmetrical': 'False', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'inventory': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Inventory']", 'symmetrical': 'False', 'blank': 'True'}), + 'inventory_source': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.InventorySource']", 'symmetrical': 'False', 'blank': 'True'}), + 'inventory_update': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.InventoryUpdate']", 'symmetrical': 'False', 'blank': 'True'}), + 'job': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Job']", 'symmetrical': 'False', 'blank': 'True'}), + 'job_template': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.JobTemplate']", 'symmetrical': 'False', 'blank': 'True'}), + 'object1': ('django.db.models.fields.TextField', [], {}), + 'object2': ('django.db.models.fields.TextField', [], {}), + 'object_relationship_type': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'operation': ('django.db.models.fields.CharField', [], {'max_length': '13'}), + 'organization': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Organization']", 'symmetrical': 'False', 'blank': 'True'}), + 'permission': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'project': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Project']", 'symmetrical': 'False', 'blank': 'True'}), + 'project_update': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.ProjectUpdate']", 'symmetrical': 'False', 'blank': 'True'}), + 'schedule': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Schedule']", 'symmetrical': 'False', 'blank': 'True'}), + 'team': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['main.Team']", 'symmetrical': 'False', 'blank': 'True'}), + 'timestamp': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'unified_job': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'activity_stream_as_unified_job+'", 'blank': 'True', 'to': "orm['main.UnifiedJob']"}), + 'unified_job_template': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'activity_stream_as_unified_job_template+'", 'blank': 'True', 'to': "orm['main.UnifiedJobTemplate']"}), + 'user': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.User']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'main.authtoken': { + 'Meta': {'object_name': 'AuthToken'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'expires': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'primary_key': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'request_hash': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '40', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'auth_tokens'", 'to': u"orm['auth.User']"}) + }, + 'main.credential': { + 'Meta': {'unique_together': "[('user', 'team', 'kind', 'name')]", 'object_name': 'Credential'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'cloud': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'credential\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'kind': ('django.db.models.fields.CharField', [], {'default': "'ssh'", 'max_length': '32'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'credential\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'password': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'ssh_key_data': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'ssh_key_path': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'ssh_key_unlock': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'sudo_password': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'sudo_username': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'team': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'credentials'", 'null': 'True', 'blank': 'True', 'to': "orm['main.Team']"}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'credentials'", 'null': 'True', 'blank': 'True', 'to': u"orm['auth.User']"}), + 'username': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'vault_password': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}) + }, + 'main.group': { + 'Meta': {'unique_together': "(('name', 'inventory'),)", 'object_name': 'Group'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'group\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'groups_with_active_failures': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'has_active_failures': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'has_inventory_sources': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'hosts': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'groups'", 'blank': 'True', 'to': "orm['main.Host']"}), + 'hosts_with_active_failures': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'groups'", 'to': "orm['main.Inventory']"}), + 'inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'groups'", 'symmetrical': 'False', 'to': "orm['main.InventorySource']"}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'group\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'parents': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'children'", 'blank': 'True', 'to': "orm['main.Group']"}), + 'total_groups': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'total_hosts': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'variables': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}) + }, + 'main.host': { + 'Meta': {'unique_together': "(('name', 'inventory'),)", 'object_name': 'Host'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'host\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'has_active_failures': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'has_inventory_sources': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'instance_id': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}), + 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'hosts'", 'to': "orm['main.Inventory']"}), + 'inventory_sources': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'hosts'", 'symmetrical': 'False', 'to': "orm['main.InventorySource']"}), + 'last_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'hosts_as_last_job+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Job']"}), + 'last_job_host_summary': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'hosts_as_last_job_summary+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.JobHostSummary']", 'blank': 'True', 'null': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'host\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'variables': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}) + }, + 'main.inventory': { + 'Meta': {'unique_together': "[('name', 'organization')]", 'object_name': 'Inventory'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'inventory\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'groups_with_active_failures': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'has_active_failures': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'has_inventory_sources': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'hosts_with_active_failures': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'inventory_sources_with_failures': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'inventory\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}), + 'organization': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventories'", 'to': "orm['main.Organization']"}), + 'total_groups': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'total_hosts': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'total_inventory_sources': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'variables': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}) + }, + 'main.inventorysource': { + 'Meta': {'object_name': 'InventorySource', '_ormbases': ['main.UnifiedJobTemplate']}, + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventorysources'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'group': ('awx.main.fields.AutoOneToOneField', [], {'default': 'None', 'related_name': "'inventory_source'", 'unique': 'True', 'null': 'True', 'to': "orm['main.Group']"}), + 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'inventory_sources'", 'null': 'True', 'to': "orm['main.Inventory']"}), + 'overwrite': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'overwrite_vars': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'source': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '32', 'blank': 'True'}), + 'source_path': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'source_regions': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'source_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + u'unifiedjobtemplate_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJobTemplate']", 'unique': 'True', 'primary_key': 'True'}), + 'update_cache_timeout': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'update_on_launch': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'main.inventoryupdate': { + 'Meta': {'object_name': 'InventoryUpdate', '_ormbases': ['main.UnifiedJob']}, + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventoryupdates'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'inventory_source': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'inventory_updates'", 'to': "orm['main.InventorySource']"}), + 'license_error': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'overwrite': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'overwrite_vars': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'source': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '32', 'blank': 'True'}), + 'source_path': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'source_regions': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'source_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + u'unifiedjob_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJob']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'main.job': { + 'Meta': {'object_name': 'Job', '_ormbases': ['main.UnifiedJob']}, + 'cloud_credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs_as_cloud_credential+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'extra_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'forks': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'hosts': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'jobs'", 'symmetrical': 'False', 'through': "orm['main.JobHostSummary']", 'to': "orm['main.Host']"}), + 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Inventory']"}), + 'job_tags': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'job_template': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.JobTemplate']", 'blank': 'True', 'null': 'True'}), + 'job_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'limit': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'playbook': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobs'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Project']"}), + u'unifiedjob_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJob']", 'unique': 'True', 'primary_key': 'True'}), + 'verbosity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}) + }, + 'main.jobevent': { + 'Meta': {'ordering': "('pk',)", 'object_name': 'JobEvent'}, + 'changed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'event': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'event_data': ('jsonfield.fields.JSONField', [], {'default': '{}', 'blank': 'True'}), + 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'host': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'job_events_as_primary_host'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Host']"}), + 'hosts': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'job_events'", 'symmetrical': 'False', 'to': "orm['main.Host']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_events'", 'to': "orm['main.Job']"}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'children'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.JobEvent']"}), + 'play': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), + 'role': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), + 'task': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}) + }, + 'main.jobhostsummary': { + 'Meta': {'ordering': "('-pk',)", 'unique_together': "[('job', 'host')]", 'object_name': 'JobHostSummary'}, + 'changed': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'dark': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'failures': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'host': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_host_summaries'", 'to': "orm['main.Host']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'job': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_host_summaries'", 'to': "orm['main.Job']"}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'ok': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'processed': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'skipped': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}) + }, + 'main.jobtemplate': { + 'Meta': {'object_name': 'JobTemplate', '_ormbases': ['main.UnifiedJobTemplate']}, + 'cloud_credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobtemplates_as_cloud_credential+'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobtemplates'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'extra_vars': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'forks': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}), + 'host_config_key': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'jobtemplates'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Inventory']"}), + 'job_tags': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'job_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'limit': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'playbook': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'job_templates'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Project']"}), + u'unifiedjobtemplate_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJobTemplate']", 'unique': 'True', 'primary_key': 'True'}), + 'verbosity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'blank': 'True'}) + }, + 'main.organization': { + 'Meta': {'object_name': 'Organization'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'admins': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'admin_of_organizations'", 'blank': 'True', 'to': u"orm['auth.User']"}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'organization\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'organization\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}), + 'projects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'organizations'", 'blank': 'True', 'to': "orm['main.Project']"}), + 'users': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'organizations'", 'blank': 'True', 'to': u"orm['auth.User']"}) + }, + 'main.permission': { + 'Meta': {'object_name': 'Permission'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'permission\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'inventory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'permissions'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Inventory']"}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'permission\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'permission_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'permissions'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Project']"}), + 'team': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'permissions'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Team']"}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'permissions'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}) + }, + 'main.profile': { + 'Meta': {'object_name': 'Profile'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ldap_dn': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'user': ('awx.main.fields.AutoOneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': u"orm['auth.User']"}) + }, + 'main.project': { + 'Meta': {'object_name': 'Project', '_ormbases': ['main.UnifiedJobTemplate']}, + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'local_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), + 'scm_branch': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '256', 'blank': 'True'}), + 'scm_clean': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'scm_delete_on_next_update': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'scm_delete_on_update': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'scm_type': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '8', 'blank': 'True'}), + 'scm_update_cache_timeout': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'scm_update_on_launch': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'scm_url': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + u'unifiedjobtemplate_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJobTemplate']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'main.projectupdate': { + 'Meta': {'object_name': 'ProjectUpdate', '_ormbases': ['main.UnifiedJob']}, + 'credential': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projectupdates'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['main.Credential']", 'blank': 'True', 'null': 'True'}), + 'local_path': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'project_updates'", 'to': "orm['main.Project']"}), + 'scm_branch': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '256', 'blank': 'True'}), + 'scm_clean': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'scm_delete_on_update': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'scm_type': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '8', 'blank': 'True'}), + 'scm_url': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + u'unifiedjob_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['main.UnifiedJob']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'main.schedule': { + 'Meta': {'object_name': 'Schedule'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'schedule\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'dtend': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), + 'dtstart': ('django.db.models.fields.DateTimeField', [], {}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'schedule\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}), + 'next_run': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), + 'rrule': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'unified_job_template': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'schedules'", 'to': "orm['main.UnifiedJobTemplate']"}) + }, + 'main.team': { + 'Meta': {'unique_together': "[('organization', 'name')]", 'object_name': 'Team'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'team\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'team\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'organization': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'teams'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Organization']"}), + 'projects': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'teams'", 'blank': 'True', 'to': "orm['main.Project']"}), + 'users': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'teams'", 'blank': 'True', 'to': u"orm['auth.User']"}) + }, + 'main.unifiedjob': { + 'Meta': {'object_name': 'UnifiedJob'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'cancel_flag': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'celery_task_id': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100', 'blank': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'unifiedjob\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'dependent_jobs': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'dependent_jobs_rel_+'", 'to': "orm['main.UnifiedJob']"}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'elapsed': ('django.db.models.fields.DecimalField', [], {'max_digits': '12', 'decimal_places': '3'}), + 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'finished': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'job_args': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'job_cwd': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024', 'blank': 'True'}), + 'job_env': ('jsonfield.fields.JSONField', [], {'default': '{}', 'blank': 'True'}), + 'launch_type': ('django.db.models.fields.CharField', [], {'default': "'manual'", 'max_length': '20'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'unifiedjob\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'old_pk': ('django.db.models.fields.PositiveIntegerField', [], {'default': 'None', 'null': 'True'}), + 'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_main.unifiedjob_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}), + 'result_stdout_file': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'result_stdout_text': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'result_traceback': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'schedule': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['main.Schedule']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), + 'start_args': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'started': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), + 'status': ('django.db.models.fields.CharField', [], {'default': "'new'", 'max_length': '20'}), + 'unified_job_template': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjob_unified_jobs'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.UnifiedJobTemplate']"}) + }, + 'main.unifiedjobtemplate': { + 'Meta': {'unique_together': "[('polymorphic_ctype', 'name')]", 'object_name': 'UnifiedJobTemplate'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'unifiedjobtemplate\', \'app_label\': \'main\'}(class)s_created+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'current_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjobtemplate_as_current_job+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.UnifiedJob']"}), + 'description': ('django.db.models.fields.TextField', [], {'default': "''", 'blank': 'True'}), + 'has_schedules': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_job': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjobtemplate_as_last_job+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.UnifiedJob']"}), + 'last_job_failed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_job_run': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'None'}), + 'modified_by': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': '"{\'class\': \'unifiedjobtemplate\', \'app_label\': \'main\'}(class)s_modified+"', 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['auth.User']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'next_job_run': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}), + 'next_schedule': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'unifiedjobtemplate_as_next_schedule+'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['main.Schedule']"}), + 'old_pk': ('django.db.models.fields.PositiveIntegerField', [], {'default': 'None', 'null': 'True'}), + 'polymorphic_ctype': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'polymorphic_main.unifiedjobtemplate_set'", 'null': 'True', 'to': u"orm['contenttypes.ContentType']"}), + 'status': ('django.db.models.fields.CharField', [], {'default': "'ok'", 'max_length': '32'}) + }, + u'taggit.tag': { + 'Meta': {'object_name': 'Tag'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100'}) + }, + u'taggit.taggeditem': { + 'Meta': {'object_name': 'TaggedItem'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'taggit_taggeditem_tagged_items'", 'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), + 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'taggit_taggeditem_items'", 'to': u"orm['taggit.Tag']"}) + } + } + + complete_apps = ['main'] \ No newline at end of file diff --git a/awx/main/models/activity_stream.py b/awx/main/models/activity_stream.py index 65f1818748..2a8e2b0721 100644 --- a/awx/main/models/activity_stream.py +++ b/awx/main/models/activity_stream.py @@ -50,6 +50,7 @@ class ActivityStreamBase(models.Model): permission = models.ManyToManyField("Permission", blank=True) #job_template = models.ManyToManyField("JobTemplate", blank=True) #job = models.ManyToManyField("Job", blank=True) + schedule = models.ManyToManyField("Schedule", blank=True) def get_absolute_url(self): return reverse('api:activity_stream_detail', args=(self.pk,)) diff --git a/awx/main/models/base.py b/awx/main/models/base.py index 5b680c1a81..436e837f29 100644 --- a/awx/main/models/base.py +++ b/awx/main/models/base.py @@ -142,6 +142,17 @@ class BaseModel(models.Model): if errors: raise ValidationError(errors) + def update_fields(self, **kwargs): + save = kwargs.pop('save', True) + update_fields = [] + for field, value in kwargs.items(): + if getattr(self, field) != value: + setattr(self, field, value) + update_fields.append(field) + if save and update_fields: + self.save(update_fields=update_fields) + return update_fields + def save(self, *args, **kwargs): # For compatibility with Django 1.4.x, attempt to handle any calls to # save that pass update_fields. @@ -308,6 +319,11 @@ if getattr(settings, 'UNIFIED_JOBS_STEP') == 0: default={}, editable=False, ) + start_args = models.TextField( + blank=True, + default='', + editable=False, + ) _result_stdout = models.TextField( blank=True, default='', diff --git a/awx/main/models/inventory.py b/awx/main/models/inventory.py index 5a8e6ee207..dd3d59533f 100644 --- a/awx/main/models/inventory.py +++ b/awx/main/models/inventory.py @@ -47,6 +47,7 @@ class Inventory(CommonModel): 'Organization', related_name='inventories', help_text=_('Organization containing this inventory.'), + on_delete=models.CASCADE, ) variables = models.TextField( blank=True, @@ -168,6 +169,7 @@ class HostBase(CommonModelNameNotUnique): inventory = models.ForeignKey( 'Inventory', related_name='hosts', + on_delete=models.CASCADE, ) enabled = models.BooleanField( default=True, @@ -290,7 +292,6 @@ if getattr(settings, 'UNIFIED_JOBS_STEP') == 0: last_job = models.ForeignKey( 'Job', related_name='hosts_as_last_job+', - blank=True, null=True, default=None, editable=False, @@ -299,7 +300,6 @@ if getattr(settings, 'UNIFIED_JOBS_STEP') == 0: new_last_job = models.ForeignKey( 'JobNew', related_name='hosts_as_last_job+', - blank=True, null=True, default=None, editable=False, @@ -308,14 +308,12 @@ if getattr(settings, 'UNIFIED_JOBS_STEP') == 0: inventory_sources = models.ManyToManyField( 'InventorySource', related_name='hosts', - blank=True, editable=False, help_text=_('Inventory source(s) that created or modified this host.'), ) new_inventory_sources = models.ManyToManyField( 'InventorySourceNew', related_name='hosts', - blank=True, editable=False, help_text=_('Inventory source(s) that created or modified this host.'), ) @@ -331,7 +329,6 @@ if getattr(settings, 'UNIFIED_JOBS_STEP') == 1: new_last_job = models.ForeignKey( 'JobNew', related_name='hosts_as_last_job+', - blank=True, null=True, default=None, editable=False, @@ -340,7 +337,6 @@ if getattr(settings, 'UNIFIED_JOBS_STEP') == 1: new_inventory_sources = models.ManyToManyField( 'InventorySourceNew', related_name='hosts', - blank=True, editable=False, help_text=_('Inventory source(s) that created or modified this host.'), ) @@ -356,7 +352,6 @@ if getattr(settings, 'UNIFIED_JOBS_STEP') == 2: last_job = models.ForeignKey( 'Job', related_name='hosts_as_last_job+', - blank=True, null=True, default=None, editable=False, @@ -365,7 +360,6 @@ if getattr(settings, 'UNIFIED_JOBS_STEP') == 2: inventory_sources = models.ManyToManyField( 'InventorySource', related_name='hosts', - blank=True, editable=False, help_text=_('Inventory source(s) that created or modified this host.'), ) @@ -385,6 +379,7 @@ class GroupBase(CommonModelNameNotUnique): inventory = models.ForeignKey( 'Inventory', related_name='groups', + on_delete=models.CASCADE, ) # Can also be thought of as: parents == member_of, children == members parents = models.ManyToManyField( @@ -572,7 +567,6 @@ if getattr(settings, 'UNIFIED_JOBS_STEP') == 0: inventory_sources = models.ManyToManyField( 'InventorySource', related_name='groups', - blank=True, editable=False, help_text=_('Inventory source(s) that created or modified this group.'), ) @@ -580,7 +574,6 @@ if getattr(settings, 'UNIFIED_JOBS_STEP') == 0: new_inventory_sources = models.ManyToManyField( 'InventorySourceNew', related_name='groups', - blank=True, editable=False, help_text=_('Inventory source(s) that created or modified this group.'), ) @@ -596,7 +589,6 @@ if getattr(settings, 'UNIFIED_JOBS_STEP') == 1: new_inventory_sources = models.ManyToManyField( 'InventorySourceNew', related_name='groups', - blank=True, editable=False, help_text=_('Inventory source(s) that created or modified this group.'), ) @@ -612,7 +604,6 @@ if getattr(settings, 'UNIFIED_JOBS_STEP') == 2: inventory_sources = models.ManyToManyField( 'InventorySource', related_name='groups', - blank=True, editable=False, help_text=_('Inventory source(s) that created or modified this group.'), ) @@ -655,7 +646,7 @@ class InventorySourceOptions(BaseModel): null=True, default=None, blank=True, - #on_delete=models.SET_NULL, # FIXME + on_delete=models.SET_NULL, ) source_regions = models.CharField( max_length=1024, @@ -830,14 +821,15 @@ if getattr(settings, 'UNIFIED_JOBS_STEP') == 0: null=True, default=None, editable=False, + on_delete=models.CASCADE, ) group = AutoOneToOneField( 'Group', related_name='inventory_source', - blank=True, null=True, default=None, editable=False, + on_delete=models.CASCADE, ) current_update = models.ForeignKey( 'InventoryUpdate', @@ -845,6 +837,7 @@ if getattr(settings, 'UNIFIED_JOBS_STEP') == 0: default=None, editable=False, related_name='inventory_source_as_current_update+', + on_delete=models.SET_NULL, ) last_update = models.ForeignKey( 'InventoryUpdate', @@ -852,6 +845,7 @@ if getattr(settings, 'UNIFIED_JOBS_STEP') == 0: default=None, editable=False, related_name='inventory_source_as_last_update+', + on_delete=models.SET_NULL, ) last_update_failed = models.BooleanField( default=False, @@ -882,14 +876,15 @@ if getattr(settings, 'UNIFIED_JOBS_STEP') in (0, 1): null=True, default=None, editable=False, + on_delete=models.CASCADE, ) group = AutoOneToOneField( 'Group', related_name='new_inventory_source', - blank=True, null=True, default=None, editable=False, + on_delete=models.CASCADE, ) if getattr(settings, 'UNIFIED_JOBS_STEP') == 1: @@ -912,14 +907,15 @@ if getattr(settings, 'UNIFIED_JOBS_STEP') == 2: null=True, default=None, editable=False, + on_delete=models.CASCADE, ) group = AutoOneToOneField( 'Group', related_name='inventory_source', - blank=True, null=True, default=None, editable=False, + on_delete=models.CASCADE, ) @@ -972,8 +968,8 @@ if getattr(settings, 'UNIFIED_JOBS_STEP') == 0: inventory_source = models.ForeignKey( 'InventorySource', related_name='inventory_updates', - on_delete=models.CASCADE, editable=False, + on_delete=models.CASCADE, ) if getattr(settings, 'UNIFIED_JOBS_STEP') in (0, 1): @@ -986,8 +982,8 @@ if getattr(settings, 'UNIFIED_JOBS_STEP') in (0, 1): inventory_source = models.ForeignKey( 'InventorySourceNew', related_name='inventory_updates', - on_delete=models.CASCADE, editable=False, + on_delete=models.CASCADE, ) if getattr(settings, 'UNIFIED_JOBS_STEP') == 1: @@ -1007,6 +1003,6 @@ if getattr(settings, 'UNIFIED_JOBS_STEP') == 2: inventory_source = models.ForeignKey( 'InventorySource', related_name='inventory_updates', - on_delete=models.CASCADE, editable=False, + on_delete=models.CASCADE, ) diff --git a/awx/main/models/jobs.py b/awx/main/models/jobs.py index b7e96f2405..6da670b42c 100644 --- a/awx/main/models/jobs.py +++ b/awx/main/models/jobs.py @@ -243,7 +243,6 @@ class JobBase(JobOptions): hosts = models.ManyToManyField( 'Host', related_name='%(class)ss', - blank=True, editable=False, through='JobHostSummary', ) @@ -541,6 +540,8 @@ if getattr(settings, 'UNIFIED_JOBS_STEP') == 0: 'Job', related_name='job_host_summaries', on_delete=models.CASCADE, + null=True, + default=None, editable=False, ) new_job = models.ForeignKey( @@ -679,7 +680,6 @@ class JobEventBase(CreatedModifiedModel): host = models.ForeignKey( 'Host', related_name='job_events_as_primary_host', - blank=True, null=True, default=None, on_delete=models.SET_NULL, @@ -688,31 +688,26 @@ class JobEventBase(CreatedModifiedModel): hosts = models.ManyToManyField( 'Host', related_name='job_events', - blank=True, editable=False, ) play = models.CharField( max_length=1024, - blank=True, default='', editable=False, ) role = models.CharField( # FIXME: Determine from callback or task name. max_length=1024, - blank=True, default='', editable=False, ) task = models.CharField( max_length=1024, - blank=True, default='', editable=False, ) parent = models.ForeignKey( 'self', related_name='children', - blank=True, null=True, default=None, on_delete=models.SET_NULL, @@ -953,6 +948,8 @@ if getattr(settings, 'UNIFIED_JOBS_STEP') == 0: 'Job', related_name='job_events', on_delete=models.CASCADE, + null=True, + default=None, editable=False, ) new_job = models.ForeignKey( diff --git a/awx/main/models/organization.py b/awx/main/models/organization.py index 764187160f..75dba9d9ee 100644 --- a/awx/main/models/organization.py +++ b/awx/main/models/organization.py @@ -349,6 +349,13 @@ class Credential(CommonModelNameNotUnique): verbose_name=_('SSH private key'), help_text=_('RSA or DSA private key to be used instead of password.'), ) + ssh_key_path = models.CharField( + max_length=1024, + blank=True, + default='', + verbose_name=_('SSH key path'), + help_text=_('Path to SSH private key file.'), + ) ssh_key_unlock = models.CharField( max_length=1024, blank=True, @@ -369,6 +376,12 @@ class Credential(CommonModelNameNotUnique): default='', help_text=_('Sudo password (or "ASK" to prompt the user).'), ) + vault_password = models.CharField( + max_length=1024, + blank=True, + default='', + help_text=_('Vault password (or "ASK" to prompt the user).'), + ) @property def needs_password(self): @@ -377,7 +390,7 @@ class Credential(CommonModelNameNotUnique): @property def needs_ssh_key_unlock(self): return self.kind == 'ssh' and self.ssh_key_unlock == 'ASK' and \ - 'ENCRYPTED' in decrypt_field(self, 'ssh_key_data') + 'ENCRYPTED' in decrypt_field(self, 'ssh_key_data') # FIXME: Support ssh_key_path @property def needs_sudo_password(self): diff --git a/awx/main/models/projects.py b/awx/main/models/projects.py index 3eb7926ed7..5b6b923cf1 100644 --- a/awx/main/models/projects.py +++ b/awx/main/models/projects.py @@ -102,6 +102,7 @@ class ProjectOptions(models.Model): blank=True, null=True, default=None, + on_delete=models.SET_NULL, ) def clean_scm_type(self): @@ -331,6 +332,7 @@ if getattr(settings, 'UNIFIED_JOBS_STEP') == 0: default=None, editable=False, related_name='project_as_current_update+', + on_delete=models.SET_NULL, ) last_update = models.ForeignKey( 'ProjectUpdate', @@ -338,6 +340,7 @@ if getattr(settings, 'UNIFIED_JOBS_STEP') == 0: default=None, editable=False, related_name='project_as_last_update+', + on_delete=models.SET_NULL, ) last_update_failed = models.BooleanField( default=False, diff --git a/awx/main/models/schedules.py b/awx/main/models/schedules.py index 06da1ecdfe..d22648b520 100644 --- a/awx/main/models/schedules.py +++ b/awx/main/models/schedules.py @@ -24,22 +24,30 @@ class Schedule(CommonModel): objects = ScheduleManager() - job_template = models.ForeignKey( + unified_job_template = models.ForeignKey( 'UnifiedJobTemplate', related_name='schedules', on_delete=models.CASCADE, ) + enabled = models.BooleanField( + default=True, + ) dtstart = models.DateTimeField( ) dtend = models.DateTimeField( null=True, default=None, - editable=False + editable=False, ) rrule = models.CharField( max_length=255, ) + next_run = models.DateTimeField( + null=True, + default=None, + editable=False, + ) def save(self, *args, **kwargs): super(Schedule, self).save(*args, **kwargs) diff --git a/awx/main/models/unified_jobs.py b/awx/main/models/unified_jobs.py index db279348dd..9add8f69f2 100644 --- a/awx/main/models/unified_jobs.py +++ b/awx/main/models/unified_jobs.py @@ -72,6 +72,7 @@ class UnifiedJobTemplate(PolymorphicModel, CommonModelNameNotUnique): default=None, editable=False, related_name='%(class)s_as_current_job+', + on_delete=models.SET_NULL, ) last_job = models.ForeignKey( # alias for last_update 'UnifiedJob', @@ -79,6 +80,7 @@ class UnifiedJobTemplate(PolymorphicModel, CommonModelNameNotUnique): default=None, editable=False, related_name='%(class)s_as_last_job+', + on_delete=models.SET_NULL, ) last_job_failed = models.BooleanField( # alias for last_update_failed default=False, @@ -97,11 +99,19 @@ class UnifiedJobTemplate(PolymorphicModel, CommonModelNameNotUnique): # max_length=32, # choices=[], #) - next_job_run = models.DateTimeField( # FIXME: Calculate from schedule. + next_job_run = models.DateTimeField( # FIXME: Calculate from schedules. null=True, default=None, editable=False, ) + next_schedule = models.ForeignKey( # Schedule entry responsible for next_job_run. + 'Schedule', + null=True, + default=None, + editable=False, + related_name='%(class)s_as_next_schedule+', + on_delete=models.SET_NULL, + ) status = models.CharField( max_length=32, choices=STATUS_CHOICES, @@ -156,17 +166,8 @@ class UnifiedJobTemplate(PolymorphicModel, CommonModelNameNotUnique): def _set_status_and_last_job_run(self, save=True): status = self._get_current_status() last_job_run = self._get_last_job_run() - # Update values if changed. - update_fields = [] - if self.status != status: - self.status = status - update_fields.append('status') - if self.last_job_run != last_job_run: - self.last_job_run = last_job_run - update_fields.append('last_job_run') - if save and update_fields: - self.save(update_fields=update_fields) - return update_fields + return self.update_fields(status=status, last_job_run=last_job_run, + save=save) def _can_update(self): # Override in subclasses as needed. @@ -212,7 +213,7 @@ class UnifiedJobTemplate(PolymorphicModel, CommonModelNameNotUnique): return unified_job -class UnifiedJob(PolymorphicModel, PrimordialModel): +class UnifiedJob(PolymorphicModel, CommonModelNameNotUnique): ''' Concrete base class for unified job run by the task engine. ''' @@ -238,6 +239,7 @@ class UnifiedJob(PolymorphicModel, PrimordialModel): default=None, editable=False, related_name='%(class)s_unified_jobs', + on_delete=models.SET_NULL, ) launch_type = models.CharField( max_length=20, @@ -245,16 +247,17 @@ class UnifiedJob(PolymorphicModel, PrimordialModel): default='manual', editable=False, ) - schedule = models.ForeignKey( + schedule = models.ForeignKey( # Which schedule entry was responsible for starting this job. 'Schedule', null=True, default=None, editable=False, + on_delete=models.SET_NULL, ) - depends_on = models.ManyToManyField( + dependent_jobs = models.ManyToManyField( 'self', editable=False, - related_name='%(class)s_blocked_by+', + related_name='%(class)s_blocked_jobs+', ) cancel_flag = models.BooleanField( blank=True,