From 08570fe7859834f4922660cdc162acc909da9f8d Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Tue, 12 Dec 2017 16:13:44 -0500 Subject: [PATCH] make inventory update name combination of inventory and source --- awx/main/models/inventory.py | 22 +++++++++++-------- .../tests/functional/models/test_inventory.py | 16 ++++++++++++++ 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/awx/main/models/inventory.py b/awx/main/models/inventory.py index 5f136ee5b2..bb8eb6e39c 100644 --- a/awx/main/models/inventory.py +++ b/awx/main/models/inventory.py @@ -1440,6 +1440,19 @@ class InventorySource(UnifiedJobTemplate, InventorySourceOptions): def create_inventory_update(self, **kwargs): return self.create_unified_job(**kwargs) + def create_unified_job(self, **kwargs): + # Use special name, if name not already specified + if self.inventory: + if '_eager_fields' not in kwargs: + kwargs['_eager_fields'] = {} + if 'name' not in kwargs['_eager_fields']: + name = '{} - {}'.format(self.inventory.name, self.name) + name_field = self._meta.get_field('name') + if len(name) > name_field.max_length: + name = name[:name_field.max_length] + kwargs['_eager_fields']['name'] = name + return super(InventorySource, self).create_unified_job(**kwargs) + @property def cache_timeout_blocked(self): if not self.last_job_run: @@ -1567,15 +1580,6 @@ class InventoryUpdate(UnifiedJob, InventorySourceOptions, JobNotificationMixin, websocket_data.update(dict(group_id=self.inventory_source.deprecated_group.id)) return websocket_data - def save(self, *args, **kwargs): - update_fields = kwargs.get('update_fields', []) - inventory_source = self.inventory_source - if inventory_source.inventory and self.name == inventory_source.name: - self.name = inventory_source.inventory.name - if 'name' not in update_fields: - update_fields.append('name') - super(InventoryUpdate, self).save(*args, **kwargs) - def get_absolute_url(self, request=None): return reverse('api:inventory_update_detail', kwargs={'pk': self.pk}, request=request) diff --git a/awx/main/tests/functional/models/test_inventory.py b/awx/main/tests/functional/models/test_inventory.py index 7a537e6a2a..164cce4844 100644 --- a/awx/main/tests/functional/models/test_inventory.py +++ b/awx/main/tests/functional/models/test_inventory.py @@ -149,6 +149,22 @@ def setup_inventory_groups(inventory, group_factory): groupB.save() +@pytest.mark.django_db +def test_inventory_update_name(inventory, inventory_source): + iu = inventory_source.update() + assert inventory_source.name != inventory.name + assert iu.name == inventory.name + ' - ' + inventory_source.name + + +@pytest.mark.django_db +def test_inventory_update_excessively_long_name(inventory, inventory_source): + inventory.name = 'a' * 400 # field max length 512 + inventory_source.name = 'b' * 400 + iu = inventory_source.update() + assert inventory_source.name != inventory.name + assert iu.name.startswith(inventory.name) + + @pytest.mark.django_db class TestHostManager: def test_host_filter_not_smart(self, setup_ec2_gce, organization):