Add validation to set one of network, port or uuid
Add validation to set one of network, port or uuid properties for a server network. Change-Id: I703717426c27916b46f8508265bd387a66fcebad Closes-Bug: #1450901
This commit is contained in:
parent
49bde9e4d2
commit
462924cc68
|
@ -1268,6 +1268,18 @@ class Server(stack_user.StackUser):
|
||||||
for network in networks:
|
for network in networks:
|
||||||
networks_with_port = (networks_with_port or
|
networks_with_port = (networks_with_port or
|
||||||
network.get(self.NETWORK_PORT))
|
network.get(self.NETWORK_PORT))
|
||||||
|
if (network.get(self.NETWORK_ID) is None
|
||||||
|
and network.get(self.NETWORK_PORT) is None
|
||||||
|
and network.get(self.NETWORK_UUID) is None):
|
||||||
|
msg = _('One of the properties "%(id)s", "%(port_id)s", '
|
||||||
|
'"%(uuid)s" should be set for the '
|
||||||
|
'specified network of server "%(server)s".'
|
||||||
|
'') % dict(id=self.NETWORK_ID,
|
||||||
|
port_id=self.NETWORK_PORT,
|
||||||
|
uuid=self.NETWORK_UUID,
|
||||||
|
server=self.name)
|
||||||
|
raise exception.StackValidationFailed(message=msg)
|
||||||
|
|
||||||
if network.get(self.NETWORK_UUID) and network.get(self.NETWORK_ID):
|
if network.get(self.NETWORK_UUID) and network.get(self.NETWORK_ID):
|
||||||
msg = _('Properties "%(uuid)s" and "%(id)s" are both set '
|
msg = _('Properties "%(uuid)s" and "%(id)s" are both set '
|
||||||
'to the network "%(network)s" for the server '
|
'to the network "%(network)s" for the server '
|
||||||
|
|
|
@ -1076,6 +1076,111 @@ class ServersTest(common.HeatTestCase):
|
||||||
six.text_type(ex))
|
six.text_type(ex))
|
||||||
self.m.VerifyAll()
|
self.m.VerifyAll()
|
||||||
|
|
||||||
|
def test_server_validate_with_network_empty_ref(self):
|
||||||
|
stack_name = 'srv_net'
|
||||||
|
(tmpl, stack) = self._setup_test_stack(stack_name)
|
||||||
|
tmpl['Resources']['WebServer']['Properties']['networks'] = (
|
||||||
|
[{'network': ''}])
|
||||||
|
|
||||||
|
resource_defns = tmpl.resource_definitions(stack)
|
||||||
|
server = servers.Server('server_validate_with_networks',
|
||||||
|
resource_defns['WebServer'], stack)
|
||||||
|
|
||||||
|
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
|
||||||
|
nova.NovaClientPlugin._create().AndReturn(self.fc)
|
||||||
|
self._mock_get_image_id_success('F17-x86_64-gold', 'image_id')
|
||||||
|
self.stub_NetworkConstraint_validate()
|
||||||
|
self.m.ReplayAll()
|
||||||
|
|
||||||
|
self.assertIsNone(server.validate())
|
||||||
|
self.m.VerifyAll()
|
||||||
|
|
||||||
|
def test_server_validate_with_only_fixed_ip(self):
|
||||||
|
stack_name = 'srv_net'
|
||||||
|
(tmpl, stack) = self._setup_test_stack(stack_name)
|
||||||
|
# create an server with 'uuid' and 'network' properties
|
||||||
|
tmpl['Resources']['WebServer']['Properties']['networks'] = (
|
||||||
|
[{'fixed_ip': '10.0.0.99'}])
|
||||||
|
|
||||||
|
resource_defns = tmpl.resource_definitions(stack)
|
||||||
|
server = servers.Server('server_validate_with_networks',
|
||||||
|
resource_defns['WebServer'], stack)
|
||||||
|
|
||||||
|
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
|
||||||
|
nova.NovaClientPlugin._create().AndReturn(self.fc)
|
||||||
|
self._mock_get_image_id_success('F17-x86_64-gold', 'image_id')
|
||||||
|
self.stub_NetworkConstraint_validate()
|
||||||
|
self.m.ReplayAll()
|
||||||
|
|
||||||
|
ex = self.assertRaises(exception.StackValidationFailed,
|
||||||
|
server.validate)
|
||||||
|
self.assertIn(_('One of the properties "network", "port", "uuid" '
|
||||||
|
'should be set for the specified network of server '
|
||||||
|
'"%s".') % server.name,
|
||||||
|
six.text_type(ex))
|
||||||
|
self.m.VerifyAll()
|
||||||
|
|
||||||
|
def test_server_validate_with_port_fixed_ip(self):
|
||||||
|
stack_name = 'srv_net'
|
||||||
|
(tmpl, stack) = self._setup_test_stack(stack_name)
|
||||||
|
tmpl['Resources']['WebServer']['Properties']['networks'] = (
|
||||||
|
[{'port': 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa',
|
||||||
|
'fixed_ip': '10.0.0.99'}])
|
||||||
|
|
||||||
|
resource_defns = tmpl.resource_definitions(stack)
|
||||||
|
server = servers.Server('server_validate_with_networks',
|
||||||
|
resource_defns['WebServer'], stack)
|
||||||
|
|
||||||
|
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
|
||||||
|
nova.NovaClientPlugin._create().AndReturn(self.fc)
|
||||||
|
self._mock_get_image_id_success('F17-x86_64-gold', 'image_id')
|
||||||
|
self.stub_NetworkConstraint_validate()
|
||||||
|
self.stub_PortConstraint_validate()
|
||||||
|
self.m.ReplayAll()
|
||||||
|
|
||||||
|
self.assertIsNone(server.validate())
|
||||||
|
self.m.VerifyAll()
|
||||||
|
|
||||||
|
def test_server_validate_with_uuid_fixed_ip(self):
|
||||||
|
stack_name = 'srv_net'
|
||||||
|
(tmpl, stack) = self._setup_test_stack(stack_name)
|
||||||
|
tmpl['Resources']['WebServer']['Properties']['networks'] = (
|
||||||
|
[{'uuid': 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa',
|
||||||
|
'fixed_ip': '10.0.0.99'}])
|
||||||
|
|
||||||
|
resource_defns = tmpl.resource_definitions(stack)
|
||||||
|
server = servers.Server('server_validate_with_networks',
|
||||||
|
resource_defns['WebServer'], stack)
|
||||||
|
|
||||||
|
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
|
||||||
|
nova.NovaClientPlugin._create().AndReturn(self.fc)
|
||||||
|
self._mock_get_image_id_success('F17-x86_64-gold', 'image_id')
|
||||||
|
self.stub_NetworkConstraint_validate()
|
||||||
|
self.m.ReplayAll()
|
||||||
|
|
||||||
|
self.assertIsNone(server.validate())
|
||||||
|
self.m.VerifyAll()
|
||||||
|
|
||||||
|
def test_server_validate_with_network_fixed_ip(self):
|
||||||
|
stack_name = 'srv_net'
|
||||||
|
(tmpl, stack) = self._setup_test_stack(stack_name)
|
||||||
|
tmpl['Resources']['WebServer']['Properties']['networks'] = (
|
||||||
|
[{'network': 'public',
|
||||||
|
'fixed_ip': '10.0.0.99'}])
|
||||||
|
|
||||||
|
resource_defns = tmpl.resource_definitions(stack)
|
||||||
|
server = servers.Server('server_validate_with_networks',
|
||||||
|
resource_defns['WebServer'], stack)
|
||||||
|
|
||||||
|
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
|
||||||
|
nova.NovaClientPlugin._create().AndReturn(self.fc)
|
||||||
|
self._mock_get_image_id_success('F17-x86_64-gold', 'image_id')
|
||||||
|
self.stub_NetworkConstraint_validate()
|
||||||
|
self.m.ReplayAll()
|
||||||
|
|
||||||
|
self.assertIsNone(server.validate())
|
||||||
|
self.m.VerifyAll()
|
||||||
|
|
||||||
def test_server_validate_net_security_groups(self):
|
def test_server_validate_net_security_groups(self):
|
||||||
# Test that if network 'ports' are assigned security groups are
|
# Test that if network 'ports' are assigned security groups are
|
||||||
# not, because they'll be ignored
|
# not, because they'll be ignored
|
||||||
|
|
Loading…
Reference in New Issue