If managed, cannot modify peers_from_control_nodes

Adds validation to prevent changing
peers_from_control_nodes if instance managed=True

Signed-off-by: Seth Foster <fosterbseth@gmail.com>
This commit is contained in:
Seth Foster 2024-01-30 12:19:23 -05:00 committed by Seth Foster
parent 818e11dfdc
commit 904c6001e9
2 changed files with 33 additions and 0 deletions

View File

@ -5753,6 +5753,12 @@ class InstanceSerializer(BaseSerializer):
return value
def validate_peers_from_control_nodes(self, value):
if self.instance and self.instance.managed and self.instance.canonical_address_peers_from_control_nodes != value:
raise serializers.ValidationError(_("Cannot change peers_from_control_nodes for managed nodes."))
return value
class InstanceHealthCheckSerializer(BaseSerializer):
class Meta:

View File

@ -462,6 +462,33 @@ class TestPeers:
assert 'Cannot deprovision managed nodes.' in str(resp.data)
def test_changing_managed_peers_from_control_nodes(self, admin_user, patch):
"""
cannot change peers_from_control_nodes of managed node
"""
hop = Instance.objects.create(hostname='hop', node_type='hop', managed=True)
ReceptorAddress.objects.create(instance=hop, address='hop', peers_from_control_nodes=True, canonical=True)
resp = patch(
url=reverse('api:instance_detail', kwargs={'pk': hop.pk}),
data={"peers_from_control_nodes": False},
user=admin_user,
expect=400,
)
assert 'Cannot change peers_from_control_nodes for managed nodes.' in str(resp.data)
hop.peers_from_control_nodes = False
hop.save()
resp = patch(
url=reverse('api:instance_detail', kwargs={'pk': hop.pk}),
data={"peers_from_control_nodes": False},
user=admin_user,
expect=400,
)
assert 'Cannot change peers_from_control_nodes for managed nodes.' in str(resp.data)
@pytest.mark.parametrize('node_type', ['control', 'hybrid'])
def test_control_node_automatically_peers(self, node_type):
"""