summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-09-12 22:51:29 +0000
committerGerrit Code Review <review@openstack.org>2013-09-12 22:51:29 +0000
commit77e46b4f3ec2ea61063e6ac00a0278f22a795fbe (patch)
tree12ab9e81db660077ea37d6e7246cf9db225a32db
parent9310edb33d4415b9565ecfb36ad6fe45638aa4a7 (diff)
parentc47d8c36a761be5d2a98b2fda230e311e81b238b (diff)
downloadpython-troveclient-77e46b4f3ec2ea61063e6ac00a0278f22a795fbe.tar.gz
Merge "Adds support for admin to create flavors through mgmt API"
-rw-r--r--troveclient/__init__.py1
-rw-r--r--troveclient/client.py2
-rw-r--r--troveclient/management.py39
-rw-r--r--troveclient/mcli.py26
-rw-r--r--troveclient/tests/test_management.py32
5 files changed, 100 insertions, 0 deletions
diff --git a/troveclient/__init__.py b/troveclient/__init__.py
index f4b2d27..2d14bbd 100644
--- a/troveclient/__init__.py
+++ b/troveclient/__init__.py
@@ -21,6 +21,7 @@ from troveclient.instances import Instances # noqa
from troveclient.hosts import Hosts # noqa
from troveclient.management import Management # noqa
from troveclient.management import RootHistory # noqa
+from troveclient.management import MgmtFlavors # noqa
from troveclient.root import Root # noqa
from troveclient.storage import StorageInfo # noqa
from troveclient.users import Users # noqa
diff --git a/troveclient/client.py b/troveclient/client.py
index 335daa4..bca246d 100644
--- a/troveclient/client.py
+++ b/troveclient/client.py
@@ -313,6 +313,7 @@ class Dbaas(object):
from troveclient.security_groups import SecurityGroupRules
from troveclient.storage import StorageInfo
from troveclient.management import Management
+ from troveclient.management import MgmtFlavors
from troveclient.accounts import Accounts
from troveclient.diagnostics import DiagnosticsInterrogator
from troveclient.diagnostics import HwInfoInterrogator
@@ -338,6 +339,7 @@ class Dbaas(object):
self.security_group_rules = SecurityGroupRules(self)
self.storage = StorageInfo(self)
self.management = Management(self)
+ self.mgmt_flavor = MgmtFlavors(self)
self.accounts = Accounts(self)
self.diagnostics = DiagnosticsInterrogator(self)
self.hwinfo = HwInfoInterrogator(self)
diff --git a/troveclient/management.py b/troveclient/management.py
index 1e17f92..4613e57 100644
--- a/troveclient/management.py
+++ b/troveclient/management.py
@@ -20,6 +20,7 @@ from troveclient.common import check_for_exceptions
from troveclient.common import limit_url
from troveclient.common import Paginated
from troveclient.instances import Instance
+from troveclient.flavors import Flavor
class RootHistory(base.Resource):
@@ -134,3 +135,41 @@ class Management(base.ManagerWithFind):
"""
body = {'reset-task-status': {}}
self._action(instance_id, body)
+
+
+class MgmtFlavors(base.ManagerWithFind):
+ """
+ Manage :class:`Flavor` resources.
+ """
+ resource_class = Flavor
+
+ def __repr__(self):
+ return "<Flavors Manager at %s>" % id(self)
+
+ def create(self, name, ram, disk, vcpus,
+ flavorid="auto", ephemeral=None, swap=None, rxtx_factor=None,
+ service_type=None):
+ """
+ Create a new flavor.
+ """
+ body = {"flavor": {
+ "flavor_id": flavorid,
+ "name": name,
+ "ram": ram,
+ "disk": disk,
+ "vcpu": vcpus,
+ "ephemeral": 0,
+ "swap": 0,
+ "rxtx_factor": "1.0",
+ "is_public": "True"
+ }}
+ if ephemeral:
+ body["flavor"]["ephemeral"] = ephemeral
+ if swap:
+ body["flavor"]["swap"] = swap
+ if rxtx_factor:
+ body["flavor"]["rxtx_factor"] = rxtx_factor
+ if service_type:
+ body["flavor"]["service_type"] = service_type
+
+ return self._create("/mgmt/flavors", body, "flavor")
diff --git a/troveclient/mcli.py b/troveclient/mcli.py
index 318d3be..622bf70 100644
--- a/troveclient/mcli.py
+++ b/troveclient/mcli.py
@@ -182,6 +182,31 @@ class StorageCommands(common.AuthedCommandsBase):
self._pretty_list(self.dbaas.storage.index)
+class FlavorsCommands(common.AuthedCommandsBase):
+ """Commands for managing Flavors"""
+
+ params = [
+ 'name',
+ 'ram',
+ 'disk',
+ 'vcpus',
+ 'flavor_id',
+ 'ephemeral',
+ 'swap',
+ 'rxtx_factor',
+ 'service_type'
+ ]
+
+ def create(self):
+ """Create a new flavor"""
+ self._require('name', 'ram', 'disk', 'vcpus',
+ 'flavor_id', 'service_type')
+ self._pretty_print(self.dbaas.mgmt_flavor.create, self.name,
+ self.ram, self.disk, self.vcpus, self.flavor_id,
+ self.ephemeral, self.swap, self.rxtx_factor,
+ self.service_type)
+
+
def config_options(oparser):
oparser.add_option("-u", "--url", default="http://localhost:5000/v1.1",
help="Auth API endpoint URL with port and version. \
@@ -195,6 +220,7 @@ COMMANDS = {
'root': RootCommands,
'storage': StorageCommands,
'quota': QuotaCommands,
+ 'flavor': FlavorsCommands,
}
diff --git a/troveclient/tests/test_management.py b/troveclient/tests/test_management.py
index c04e216..e21bd29 100644
--- a/troveclient/tests/test_management.py
+++ b/troveclient/tests/test_management.py
@@ -142,3 +142,35 @@ class ManagementTest(TestCase):
self.management.reset_task_status(1)
self.assertEqual(1, self.management._action.call_count)
self.assertEqual({'reset-task-status': {}}, self.body_)
+
+
+class MgmtFlavorsTest(TestCase):
+
+ def setUp(self):
+ super(MgmtFlavorsTest, self).setUp()
+ self.orig__init = management.MgmtFlavors.__init__
+ management.MgmtFlavors.__init__ = Mock(return_value=None)
+ self.flavors = management.MgmtFlavors()
+ self.flavors.api = Mock()
+ self.flavors.api.client = Mock()
+ self.flavors.resource_class = Mock(return_value="flavor-1")
+ self.orig_base_getid = base.getid
+ base.getid = Mock(return_value="flavor1")
+
+ def tearDown(self):
+ super(MgmtFlavorsTest, self).tearDown()
+ management.MgmtFlavors.__init__ = self.orig__init
+ base.getid = self.orig_base_getid
+
+ def test_create(self):
+ def side_effect_func(path, body, inst):
+ return path, body, inst
+
+ self.flavors._create = Mock(side_effect=side_effect_func)
+ p, b, i = self.flavors.create("test-name", 1024, 30, 2, 1)
+ self.assertEqual("/mgmt/flavors", p)
+ self.assertEqual("flavor", i)
+ self.assertEqual("test-name", b["flavor"]["name"])
+ self.assertEqual(1024, b["flavor"]["ram"])
+ self.assertEqual(2, b["flavor"]["vcpu"])
+ self.assertEqual(1, b["flavor"]["flavor_id"])