mirror of
https://github.com/ansible/awx.git
synced 2026-02-23 22:16:00 -03:30
Merge pull request #1861 from ryanpetrello/safe-queue-name
prevent unicode in instance hostnames and instance group names
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
|
from django.core.exceptions import ValidationError
|
||||||
from django.db import models, connection
|
from django.db import models, connection
|
||||||
from django.db.models.signals import post_save, post_delete
|
from django.db.models.signals import post_save, post_delete
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
@@ -10,12 +11,14 @@ from django.utils.translation import ugettext_lazy as _
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.utils.timezone import now, timedelta
|
from django.utils.timezone import now, timedelta
|
||||||
|
|
||||||
|
import six
|
||||||
from solo.models import SingletonModel
|
from solo.models import SingletonModel
|
||||||
|
|
||||||
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.managers import InstanceManager, InstanceGroupManager
|
from awx.main.managers import InstanceManager, InstanceGroupManager
|
||||||
from awx.main.fields import JSONField
|
from awx.main.fields import JSONField
|
||||||
|
from awx.main.models.base import BaseModel
|
||||||
from awx.main.models.inventory import InventoryUpdate
|
from awx.main.models.inventory import InventoryUpdate
|
||||||
from awx.main.models.jobs import Job
|
from awx.main.models.jobs import Job
|
||||||
from awx.main.models.projects import ProjectUpdate
|
from awx.main.models.projects import ProjectUpdate
|
||||||
@@ -26,7 +29,16 @@ from awx.main.models.mixins import RelatedJobsMixin
|
|||||||
__all__ = ('Instance', 'InstanceGroup', 'JobOrigin', 'TowerScheduleState',)
|
__all__ = ('Instance', 'InstanceGroup', 'JobOrigin', 'TowerScheduleState',)
|
||||||
|
|
||||||
|
|
||||||
class Instance(models.Model):
|
def validate_queuename(v):
|
||||||
|
# celery and kombu don't play nice with unicode in queue names
|
||||||
|
if v:
|
||||||
|
try:
|
||||||
|
'{}'.format(v.decode('utf-8'))
|
||||||
|
except UnicodeEncodeError:
|
||||||
|
raise ValidationError(_(six.text_type('{} contains unsupported characters')).format(v))
|
||||||
|
|
||||||
|
|
||||||
|
class Instance(BaseModel):
|
||||||
"""A model representing an AWX instance running against this database."""
|
"""A model representing an AWX instance running against this database."""
|
||||||
objects = InstanceManager()
|
objects = InstanceManager()
|
||||||
|
|
||||||
@@ -113,9 +125,13 @@ class Instance(models.Model):
|
|||||||
self.save(update_fields=['capacity', 'version', 'modified', 'cpu',
|
self.save(update_fields=['capacity', 'version', 'modified', 'cpu',
|
||||||
'memory', 'cpu_capacity', 'mem_capacity'])
|
'memory', 'cpu_capacity', 'mem_capacity'])
|
||||||
|
|
||||||
|
def clean_hostname(self):
|
||||||
|
validate_queuename(self.hostname)
|
||||||
|
return self.hostname
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class InstanceGroup(models.Model, RelatedJobsMixin):
|
class InstanceGroup(BaseModel, RelatedJobsMixin):
|
||||||
"""A model representing a Queue/Group of AWX Instances."""
|
"""A model representing a Queue/Group of AWX Instances."""
|
||||||
objects = InstanceGroupManager()
|
objects = InstanceGroupManager()
|
||||||
|
|
||||||
@@ -167,6 +183,10 @@ class InstanceGroup(models.Model, RelatedJobsMixin):
|
|||||||
class Meta:
|
class Meta:
|
||||||
app_label = 'main'
|
app_label = 'main'
|
||||||
|
|
||||||
|
def clean_name(self):
|
||||||
|
validate_queuename(self.name)
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
class TowerScheduleState(SingletonModel):
|
class TowerScheduleState(SingletonModel):
|
||||||
schedule_last_run = models.DateTimeField(auto_now_add=True)
|
schedule_last_run = models.DateTimeField(auto_now_add=True)
|
||||||
|
|||||||
Reference in New Issue
Block a user