Generate a flavorid if needed at flavor creation
When creating a new flavor, it's now possible to omit flavorid. In this case it will be automatically generated using utils.gen_uuid(). nova-manage and OS API updated accordingly. Fixes: bug #1043410 Change-Id: Ibf9229599dac953177fbf1ffac5242ed716142db
This commit is contained in:
parent
76d094eeba
commit
daf0681f06
@ -851,7 +851,7 @@ class InstanceTypeCommands(object):
|
||||
help='rxtx_factor')
|
||||
@args('--is_public', dest="is_public", metavar='<is_public>',
|
||||
help='Make flavor accessible to the public')
|
||||
def create(self, name, memory, vcpus, root_gb, ephemeral_gb, flavorid,
|
||||
def create(self, name, memory, vcpus, root_gb, ephemeral_gb, flavorid=None,
|
||||
swap=0, rxtx_factor=1, is_public=True):
|
||||
"""Creates instance types / flavors"""
|
||||
try:
|
||||
|
@ -58,7 +58,7 @@ class FlavorManageController(wsgi.Controller):
|
||||
|
||||
vals = body['flavor']
|
||||
name = vals['name']
|
||||
flavorid = vals['id']
|
||||
flavorid = vals.get('id')
|
||||
memory_mb = vals.get('ram')
|
||||
vcpus = vals.get('vcpus')
|
||||
root_gb = vals.get('disk')
|
||||
|
@ -35,10 +35,12 @@ LOG = logging.getLogger(__name__)
|
||||
INVALID_NAME_REGEX = re.compile("[^\w\.\- ]")
|
||||
|
||||
|
||||
def create(name, memory, vcpus, root_gb, ephemeral_gb, flavorid, swap=None,
|
||||
rxtx_factor=None, is_public=True):
|
||||
def create(name, memory, vcpus, root_gb, ephemeral_gb, flavorid=None,
|
||||
swap=None, rxtx_factor=None, is_public=True):
|
||||
"""Creates instance types."""
|
||||
|
||||
if flavorid is None:
|
||||
flavorid = utils.gen_uuid()
|
||||
if swap is None:
|
||||
swap = 0
|
||||
if rxtx_factor is None:
|
||||
|
@ -58,6 +58,8 @@ def fake_destroy(flavorname):
|
||||
|
||||
def fake_create(name, memory_mb, vcpus, root_gb, ephemeral_gb,
|
||||
flavorid, swap, rxtx_factor, is_public):
|
||||
if flavorid is None:
|
||||
flavorid = 1234
|
||||
newflavor = fake_get_instance_type_by_flavor_id(flavorid)
|
||||
|
||||
newflavor["name"] = name
|
||||
@ -156,6 +158,30 @@ class FlavorManageTest(test.TestCase):
|
||||
for key in expected["flavor"]:
|
||||
self.assertEquals(body["flavor"][key], expected["flavor"][key])
|
||||
|
||||
def test_create_without_flavorid(self):
|
||||
expected = {
|
||||
"flavor": {
|
||||
"name": "test",
|
||||
"ram": 512,
|
||||
"vcpus": 2,
|
||||
"disk": 1,
|
||||
"OS-FLV-EXT-DATA:ephemeral": 1,
|
||||
"swap": 512,
|
||||
"rxtx_factor": 1,
|
||||
"os-flavor-access:is_public": True,
|
||||
}
|
||||
}
|
||||
|
||||
url = '/v2/fake/flavors'
|
||||
req = webob.Request.blank(url)
|
||||
req.headers['Content-Type'] = 'application/json'
|
||||
req.method = 'POST'
|
||||
req.body = jsonutils.dumps(expected)
|
||||
res = req.get_response(fakes.wsgi_app())
|
||||
body = jsonutils.loads(res.body)
|
||||
for key in expected["flavor"]:
|
||||
self.assertEquals(body["flavor"][key], expected["flavor"][key])
|
||||
|
||||
def test_instance_type_exists_exception_returns_409(self):
|
||||
expected = {
|
||||
"flavor": {
|
||||
|
@ -88,6 +88,18 @@ class InstanceTypeTestCase(test.TestCase):
|
||||
new_list = instance_types.get_all_types()
|
||||
self.assertEqual(original_list, new_list)
|
||||
|
||||
def test_instance_type_create_without_flavorid(self):
|
||||
name = 'Small Flavor'
|
||||
inst_type = instance_types.create(name, 256, 1, 120, 100)
|
||||
self.assertNotEqual(inst_type['flavorid'], None)
|
||||
self.assertEqual(inst_type['name'], name)
|
||||
self.assertEqual(inst_type['memory_mb'], 256)
|
||||
self.assertEqual(inst_type['vcpus'], 1)
|
||||
self.assertEqual(inst_type['root_gb'], 120)
|
||||
self.assertEqual(inst_type['ephemeral_gb'], 100)
|
||||
self.assertEqual(inst_type['swap'], 0)
|
||||
self.assertEqual(inst_type['rxtx_factor'], 1)
|
||||
|
||||
def test_instance_type_create_with_special_characters(self):
|
||||
"""Ensure instance types raises InvalidInput for invalid characters"""
|
||||
name = "foo.bar!@#$%^-test_name"
|
||||
|
Loading…
Reference in New Issue
Block a user