mirror of
https://github.com/ansible/awx.git
synced 2026-05-19 14:57:39 -02:30
Making all non-complicated JSONBlobs JSONFields
This commit is contained in:
committed by
John Westcott IV
parent
baca43ee62
commit
7e25a694f3
17
awx/conf/migrations/0010_change_to_JSONField.py
Normal file
17
awx/conf/migrations/0010_change_to_JSONField.py
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# Generated by Django 4.2 on 2023-06-09 19:51
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [
|
||||||
|
('conf', '0009_rename_proot_settings'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='setting',
|
||||||
|
name='value',
|
||||||
|
field=models.JSONField(null=True),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -8,7 +8,6 @@ import json
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
# AWX
|
# AWX
|
||||||
from awx.main.fields import JSONBlob
|
|
||||||
from awx.main.models.base import CreatedModifiedModel, prevent_search
|
from awx.main.models.base import CreatedModifiedModel, prevent_search
|
||||||
from awx.main.utils import encrypt_field
|
from awx.main.utils import encrypt_field
|
||||||
from awx.conf import settings_registry
|
from awx.conf import settings_registry
|
||||||
@@ -18,7 +17,7 @@ __all__ = ['Setting']
|
|||||||
|
|
||||||
class Setting(CreatedModifiedModel):
|
class Setting(CreatedModifiedModel):
|
||||||
key = models.CharField(max_length=255)
|
key = models.CharField(max_length=255)
|
||||||
value = JSONBlob(null=True)
|
value = models.JSONField(null=True)
|
||||||
user = prevent_search(models.ForeignKey('auth.User', related_name='settings', default=None, null=True, editable=False, on_delete=models.CASCADE))
|
user = prevent_search(models.ForeignKey('auth.User', related_name='settings', default=None, null=True, editable=False, on_delete=models.CASCADE))
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
|||||||
142
awx/main/migrations/0185_move_JSONBlob_to_JSONField.py
Normal file
142
awx/main/migrations/0185_move_JSONBlob_to_JSONField.py
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
# Generated by Django 4.2 on 2023-06-09 19:51
|
||||||
|
|
||||||
|
import awx.main.models.notifications
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [
|
||||||
|
('main', '0184_django_indexes'),
|
||||||
|
('conf', '0010_change_to_JSONField'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='activitystream',
|
||||||
|
name='deleted_actor',
|
||||||
|
field=models.JSONField(null=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='activitystream',
|
||||||
|
name='setting',
|
||||||
|
field=models.JSONField(blank=True, default=dict),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='instancegroup',
|
||||||
|
name='policy_instance_list',
|
||||||
|
field=models.JSONField(
|
||||||
|
blank=True, default=list, help_text='List of exact-match Instances that will always be automatically assigned to this group'
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='job',
|
||||||
|
name='survey_passwords',
|
||||||
|
field=models.JSONField(blank=True, default=dict, editable=False),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='joblaunchconfig',
|
||||||
|
name='char_prompts',
|
||||||
|
field=models.JSONField(blank=True, default=dict),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='joblaunchconfig',
|
||||||
|
name='survey_passwords',
|
||||||
|
field=models.JSONField(blank=True, default=dict, editable=False),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='jobtemplate',
|
||||||
|
name='survey_spec',
|
||||||
|
field=models.JSONField(blank=True, default=dict),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='notification',
|
||||||
|
name='body',
|
||||||
|
field=models.JSONField(blank=True, default=dict),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='notificationtemplate',
|
||||||
|
name='messages',
|
||||||
|
field=models.JSONField(
|
||||||
|
blank=True,
|
||||||
|
default=awx.main.models.notifications.NotificationTemplate.default_messages,
|
||||||
|
help_text='Optional custom messages for notification template.',
|
||||||
|
null=True,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='notificationtemplate',
|
||||||
|
name='notification_configuration',
|
||||||
|
field=models.JSONField(default=dict),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='project',
|
||||||
|
name='inventory_files',
|
||||||
|
field=models.JSONField(
|
||||||
|
blank=True,
|
||||||
|
default=list,
|
||||||
|
editable=False,
|
||||||
|
help_text='Suggested list of content that could be Ansible inventory in the project',
|
||||||
|
verbose_name='Inventory Files',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='project',
|
||||||
|
name='playbook_files',
|
||||||
|
field=models.JSONField(blank=True, default=list, editable=False, help_text='List of playbooks found in the project', verbose_name='Playbook Files'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='schedule',
|
||||||
|
name='char_prompts',
|
||||||
|
field=models.JSONField(blank=True, default=dict),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='schedule',
|
||||||
|
name='survey_passwords',
|
||||||
|
field=models.JSONField(blank=True, default=dict, editable=False),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='unifiedjob',
|
||||||
|
name='job_env',
|
||||||
|
field=models.JSONField(blank=True, default=dict, editable=False),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='workflowjob',
|
||||||
|
name='char_prompts',
|
||||||
|
field=models.JSONField(blank=True, default=dict),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='workflowjob',
|
||||||
|
name='survey_passwords',
|
||||||
|
field=models.JSONField(blank=True, default=dict, editable=False),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='workflowjobnode',
|
||||||
|
name='char_prompts',
|
||||||
|
field=models.JSONField(blank=True, default=dict),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='workflowjobnode',
|
||||||
|
name='survey_passwords',
|
||||||
|
field=models.JSONField(blank=True, default=dict, editable=False),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='workflowjobtemplate',
|
||||||
|
name='char_prompts',
|
||||||
|
field=models.JSONField(blank=True, default=dict),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='workflowjobtemplate',
|
||||||
|
name='survey_spec',
|
||||||
|
field=models.JSONField(blank=True, default=dict),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='workflowjobtemplatenode',
|
||||||
|
name='char_prompts',
|
||||||
|
field=models.JSONField(blank=True, default=dict),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='workflowjobtemplatenode',
|
||||||
|
name='survey_passwords',
|
||||||
|
field=models.JSONField(blank=True, default=dict, editable=False),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
# AWX
|
# AWX
|
||||||
from awx.api.versioning import reverse
|
from awx.api.versioning import reverse
|
||||||
from awx.main.fields import JSONBlob
|
|
||||||
from awx.main.models.base import accepts_json
|
from awx.main.models.base import accepts_json
|
||||||
|
|
||||||
# Django
|
# Django
|
||||||
@@ -36,7 +35,7 @@ class ActivityStream(models.Model):
|
|||||||
operation = models.CharField(max_length=13, choices=OPERATION_CHOICES)
|
operation = models.CharField(max_length=13, choices=OPERATION_CHOICES)
|
||||||
timestamp = models.DateTimeField(auto_now_add=True)
|
timestamp = models.DateTimeField(auto_now_add=True)
|
||||||
changes = accepts_json(models.TextField(blank=True))
|
changes = accepts_json(models.TextField(blank=True))
|
||||||
deleted_actor = JSONBlob(null=True)
|
deleted_actor = models.JSONField(null=True)
|
||||||
action_node = models.CharField(
|
action_node = models.CharField(
|
||||||
blank=True,
|
blank=True,
|
||||||
default='',
|
default='',
|
||||||
@@ -84,7 +83,7 @@ class ActivityStream(models.Model):
|
|||||||
o_auth2_application = models.ManyToManyField("OAuth2Application", blank=True)
|
o_auth2_application = models.ManyToManyField("OAuth2Application", blank=True)
|
||||||
o_auth2_access_token = models.ManyToManyField("OAuth2AccessToken", blank=True)
|
o_auth2_access_token = models.ManyToManyField("OAuth2AccessToken", blank=True)
|
||||||
|
|
||||||
setting = JSONBlob(default=dict, blank=True)
|
setting = models.JSONField(default=dict, blank=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
operation = self.operation if 'operation' in self.__dict__ else '_delayed_'
|
operation = self.operation if 'operation' in self.__dict__ else '_delayed_'
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ from solo.models import SingletonModel
|
|||||||
# AWX
|
# AWX
|
||||||
from awx import __version__ as awx_application_version
|
from awx import __version__ as awx_application_version
|
||||||
from awx.api.versioning import reverse
|
from awx.api.versioning import reverse
|
||||||
from awx.main.fields import JSONBlob, ImplicitRoleField
|
from awx.main.fields import ImplicitRoleField
|
||||||
from awx.main.managers import InstanceManager, UUID_DEFAULT
|
from awx.main.managers import InstanceManager, UUID_DEFAULT
|
||||||
from awx.main.constants import JOB_FOLDER_PREFIX
|
from awx.main.constants import JOB_FOLDER_PREFIX
|
||||||
from awx.main.models.base import BaseModel, HasEditsMixin, prevent_search
|
from awx.main.models.base import BaseModel, HasEditsMixin, prevent_search
|
||||||
@@ -406,7 +406,7 @@ class InstanceGroup(HasPolicyEditsMixin, BaseModel, RelatedJobsMixin, ResourceMi
|
|||||||
max_forks = models.IntegerField(default=0, help_text=_("Max forks to execute on this group. Zero means no limit."))
|
max_forks = models.IntegerField(default=0, help_text=_("Max forks to execute on this group. Zero means no limit."))
|
||||||
policy_instance_percentage = models.IntegerField(default=0, help_text=_("Percentage of Instances to automatically assign to this group"))
|
policy_instance_percentage = models.IntegerField(default=0, help_text=_("Percentage of Instances to automatically assign to this group"))
|
||||||
policy_instance_minimum = models.IntegerField(default=0, help_text=_("Static minimum number of Instances to automatically assign to this group"))
|
policy_instance_minimum = models.IntegerField(default=0, help_text=_("Static minimum number of Instances to automatically assign to this group"))
|
||||||
policy_instance_list = JSONBlob(
|
policy_instance_list = models.JSONField(
|
||||||
default=list, blank=True, help_text=_("List of exact-match Instances that will always be automatically assigned to this group")
|
default=list, blank=True, help_text=_("List of exact-match Instances that will always be automatically assigned to this group")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -883,7 +883,7 @@ class LaunchTimeConfigBase(BaseModel):
|
|||||||
)
|
)
|
||||||
# All standard fields are stored in this dictionary field
|
# All standard fields are stored in this dictionary field
|
||||||
# This is a solution to the nullable CharField problem, specific to prompting
|
# This is a solution to the nullable CharField problem, specific to prompting
|
||||||
char_prompts = JSONBlob(default=dict, blank=True)
|
char_prompts = models.JSONField(default=dict, blank=True)
|
||||||
|
|
||||||
# Define fields that are not really fields, but alias to char_prompts lookups
|
# Define fields that are not really fields, but alias to char_prompts lookups
|
||||||
limit = NullablePromptPseudoField('limit')
|
limit = NullablePromptPseudoField('limit')
|
||||||
@@ -960,7 +960,7 @@ class LaunchTimeConfig(LaunchTimeConfigBase):
|
|||||||
# Special case prompting fields, even more special than the other ones
|
# Special case prompting fields, even more special than the other ones
|
||||||
extra_data = JSONBlob(default=dict, blank=True)
|
extra_data = JSONBlob(default=dict, blank=True)
|
||||||
survey_passwords = prevent_search(
|
survey_passwords = prevent_search(
|
||||||
JSONBlob(
|
models.JSONField(
|
||||||
default=dict,
|
default=dict,
|
||||||
editable=False,
|
editable=False,
|
||||||
blank=True,
|
blank=True,
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ from awx.main.utils import parse_yaml_or_json, get_custom_venv_choices, get_lice
|
|||||||
from awx.main.utils.execution_environments import get_default_execution_environment
|
from awx.main.utils.execution_environments import get_default_execution_environment
|
||||||
from awx.main.utils.encryption import decrypt_value, get_encryption_key, is_encrypted
|
from awx.main.utils.encryption import decrypt_value, get_encryption_key, is_encrypted
|
||||||
from awx.main.utils.polymorphic import build_polymorphic_ctypes_map
|
from awx.main.utils.polymorphic import build_polymorphic_ctypes_map
|
||||||
from awx.main.fields import AskForField, JSONBlob
|
from awx.main.fields import AskForField
|
||||||
from awx.main.constants import ACTIVE_STATES
|
from awx.main.constants import ACTIVE_STATES
|
||||||
|
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ class SurveyJobTemplateMixin(models.Model):
|
|||||||
survey_enabled = models.BooleanField(
|
survey_enabled = models.BooleanField(
|
||||||
default=False,
|
default=False,
|
||||||
)
|
)
|
||||||
survey_spec = prevent_search(JSONBlob(default=dict, blank=True))
|
survey_spec = prevent_search(models.JSONField(default=dict, blank=True))
|
||||||
|
|
||||||
ask_inventory_on_launch = AskForField(
|
ask_inventory_on_launch = AskForField(
|
||||||
blank=True,
|
blank=True,
|
||||||
@@ -392,7 +392,7 @@ class SurveyJobMixin(models.Model):
|
|||||||
abstract = True
|
abstract = True
|
||||||
|
|
||||||
survey_passwords = prevent_search(
|
survey_passwords = prevent_search(
|
||||||
JSONBlob(
|
models.JSONField(
|
||||||
default=dict,
|
default=dict,
|
||||||
editable=False,
|
editable=False,
|
||||||
blank=True,
|
blank=True,
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ from jinja2.exceptions import TemplateSyntaxError, UndefinedError, SecurityError
|
|||||||
|
|
||||||
# AWX
|
# AWX
|
||||||
from awx.api.versioning import reverse
|
from awx.api.versioning import reverse
|
||||||
from awx.main.fields import JSONBlob
|
|
||||||
from awx.main.models.base import CommonModelNameNotUnique, CreatedModifiedModel, prevent_search
|
from awx.main.models.base import CommonModelNameNotUnique, CreatedModifiedModel, prevent_search
|
||||||
from awx.main.utils import encrypt_field, decrypt_field, set_environ
|
from awx.main.utils import encrypt_field, decrypt_field, set_environ
|
||||||
from awx.main.notifications.email_backend import CustomEmailBackend
|
from awx.main.notifications.email_backend import CustomEmailBackend
|
||||||
@@ -69,12 +68,12 @@ class NotificationTemplate(CommonModelNameNotUnique):
|
|||||||
choices=NOTIFICATION_TYPE_CHOICES,
|
choices=NOTIFICATION_TYPE_CHOICES,
|
||||||
)
|
)
|
||||||
|
|
||||||
notification_configuration = prevent_search(JSONBlob(default=dict))
|
notification_configuration = prevent_search(models.JSONField(default=dict))
|
||||||
|
|
||||||
def default_messages():
|
def default_messages():
|
||||||
return {'started': None, 'success': None, 'error': None, 'workflow_approval': None}
|
return {'started': None, 'success': None, 'error': None, 'workflow_approval': None}
|
||||||
|
|
||||||
messages = JSONBlob(null=True, blank=True, default=default_messages, help_text=_('Optional custom messages for notification template.'))
|
messages = models.JSONField(null=True, blank=True, default=default_messages, help_text=_('Optional custom messages for notification template.'))
|
||||||
|
|
||||||
def has_message(self, condition):
|
def has_message(self, condition):
|
||||||
potential_template = self.messages.get(condition, {})
|
potential_template = self.messages.get(condition, {})
|
||||||
@@ -236,7 +235,7 @@ class Notification(CreatedModifiedModel):
|
|||||||
default='',
|
default='',
|
||||||
editable=False,
|
editable=False,
|
||||||
)
|
)
|
||||||
body = JSONBlob(default=dict, blank=True)
|
body = models.JSONField(default=dict, blank=True)
|
||||||
|
|
||||||
def get_absolute_url(self, request=None):
|
def get_absolute_url(self, request=None):
|
||||||
return reverse('api:notification_detail', kwargs={'pk': self.pk}, request=request)
|
return reverse('api:notification_detail', kwargs={'pk': self.pk}, request=request)
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ from awx.main.models.mixins import ResourceMixin, TaskManagerProjectUpdateMixin,
|
|||||||
from awx.main.utils import update_scm_url, polymorphic
|
from awx.main.utils import update_scm_url, polymorphic
|
||||||
from awx.main.utils.ansible import skip_directory, could_be_inventory, could_be_playbook
|
from awx.main.utils.ansible import skip_directory, could_be_inventory, could_be_playbook
|
||||||
from awx.main.utils.execution_environments import get_control_plane_execution_environment
|
from awx.main.utils.execution_environments import get_control_plane_execution_environment
|
||||||
from awx.main.fields import ImplicitRoleField, JSONBlob
|
from awx.main.fields import ImplicitRoleField
|
||||||
from awx.main.models.rbac import (
|
from awx.main.models.rbac import (
|
||||||
ROLE_SINGLETON_SYSTEM_ADMINISTRATOR,
|
ROLE_SINGLETON_SYSTEM_ADMINISTRATOR,
|
||||||
ROLE_SINGLETON_SYSTEM_AUDITOR,
|
ROLE_SINGLETON_SYSTEM_AUDITOR,
|
||||||
@@ -303,7 +303,7 @@ class Project(UnifiedJobTemplate, ProjectOptions, ResourceMixin, CustomVirtualEn
|
|||||||
help_text=_('The last revision fetched by a project update'),
|
help_text=_('The last revision fetched by a project update'),
|
||||||
)
|
)
|
||||||
|
|
||||||
playbook_files = JSONBlob(
|
playbook_files = models.JSONField(
|
||||||
default=list,
|
default=list,
|
||||||
blank=True,
|
blank=True,
|
||||||
editable=False,
|
editable=False,
|
||||||
@@ -311,7 +311,7 @@ class Project(UnifiedJobTemplate, ProjectOptions, ResourceMixin, CustomVirtualEn
|
|||||||
help_text=_('List of playbooks found in the project'),
|
help_text=_('List of playbooks found in the project'),
|
||||||
)
|
)
|
||||||
|
|
||||||
inventory_files = JSONBlob(
|
inventory_files = models.JSONField(
|
||||||
default=list,
|
default=list,
|
||||||
blank=True,
|
blank=True,
|
||||||
editable=False,
|
editable=False,
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ from awx.main.utils import polymorphic
|
|||||||
from awx.main.constants import ACTIVE_STATES, CAN_CANCEL, JOB_VARIABLE_PREFIXES
|
from awx.main.constants import ACTIVE_STATES, CAN_CANCEL, JOB_VARIABLE_PREFIXES
|
||||||
from awx.main.redact import UriCleaner, REPLACE_STR
|
from awx.main.redact import UriCleaner, REPLACE_STR
|
||||||
from awx.main.consumers import emit_channel_notification
|
from awx.main.consumers import emit_channel_notification
|
||||||
from awx.main.fields import AskForField, OrderedManyToManyField, JSONBlob
|
from awx.main.fields import AskForField, OrderedManyToManyField
|
||||||
|
|
||||||
__all__ = ['UnifiedJobTemplate', 'UnifiedJob', 'StdoutMaxBytesExceeded']
|
__all__ = ['UnifiedJobTemplate', 'UnifiedJob', 'StdoutMaxBytesExceeded']
|
||||||
|
|
||||||
@@ -668,7 +668,7 @@ class UnifiedJob(
|
|||||||
editable=False,
|
editable=False,
|
||||||
)
|
)
|
||||||
job_env = prevent_search(
|
job_env = prevent_search(
|
||||||
JSONBlob(
|
models.JSONField(
|
||||||
default=dict,
|
default=dict,
|
||||||
blank=True,
|
blank=True,
|
||||||
editable=False,
|
editable=False,
|
||||||
|
|||||||
Reference in New Issue
Block a user