mirror of
https://github.com/ansible/awx.git
synced 2026-05-07 17:37:37 -02:30
added change so that groups and host names cannot share the same name in the same inventory. added tests to validate
This commit is contained in:
@@ -1719,6 +1719,8 @@ class HostSerializer(BaseSerializerWithVariables):
|
|||||||
name = force_text(value or '')
|
name = force_text(value or '')
|
||||||
# Validate here only, update in main validate method.
|
# Validate here only, update in main validate method.
|
||||||
host, port = self._get_host_port_from_name(name)
|
host, port = self._get_host_port_from_name(name)
|
||||||
|
if Group.objects.filter(name=value).exists():
|
||||||
|
raise serializers.ValidationError(_('Invalid group name. Name already exists as a Group.'))
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def validate_inventory(self, value):
|
def validate_inventory(self, value):
|
||||||
@@ -1808,6 +1810,8 @@ class GroupSerializer(BaseSerializerWithVariables):
|
|||||||
def validate_name(self, value):
|
def validate_name(self, value):
|
||||||
if value in ('all', '_meta'):
|
if value in ('all', '_meta'):
|
||||||
raise serializers.ValidationError(_('Invalid group name.'))
|
raise serializers.ValidationError(_('Invalid group name.'))
|
||||||
|
elif Host.objects.filter(name=value).exists():
|
||||||
|
raise serializers.ValidationError(_('Invalid group name. Name already exists as a Host.'))
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def validate_inventory(self, value):
|
def validate_inventory(self, value):
|
||||||
|
|||||||
@@ -59,6 +59,21 @@ def test_inventory_source_unique_together_with_inv(inventory_factory):
|
|||||||
is2 = InventorySource(name='foo', source='file', inventory=inv2)
|
is2 = InventorySource(name='foo', source='file', inventory=inv2)
|
||||||
is2.validate_unique()
|
is2.validate_unique()
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_inventory_host_name_unique(scm_inventory, post, admin_user):
|
||||||
|
inv_src = scm_inventory.inventory_sources.first()
|
||||||
|
group = inv_src.groups.create(name='barfoo', inventory=scm_inventory)
|
||||||
|
group.save()
|
||||||
|
host1 = inv_src.hosts.create(name='barfoo', inventory=scm_inventory)
|
||||||
|
post(reverse('api:inventory_hosts_list', kwargs={'pk': host1.id}), admin_user, expect=400)
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_inventory_group_name_unique(scm_inventory, post, admin_user):
|
||||||
|
inv_src = scm_inventory.inventory_sources.first()
|
||||||
|
host = inv_src.hosts.create(name='barfoo', inventory=scm_inventory)
|
||||||
|
host.save()
|
||||||
|
group = inv_src.groups.create(name='barfoo', inventory=scm_inventory)
|
||||||
|
post(reverse('api:inventory_groups_list', kwargs={'pk': group.id}), admin_user, expect=400)
|
||||||
|
|
||||||
@pytest.mark.parametrize("role_field,expected_status_code", [
|
@pytest.mark.parametrize("role_field,expected_status_code", [
|
||||||
(None, 403),
|
(None, 403),
|
||||||
|
|||||||
Reference in New Issue
Block a user