Fix validation of server personality property
During validation, the software config content will not be available via get_attr function. Hence we will end up calling encode on a NoneType object. Try to encode to utf-8 only if content is available. Change-Id: I3e7dc4a9fcbd95482df880a7454fa5a09d6af68f Closes-Bug: #1528463
This commit is contained in:
parent
100f9153b7
commit
054f680739
|
@ -1288,7 +1288,8 @@ class Server(stack_user.StackUser, sh.SchedulerHintsMixin,
|
|||
"file size (%(max_size)s bytes).") %
|
||||
{'path': path,
|
||||
'max_size': limits['maxPersonalitySize']})
|
||||
self._check_maximum(len(bytes(contents.encode('utf-8'))),
|
||||
self._check_maximum(len(bytes(contents.encode('utf-8'))
|
||||
) if contents is not None else 0,
|
||||
limits['maxPersonalitySize'], msg)
|
||||
|
||||
def _delete_temp_url(self):
|
||||
|
|
|
@ -123,6 +123,23 @@ resources:
|
|||
- network: 4321
|
||||
"""
|
||||
|
||||
server_with_sw_config_personality = """
|
||||
heat_template_version: 2014-10-16
|
||||
resources:
|
||||
swconfig:
|
||||
type: OS::Heat::SoftwareConfig
|
||||
properties:
|
||||
config: |
|
||||
#!/bin/bash
|
||||
echo -e "test"
|
||||
server:
|
||||
type: OS::Nova::Server
|
||||
properties:
|
||||
image: F17-x86_64-gold
|
||||
flavor: m1.small
|
||||
personality: { /tmp/test: { get_attr: [swconfig, config]}}
|
||||
"""
|
||||
|
||||
|
||||
class ServersTest(common.HeatTestCase):
|
||||
def setUp(self):
|
||||
|
@ -3000,6 +3017,24 @@ class ServersTest(common.HeatTestCase):
|
|||
'file size (10240 bytes).', six.text_type(exc))
|
||||
self.m.VerifyAll()
|
||||
|
||||
def test_server_validate_personality_get_attr_return_none(self):
|
||||
stack_name = 'srv_val'
|
||||
(tmpl, stack) = self._setup_test_stack(
|
||||
stack_name, server_with_sw_config_personality)
|
||||
resource_defns = tmpl.resource_definitions(stack)
|
||||
server = servers.Server('server_create_image_err',
|
||||
resource_defns['server'], stack)
|
||||
self.m.StubOutWithMock(self.fc.limits, 'get')
|
||||
self.fc.limits.get().MultipleTimes().AndReturn(self.limits)
|
||||
|
||||
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.m.ReplayAll()
|
||||
|
||||
self.assertIsNone(server.validate())
|
||||
self.m.VerifyAll()
|
||||
|
||||
def test_resolve_attribute_server_not_found(self):
|
||||
return_server = self.fc.servers.list()[1]
|
||||
server = self._create_test_server(return_server,
|
||||
|
|
Loading…
Reference in New Issue