742 lines
36 KiB
Python
742 lines
36 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
# Copyright (c) 2016 Ansible, Inc.
|
|
# All Rights Reserved.
|
|
|
|
from __future__ import unicode_literals
|
|
|
|
import awx.main.fields
|
|
|
|
from django.db import migrations, models
|
|
import django.db.models.deletion
|
|
from django.conf import settings
|
|
from django.utils.timezone import now
|
|
|
|
import jsonfield.fields
|
|
import taggit.managers
|
|
|
|
|
|
def create_system_job_templates(apps, schema_editor):
|
|
'''
|
|
Create default system job templates if not present. Create default schedules
|
|
only if new system job templates were created (i.e. new database).
|
|
'''
|
|
|
|
SystemJobTemplate = apps.get_model('main', 'SystemJobTemplate')
|
|
Schedule = apps.get_model('main', 'Schedule')
|
|
ContentType = apps.get_model('contenttypes', 'ContentType')
|
|
sjt_ct = ContentType.objects.get_for_model(SystemJobTemplate)
|
|
now_dt = now()
|
|
now_str = now_dt.strftime('%Y%m%dT%H%M%SZ')
|
|
|
|
sjt, created = SystemJobTemplate.objects.get_or_create(
|
|
job_type='cleanup_jobs',
|
|
defaults=dict(
|
|
name='Cleanup Job Details',
|
|
description='Remove job history',
|
|
created=now_dt,
|
|
modified=now_dt,
|
|
polymorphic_ctype=sjt_ct,
|
|
),
|
|
)
|
|
if created:
|
|
sched = Schedule(
|
|
name='Cleanup Job Schedule',
|
|
rrule='DTSTART:%s RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=SU' % now_str,
|
|
description='Automatically Generated Schedule',
|
|
enabled=True,
|
|
extra_data={'days': '120'},
|
|
created=now_dt,
|
|
modified=now_dt,
|
|
)
|
|
sched.unified_job_template = sjt
|
|
sched.save()
|
|
|
|
existing_cd_jobs = SystemJobTemplate.objects.filter(job_type='cleanup_deleted')
|
|
Schedule.objects.filter(unified_job_template__in=existing_cd_jobs).delete()
|
|
existing_cd_jobs.delete()
|
|
|
|
sjt, created = SystemJobTemplate.objects.get_or_create(
|
|
job_type='cleanup_activitystream',
|
|
defaults=dict(
|
|
name='Cleanup Activity Stream',
|
|
description='Remove activity stream history',
|
|
created=now_dt,
|
|
modified=now_dt,
|
|
polymorphic_ctype=sjt_ct,
|
|
),
|
|
)
|
|
if created:
|
|
sched = Schedule(
|
|
name='Cleanup Activity Schedule',
|
|
rrule='DTSTART:%s RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU' % now_str,
|
|
description='Automatically Generated Schedule',
|
|
enabled=True,
|
|
extra_data={'days': '355'},
|
|
created=now_dt,
|
|
modified=now_dt,
|
|
)
|
|
sched.unified_job_template = sjt
|
|
sched.save()
|
|
|
|
sjt, created = SystemJobTemplate.objects.get_or_create(
|
|
job_type='cleanup_facts',
|
|
defaults=dict(
|
|
name='Cleanup Fact Details',
|
|
description='Remove system tracking history',
|
|
created=now_dt,
|
|
modified=now_dt,
|
|
polymorphic_ctype=sjt_ct,
|
|
),
|
|
)
|
|
if created:
|
|
sched = Schedule(
|
|
name='Cleanup Fact Schedule',
|
|
rrule='DTSTART:%s RRULE:FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=1' % now_str,
|
|
description='Automatically Generated Schedule',
|
|
enabled=True,
|
|
extra_data={'older_than': '120d', 'granularity': '1w'},
|
|
created=now_dt,
|
|
modified=now_dt,
|
|
)
|
|
sched.unified_job_template = sjt
|
|
sched.save()
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
replaces = [('main', '0002_v300_tower_settings_changes'),
|
|
('main', '0003_v300_notification_changes'),
|
|
('main', '0004_v300_fact_changes'),
|
|
('main', '0005_v300_migrate_facts'),
|
|
('main', '0006_v300_active_flag_cleanup'),
|
|
('main', '0007_v300_active_flag_removal'),
|
|
('main', '0008_v300_rbac_changes'),
|
|
('main', '0009_v300_rbac_migrations'),
|
|
('main', '0010_v300_create_system_job_templates'),
|
|
('main', '0011_v300_credential_domain_field'),
|
|
('main', '0012_v300_create_labels'),
|
|
('main', '0013_v300_label_changes'),
|
|
('main', '0014_v300_invsource_cred'),
|
|
('main', '0015_v300_label_changes'),
|
|
('main', '0016_v300_prompting_changes'),
|
|
('main', '0017_v300_prompting_migrations'),
|
|
('main', '0018_v300_host_ordering'),
|
|
('main', '0019_v300_new_azure_credential'),]
|
|
|
|
dependencies = [
|
|
('taggit', '0002_auto_20150616_2121'),
|
|
('contenttypes', '0002_remove_content_type_name'),
|
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
('main', '0001_initial'),
|
|
]
|
|
|
|
operations = [
|
|
# Tower settings changes
|
|
migrations.CreateModel(
|
|
name='TowerSettings',
|
|
fields=[
|
|
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
|
('created', models.DateTimeField(default=None, editable=False)),
|
|
('modified', models.DateTimeField(default=None, editable=False)),
|
|
('key', models.CharField(unique=True, max_length=255)),
|
|
('description', models.TextField()),
|
|
('category', models.CharField(max_length=128)),
|
|
('value', models.TextField(blank=True)),
|
|
('value_type', models.CharField(max_length=12, choices=[('string', 'String'), ('int', 'Integer'), ('float', 'Decimal'), ('json', 'JSON'), ('bool', 'Boolean'), ('password', 'Password'), ('list', 'List')])),
|
|
('user', models.ForeignKey(related_name='settings', default=None, editable=False, to=settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True)),
|
|
],
|
|
),
|
|
# Notification changes
|
|
migrations.CreateModel(
|
|
name='Notification',
|
|
fields=[
|
|
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
|
('created', models.DateTimeField(default=None, editable=False)),
|
|
('modified', models.DateTimeField(default=None, editable=False)),
|
|
('status', models.CharField(default='pending', max_length=20, editable=False, choices=[('pending', 'Pending'), ('successful', 'Successful'), ('failed', 'Failed')])),
|
|
('error', models.TextField(default='', editable=False, blank=True)),
|
|
('notifications_sent', models.IntegerField(default=0, editable=False)),
|
|
('notification_type', models.CharField(max_length=32, choices=[('email', 'Email'), ('slack', 'Slack'), ('twilio', 'Twilio'), ('pagerduty', 'Pagerduty'), ('hipchat', 'HipChat'), ('webhook', 'Webhook'), ('mattermost', 'Mattermost'), ('rocketchat', 'Rocket.Chat'), ('irc', 'IRC')])),
|
|
('recipients', models.TextField(default='', editable=False, blank=True)),
|
|
('subject', models.TextField(default='', editable=False, blank=True)),
|
|
('body', jsonfield.fields.JSONField(default=dict, blank=True)),
|
|
],
|
|
options={
|
|
'ordering': ('pk',),
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='NotificationTemplate',
|
|
fields=[
|
|
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
|
('created', models.DateTimeField(default=None, editable=False)),
|
|
('modified', models.DateTimeField(default=None, editable=False)),
|
|
('description', models.TextField(default='', blank=True)),
|
|
('name', models.CharField(unique=True, max_length=512)),
|
|
('notification_type', models.CharField(max_length=32, choices=[('email', 'Email'), ('slack', 'Slack'), ('twilio', 'Twilio'), ('pagerduty', 'Pagerduty'), ('hipchat', 'HipChat'), ('webhook', 'Webhook'), ('mattermost', 'Mattermost'), ('rocketchat', 'Rocket.Chat'), ('irc', 'IRC')])),
|
|
('notification_configuration', jsonfield.fields.JSONField(default=dict)),
|
|
('created_by', models.ForeignKey(related_name="{u'class': 'notificationtemplate', u'app_label': 'main'}(class)s_created+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)),
|
|
('modified_by', models.ForeignKey(related_name="{u'class': 'notificationtemplate', u'app_label': 'main'}(class)s_modified+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)),
|
|
('organization', models.ForeignKey(related_name='notification_templates', on_delete=django.db.models.deletion.SET_NULL, to='main.Organization', null=True)),
|
|
('tags', taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags')),
|
|
],
|
|
),
|
|
migrations.AddField(
|
|
model_name='notification',
|
|
name='notification_template',
|
|
field=models.ForeignKey(related_name='notifications', editable=False, on_delete=models.CASCADE, to='main.NotificationTemplate'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='activitystream',
|
|
name='notification',
|
|
field=models.ManyToManyField(to='main.Notification', blank=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='activitystream',
|
|
name='notification_template',
|
|
field=models.ManyToManyField(to='main.NotificationTemplate', blank=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='organization',
|
|
name='notification_templates_any',
|
|
field=models.ManyToManyField(related_name='organization_notification_templates_for_any', to='main.NotificationTemplate', blank=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='organization',
|
|
name='notification_templates_error',
|
|
field=models.ManyToManyField(related_name='organization_notification_templates_for_errors', to='main.NotificationTemplate', blank=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='organization',
|
|
name='notification_templates_success',
|
|
field=models.ManyToManyField(related_name='organization_notification_templates_for_success', to='main.NotificationTemplate', blank=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='unifiedjob',
|
|
name='notifications',
|
|
field=models.ManyToManyField(related_name='unifiedjob_notifications', editable=False, to='main.Notification'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='unifiedjobtemplate',
|
|
name='notification_templates_any',
|
|
field=models.ManyToManyField(related_name='unifiedjobtemplate_notification_templates_for_any', to='main.NotificationTemplate', blank=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='unifiedjobtemplate',
|
|
name='notification_templates_error',
|
|
field=models.ManyToManyField(related_name='unifiedjobtemplate_notification_templates_for_errors', to='main.NotificationTemplate', blank=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='unifiedjobtemplate',
|
|
name='notification_templates_success',
|
|
field=models.ManyToManyField(related_name='unifiedjobtemplate_notification_templates_for_success', to='main.NotificationTemplate', blank=True),
|
|
),
|
|
# Fact changes
|
|
migrations.CreateModel(
|
|
name='Fact',
|
|
fields=[
|
|
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
|
('timestamp', models.DateTimeField(default=None, help_text='Date and time of the corresponding fact scan gathering time.', editable=False)),
|
|
('module', models.CharField(max_length=128)),
|
|
('facts', awx.main.fields.JSONBField(default=dict, help_text='Arbitrary JSON structure of module facts captured at timestamp for a single host.', blank=True)),
|
|
('host', models.ForeignKey(related_name='facts', to='main.Host', on_delete=models.CASCADE, help_text='Host for the facts that the fact scan captured.')),
|
|
],
|
|
),
|
|
migrations.AlterIndexTogether(
|
|
name='fact',
|
|
index_together=set([('timestamp', 'module', 'host')]),
|
|
),
|
|
# Active flag removal
|
|
migrations.RemoveField(
|
|
model_name='credential',
|
|
name='active',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='custominventoryscript',
|
|
name='active',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='group',
|
|
name='active',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='host',
|
|
name='active',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='inventory',
|
|
name='active',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='organization',
|
|
name='active',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='permission',
|
|
name='active',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='schedule',
|
|
name='active',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='team',
|
|
name='active',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='unifiedjob',
|
|
name='active',
|
|
),
|
|
migrations.RemoveField(
|
|
model_name='unifiedjobtemplate',
|
|
name='active',
|
|
),
|
|
|
|
# RBAC Changes
|
|
# ############
|
|
migrations.RenameField(
|
|
'Organization',
|
|
'admins',
|
|
'deprecated_admins',
|
|
),
|
|
migrations.RenameField(
|
|
'Organization',
|
|
'users',
|
|
'deprecated_users',
|
|
),
|
|
migrations.RenameField(
|
|
'Team',
|
|
'users',
|
|
'deprecated_users',
|
|
),
|
|
migrations.RenameField(
|
|
'Team',
|
|
'projects',
|
|
'deprecated_projects',
|
|
),
|
|
migrations.AddField(
|
|
model_name='project',
|
|
name='organization',
|
|
field=models.ForeignKey(related_name='projects', to='main.Organization', on_delete=models.CASCADE, blank=True, null=True),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='team',
|
|
name='deprecated_projects',
|
|
field=models.ManyToManyField(related_name='deprecated_teams', to='main.Project', blank=True),
|
|
),
|
|
migrations.RenameField(
|
|
model_name='organization',
|
|
old_name='projects',
|
|
new_name='deprecated_projects',
|
|
),
|
|
migrations.AlterField(
|
|
model_name='organization',
|
|
name='deprecated_projects',
|
|
field=models.ManyToManyField(related_name='deprecated_organizations', to='main.Project', blank=True),
|
|
),
|
|
migrations.RenameField(
|
|
'Credential',
|
|
'team',
|
|
'deprecated_team',
|
|
),
|
|
migrations.RenameField(
|
|
'Credential',
|
|
'user',
|
|
'deprecated_user',
|
|
),
|
|
migrations.AlterField(
|
|
model_name='organization',
|
|
name='deprecated_admins',
|
|
field=models.ManyToManyField(related_name='deprecated_admin_of_organizations', to=settings.AUTH_USER_MODEL, blank=True),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='organization',
|
|
name='deprecated_users',
|
|
field=models.ManyToManyField(related_name='deprecated_organizations', to=settings.AUTH_USER_MODEL, blank=True),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='team',
|
|
name='deprecated_users',
|
|
field=models.ManyToManyField(related_name='deprecated_teams', to=settings.AUTH_USER_MODEL, blank=True),
|
|
),
|
|
migrations.AlterUniqueTogether(
|
|
name='credential',
|
|
unique_together=set([]),
|
|
),
|
|
migrations.AddField(
|
|
model_name='credential',
|
|
name='organization',
|
|
field=models.ForeignKey(related_name='credentials', on_delete=models.CASCADE, default=None, blank=True, to='main.Organization', null=True),
|
|
),
|
|
|
|
#
|
|
# New RBAC models and fields
|
|
#
|
|
migrations.CreateModel(
|
|
name='Role',
|
|
fields=[
|
|
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
|
('role_field', models.TextField()),
|
|
('singleton_name', models.TextField(default=None, unique=True, null=True, db_index=True)),
|
|
('members', models.ManyToManyField(related_name='roles', to=settings.AUTH_USER_MODEL)),
|
|
('parents', models.ManyToManyField(related_name='children', to='main.Role')),
|
|
('implicit_parents', models.TextField(default='[]')),
|
|
('content_type', models.ForeignKey(default=None, to='contenttypes.ContentType', on_delete=models.CASCADE, null=True)),
|
|
('object_id', models.PositiveIntegerField(default=None, null=True)),
|
|
|
|
],
|
|
options={
|
|
'db_table': 'main_rbac_roles',
|
|
'verbose_name_plural': 'roles',
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='RoleAncestorEntry',
|
|
fields=[
|
|
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
|
('role_field', models.TextField()),
|
|
('content_type_id', models.PositiveIntegerField()),
|
|
('object_id', models.PositiveIntegerField()),
|
|
('ancestor', models.ForeignKey(on_delete=models.CASCADE, related_name='+', to='main.Role')),
|
|
('descendent', models.ForeignKey(on_delete=models.CASCADE, related_name='+', to='main.Role')),
|
|
],
|
|
options={
|
|
'db_table': 'main_rbac_role_ancestors',
|
|
'verbose_name_plural': 'role_ancestors',
|
|
},
|
|
),
|
|
migrations.AddField(
|
|
model_name='role',
|
|
name='ancestors',
|
|
field=models.ManyToManyField(related_name='descendents', through='main.RoleAncestorEntry', to='main.Role'),
|
|
),
|
|
migrations.AlterIndexTogether(
|
|
name='role',
|
|
index_together=set([('content_type', 'object_id')]),
|
|
),
|
|
migrations.AlterIndexTogether(
|
|
name='roleancestorentry',
|
|
index_together=set([('ancestor', 'content_type_id', 'object_id'), ('ancestor', 'content_type_id', 'role_field'), ('ancestor', 'descendent')]),
|
|
),
|
|
migrations.AddField(
|
|
model_name='credential',
|
|
name='admin_role',
|
|
field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=['singleton:system_administrator'], to='main.Role', null='True'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='credential',
|
|
name='use_role',
|
|
field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=['admin_role'], to='main.Role', null='True'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='credential',
|
|
name='read_role',
|
|
field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=['singleton:system_auditor', 'organization.auditor_role', 'use_role', 'admin_role'], to='main.Role', null='True'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='custominventoryscript',
|
|
name='admin_role',
|
|
field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role='organization.admin_role', to='main.Role', null='True'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='custominventoryscript',
|
|
name='read_role',
|
|
field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=['organization.auditor_role', 'organization.member_role', 'admin_role'], to='main.Role', null='True'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='inventory',
|
|
name='admin_role',
|
|
field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role='organization.admin_role', to='main.Role', null='True'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='inventory',
|
|
name='adhoc_role',
|
|
field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role='admin_role', to='main.Role', null='True'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='inventory',
|
|
name='update_role',
|
|
field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role='admin_role', to='main.Role', null='True'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='inventory',
|
|
name='use_role',
|
|
field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role='adhoc_role', to='main.Role', null='True'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='inventory',
|
|
name='read_role',
|
|
field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=['organization.auditor_role', 'update_role', 'use_role', 'admin_role'], to='main.Role', null='True'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='jobtemplate',
|
|
name='admin_role',
|
|
field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=['project.organization.admin_role', 'inventory.organization.admin_role'], to='main.Role', null='True'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='jobtemplate',
|
|
name='execute_role',
|
|
field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=['admin_role'], to='main.Role', null='True'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='jobtemplate',
|
|
name='read_role',
|
|
field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=['project.organization.auditor_role', 'inventory.organization.auditor_role', 'execute_role', 'admin_role'], to='main.Role', null='True'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='organization',
|
|
name='admin_role',
|
|
field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role='singleton:system_administrator', to='main.Role', null='True'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='organization',
|
|
name='auditor_role',
|
|
field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role='singleton:system_auditor', to='main.Role', null='True'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='organization',
|
|
name='member_role',
|
|
field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role='admin_role', to='main.Role', null='True'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='organization',
|
|
name='read_role',
|
|
field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=['member_role', 'auditor_role'], to='main.Role', null='True'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='project',
|
|
name='admin_role',
|
|
field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=['organization.admin_role', 'singleton:system_administrator'], to='main.Role', null='True'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='project',
|
|
name='use_role',
|
|
field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role='admin_role', to='main.Role', null='True'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='project',
|
|
name='update_role',
|
|
field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role='admin_role', to='main.Role', null='True'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='project',
|
|
name='read_role',
|
|
field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=['organization.auditor_role', 'singleton:system_auditor', 'use_role', 'update_role'], to='main.Role', null='True'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='team',
|
|
name='admin_role',
|
|
field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role='organization.admin_role', to='main.Role', null='True'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='team',
|
|
name='member_role',
|
|
field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=None, to='main.Role', null='True'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='team',
|
|
name='read_role',
|
|
field=awx.main.fields.ImplicitRoleField(related_name='+', parent_role=['admin_role', 'organization.auditor_role', 'member_role'], to='main.Role', null='True'),
|
|
),
|
|
|
|
# System Job Templates
|
|
migrations.RunPython(create_system_job_templates, migrations.RunPython.noop),
|
|
migrations.AlterField(
|
|
model_name='systemjob',
|
|
name='job_type',
|
|
field=models.CharField(default='', max_length=32, blank=True, choices=[('cleanup_jobs', 'Remove jobs older than a certain number of days'), ('cleanup_activitystream', 'Remove activity stream entries older than a certain number of days'), ('cleanup_facts', 'Purge and/or reduce the granularity of system tracking data')]),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='systemjobtemplate',
|
|
name='job_type',
|
|
field=models.CharField(default='', max_length=32, blank=True, choices=[('cleanup_jobs', 'Remove jobs older than a certain number of days'), ('cleanup_activitystream', 'Remove activity stream entries older than a certain number of days'), ('cleanup_facts', 'Purge and/or reduce the granularity of system tracking data')]),
|
|
),
|
|
# Credential domain field
|
|
migrations.AddField(
|
|
model_name='credential',
|
|
name='domain',
|
|
field=models.CharField(default='', help_text='The identifier for the domain.', max_length=100, verbose_name='Domain', blank=True),
|
|
),
|
|
# Create Labels
|
|
migrations.CreateModel(
|
|
name='Label',
|
|
fields=[
|
|
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
|
('created', models.DateTimeField(default=None, editable=False)),
|
|
('modified', models.DateTimeField(default=None, editable=False)),
|
|
('description', models.TextField(default='', blank=True)),
|
|
('name', models.CharField(max_length=512)),
|
|
('created_by', models.ForeignKey(related_name="{u'class': 'label', u'app_label': 'main'}(class)s_created+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)),
|
|
('modified_by', models.ForeignKey(related_name="{u'class': 'label', u'app_label': 'main'}(class)s_modified+", on_delete=django.db.models.deletion.SET_NULL, default=None, editable=False, to=settings.AUTH_USER_MODEL, null=True)),
|
|
('organization', models.ForeignKey(related_name='labels', on_delete=django.db.models.deletion.CASCADE, to='main.Organization', help_text='Organization this label belongs to.')),
|
|
('tags', taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags')),
|
|
],
|
|
options={
|
|
'ordering': ('organization', 'name'),
|
|
},
|
|
),
|
|
migrations.AddField(
|
|
model_name='activitystream',
|
|
name='label',
|
|
field=models.ManyToManyField(to='main.Label', blank=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='job',
|
|
name='labels',
|
|
field=models.ManyToManyField(related_name='job_labels', to='main.Label', blank=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='jobtemplate',
|
|
name='labels',
|
|
field=models.ManyToManyField(related_name='jobtemplate_labels', to='main.Label', blank=True),
|
|
),
|
|
migrations.AlterUniqueTogether(
|
|
name='label',
|
|
unique_together=set([('name', 'organization')]),
|
|
),
|
|
# Label changes
|
|
migrations.AlterField(
|
|
model_name='label',
|
|
name='organization',
|
|
field=models.ForeignKey(related_name='labels', on_delete=django.db.models.deletion.CASCADE, default=None, blank=True, to='main.Organization', help_text='Organization this label belongs to.', null=True),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='label',
|
|
name='organization',
|
|
field=models.ForeignKey(related_name='labels', on_delete=django.db.models.deletion.CASCADE, to='main.Organization', help_text='Organization this label belongs to.'),
|
|
),
|
|
# InventorySource Credential
|
|
migrations.AddField(
|
|
model_name='job',
|
|
name='network_credential',
|
|
field=models.ForeignKey(related_name='jobs_as_network_credential+', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.Credential', null=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='jobtemplate',
|
|
name='network_credential',
|
|
field=models.ForeignKey(related_name='jobtemplates_as_network_credential+', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.Credential', null=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='credential',
|
|
name='authorize',
|
|
field=models.BooleanField(default=False, help_text='Whether to use the authorize mechanism.'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='credential',
|
|
name='authorize_password',
|
|
field=models.CharField(default='', help_text='Password used by the authorize mechanism.', max_length=1024, blank=True),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='credential',
|
|
name='deprecated_team',
|
|
field=models.ForeignKey(related_name='deprecated_credentials', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.Team', null=True),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='credential',
|
|
name='deprecated_user',
|
|
field=models.ForeignKey(related_name='deprecated_credentials', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to=settings.AUTH_USER_MODEL, null=True),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='credential',
|
|
name='kind',
|
|
field=models.CharField(default='ssh', max_length=32, choices=[('ssh', 'Machine'), ('net', 'Network'), ('scm', 'Source Control'), ('aws', 'Amazon Web Services'), ('rax', 'Rackspace'), ('vmware', 'VMware vCenter'), ('satellite6', 'Red Hat Satellite 6'), ('cloudforms', 'Red Hat CloudForms'), ('gce', 'Google Compute Engine'), ('azure', 'Microsoft Azure'), ('openstack', 'OpenStack')]),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='inventorysource',
|
|
name='source',
|
|
field=models.CharField(default='', max_length=32, blank=True, choices=[('', 'Manual'), ('file', 'Local File, Directory or Script'), ('rax', 'Rackspace Cloud Servers'), ('ec2', 'Amazon EC2'), ('gce', 'Google Compute Engine'), ('azure', 'Microsoft Azure'), ('vmware', 'VMware vCenter'), ('satellite6', 'Red Hat Satellite 6'), ('cloudforms', 'Red Hat CloudForms'), ('openstack', 'OpenStack'), ('custom', 'Custom Script')]),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='inventoryupdate',
|
|
name='source',
|
|
field=models.CharField(default='', max_length=32, blank=True, choices=[('', 'Manual'), ('file', 'Local File, Directory or Script'), ('rax', 'Rackspace Cloud Servers'), ('ec2', 'Amazon EC2'), ('gce', 'Google Compute Engine'), ('azure', 'Microsoft Azure'), ('vmware', 'VMware vCenter'), ('satellite6', 'Red Hat Satellite 6'), ('cloudforms', 'Red Hat CloudForms'), ('openstack', 'OpenStack'), ('custom', 'Custom Script')]),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='team',
|
|
name='deprecated_projects',
|
|
field=models.ManyToManyField(related_name='deprecated_teams', to='main.Project', blank=True),
|
|
),
|
|
# Prompting changes
|
|
migrations.AddField(
|
|
model_name='jobtemplate',
|
|
name='ask_limit_on_launch',
|
|
field=models.BooleanField(default=False),
|
|
),
|
|
migrations.AddField(
|
|
model_name='jobtemplate',
|
|
name='ask_inventory_on_launch',
|
|
field=models.BooleanField(default=False),
|
|
),
|
|
migrations.AddField(
|
|
model_name='jobtemplate',
|
|
name='ask_credential_on_launch',
|
|
field=models.BooleanField(default=False),
|
|
),
|
|
migrations.AddField(
|
|
model_name='jobtemplate',
|
|
name='ask_job_type_on_launch',
|
|
field=models.BooleanField(default=False),
|
|
),
|
|
migrations.AddField(
|
|
model_name='jobtemplate',
|
|
name='ask_tags_on_launch',
|
|
field=models.BooleanField(default=False),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='job',
|
|
name='inventory',
|
|
field=models.ForeignKey(related_name='jobs', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.Inventory', null=True),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='jobtemplate',
|
|
name='inventory',
|
|
field=models.ForeignKey(related_name='jobtemplates', on_delete=django.db.models.deletion.SET_NULL, default=None, blank=True, to='main.Inventory', null=True),
|
|
),
|
|
# Host ordering
|
|
migrations.AlterModelOptions(
|
|
name='host',
|
|
options={'ordering': ('name',)},
|
|
),
|
|
# New Azure credential
|
|
migrations.AddField(
|
|
model_name='credential',
|
|
name='client',
|
|
field=models.CharField(default='', help_text='Client Id or Application Id for the credential', max_length=128, blank=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='credential',
|
|
name='secret',
|
|
field=models.CharField(default='', help_text='Secret Token for this credential', max_length=1024, blank=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='credential',
|
|
name='subscription',
|
|
field=models.CharField(default='', help_text='Subscription identifier for this credential', max_length=1024, blank=True),
|
|
),
|
|
migrations.AddField(
|
|
model_name='credential',
|
|
name='tenant',
|
|
field=models.CharField(default='', help_text='Tenant identifier for this credential', max_length=1024, blank=True),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='credential',
|
|
name='kind',
|
|
field=models.CharField(default='ssh', max_length=32, choices=[('ssh', 'Machine'), ('net', 'Network'), ('scm', 'Source Control'), ('aws', 'Amazon Web Services'), ('rax', 'Rackspace'), ('vmware', 'VMware vCenter'), ('satellite6', 'Satellite 6'), ('cloudforms', 'CloudForms'), ('gce', 'Google Compute Engine'), ('azure', 'Microsoft Azure Classic (deprecated)'), ('azure_rm', 'Microsoft Azure Resource Manager'), ('openstack', 'OpenStack')]),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='host',
|
|
name='instance_id',
|
|
field=models.CharField(default='', max_length=1024, blank=True),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='inventorysource',
|
|
name='source',
|
|
field=models.CharField(default='', max_length=32, blank=True, choices=[('', 'Manual'), ('file', 'Local File, Directory or Script'), ('rax', 'Rackspace Cloud Servers'), ('ec2', 'Amazon EC2'), ('gce', 'Google Compute Engine'), ('azure', 'Microsoft Azure Classic (deprecated)'), ('azure_rm', 'Microsoft Azure Resource Manager'), ('vmware', 'VMware vCenter'), ('satellite6', 'Satellite 6'), ('cloudforms', 'CloudForms'), ('openstack', 'OpenStack'), ('custom', 'Custom Script')]),
|
|
),
|
|
migrations.AlterField(
|
|
model_name='inventoryupdate',
|
|
name='source',
|
|
field=models.CharField(default='', max_length=32, blank=True, choices=[('', 'Manual'), ('file', 'Local File, Directory or Script'), ('rax', 'Rackspace Cloud Servers'), ('ec2', 'Amazon EC2'), ('gce', 'Google Compute Engine'), ('azure', 'Microsoft Azure Classic (deprecated)'), ('azure_rm', 'Microsoft Azure Resource Manager'), ('vmware', 'VMware vCenter'), ('satellite6', 'Satellite 6'), ('cloudforms', 'CloudForms'), ('openstack', 'OpenStack'), ('custom', 'Custom Script')]),
|
|
),
|
|
]
|