diff --git a/reddwarfclient/__init__.py b/reddwarfclient/__init__.py index 29d6db01..01dee13a 100644 --- a/reddwarfclient/__init__.py +++ b/reddwarfclient/__init__.py @@ -102,6 +102,7 @@ class Dbaas(Client): service_url=service_url) self.versions = Versions(self) self.databases = Databases(self) + self.flavors = Flavors(self) self.instances = Instances(self) self.users = Users(self) self.root = Root(self) @@ -116,6 +117,7 @@ class Dbaas(Client): from reddwarfclient.accounts import Accounts from reddwarfclient.config import Configs from reddwarfclient.databases import Databases +from reddwarfclient.flavors import Flavors from reddwarfclient.instances import Instances from reddwarfclient.hosts import Hosts from reddwarfclient.management import Management diff --git a/reddwarfclient/flavors.py b/reddwarfclient/flavors.py new file mode 100644 index 00000000..fcaa646a --- /dev/null +++ b/reddwarfclient/flavors.py @@ -0,0 +1,78 @@ +# Copyright (c) 2012 OpenStack, LLC. +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + + +from novaclient import base + +import exceptions + +from reddwarfclient.common import check_for_exceptions + +class Flavor(base.Resource): + """ + A Flavor is an Instance type, specifying among other things, RAM size. + """ + def __repr__(self): + return "<Flavor: %s>" % self.name + + +class Flavors(base.ManagerWithFind): + """ + Manage :class:`Flavor` resources. + """ + resource_class = Flavor + + def __repr__(self): + return "<Flavors Manager at %s>" % id(self) + + def _list(self, url, response_key): + resp, body = self.api.client.get(url) + if not body: + raise Exception("Call to " + url + " did not return a body.") + return [self.resource_class(self, res) for res in body[response_key]] + + def list(self): + """ + Get a list of all flavors. + + :rtype: list of :class:`Flavor`. + """ + return self.detail() + + def index(self): + """ + Get a list of all flavors. + + :rtype: list of :class:`Flavor`. + """ + return self._list("/flavors", "flavors") + + def detail(self): + """ + Get the details of all flavors. + + :rtype: list of :class:`Flavor`. + """ + return self._list("/flavors/detail", "flavors") + + def get(self, flavor): + """ + Get a specific flavor. + + :rtype: :class:`Flavor` + """ + return self._get("/flavors/%s" % base.getid(flavor), + "flavor") +