added purge option and tightened up testing
This commit is contained in:
@@ -683,9 +683,9 @@ class InstanceTypeCommands(object):
|
|||||||
vcpus,
|
vcpus,
|
||||||
local_gb,
|
local_gb,
|
||||||
flavorid,
|
flavorid,
|
||||||
swap,
|
swap=0,
|
||||||
rxtx_quota,
|
rxtx_quota=0,
|
||||||
rxtx_cap):
|
rxtx_cap=0):
|
||||||
"""Creates instance types / flavors
|
"""Creates instance types / flavors
|
||||||
arguments: name memory vcpus local_gb flavorid swap rxtx_quota
|
arguments: name memory vcpus local_gb flavorid swap rxtx_quota
|
||||||
rxtx_cap
|
rxtx_cap
|
||||||
@@ -719,13 +719,18 @@ class InstanceTypeCommands(object):
|
|||||||
try:
|
try:
|
||||||
if purge == "--purge":
|
if purge == "--purge":
|
||||||
instance_types.purge(name)
|
instance_types.purge(name)
|
||||||
verb = "deleted"
|
verb = "purged"
|
||||||
else:
|
else:
|
||||||
instance_types.destroy(name)
|
instance_types.destroy(name)
|
||||||
verb = "purged"
|
verb = "deleted"
|
||||||
except exception.ApiError:
|
except exception.ApiError:
|
||||||
print "Valid instance type name is required"
|
print "Valid instance type name is required"
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
except exception.DBError, e:
|
||||||
|
print "DB Error: %s" % e
|
||||||
|
sys.exit(2)
|
||||||
|
except:
|
||||||
|
sys.exit(3)
|
||||||
else:
|
else:
|
||||||
print "%s %s" % (name, verb)
|
print "%s %s" % (name, verb)
|
||||||
|
|
||||||
|
|||||||
@@ -81,6 +81,19 @@ def destroy(name):
|
|||||||
name)
|
name)
|
||||||
|
|
||||||
|
|
||||||
|
def purge(name):
|
||||||
|
"""Removes instance types / flavors from database
|
||||||
|
arguments: name"""
|
||||||
|
if name == None:
|
||||||
|
raise exception.InvalidInputException(_("No instance type specified"))
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
db.instance_type_purge(context.get_admin_context(), name)
|
||||||
|
except exception.NotFound:
|
||||||
|
raise exception.ApiError(_("Unknown instance type: %s"),
|
||||||
|
name)
|
||||||
|
|
||||||
|
|
||||||
def get_all_types(inactive=0):
|
def get_all_types(inactive=0):
|
||||||
"""Retrieves non-deleted instance_types.
|
"""Retrieves non-deleted instance_types.
|
||||||
Pass true as argument if you want deleted instance types returned also."""
|
Pass true as argument if you want deleted instance types returned also."""
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ class InstanceTypeTestCase(test.TestCase):
|
|||||||
self.assertEqual(1,
|
self.assertEqual(1,
|
||||||
instance_types.get_instance_type(self.name)["deleted"])
|
instance_types.get_instance_type(self.name)["deleted"])
|
||||||
self.assertEqual(starting_inst_list, instance_types.get_all_types())
|
self.assertEqual(starting_inst_list, instance_types.get_all_types())
|
||||||
db.instance_type_purge(context.get_admin_context(), self.name)
|
instance_types.purge(self.name)
|
||||||
self.assertEqual(len(starting_inst_list),
|
self.assertEqual(len(starting_inst_list),
|
||||||
len(instance_types.get_all_types()),
|
len(instance_types.get_all_types()),
|
||||||
'instance type not purged')
|
'instance type not purged')
|
||||||
|
|||||||
@@ -33,12 +33,13 @@ class NovaManageTestCase(test.TestCase):
|
|||||||
order_by("flavorid desc").first()
|
order_by("flavorid desc").first()
|
||||||
self.flavorid = str(max_flavorid["flavorid"] + 1)
|
self.flavorid = str(max_flavorid["flavorid"] + 1)
|
||||||
self.name = str(int(time.time()))
|
self.name = str(int(time.time()))
|
||||||
|
self.fnull = open(os.devnull, 'w')
|
||||||
|
|
||||||
def teardown(self):
|
def teardown(self):
|
||||||
fnull.close()
|
self.fnull.close()
|
||||||
|
|
||||||
def test_create_and_delete_instance_types(self):
|
def test_create_and_delete_instance_types(self):
|
||||||
fnull = open(os.devnull, 'w')
|
myname = self.name + "create_and_delete"
|
||||||
retcode = subprocess.call([
|
retcode = subprocess.call([
|
||||||
"bin/nova-manage",
|
"bin/nova-manage",
|
||||||
"instance_type",
|
"instance_type",
|
||||||
@@ -51,45 +52,44 @@ class NovaManageTestCase(test.TestCase):
|
|||||||
"2",
|
"2",
|
||||||
"10",
|
"10",
|
||||||
"10"],
|
"10"],
|
||||||
stdout=fnull)
|
stdout=self.fnull)
|
||||||
self.assertEqual(0, retcode)
|
self.assertEqual(0, retcode)
|
||||||
retcode = subprocess.call(["bin/nova-manage", "instance_type",\
|
retcode = subprocess.call(["bin/nova-manage", "instance_type",
|
||||||
"delete", self.name], stdout=fnull)
|
"delete", self.name], stdout=self.fnull)
|
||||||
|
self.assertEqual(0, retcode)
|
||||||
|
retcode = subprocess.call(["bin/nova-manage", "instance_type",
|
||||||
|
"delete", self.name, "--purge"],
|
||||||
|
stdout=self.fnull)
|
||||||
self.assertEqual(0, retcode)
|
self.assertEqual(0, retcode)
|
||||||
|
|
||||||
def test_list_instance_types_or_flavors(self):
|
def test_list_instance_types_or_flavors(self):
|
||||||
fnull = open(os.devnull, 'w')
|
|
||||||
for c in ["instance_type", "flavor"]:
|
for c in ["instance_type", "flavor"]:
|
||||||
retcode = subprocess.call(["bin/nova-manage", c, \
|
retcode = subprocess.call(["bin/nova-manage", c, \
|
||||||
"list"], stdout=fnull)
|
"list"], stdout=self.fnull)
|
||||||
self.assertEqual(0, retcode)
|
self.assertEqual(0, retcode)
|
||||||
|
|
||||||
def test_list_specific_instance_type(self):
|
def test_list_specific_instance_type(self):
|
||||||
fnull = open(os.devnull, 'w')
|
|
||||||
retcode = subprocess.call(["bin/nova-manage", "instance_type", "list",
|
retcode = subprocess.call(["bin/nova-manage", "instance_type", "list",
|
||||||
"m1.medium"], stdout=fnull)
|
"m1.medium"], stdout=self.fnull)
|
||||||
self.assertEqual(0, retcode)
|
self.assertEqual(0, retcode)
|
||||||
|
|
||||||
def test_should_error_on_bad_create_args(self):
|
def test_should_error_on_bad_create_args(self):
|
||||||
fnull = open(os.devnull, 'w')
|
|
||||||
# shouldn't be able to create instance type with 0 vcpus
|
# shouldn't be able to create instance type with 0 vcpus
|
||||||
retcode = subprocess.call(["bin/nova-manage", "instance_type",\
|
retcode = subprocess.call(["bin/nova-manage", "instance_type",
|
||||||
"create", self.name, "256", "0",\
|
"create", self.name + "bad_args",
|
||||||
"120", self.flavorid], stdout=fnull)
|
"256", "0", "120", self.flavorid],
|
||||||
|
stdout=self.fnull)
|
||||||
self.assertEqual(1, retcode)
|
self.assertEqual(1, retcode)
|
||||||
|
|
||||||
def test_should_fail_on_duplicate_flavorid(self):
|
def test_should_fail_on_duplicate_flavorid(self):
|
||||||
fnull = open(os.devnull, 'w')
|
|
||||||
# flavorid 1 is set in migration seed data
|
# flavorid 1 is set in migration seed data
|
||||||
retcode = subprocess.call(["bin/nova-manage", "instance_type",\
|
retcode = subprocess.call(["bin/nova-manage", "instance_type",\
|
||||||
"create", self.name, "256", "1",\
|
"create", self.name + "dupflavor", "256",
|
||||||
"120", "1"], stdout=fnull)
|
"1", "120", "1"], stdout=self.fnull)
|
||||||
self.assertEqual(1, retcode)
|
self.assertEqual(3, retcode)
|
||||||
|
|
||||||
def test_should_fail_on_duplicate_name(self):
|
def test_should_fail_on_duplicate_name(self):
|
||||||
# FIXME(ken-pepple) duplicate_name really needs to be unique
|
duplicate_name = self.name + "dup_name"
|
||||||
duplicate_name = "sdfsdfsafsdfsd"
|
|
||||||
fnull = open(os.devnull, 'w')
|
|
||||||
retcode = subprocess.call([
|
retcode = subprocess.call([
|
||||||
"bin/nova-manage",
|
"bin/nova-manage",
|
||||||
"instance_type",
|
"instance_type",
|
||||||
@@ -102,27 +102,29 @@ class NovaManageTestCase(test.TestCase):
|
|||||||
"2",
|
"2",
|
||||||
"10",
|
"10",
|
||||||
"10"],
|
"10"],
|
||||||
stdout=fnull)
|
stdout=self.fnull)
|
||||||
|
self.assertEqual(0, retcode)
|
||||||
duplicate_retcode = subprocess.call([
|
duplicate_retcode = subprocess.call([
|
||||||
"bin/nova-manage",
|
"bin/nova-manage",
|
||||||
"instance_type",
|
"instance_type",
|
||||||
"create",
|
"create",
|
||||||
duplicate_name,
|
duplicate_name,
|
||||||
"256",
|
"512",
|
||||||
"1",
|
"1",
|
||||||
"120",
|
"240",
|
||||||
self.flavorid,
|
str(int(self.flavorid) + 1),
|
||||||
"2",
|
"2",
|
||||||
"10",
|
"10",
|
||||||
"10"],
|
"10"],
|
||||||
stdout=fnull)
|
stdout=self.fnull)
|
||||||
self.assertEqual(3, duplicate_retcode)
|
self.assertEqual(3, duplicate_retcode)
|
||||||
delete_retcode = subprocess.call(["bin/nova-manage", "instance_type",\
|
delete_retcode = subprocess.call(["bin/nova-manage", "instance_type",
|
||||||
"delete", duplicate_name], stdout=fnull)
|
"delete", duplicate_name, "--purge"],
|
||||||
|
stdout=self.fnull)
|
||||||
self.assertEqual(0, delete_retcode)
|
self.assertEqual(0, delete_retcode)
|
||||||
|
|
||||||
def test_instance_type_delete_should_fail_without_valid_name(self):
|
def test_instance_type_delete_should_fail_without_valid_name(self):
|
||||||
fnull = open(os.devnull, 'w')
|
retcode = subprocess.call(["bin/nova-manage", "instance_type",
|
||||||
retcode = subprocess.call(["bin/nova-manage", "instance_type",\
|
"delete", "doesntexist"],
|
||||||
"delete", "doesntexist"], stdout=fnull)
|
stdout=self.fnull)
|
||||||
self.assertEqual(1, retcode)
|
self.assertEqual(1, retcode)
|
||||||
|
|||||||
Reference in New Issue
Block a user