Merge "Enabled F821, H306, H402, and H404 flake8 rule"
This commit is contained in:
commit
045f6791bb
2
tox.ini
2
tox.ini
|
@ -33,6 +33,6 @@ commands =
|
|||
python setup.py build_sphinx
|
||||
|
||||
[flake8]
|
||||
ignore = F821,H202,H306,H402,H404
|
||||
ignore = H202
|
||||
show-source = True
|
||||
exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build,
|
||||
|
|
|
@ -26,10 +26,10 @@ import os
|
|||
import six
|
||||
from six.moves.urllib import parse
|
||||
|
||||
from troveclient import common
|
||||
from troveclient.openstack.common.apiclient import base
|
||||
from troveclient.openstack.common.apiclient import exceptions
|
||||
from troveclient import utils
|
||||
from troveclient import common
|
||||
|
||||
# Python 2.4 compat
|
||||
try:
|
||||
|
@ -40,9 +40,10 @@ except NameError:
|
|||
|
||||
|
||||
def getid(obj):
|
||||
"""
|
||||
Abstracts the common pattern of allowing both an object or an object's ID
|
||||
as a parameter when dealing with relationships.
|
||||
"""Retrieves an id from object or integer.
|
||||
|
||||
Abstracts the common pattern of allowing both an object or an object's
|
||||
ID as a parameter when dealing with relationships.
|
||||
"""
|
||||
try:
|
||||
return obj.id
|
||||
|
@ -51,9 +52,10 @@ def getid(obj):
|
|||
|
||||
|
||||
class Manager(utils.HookableMixin):
|
||||
"""
|
||||
Managers interact with a particular type of API (servers, flavors, images,
|
||||
etc.) and provide CRUD operations for them.
|
||||
"""Manager defining CRUD operations for API.
|
||||
|
||||
Managers interact with a particular type of API (servers, flavors,
|
||||
images, etc.) and provide CRUD operations for them.
|
||||
"""
|
||||
resource_class = None
|
||||
|
||||
|
@ -101,7 +103,8 @@ class Manager(utils.HookableMixin):
|
|||
|
||||
@contextlib.contextmanager
|
||||
def completion_cache(self, cache_type, obj_class, mode):
|
||||
"""
|
||||
"""Bash-completion cache.
|
||||
|
||||
The completion cache store items that can be used for bash
|
||||
autocompletion, like UUIDs or human-friendly IDs.
|
||||
|
||||
|
@ -185,17 +188,14 @@ class Manager(utils.HookableMixin):
|
|||
|
||||
|
||||
class ManagerWithFind(six.with_metaclass(abc.ABCMeta, Manager)):
|
||||
"""
|
||||
Like a `Manager`, but with additional `find()`/`findall()` methods.
|
||||
"""
|
||||
"""Like a `Manager`, but with additional `find()`/`findall()` methods."""
|
||||
|
||||
@abc.abstractmethod
|
||||
def list(self):
|
||||
pass
|
||||
|
||||
def find(self, **kwargs):
|
||||
"""
|
||||
Find a single item with attributes matching ``**kwargs``.
|
||||
"""Find a single item with attributes matching ``**kwargs``.
|
||||
|
||||
This isn't very efficient: it loads the entire list then filters on
|
||||
the Python side.
|
||||
|
@ -211,8 +211,7 @@ class ManagerWithFind(six.with_metaclass(abc.ABCMeta, Manager)):
|
|||
return matches[0]
|
||||
|
||||
def findall(self, **kwargs):
|
||||
"""
|
||||
Find all items with attributes matching ``**kwargs``.
|
||||
"""Find all items with attributes matching ``**kwargs``.
|
||||
|
||||
This isn't very efficient: it loads the entire list then filters on
|
||||
the Python side.
|
||||
|
@ -232,10 +231,9 @@ class ManagerWithFind(six.with_metaclass(abc.ABCMeta, Manager)):
|
|||
|
||||
|
||||
class Resource(base.Resource):
|
||||
"""
|
||||
A resource represents a particular instance of an object (server, flavor,
|
||||
etc). This is pretty much just a bag for attributes.
|
||||
"""A resource represents a particular instance of an object like server.
|
||||
|
||||
This is pretty much just a bag for attributes.
|
||||
:param manager: Manager object
|
||||
:param info: dictionary representing resource attributes
|
||||
:param loaded: prevent lazy-loading if set to True
|
||||
|
|
|
@ -24,9 +24,10 @@ from __future__ import print_function
|
|||
import logging
|
||||
import os
|
||||
import requests
|
||||
|
||||
from troveclient.openstack.common.apiclient import client
|
||||
from troveclient.openstack.common.apiclient import exceptions
|
||||
from troveclient import service_catalog
|
||||
from troveclient.openstack.common.apiclient import client
|
||||
|
||||
try:
|
||||
import urlparse
|
||||
|
|
|
@ -14,19 +14,19 @@
|
|||
# under the License.
|
||||
|
||||
|
||||
from troveclient.compat.client import Dbaas # noqa
|
||||
from troveclient.compat.client import TroveHTTPClient # noqa
|
||||
from troveclient.compat.versions import Versions # noqa
|
||||
from troveclient.v1.accounts import Accounts # noqa
|
||||
from troveclient.v1.databases import Databases # noqa
|
||||
from troveclient.v1.diagnostics import DiagnosticsInterrogator # noqa
|
||||
from troveclient.v1.diagnostics import HwInfoInterrogator # noqa
|
||||
from troveclient.v1.flavors import Flavors # noqa
|
||||
from troveclient.v1.instances import Instances # noqa
|
||||
from troveclient.v1.hosts import Hosts # noqa
|
||||
from troveclient.v1.instances import Instances # noqa
|
||||
from troveclient.v1.management import Management # noqa
|
||||
from troveclient.v1.management import RootHistory # noqa
|
||||
from troveclient.v1.management import MgmtFlavors # noqa
|
||||
from troveclient.v1.management import RootHistory # noqa
|
||||
from troveclient.v1.root import Root # noqa
|
||||
from troveclient.v1.storage import StorageInfo # noqa
|
||||
from troveclient.v1.users import Users # noqa
|
||||
from troveclient.compat.versions import Versions # noqa
|
||||
from troveclient.v1.diagnostics import DiagnosticsInterrogator # noqa
|
||||
from troveclient.v1.diagnostics import HwInfoInterrogator # noqa
|
||||
from troveclient.compat.client import Dbaas # noqa
|
||||
from troveclient.compat.client import TroveHTTPClient # noqa
|
||||
|
|
|
@ -38,8 +38,7 @@ def get_authenticator_cls(cls_or_name):
|
|||
|
||||
|
||||
class Authenticator(object):
|
||||
"""
|
||||
Helper class to perform Keystone or other miscellaneous authentication.
|
||||
"""Helper class to perform Keystone or other miscellaneous authentication.
|
||||
|
||||
The "authenticate" method returns a ServiceCatalog, which can be used
|
||||
to obtain a token.
|
||||
|
@ -154,7 +153,8 @@ class RaxAuthenticator(Authenticator):
|
|||
|
||||
|
||||
class RaxAuthenticator2(RaxAuthenticator):
|
||||
"""
|
||||
"""Rax specific authenticator.
|
||||
|
||||
Necessary to be able to call using the same auth url as the new client
|
||||
uses for Rax auth.
|
||||
"""
|
||||
|
@ -225,7 +225,8 @@ class ServiceCatalog(object):
|
|||
|
||||
def _url_for(self, attr=None, filter_value=None,
|
||||
endpoint_type='publicURL'):
|
||||
"""
|
||||
"""Fetch requested URL.
|
||||
|
||||
Fetch the public URL from the Trove service for a particular
|
||||
endpoint attribute. If none given, return the first.
|
||||
"""
|
||||
|
|
|
@ -35,9 +35,10 @@ except NameError:
|
|||
|
||||
|
||||
def getid(obj):
|
||||
"""
|
||||
Abstracts the common pattern of allowing both an object or an object's ID
|
||||
as a parameter when dealing with relationships.
|
||||
"""Retrives an id from object or integer.
|
||||
|
||||
Abstracts the common pattern of allowing both an object or an object's
|
||||
ID as a parameter when dealing with relationships.
|
||||
"""
|
||||
try:
|
||||
return obj.id
|
||||
|
@ -46,9 +47,10 @@ def getid(obj):
|
|||
|
||||
|
||||
class Manager(utils.HookableMixin):
|
||||
"""
|
||||
Managers interact with a particular type of API (servers, flavors, images,
|
||||
etc.) and provide CRUD operations for them.
|
||||
"""Manager defining CRUD operations for API.
|
||||
|
||||
Managers interact with a particular type of API (servers, flavors,
|
||||
images, etc.) and provide CRUD operations for them.
|
||||
"""
|
||||
resource_class = None
|
||||
|
||||
|
@ -81,7 +83,8 @@ class Manager(utils.HookableMixin):
|
|||
|
||||
@contextlib.contextmanager
|
||||
def completion_cache(self, cache_type, obj_class, mode):
|
||||
"""
|
||||
"""Bash-completion cache.
|
||||
|
||||
The completion cache store items that can be used for bash
|
||||
autocompletion, like UUIDs or human-friendly IDs.
|
||||
|
||||
|
@ -164,13 +167,10 @@ class Manager(utils.HookableMixin):
|
|||
|
||||
|
||||
class ManagerWithFind(Manager):
|
||||
"""
|
||||
Like a `Manager`, but with additional `find()`/`findall()` methods.
|
||||
"""
|
||||
"""Like a `Manager`, but with additional `find()`/`findall()` methods."""
|
||||
|
||||
def find(self, **kwargs):
|
||||
"""
|
||||
Find a single item with attributes matching ``**kwargs``.
|
||||
"""Find a single item with attributes matching ``**kwargs``.
|
||||
|
||||
This isn't very efficient: it loads the entire list then filters on
|
||||
the Python side.
|
||||
|
@ -186,8 +186,7 @@ class ManagerWithFind(Manager):
|
|||
return matches[0]
|
||||
|
||||
def findall(self, **kwargs):
|
||||
"""
|
||||
Find all items with attributes matching ``**kwargs``.
|
||||
"""Find all items with attributes matching ``**kwargs``.
|
||||
|
||||
This isn't very efficient: it loads the entire list then filters on
|
||||
the Python side.
|
||||
|
@ -210,10 +209,9 @@ class ManagerWithFind(Manager):
|
|||
|
||||
|
||||
class Resource(object):
|
||||
"""
|
||||
A resource represents a particular instance of an object (server, flavor,
|
||||
etc). This is pretty much just a bag for attributes.
|
||||
"""A resource represents a particular instance of an object like server.
|
||||
|
||||
This is pretty much just a bag for attributes.
|
||||
:param manager: Manager object
|
||||
:param info: dictionary representing resource attributes
|
||||
:param loaded: prevent lazy-loading if set to True
|
||||
|
@ -238,9 +236,7 @@ class Resource(object):
|
|||
|
||||
@property
|
||||
def human_id(self):
|
||||
"""Subclasses may override this provide a pretty ID which can be used
|
||||
for bash completion.
|
||||
"""
|
||||
"""Provides a pretty ID which can be used for bash completion."""
|
||||
if 'name' in self.__dict__ and self.HUMAN_ID:
|
||||
return utils.slugify(self.name)
|
||||
return None
|
||||
|
|
|
@ -35,7 +35,7 @@ from troveclient.compat import common
|
|||
|
||||
|
||||
class InstanceCommands(common.AuthedCommandsBase):
|
||||
"""Commands to perform various instance operations and actions"""
|
||||
"""Commands to perform various instance operations and actions."""
|
||||
|
||||
params = [
|
||||
'flavor',
|
||||
|
@ -64,7 +64,7 @@ class InstanceCommands(common.AuthedCommandsBase):
|
|||
return configuration_ref
|
||||
|
||||
def create(self):
|
||||
"""Create a new instance"""
|
||||
"""Create a new instance."""
|
||||
self._require('name', 'flavor')
|
||||
volume = None
|
||||
if self.size:
|
||||
|
@ -79,28 +79,28 @@ class InstanceCommands(common.AuthedCommandsBase):
|
|||
|
||||
# TODO(pdmars): is this actually what this should be named?
|
||||
def modify(self):
|
||||
"""Modify an instance"""
|
||||
"""Modify an instance."""
|
||||
self._require('id')
|
||||
self._pretty_print(self.dbaas.instances.modify, self.id,
|
||||
configuration_ref=self._get_configuration_ref())
|
||||
|
||||
def delete(self):
|
||||
"""Delete the specified instance"""
|
||||
"""Delete the specified instance."""
|
||||
self._require('id')
|
||||
print(self.dbaas.instances.delete(self.id))
|
||||
|
||||
def get(self):
|
||||
"""Get details for the specified instance"""
|
||||
"""Get details for the specified instance."""
|
||||
self._require('id')
|
||||
self._pretty_print(self.dbaas.instances.get, self.id)
|
||||
|
||||
def backups(self):
|
||||
"""Get a list of backups for the specified instance"""
|
||||
"""Get a list of backups for the specified instance."""
|
||||
self._require('id')
|
||||
self._pretty_list(self.dbaas.instances.backups, self.id)
|
||||
|
||||
def list(self):
|
||||
"""List all instances for account"""
|
||||
"""List all instances for account."""
|
||||
# limit and marker are not required.
|
||||
limit = self.limit or None
|
||||
if limit:
|
||||
|
@ -108,7 +108,7 @@ class InstanceCommands(common.AuthedCommandsBase):
|
|||
self._pretty_paged(self.dbaas.instances.list)
|
||||
|
||||
def resize_volume(self):
|
||||
"""Resize an instance volume"""
|
||||
"""Resize an instance volume."""
|
||||
self._require('id', 'size')
|
||||
self._pretty_print(self.dbaas.instances.resize_volume, self.id,
|
||||
self.size)
|
||||
|
@ -120,28 +120,28 @@ class InstanceCommands(common.AuthedCommandsBase):
|
|||
self.flavor)
|
||||
|
||||
def restart(self):
|
||||
"""Restart the database"""
|
||||
"""Restart the database."""
|
||||
self._require('id')
|
||||
self._pretty_print(self.dbaas.instances.restart, self.id)
|
||||
|
||||
def configuration(self):
|
||||
"""Get configuration for the specified instance"""
|
||||
"""Get configuration for the specified instance."""
|
||||
self._require('id')
|
||||
self._pretty_print(self.dbaas.instances.configuration, self.id)
|
||||
|
||||
|
||||
class FlavorsCommands(common.AuthedCommandsBase):
|
||||
"""Commands for listing Flavors"""
|
||||
"""Command for listing Flavors."""
|
||||
|
||||
params = []
|
||||
|
||||
def list(self):
|
||||
"""List the available flavors"""
|
||||
"""List the available flavors."""
|
||||
self._pretty_list(self.dbaas.flavors.list)
|
||||
|
||||
|
||||
class DatabaseCommands(common.AuthedCommandsBase):
|
||||
"""Database CRUD operations on an instance"""
|
||||
"""Database CRUD operations on an instance."""
|
||||
|
||||
params = [
|
||||
'name',
|
||||
|
@ -151,24 +151,24 @@ class DatabaseCommands(common.AuthedCommandsBase):
|
|||
]
|
||||
|
||||
def create(self):
|
||||
"""Create a database"""
|
||||
"""Create a database."""
|
||||
self._require('id', 'name')
|
||||
databases = [{'name': self.name}]
|
||||
print(self.dbaas.databases.create(self.id, databases))
|
||||
|
||||
def delete(self):
|
||||
"""Delete a database"""
|
||||
"""Delete a database."""
|
||||
self._require('id', 'name')
|
||||
print(self.dbaas.databases.delete(self.id, self.name))
|
||||
|
||||
def list(self):
|
||||
"""List the databases"""
|
||||
"""List the databases."""
|
||||
self._require('id')
|
||||
self._pretty_paged(self.dbaas.databases.list, self.id)
|
||||
|
||||
|
||||
class UserCommands(common.AuthedCommandsBase):
|
||||
"""User CRUD operations on an instance"""
|
||||
"""User CRUD operations on an instance."""
|
||||
params = [
|
||||
'id',
|
||||
'database',
|
||||
|
@ -182,7 +182,7 @@ class UserCommands(common.AuthedCommandsBase):
|
|||
]
|
||||
|
||||
def create(self):
|
||||
"""Create a user in instance, with access to one or more databases"""
|
||||
"""Create a user in instance, with access to one or more databases."""
|
||||
self._require('id', 'name', 'password', 'databases')
|
||||
self._make_list('databases')
|
||||
databases = [{'name': dbname} for dbname in self.databases]
|
||||
|
@ -218,7 +218,7 @@ class UserCommands(common.AuthedCommandsBase):
|
|||
self.hostname)
|
||||
|
||||
def list(self):
|
||||
"""List all the users for an instance"""
|
||||
"""List all the users for an instance."""
|
||||
self._require('id')
|
||||
self._pretty_paged(self.dbaas.users.list, self.id)
|
||||
|
||||
|
@ -253,7 +253,7 @@ class UserCommands(common.AuthedCommandsBase):
|
|||
|
||||
|
||||
class RootCommands(common.AuthedCommandsBase):
|
||||
"""Root user related operations on an instance"""
|
||||
"""Root user related operations on an instance."""
|
||||
|
||||
params = [
|
||||
'id',
|
||||
|
@ -269,119 +269,120 @@ class RootCommands(common.AuthedCommandsBase):
|
|||
print(sys.exc_info()[1])
|
||||
|
||||
def enabled(self):
|
||||
"""Check the instance for root access"""
|
||||
"""Check the instance for root access."""
|
||||
self._require('id')
|
||||
self._pretty_print(self.dbaas.root.is_root_enabled, self.id)
|
||||
|
||||
|
||||
class VersionCommands(common.AuthedCommandsBase):
|
||||
"""List available versions"""
|
||||
"""List available versions."""
|
||||
|
||||
params = [
|
||||
'url',
|
||||
]
|
||||
|
||||
def list(self):
|
||||
"""List all the supported versions"""
|
||||
"""List all the supported versions."""
|
||||
self._require('url')
|
||||
self._pretty_list(self.dbaas.versions.index, self.url)
|
||||
|
||||
|
||||
class LimitsCommands(common.AuthedCommandsBase):
|
||||
"""Show the rate limits and absolute limits"""
|
||||
"""Show the rate limits and absolute limits."""
|
||||
|
||||
def list(self):
|
||||
"""List the rate limits and absolute limits"""
|
||||
"""List the rate limits and absolute limits."""
|
||||
self._pretty_list(self.dbaas.limits.list)
|
||||
|
||||
|
||||
class BackupsCommands(common.AuthedCommandsBase):
|
||||
"""Command to manage and show backups"""
|
||||
"""Command to manage and show backups."""
|
||||
params = ['name', 'instance', 'description']
|
||||
|
||||
def get(self):
|
||||
"""Get details for the specified backup"""
|
||||
"""Get details for the specified backup."""
|
||||
self._require('id')
|
||||
self._pretty_print(self.dbaas.backups.get, self.id)
|
||||
|
||||
def list(self):
|
||||
"""List backups"""
|
||||
"""List backups."""
|
||||
self._pretty_list(self.dbaas.backups.list)
|
||||
|
||||
def create(self):
|
||||
"""Create a new backup"""
|
||||
"""Create a new backup."""
|
||||
self._require('name', 'instance')
|
||||
self._pretty_print(self.dbaas.backups.create, self.name,
|
||||
self.instance, self.description)
|
||||
|
||||
def delete(self):
|
||||
"""Delete a backup"""
|
||||
"""Delete a backup."""
|
||||
self._require('id')
|
||||
self._pretty_print(self.dbaas.backups.delete, self.id)
|
||||
|
||||
|
||||
class DatastoreConfigurationParameters(common.AuthedCommandsBase):
|
||||
"""Command to show configuration parameters for a datastore"""
|
||||
"""Command to show configuration parameters for a datastore."""
|
||||
params = ['datastore', 'parameter']
|
||||
|
||||
def parameters(self):
|
||||
"""List parameters that can be set"""
|
||||
"""List parameters that can be set."""
|
||||
self._require('datastore')
|
||||
self._pretty_print(self.dbaas.configuration_parameters.parameters,
|
||||
self.datastore)
|
||||
|
||||
def get_parameter(self):
|
||||
"""List parameters that can be set"""
|
||||
"""List parameters that can be set."""
|
||||
self._require('datastore', 'parameter')
|
||||
self._pretty_print(self.dbaas.configuration_parameters.get_parameter,
|
||||
self.datastore, self.parameter)
|
||||
|
||||
|
||||
class ConfigurationsCommands(common.AuthedCommandsBase):
|
||||
"""Command to manage and show configurations"""
|
||||
"""Command to manage and show configurations."""
|
||||
params = ['name', 'instances', 'values', 'description', 'parameter']
|
||||
|
||||
def get(self):
|
||||
"""Get details for the specified configuration"""
|
||||
"""Get details for the specified configuration."""
|
||||
self._require('id')
|
||||
self._pretty_print(self.dbaas.configurations.get, self.id)
|
||||
|
||||
def list_instances(self):
|
||||
"""Get details for the specified configuration"""
|
||||
"""Get details for the specified configuration."""
|
||||
self._require('id')
|
||||
self._pretty_list(self.dbaas.configurations.instances, self.id)
|
||||
|
||||
def list(self):
|
||||
"""List configurations"""
|
||||
"""List configurations."""
|
||||
self._pretty_list(self.dbaas.configurations.list)
|
||||
|
||||
def create(self):
|
||||
"""Create a new configuration"""
|
||||
"""Create a new configuration."""
|
||||
self._require('name', 'values')
|
||||
self._pretty_print(self.dbaas.configurations.create, self.name,
|
||||
self.values, self.description)
|
||||
|
||||
def update(self):
|
||||
"""Update an existing configuration"""
|
||||
"""Update an existing configuration."""
|
||||
self._require('id', 'values')
|
||||
self._pretty_print(self.dbaas.configurations.update, self.id,
|
||||
self.values, self.name, self.description)
|
||||
|
||||
def edit(self):
|
||||
"""Edit an existing configuration values"""
|
||||
"""Edit an existing configuration values."""
|
||||
self._require('id', 'values')
|
||||
self._pretty_print(self.dbaas.configurations.edit, self.id,
|
||||
self.values)
|
||||
|
||||
def delete(self):
|
||||
"""Delete a configuration"""
|
||||
"""Delete a configuration."""
|
||||
self._require('id')
|
||||
self._pretty_print(self.dbaas.configurations.delete, self.id)
|
||||
|
||||
|
||||
class SecurityGroupCommands(common.AuthedCommandsBase):
|
||||
"""Commands to list and show Security Groups For an Instance and """
|
||||
"""create and delete security group rules for them. """
|
||||
"""Commands to list and show Security Groups For an Instance and
|
||||
create and delete security group rules for them.
|
||||
"""
|
||||
params = [
|
||||
'id',
|
||||
'secgroup_id',
|
||||
|
@ -397,11 +398,11 @@ class SecurityGroupCommands(common.AuthedCommandsBase):
|
|||
self._pretty_print(self.dbaas.security_groups.get, self.id)
|
||||
|
||||
def list(self):
|
||||
"""List all the Security Groups and the rules"""
|
||||
"""List all the Security Groups and the rules."""
|
||||
self._pretty_paged(self.dbaas.security_groups.list)
|
||||
|
||||
def add_rule(self):
|
||||
"""Add a security group rule"""
|
||||
"""Add a security group rule."""
|
||||
self._require('secgroup_id', 'protocol',
|
||||
'from_port', 'to_port', 'cidr')
|
||||
self.dbaas.security_group_rules.create(self.secgroup_id, self.protocol,
|
||||
|
@ -409,7 +410,7 @@ class SecurityGroupCommands(common.AuthedCommandsBase):
|
|||
self.cidr)
|
||||
|
||||
def delete_rule(self):
|
||||
"""Delete a security group rule"""
|
||||
"""Delete a security group rule."""
|
||||
self._require('id')
|
||||
self.dbaas.security_group_rules.delete(self.id)
|
||||
|
||||
|
|
|
@ -16,8 +16,8 @@
|
|||
import httplib2
|
||||
import logging
|
||||
import os
|
||||
import time
|
||||
import sys
|
||||
import time
|
||||
|
||||
try:
|
||||
import json
|
||||
|
@ -277,19 +277,18 @@ class TroveHTTPClient(httplib2.Http):
|
|||
|
||||
|
||||
class Dbaas(object):
|
||||
"""
|
||||
Top-level object to access the Rackspace Database as a Service API.
|
||||
"""Top-level object to access the Rackspace Database as a Service API.
|
||||
|
||||
Create an instance with your creds::
|
||||
|
||||
>>> red = Dbaas(USERNAME, API_KEY, TENANT, AUTH_URL, SERVICE_NAME, \
|
||||
>> red = Dbaas(USERNAME, API_KEY, TENANT, AUTH_URL, SERVICE_NAME, \
|
||||
SERVICE_URL)
|
||||
|
||||
Then call methods on its managers::
|
||||
|
||||
>>> red.instances.list()
|
||||
>> red.instances.list()
|
||||
...
|
||||
>>> red.flavors.list()
|
||||
>> red.flavors.list()
|
||||
...
|
||||
|
||||
&c.
|
||||
|
@ -365,8 +364,7 @@ class Dbaas(object):
|
|||
return self.client.get_timings()
|
||||
|
||||
def authenticate(self):
|
||||
"""
|
||||
Authenticate against the server.
|
||||
"""Authenticate against the server.
|
||||
|
||||
This is called to perform an authentication to retrieve a token.
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ def check_for_exceptions(resp, body):
|
|||
|
||||
|
||||
def print_actions(cmd, actions):
|
||||
"""Print help for the command with list of options and description"""
|
||||
"""Print help for the command with list of options and description."""
|
||||
print("Available actions for '%s' cmd:" % cmd)
|
||||
for k, v in six.iteritems(actions):
|
||||
print("\t%-20s%s" % (k, v.__doc__))
|
||||
|
@ -50,7 +50,7 @@ def print_actions(cmd, actions):
|
|||
|
||||
|
||||
def print_commands(commands):
|
||||
"""Print the list of available commands and description"""
|
||||
"""Print the list of available commands and description."""
|
||||
|
||||
print("Available commands")
|
||||
for k, v in six.iteritems(commands):
|
||||
|
@ -330,7 +330,7 @@ class CommandsBase(object):
|
|||
|
||||
|
||||
class Auth(CommandsBase):
|
||||
"""Authenticate with your username and api key"""
|
||||
"""Authenticate with your username and api key."""
|
||||
params = [
|
||||
'apikey',
|
||||
'auth_strategy',
|
||||
|
@ -350,7 +350,7 @@ class Auth(CommandsBase):
|
|||
self.dbaas = None
|
||||
|
||||
def login(self):
|
||||
"""Login to retrieve an auth token to use for other api calls"""
|
||||
"""Login to retrieve an auth token to use for other api calls."""
|
||||
self._require('username', 'apikey', 'tenant_id', 'auth_url')
|
||||
try:
|
||||
self.dbaas = self._get_client()
|
||||
|
|
|
@ -69,9 +69,7 @@ class AmbiguousEndpoints(Exception):
|
|||
|
||||
|
||||
class ClientException(Exception):
|
||||
"""
|
||||
The base exception class for all exceptions this library raises.
|
||||
"""
|
||||
"""The base exception class for all exceptions this library raises."""
|
||||
def __init__(self, code, message=None, details=None, request_id=None):
|
||||
self.code = code
|
||||
self.message = message or self.__class__.message
|
||||
|
@ -87,41 +85,32 @@ class ClientException(Exception):
|
|||
|
||||
|
||||
class BadRequest(ClientException):
|
||||
"""
|
||||
HTTP 400 - Bad request: you sent some malformed data.
|
||||
"""
|
||||
"""HTTP 400 - Bad request: you sent some malformed data."""
|
||||
http_status = 400
|
||||
message = "Bad request"
|
||||
|
||||
|
||||
class Unauthorized(ClientException):
|
||||
"""
|
||||
HTTP 401 - Unauthorized: bad credentials.
|
||||
"""
|
||||
"""HTTP 401 - Unauthorized: bad credentials."""
|
||||
http_status = 401
|
||||
message = "Unauthorized"
|
||||
|
||||
|
||||
class Forbidden(ClientException):
|
||||
"""
|
||||
HTTP 403 - Forbidden: your credentials don't give you access to this
|
||||
resource.
|
||||
"""
|
||||
"""HTTP 403 - Forbidden: your don't have access to this resource."""
|
||||
http_status = 403
|
||||
message = "Forbidden"
|
||||
|
||||
|
||||
class NotFound(ClientException):
|
||||
"""
|
||||
HTTP 404 - Not found
|
||||
"""
|
||||
"""HTTP 404 - Not found."""
|
||||
http_status = 404
|
||||
message = "Not found"
|
||||
|
||||
|
||||
class OverLimit(ClientException):
|
||||
"""
|
||||
HTTP 413 - Over limit: you're over the API limits for this time period.
|
||||
"""HTTP 413
|
||||
- Over limit: you're over the API limits for this time period.
|
||||
"""
|
||||
http_status = 413
|
||||
message = "Over limit"
|
||||
|
@ -129,17 +118,15 @@ class OverLimit(ClientException):
|
|||
|
||||
# NotImplemented is a python keyword.
|
||||
class HTTPNotImplemented(ClientException):
|
||||
"""
|
||||
HTTP 501 - Not Implemented: the server does not support this operation.
|
||||
"""HTTP 501
|
||||
- Not Implemented: the server does not support this operation.
|
||||
"""
|
||||
http_status = 501
|
||||
message = "Not Implemented"
|
||||
|
||||
|
||||
class UnprocessableEntity(ClientException):
|
||||
"""
|
||||
HTTP 422 - Unprocessable Entity: The request cannot be processed.
|
||||
"""
|
||||
"""HTTP 422 - Unprocessable Entity: The request cannot be processed."""
|
||||
http_status = 422
|
||||
message = "Unprocessable Entity"
|
||||
|
||||
|
@ -157,9 +144,7 @@ _code_map = dict((c.http_status, c) for c in [BadRequest, Unauthorized,
|
|||
|
||||
|
||||
def from_response(response, body):
|
||||
"""
|
||||
Return an instance of an ClientException or subclass
|
||||
based on an httplib2 response.
|
||||
"""Return an instance of an ClientException based on a request's response.
|
||||
|
||||
Usage::
|
||||
|
||||
|
|
|
@ -43,24 +43,24 @@ def _pretty_print(info):
|
|||
|
||||
|
||||
class HostCommands(common.AuthedCommandsBase):
|
||||
"""Commands to list info on hosts"""
|
||||
"""Commands to list info on hosts."""
|
||||
|
||||
params = [
|
||||
'name',
|
||||
]
|
||||
|
||||
def update_all(self):
|
||||
"""Update all instances on a host"""
|
||||
"""Update all instances on a host."""
|
||||
self._require('name')
|
||||
self.dbaas.hosts.update_all(self.name)
|
||||
|
||||
def get(self):
|
||||
"""List details for the specified host"""
|
||||
"""List details for the specified host."""
|
||||
self._require('name')
|
||||
self._pretty_print(self.dbaas.hosts.get, self.name)
|
||||
|
||||
def list(self):
|
||||
"""List all compute hosts"""
|
||||
"""List all compute hosts."""
|
||||
self._pretty_list(self.dbaas.hosts.index)
|
||||
|
||||
|
||||
|
@ -73,12 +73,12 @@ class QuotaCommands(common.AuthedCommandsBase):
|
|||
'backups']
|
||||
|
||||
def list(self):
|
||||
"""List all quotas for a tenant"""
|
||||
"""List all quotas for a tenant."""
|
||||
self._require('id')
|
||||
self._pretty_print(self.dbaas.quota.show, self.id)
|
||||
|
||||
def update(self):
|
||||
"""Update quota limits for a tenant"""
|
||||
"""Update quota limits for a tenant."""
|
||||
self._require('id')
|
||||
self._pretty_print(self.dbaas.quota.update, self.id,
|
||||
dict((param, getattr(self, param))
|
||||
|
@ -99,18 +99,18 @@ class RootCommands(common.AuthedCommandsBase):
|
|||
|
||||
|
||||
class AccountCommands(common.AuthedCommandsBase):
|
||||
"""Commands to list account info"""
|
||||
"""Commands to list account info."""
|
||||
|
||||
params = [
|
||||
'id',
|
||||
]
|
||||
|
||||
def list(self):
|
||||
"""List all accounts with non-deleted instances"""
|
||||
"""List all accounts with non-deleted instances."""
|
||||
self._pretty_print(self.dbaas.accounts.index)
|
||||
|
||||
def get(self):
|
||||
"""List details for the account provided"""
|
||||
"""List details for the account provided."""
|
||||
self._require('id')
|
||||
self._pretty_print(self.dbaas.accounts.show, self.id)
|
||||
|
||||
|
@ -132,7 +132,7 @@ class InstanceCommands(common.AuthedCommandsBase):
|
|||
self._pretty_print(self.dbaas.management.show, self.id)
|
||||
|
||||
def list(self):
|
||||
"""List all instances for account"""
|
||||
"""List all instances for account."""
|
||||
deleted = None
|
||||
if self.deleted is not None:
|
||||
if self.deleted.lower() in ['true']:
|
||||
|
@ -173,17 +173,17 @@ class InstanceCommands(common.AuthedCommandsBase):
|
|||
|
||||
|
||||
class StorageCommands(common.AuthedCommandsBase):
|
||||
"""Commands to list devices info"""
|
||||
"""Commands to list devices info."""
|
||||
|
||||
params = []
|
||||
|
||||
def list(self):
|
||||
"""List details for the storage device"""
|
||||
"""List details for the storage device."""
|
||||
self._pretty_list(self.dbaas.storage.index)
|
||||
|
||||
|
||||
class FlavorsCommands(common.AuthedCommandsBase):
|
||||
"""Commands for managing Flavors"""
|
||||
"""Commands for managing Flavors."""
|
||||
|
||||
params = [
|
||||
'name',
|
||||
|
@ -198,7 +198,7 @@ class FlavorsCommands(common.AuthedCommandsBase):
|
|||
]
|
||||
|
||||
def create(self):
|
||||
"""Create a new flavor"""
|
||||
"""Create a new flavor."""
|
||||
self._require('name', 'ram', 'disk', 'vcpus',
|
||||
'flavor_id', 'service_type')
|
||||
self._pretty_print(self.dbaas.mgmt_flavor.create, self.name,
|
||||
|
|
|
@ -15,10 +15,10 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import testtools
|
||||
from troveclient.compat import auth
|
||||
import mock
|
||||
import testtools
|
||||
|
||||
from troveclient.compat import auth
|
||||
from troveclient.compat import exceptions
|
||||
|
||||
"""
|
||||
|
|
|
@ -13,13 +13,13 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import sys
|
||||
import optparse
|
||||
import json
|
||||
import collections
|
||||
import json
|
||||
import optparse
|
||||
import sys
|
||||
|
||||
import testtools
|
||||
import mock
|
||||
import testtools
|
||||
|
||||
from troveclient.compat import common
|
||||
|
||||
|
|
|
@ -36,9 +36,10 @@ class HookableMixin(object):
|
|||
|
||||
|
||||
def env(*vars, **kwargs):
|
||||
"""
|
||||
returns the first environment variable set
|
||||
if none are non-empty, defaults to '' or keyword arg default
|
||||
"""Returns environment variables.
|
||||
|
||||
Returns the first environment variable set
|
||||
if none are non-empty, defaults to '' or keyword arg default.
|
||||
"""
|
||||
for v in vars:
|
||||
value = os.environ.get(v, None)
|
||||
|
@ -50,7 +51,8 @@ def env(*vars, **kwargs):
|
|||
# http://code.activestate.com/recipes/
|
||||
# 577257-slugify-make-a-string-usable-in-a-url-or-filename/
|
||||
def slugify(value):
|
||||
"""
|
||||
"""Converts a string usable in a url or filename.
|
||||
|
||||
Normalizes string, converts to lowercase, removes non-alpha characters,
|
||||
and converts spaces to hyphens.
|
||||
|
||||
|
|
|
@ -17,23 +17,18 @@ from troveclient.compat import base
|
|||
|
||||
|
||||
class Version(base.Resource):
|
||||
"""
|
||||
Version is an opaque instance used to hold version information.
|
||||
"""
|
||||
"""Version is an opaque instance used to hold version information."""
|
||||
def __repr__(self):
|
||||
return "<Version: %s>" % self.id
|
||||
|
||||
|
||||
class Versions(base.ManagerWithFind):
|
||||
"""
|
||||
Manage :class:`Versions` information.
|
||||
"""
|
||||
"""Manage :class:`Versions` information."""
|
||||
|
||||
resource_class = Version
|
||||
|
||||
def index(self, url):
|
||||
"""
|
||||
Get a list of all versions.
|
||||
"""Get a list of all versions.
|
||||
|
||||
:rtype: list of :class:`Versions`.
|
||||
"""
|
||||
|
|
|
@ -24,20 +24,21 @@ import argparse
|
|||
import glob
|
||||
import imp
|
||||
import itertools
|
||||
import logging
|
||||
import os
|
||||
import pkgutil
|
||||
import sys
|
||||
import logging
|
||||
|
||||
import pkg_resources
|
||||
import six
|
||||
|
||||
import troveclient
|
||||
import troveclient.extension
|
||||
|
||||
from troveclient import client
|
||||
from troveclient.openstack.common import strutils
|
||||
from troveclient.openstack.common.apiclient import exceptions as exc
|
||||
from troveclient.openstack.common import gettextutils as gtu
|
||||
from troveclient.openstack.common import strutils
|
||||
from troveclient import utils
|
||||
from troveclient.v1 import shell as shell_v1
|
||||
|
||||
|
@ -487,9 +488,7 @@ class OpenStackTroveShell(object):
|
|||
@utils.arg('command', metavar='<subcommand>', nargs='?',
|
||||
help='Display help for <subcommand>.')
|
||||
def do_help(self, args):
|
||||
"""
|
||||
Displays help about this program or one of its subcommands.
|
||||
"""
|
||||
"""Displays help about this program or one of its subcommands."""
|
||||
if args.command:
|
||||
if args.command in self.subcommands:
|
||||
self.subcommands[args.command].print_help()
|
||||
|
@ -508,7 +507,8 @@ class OpenStackHelpFormatter(argparse.HelpFormatter):
|
|||
super(OpenStackHelpFormatter, self).start_section(heading)
|
||||
|
||||
def _format_usage(self, usage, actions, groups, prefix):
|
||||
"""
|
||||
"""Formats the argument list to correct argument positions.
|
||||
|
||||
Print positionals before optionals in the usage string to help
|
||||
users avoid argparse nargs='*' problems.
|
||||
|
||||
|
|
|
@ -15,11 +15,11 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import testtools
|
||||
import mock
|
||||
import testtools
|
||||
|
||||
from troveclient.v1 import accounts
|
||||
from troveclient import base
|
||||
from troveclient.v1 import accounts
|
||||
|
||||
"""
|
||||
Unit tests for accounts.py
|
||||
|
|
|
@ -13,8 +13,8 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import testtools
|
||||
import mock
|
||||
import testtools
|
||||
import uuid
|
||||
|
||||
from troveclient.v1 import backups
|
||||
|
|
|
@ -18,12 +18,12 @@
|
|||
import contextlib
|
||||
import os
|
||||
|
||||
import testtools
|
||||
import mock
|
||||
import testtools
|
||||
|
||||
from troveclient import base
|
||||
from troveclient.openstack.common.apiclient import exceptions
|
||||
from troveclient import common
|
||||
from troveclient.openstack.common.apiclient import exceptions
|
||||
from troveclient import utils
|
||||
|
||||
"""
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import testtools
|
||||
import mock
|
||||
import testtools
|
||||
|
||||
from troveclient import common
|
||||
|
||||
|
|
|
@ -15,11 +15,11 @@
|
|||
# under the License.
|
||||
|
||||
import json
|
||||
import testtools
|
||||
import mock
|
||||
import testtools
|
||||
|
||||
from troveclient.v1 import configurations
|
||||
from troveclient import base
|
||||
from troveclient.v1 import configurations
|
||||
|
||||
"""
|
||||
Unit tests for configurations.py
|
||||
|
|
|
@ -15,11 +15,11 @@
|
|||
# under the License.
|
||||
|
||||
|
||||
import testtools
|
||||
import mock
|
||||
import testtools
|
||||
|
||||
from troveclient.v1 import datastores
|
||||
from troveclient import base
|
||||
from troveclient.v1 import datastores
|
||||
|
||||
|
||||
"""
|
||||
|
|
|
@ -15,11 +15,11 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import testtools
|
||||
import mock
|
||||
import testtools
|
||||
|
||||
from troveclient.v1 import instances
|
||||
from troveclient import base
|
||||
from troveclient.v1 import instances
|
||||
|
||||
"""
|
||||
Unit tests for instances.py
|
||||
|
|
|
@ -15,15 +15,14 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import testtools
|
||||
import mock
|
||||
import testtools
|
||||
|
||||
from troveclient.v1 import limits
|
||||
|
||||
|
||||
class LimitsTest(testtools.TestCase):
|
||||
"""
|
||||
This class tests the calling code for the Limits API
|
||||
"""
|
||||
"""This class tests the calling code for the Limits API."""
|
||||
|
||||
def setUp(self):
|
||||
super(LimitsTest, self).setUp()
|
||||
|
|
|
@ -15,11 +15,11 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import testtools
|
||||
import mock
|
||||
import testtools
|
||||
|
||||
from troveclient.v1 import management
|
||||
from troveclient import base
|
||||
from troveclient.v1 import management
|
||||
|
||||
"""
|
||||
Unit tests for management.py
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import testtools
|
||||
import mock
|
||||
import testtools
|
||||
|
||||
from troveclient.v1 import security_groups
|
||||
|
||||
|
|
|
@ -15,11 +15,11 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import testtools
|
||||
import mock
|
||||
import testtools
|
||||
|
||||
from troveclient.v1 import users
|
||||
from troveclient import base
|
||||
from troveclient.v1 import users
|
||||
|
||||
"""
|
||||
Unit tests for users.py
|
||||
|
|
|
@ -17,12 +17,12 @@
|
|||
from __future__ import print_function
|
||||
|
||||
import os
|
||||
import simplejson as json
|
||||
import sys
|
||||
import uuid
|
||||
import simplejson as json
|
||||
|
||||
import six
|
||||
import prettytable
|
||||
import six
|
||||
|
||||
from troveclient.openstack.common.apiclient import exceptions
|
||||
from troveclient.openstack.common import strutils
|
||||
|
@ -37,8 +37,9 @@ def arg(*args, **kwargs):
|
|||
|
||||
|
||||
def env(*vars, **kwargs):
|
||||
"""
|
||||
returns the first environment variable set
|
||||
"""Returns environment variables.
|
||||
|
||||
Returns the first environment variable set
|
||||
if none are non-empty, defaults to '' or keyword arg default
|
||||
"""
|
||||
for v in vars:
|
||||
|
@ -63,8 +64,8 @@ def add_arg(f, *args, **kwargs):
|
|||
|
||||
|
||||
def unauthenticated(f):
|
||||
"""
|
||||
Adds 'unauthenticated' attribute to decorated function.
|
||||
"""Adds 'unauthenticated' attribute to decorated function.
|
||||
|
||||
Usage:
|
||||
@unauthenticated
|
||||
def mymethod(f):
|
||||
|
@ -75,7 +76,8 @@ def unauthenticated(f):
|
|||
|
||||
|
||||
def isunauthenticated(f):
|
||||
"""
|
||||
"""Decorator to mark authentication-non-required.
|
||||
|
||||
Checks to see if the function is marked as not requiring authentication
|
||||
with the @unauthenticated decorator. Returns True if decorator is
|
||||
set to True, False otherwise.
|
||||
|
@ -84,8 +86,8 @@ def isunauthenticated(f):
|
|||
|
||||
|
||||
def service_type(stype):
|
||||
"""
|
||||
Adds 'service_type' attribute to decorated function.
|
||||
"""Adds 'service_type' attribute to decorated function.
|
||||
|
||||
Usage:
|
||||
@service_type('database')
|
||||
def mymethod(f):
|
||||
|
@ -98,9 +100,7 @@ def service_type(stype):
|
|||
|
||||
|
||||
def get_service_type(f):
|
||||
"""
|
||||
Retrieves service type from function
|
||||
"""
|
||||
"""Retrieves service type from function."""
|
||||
return getattr(f, 'service_type', None)
|
||||
|
||||
|
||||
|
@ -113,11 +113,12 @@ def translate_keys(collection, convert):
|
|||
|
||||
|
||||
def _output_override(objs, print_as):
|
||||
"""
|
||||
"""Output override flag checking.
|
||||
|
||||
If an output override global flag is set, print with override
|
||||
raise BaseException if no printing was overridden.
|
||||
"""
|
||||
if 'json_output' in globals() and json_output:
|
||||
if 'json_output' in globals():
|
||||
if print_as == 'list':
|
||||
new_objs = []
|
||||
for o in objs:
|
||||
|
@ -280,7 +281,8 @@ def safe_issubclass(*args):
|
|||
# http://code.activestate.com/recipes/
|
||||
# 577257-slugify-make-a-string-usable-in-a-url-or-filename/
|
||||
def slugify(value):
|
||||
"""
|
||||
"""Converts a string usable in a url or filename.
|
||||
|
||||
Normalizes string, converts to lowercase, removes non-alpha characters,
|
||||
and converts spaces to hyphens.
|
||||
|
||||
|
|
|
@ -19,17 +19,13 @@ from troveclient import common
|
|||
|
||||
|
||||
class Account(base.Resource):
|
||||
"""
|
||||
Account is an opaque instance used to hold account information.
|
||||
"""
|
||||
"""Account is an opaque instance used to hold account information."""
|
||||
def __repr__(self):
|
||||
return "<Account: %s>" % self.name
|
||||
|
||||
|
||||
class Accounts(base.ManagerWithFind):
|
||||
"""
|
||||
Manage :class:`Account` information.
|
||||
"""
|
||||
"""Manage :class:`Account` information."""
|
||||
|
||||
resource_class = Account
|
||||
|
||||
|
@ -40,7 +36,7 @@ class Accounts(base.ManagerWithFind):
|
|||
return self.resource_class(self, body[response_key])
|
||||
|
||||
def index(self):
|
||||
"""Get a list of all accounts with non-deleted instances"""
|
||||
"""Get a list of all accounts with non-deleted instances."""
|
||||
|
||||
url = "/mgmt/accounts"
|
||||
resp, body = self.api.client.get(url)
|
||||
|
@ -50,8 +46,7 @@ class Accounts(base.ManagerWithFind):
|
|||
return base.Resource(self, body)
|
||||
|
||||
def show(self, account):
|
||||
"""
|
||||
Get details of one account.
|
||||
"""Get details of one account.
|
||||
|
||||
:rtype: :class:`Account`.
|
||||
"""
|
||||
|
|
|
@ -20,23 +20,18 @@ from troveclient import common
|
|||
|
||||
|
||||
class Backup(base.Resource):
|
||||
"""
|
||||
Backup is a resource used to hold backup information.
|
||||
"""
|
||||
"""Backup is a resource used to hold backup information."""
|
||||
def __repr__(self):
|
||||
return "<Backup: %s>" % self.name
|
||||
|
||||
|
||||
class Backups(base.ManagerWithFind):
|
||||
"""
|
||||
Manage :class:`Backups` information.
|
||||
"""
|
||||
"""Manage :class:`Backups` information."""
|
||||
|
||||
resource_class = Backup
|
||||
|
||||
def get(self, backup):
|
||||
"""
|
||||
Get a specific backup.
|
||||
"""Get a specific backup.
|
||||
|
||||
:rtype: :class:`Backups`
|
||||
"""
|
||||
|
@ -44,17 +39,14 @@ class Backups(base.ManagerWithFind):
|
|||
"backup")
|
||||
|
||||
def list(self, limit=None, marker=None):
|
||||
"""
|
||||
Get a list of all backups.
|
||||
"""Get a list of all backups.
|
||||
|
||||
:rtype: list of :class:`Backups`.
|
||||
"""
|
||||
return self._paginated("/backups", "backups", limit, marker)
|
||||
|
||||
def create(self, name, instance, description=None, parent_id=None):
|
||||
"""
|
||||
Create a new backup from the given instance.
|
||||
"""
|
||||
"""Create a new backup from the given instance."""
|
||||
body = {
|
||||
"backup": {
|
||||
"name": name,
|
||||
|
@ -68,8 +60,7 @@ class Backups(base.ManagerWithFind):
|
|||
return self._create("/backups", body, "backup")
|
||||
|
||||
def delete(self, backup_id):
|
||||
"""
|
||||
Delete the specified backup.
|
||||
"""Delete the specified backup.
|
||||
|
||||
:param backup_id: The backup id to delete
|
||||
"""
|
||||
|
|
|
@ -28,16 +28,15 @@ from troveclient.v1 import users
|
|||
|
||||
|
||||
class Client(object):
|
||||
"""
|
||||
Top-level object to access the OpenStack Database API.
|
||||
"""Top-level object to access the OpenStack Database API.
|
||||
|
||||
Create an instance with your creds::
|
||||
|
||||
>>> client = Client(USERNAME, PASSWORD, PROJECT_ID, AUTH_URL)
|
||||
>> client = Client(USERNAME, PASSWORD, PROJECT_ID, AUTH_URL)
|
||||
|
||||
Then call methods on its managers::
|
||||
|
||||
>>> client.instances.list()
|
||||
>> client.instances.list()
|
||||
...
|
||||
|
||||
"""
|
||||
|
@ -105,8 +104,7 @@ class Client(object):
|
|||
bypass_url=bypass_url)
|
||||
|
||||
def authenticate(self):
|
||||
"""
|
||||
Authenticate against the server.
|
||||
"""Authenticate against the server.
|
||||
|
||||
Normally this is called automatically when you first access the API,
|
||||
but you can call this method to force authentication right now.
|
||||
|
|
|
@ -20,23 +20,18 @@ from troveclient import common
|
|||
|
||||
|
||||
class Configuration(base.Resource):
|
||||
"""
|
||||
Configuration is a resource used to hold configuration information.
|
||||
"""
|
||||
"""Configuration is a resource used to hold configuration information."""
|
||||
def __repr__(self):
|
||||
return "<Configuration: %s>" % self.name
|
||||
|
||||
|
||||
class Configurations(base.ManagerWithFind):
|
||||
"""
|
||||
Manage :class:`Configurations` information.
|
||||
"""
|
||||
"""Manage :class:`Configurations` information."""
|
||||
|
||||
resource_class = Configuration
|
||||
|
||||
def get(self, configuration):
|
||||
"""
|
||||
Get a specific configuration.
|
||||
"""Get a specific configuration.
|
||||
|
||||
:rtype: :class:`Configurations`
|
||||
"""
|
||||
|
@ -44,8 +39,7 @@ class Configurations(base.ManagerWithFind):
|
|||
"configuration")
|
||||
|
||||
def instances(self, configuration, limit=None, marker=None):
|
||||
"""
|
||||
Get a list of instances on a configuration.
|
||||
"""Get a list of instances on a configuration.
|
||||
|
||||
:rtype: :class:`Configurations`
|
||||
"""
|
||||
|
@ -54,8 +48,7 @@ class Configurations(base.ManagerWithFind):
|
|||
"instances", limit, marker)
|
||||
|
||||
def list(self, limit=None, marker=None):
|
||||
"""
|
||||
Get a list of all configurations.
|
||||
"""Get a list of all configurations.
|
||||
|
||||
:rtype: list of :class:`Configurations`.
|
||||
"""
|
||||
|
@ -63,9 +56,7 @@ class Configurations(base.ManagerWithFind):
|
|||
|
||||
def create(self, name, values, description=None, datastore=None,
|
||||
datastore_version=None):
|
||||
"""
|
||||
Create a new configuration.
|
||||
"""
|
||||
"""Create a new configuration."""
|
||||
body = {
|
||||
"configuration": {
|
||||
"name": name,
|
||||
|
@ -84,9 +75,7 @@ class Configurations(base.ManagerWithFind):
|
|||
return self._create("/configurations", body, "configuration")
|
||||
|
||||
def update(self, configuration_id, values, name=None, description=None):
|
||||
"""
|
||||
Update an existing configuration.
|
||||
"""
|
||||
"""Update an existing configuration."""
|
||||
body = {
|
||||
"configuration": {
|
||||
"values": json.loads(values)
|
||||
|
@ -101,9 +90,7 @@ class Configurations(base.ManagerWithFind):
|
|||
common.check_for_exceptions(resp, body, url)
|
||||
|
||||
def edit(self, configuration_id, values):
|
||||
"""
|
||||
Update an existing configuration.
|
||||
"""
|
||||
"""Update an existing configuration."""
|
||||
body = {
|
||||
"configuration": {
|
||||
"values": json.loads(values)
|
||||
|
@ -114,8 +101,7 @@ class Configurations(base.ManagerWithFind):
|
|||
common.check_for_exceptions(resp, body, url)
|
||||
|
||||
def delete(self, configuration_id):
|
||||
"""
|
||||
Delete the specified configuration.
|
||||
"""Delete the specified configuration.
|
||||
|
||||
:param configuration_id: The configuration id to delete
|
||||
"""
|
||||
|
@ -125,45 +111,33 @@ class Configurations(base.ManagerWithFind):
|
|||
|
||||
|
||||
class ConfigurationParameter(base.Resource):
|
||||
"""
|
||||
Configuration Parameter.
|
||||
"""
|
||||
"""Configuration Parameter."""
|
||||
def __repr__(self):
|
||||
return "<ConfigurationParameter: %s>" % self.__dict__
|
||||
|
||||
|
||||
class ConfigurationParameters(base.ManagerWithFind):
|
||||
"""
|
||||
Manage :class:`ConfigurationParameters` information.
|
||||
"""
|
||||
"""Manage :class:`ConfigurationParameters` information."""
|
||||
|
||||
resource_class = ConfigurationParameter
|
||||
|
||||
def parameters(self, datastore, version):
|
||||
"""
|
||||
Get a list of valid parameters that can be changed.
|
||||
"""
|
||||
"""Get a list of valid parameters that can be changed."""
|
||||
return self._list("/datastores/%s/versions/%s/parameters" %
|
||||
(datastore, version), "configuration-parameters")
|
||||
|
||||
def get_parameter(self, datastore, version, key):
|
||||
"""
|
||||
Get a list of valid parameters that can be changed.
|
||||
"""
|
||||
"""Get a list of valid parameters that can be changed."""
|
||||
return self._get("/datastores/%s/versions/%s/parameters/%s" %
|
||||
(datastore, version, key))
|
||||
|
||||
def parameters_by_version(self, version):
|
||||
"""
|
||||
Get a list of valid parameters that can be changed.
|
||||
"""
|
||||
"""Get a list of valid parameters that can be changed."""
|
||||
return self._list("/datastores/versions/%s/parameters" % version,
|
||||
"configuration-parameters")
|
||||
|
||||
def get_parameter_by_version(self, version, key):
|
||||
"""
|
||||
Get a list of valid parameters that can be changed.
|
||||
"""
|
||||
"""Get a list of valid parameters that can be changed."""
|
||||
return self._get("/datastores/versions/%s/parameters/%s" %
|
||||
(version, key))
|
||||
|
||||
|
|
|
@ -19,39 +19,34 @@ from troveclient import common
|
|||
|
||||
|
||||
class Database(base.Resource):
|
||||
"""
|
||||
According to Wikipedia, "A database is a system intended to organize,
|
||||
store, and retrieve
|
||||
large amounts of data easily."
|
||||
"""Wikipedia definition for database.
|
||||
|
||||
"A database is a system intended to organize, store, and retrieve large
|
||||
amounts of data easily."
|
||||
"""
|
||||
def __repr__(self):
|
||||
return "<Database: %s>" % self.name
|
||||
|
||||
|
||||
class Databases(base.ManagerWithFind):
|
||||
"""
|
||||
Manage :class:`Databases` resources.
|
||||
"""
|
||||
"""Manage :class:`Databases` resources."""
|
||||
resource_class = Database
|
||||
|
||||
def create(self, instance_id, databases):
|
||||
"""
|
||||
Create new databases within the specified instance
|
||||
"""
|
||||
"""Create new databases within the specified instance."""
|
||||
body = {"databases": databases}
|
||||
url = "/instances/%s/databases" % instance_id
|
||||
resp, body = self.api.client.post(url, body=body)
|
||||
common.check_for_exceptions(resp, body, url)
|
||||
|
||||
def delete(self, instance_id, dbname):
|
||||
"""Delete an existing database in the specified instance"""
|
||||
"""Delete an existing database in the specified instance."""
|
||||
url = "/instances/%s/databases/%s" % (instance_id, dbname)
|
||||
resp, body = self.api.client.delete(url)
|
||||
common.check_for_exceptions(resp, body, url)
|
||||
|
||||
def list(self, instance, limit=None, marker=None):
|
||||
"""
|
||||
Get a list of all Databases from the instance.
|
||||
"""Get a list of all Databases from the instance.
|
||||
|
||||
:rtype: list of :class:`Database`.
|
||||
"""
|
||||
|
|
|
@ -30,25 +30,21 @@ class DatastoreVersion(base.Resource):
|
|||
|
||||
|
||||
class Datastores(base.ManagerWithFind):
|
||||
"""
|
||||
Manage :class:`Datastore` resources.
|
||||
"""
|
||||
"""Manage :class:`Datastore` resources."""
|
||||
resource_class = Datastore
|
||||
|
||||
def __repr__(self):
|
||||
return "<Datastore Manager at %s>" % id(self)
|
||||
|
||||
def list(self, limit=None, marker=None):
|
||||
"""
|
||||
Get a list of all datastores.
|
||||
"""Get a list of all datastores.
|
||||
|
||||
:rtype: list of :class:`Datastore`.
|
||||
"""
|
||||
return self._paginated("/datastores", "datastores", limit, marker)
|
||||
|
||||
def get(self, datastore):
|
||||
"""
|
||||
Get a specific datastore.
|
||||
"""Get a specific datastore.
|
||||
|
||||
:rtype: :class:`Datastore`
|
||||
"""
|
||||
|
@ -57,17 +53,14 @@ class Datastores(base.ManagerWithFind):
|
|||
|
||||
|
||||
class DatastoreVersions(base.ManagerWithFind):
|
||||
"""
|
||||
Manage :class:`DatastoreVersion` resources.
|
||||
"""
|
||||
"""Manage :class:`DatastoreVersion` resources."""
|
||||
resource_class = DatastoreVersion
|
||||
|
||||
def __repr__(self):
|
||||
return "<DatastoreVersions Manager at %s>" % id(self)
|
||||
|
||||
def list(self, datastore, limit=None, marker=None):
|
||||
"""
|
||||
Get a list of all datastore versions.
|
||||
"""Get a list of all datastore versions.
|
||||
|
||||
:rtype: list of :class:`DatastoreVersion`.
|
||||
"""
|
||||
|
@ -75,8 +68,7 @@ class DatastoreVersions(base.ManagerWithFind):
|
|||
"versions", limit, marker)
|
||||
|
||||
def get(self, datastore, datastore_version):
|
||||
"""
|
||||
Get a specific datastore version.
|
||||
"""Get a specific datastore version.
|
||||
|
||||
:rtype: :class:`DatastoreVersion`
|
||||
"""
|
||||
|
@ -85,8 +77,8 @@ class DatastoreVersions(base.ManagerWithFind):
|
|||
"version")
|
||||
|
||||
def get_by_uuid(self, datastore_version):
|
||||
"""
|
||||
Get a specific datastore version.
|
||||
"""Get a specific datastore version.
|
||||
|
||||
:rtype: :class:`DatastoreVersion`
|
||||
"""
|
||||
return self._get("/datastores/versions/%s" %
|
||||
|
|
|
@ -18,23 +18,17 @@ from troveclient import base
|
|||
|
||||
|
||||
class Diagnostics(base.Resource):
|
||||
"""
|
||||
Account is an opaque instance used to hold account information.
|
||||
"""
|
||||
"""Account is an opaque instance used to hold account information."""
|
||||
def __repr__(self):
|
||||
return "<Diagnostics: %s>" % self.version
|
||||
|
||||
|
||||
class DiagnosticsInterrogator(base.ManagerWithFind):
|
||||
"""
|
||||
Manager class for Interrogator resource
|
||||
"""
|
||||
"""Manager class for Interrogator resource."""
|
||||
resource_class = Diagnostics
|
||||
|
||||
def get(self, instance):
|
||||
"""
|
||||
Get the diagnostics of the guest on the instance.
|
||||
"""
|
||||
"""Get the diagnostics of the guest on the instance."""
|
||||
return self._get("/mgmt/instances/%s/diagnostics" %
|
||||
base.getid(instance), "diagnostics")
|
||||
|
||||
|
@ -50,15 +44,11 @@ class HwInfo(base.Resource):
|
|||
|
||||
|
||||
class HwInfoInterrogator(base.ManagerWithFind):
|
||||
"""
|
||||
Manager class for HwInfo
|
||||
"""
|
||||
"""Manager class for HwInfo."""
|
||||
resource_class = HwInfo
|
||||
|
||||
def get(self, instance):
|
||||
"""
|
||||
Get the hardware information of the instance.
|
||||
"""
|
||||
"""Get the hardware information of the instance."""
|
||||
return self._get("/mgmt/instances/%s/hwinfo" % base.getid(instance))
|
||||
|
||||
# Appease the abc gods
|
||||
|
|
|
@ -18,31 +18,25 @@ from troveclient import base
|
|||
|
||||
|
||||
class Flavor(base.Resource):
|
||||
"""
|
||||
A Flavor is an Instance type, specifying among other things, RAM size.
|
||||
"""
|
||||
"""A Flavor is an Instance type, specifying other things, like RAM size."""
|
||||
|
||||
def __repr__(self):
|
||||
return "<Flavor: %s>" % self.name
|
||||
|
||||
|
||||
class Flavors(base.ManagerWithFind):
|
||||
"""
|
||||
Manage :class:`Flavor` resources.
|
||||
"""
|
||||
"""Manage :class:`Flavor` resources."""
|
||||
resource_class = Flavor
|
||||
|
||||
def list(self):
|
||||
"""
|
||||
Get a list of all flavors.
|
||||
"""Get a list of all flavors.
|
||||
|
||||
:rtype: list of :class:`Flavor`.
|
||||
"""
|
||||
return self._list("/flavors", "flavors")
|
||||
|
||||
def get(self, flavor):
|
||||
"""
|
||||
Get a specific flavor.
|
||||
"""Get a specific flavor.
|
||||
|
||||
:rtype: :class:`Flavor`
|
||||
"""
|
||||
|
|
|
@ -19,17 +19,13 @@ from troveclient import common
|
|||
|
||||
|
||||
class Host(base.Resource):
|
||||
"""
|
||||
A Hosts is an opaque instance used to store Host instances.
|
||||
"""
|
||||
"""A Hosts is an opaque instance used to store Host instances."""
|
||||
def __repr__(self):
|
||||
return "<Host: %s>" % self.name
|
||||
|
||||
|
||||
class Hosts(base.ManagerWithFind):
|
||||
"""
|
||||
Manage :class:`Host` resources.
|
||||
"""
|
||||
"""Manage :class:`Host` resources."""
|
||||
resource_class = Host
|
||||
|
||||
def _list(self, url, response_key):
|
||||
|
@ -39,31 +35,25 @@ class Hosts(base.ManagerWithFind):
|
|||
return [self.resource_class(self, res) for res in body[response_key]]
|
||||
|
||||
def _action(self, host_id, body):
|
||||
"""
|
||||
Perform a host "action" -- update
|
||||
"""
|
||||
"""Perform a host "action" -- update."""
|
||||
url = "/mgmt/hosts/%s/instances/action" % host_id
|
||||
resp, body = self.api.client.post(url, body=body)
|
||||
common.check_for_exceptions(resp, body, url)
|
||||
|
||||
def update_all(self, host_id):
|
||||
"""
|
||||
Update all instances on a host.
|
||||
"""
|
||||
"""Update all instances on a host."""
|
||||
body = {'update': ''}
|
||||
self._action(host_id, body)
|
||||
|
||||
def index(self):
|
||||
"""
|
||||
Get a list of all hosts.
|
||||
"""Get a list of all hosts.
|
||||
|
||||
:rtype: list of :class:`Hosts`.
|
||||
"""
|
||||
return self._list("/mgmt/hosts", "hosts")
|
||||
|
||||
def get(self, host):
|
||||
"""
|
||||
Get a specific host.
|
||||
"""Get a specific host.
|
||||
|
||||
:rtype: :class:`host`
|
||||
"""
|
||||
|
|
|
@ -23,9 +23,7 @@ REBOOT_HARD = 'HARD'
|
|||
|
||||
|
||||
class Instance(base.Resource):
|
||||
"""
|
||||
An Instance is an opaque instance used to store Database instances.
|
||||
"""
|
||||
"""An Instance is an opaque instance used to store Database instances."""
|
||||
def __repr__(self):
|
||||
return "<Instance: %s>" % self.name
|
||||
|
||||
|
@ -33,30 +31,22 @@ class Instance(base.Resource):
|
|||
return self.manager.databases.list(self)
|
||||
|
||||
def delete(self):
|
||||
"""
|
||||
Delete the instance.
|
||||
"""
|
||||
"""Delete the instance."""
|
||||
self.manager.delete(self)
|
||||
|
||||
def restart(self):
|
||||
"""
|
||||
Restart the database instance
|
||||
"""
|
||||
"""Restart the database instance."""
|
||||
self.manager.restart(self.id)
|
||||
|
||||
|
||||
class Instances(base.ManagerWithFind):
|
||||
"""
|
||||
Manage :class:`Instance` resources.
|
||||
"""
|
||||
"""Manage :class:`Instance` resources."""
|
||||
resource_class = Instance
|
||||
|
||||
def create(self, name, flavor_id, volume=None, databases=None, users=None,
|
||||
restorePoint=None, availability_zone=None, datastore=None,
|
||||
datastore_version=None, nics=None, configuration=None):
|
||||
"""
|
||||
Create (boot) a new instance.
|
||||
"""
|
||||
"""Create (boot) a new instance."""
|
||||
body = {"instance": {
|
||||
"name": name,
|
||||
"flavorRef": flavor_id
|
||||
|
@ -97,16 +87,14 @@ class Instances(base.ManagerWithFind):
|
|||
common.check_for_exceptions(resp, body, url)
|
||||
|
||||
def list(self, limit=None, marker=None):
|
||||
"""
|
||||
Get a list of all instances.
|
||||
"""Get a list of all instances.
|
||||
|
||||
:rtype: list of :class:`Instance`.
|
||||
"""
|
||||
return self._paginated("/instances", "instances", limit, marker)
|
||||
|
||||
def get(self, instance):
|
||||
"""
|
||||
Get a specific instances.
|
||||
"""Get a specific instances.
|
||||
|
||||
:rtype: :class:`Instance`
|
||||
"""
|
||||
|
@ -114,8 +102,7 @@ class Instances(base.ManagerWithFind):
|
|||
"instance")
|
||||
|
||||
def backups(self, instance, limit=None, marker=None):
|
||||
"""
|
||||
Get the list of backups for a specific instance.
|
||||
"""Get the list of backups for a specific instance.
|
||||
|
||||
:rtype: list of :class:`Backups`.
|
||||
"""
|
||||
|
@ -123,8 +110,7 @@ class Instances(base.ManagerWithFind):
|
|||
return self._paginated(url, "backups", limit, marker)
|
||||
|
||||
def delete(self, instance):
|
||||
"""
|
||||
Delete the specified instance.
|
||||
"""Delete the specified instance.
|
||||
|
||||
:param instance_id: The instance id to delete
|
||||
"""
|
||||
|
@ -133,9 +119,7 @@ class Instances(base.ManagerWithFind):
|
|||
common.check_for_exceptions(resp, body, url)
|
||||
|
||||
def _action(self, instance_id, body):
|
||||
"""
|
||||
Perform a server "action" -- reboot/rebuild/resize/etc.
|
||||
"""
|
||||
"""Perform a server "action" -- reboot/rebuild/resize/etc."""
|
||||
url = "/instances/%s/action" % instance_id
|
||||
resp, body = self.api.client.post(url, body=body)
|
||||
common.check_for_exceptions(resp, body, url)
|
||||
|
@ -144,22 +128,17 @@ class Instances(base.ManagerWithFind):
|
|||
return body
|
||||
|
||||
def resize_volume(self, instance_id, volume_size):
|
||||
"""
|
||||
Resize the volume on an existing instances
|
||||
"""
|
||||
"""Resize the volume on an existing instances."""
|
||||
body = {"resize": {"volume": {"size": volume_size}}}
|
||||
self._action(instance_id, body)
|
||||
|
||||
def resize_instance(self, instance_id, flavor_id):
|
||||
"""
|
||||
Resize the volume on an existing instances
|
||||
"""
|
||||
"""Resize the volume on an existing instances."""
|
||||
body = {"resize": {"flavorRef": flavor_id}}
|
||||
self._action(instance_id, body)
|
||||
|
||||
def restart(self, instance_id):
|
||||
"""
|
||||
Restart the database instance.
|
||||
"""Restart the database instance.
|
||||
|
||||
:param instance_id: The :class:`Instance` (or its ID) to share onto.
|
||||
"""
|
||||
|
@ -167,8 +146,7 @@ class Instances(base.ManagerWithFind):
|
|||
self._action(instance_id, body)
|
||||
|
||||
def configuration(self, instance):
|
||||
"""
|
||||
Get a configuration on instances.
|
||||
"""Get a configuration on instances.
|
||||
|
||||
:rtype: :class:`Instance`
|
||||
"""
|
||||
|
|
|
@ -26,9 +26,7 @@ class Limit(base.Resource):
|
|||
|
||||
|
||||
class Limits(base.ManagerWithFind):
|
||||
"""
|
||||
Manages :class `Limit` resources
|
||||
"""
|
||||
"""Manages :class `Limit` resources."""
|
||||
resource_class = Limit
|
||||
|
||||
def __repr__(self):
|
||||
|
@ -46,7 +44,5 @@ class Limits(base.ManagerWithFind):
|
|||
return [self.resource_class(self, res) for res in body[response_key]]
|
||||
|
||||
def list(self):
|
||||
"""
|
||||
Retrieve the limits
|
||||
"""
|
||||
"""Retrieve the limits."""
|
||||
return self._list("/limits", "limits")
|
||||
|
|
|
@ -16,8 +16,8 @@
|
|||
|
||||
from troveclient import base
|
||||
from troveclient import common
|
||||
from troveclient.v1 import instances
|
||||
from troveclient.v1 import flavors
|
||||
from troveclient.v1 import instances
|
||||
|
||||
|
||||
class RootHistory(base.Resource):
|
||||
|
@ -27,9 +27,7 @@ class RootHistory(base.Resource):
|
|||
|
||||
|
||||
class Management(base.ManagerWithFind):
|
||||
"""
|
||||
Manage :class:`Instances` resources.
|
||||
"""
|
||||
"""Manage :class:`Instances` resources."""
|
||||
resource_class = instances.Instance
|
||||
|
||||
# Appease the abc gods
|
||||
|
@ -37,8 +35,7 @@ class Management(base.ManagerWithFind):
|
|||
pass
|
||||
|
||||
def show(self, instance):
|
||||
"""
|
||||
Get details of one instance.
|
||||
"""Get details of one instance.
|
||||
|
||||
:rtype: :class:`Instance`.
|
||||
"""
|
||||
|
@ -47,8 +44,8 @@ class Management(base.ManagerWithFind):
|
|||
'instance')
|
||||
|
||||
def index(self, deleted=None, limit=None, marker=None):
|
||||
"""
|
||||
Show an overview of all local instances.
|
||||
"""Show an overview of all local instances.
|
||||
|
||||
Optionally, filter by deleted status.
|
||||
|
||||
:rtype: list of :class:`Instance`.
|
||||
|
@ -64,10 +61,7 @@ class Management(base.ManagerWithFind):
|
|||
return self._paginated(url, "instances", limit, marker)
|
||||
|
||||
def root_enabled_history(self, instance):
|
||||
"""
|
||||
Get root access history of one instance.
|
||||
|
||||
"""
|
||||
"""Get root access history of one instance."""
|
||||
url = "/mgmt/instances/%s/root" % base.getid(instance)
|
||||
resp, body = self.api.client.get(url)
|
||||
if not body:
|
||||
|
@ -75,9 +69,7 @@ class Management(base.ManagerWithFind):
|
|||
return RootHistory(self, body['root_history'])
|
||||
|
||||
def _action(self, instance_id, body):
|
||||
"""
|
||||
Perform a server "action" -- reboot/rebuild/resize/etc.
|
||||
"""
|
||||
"""Perform a server "action" -- reboot/rebuild/resize/etc."""
|
||||
url = "/mgmt/instances/%s/action" % instance_id
|
||||
resp, body = self.api.client.post(url, body=body)
|
||||
common.check_for_exceptions(resp, body, url)
|
||||
|
@ -87,8 +79,7 @@ class Management(base.ManagerWithFind):
|
|||
self._action(instance_id, body)
|
||||
|
||||
def reboot(self, instance_id):
|
||||
"""
|
||||
Reboot the underlying OS.
|
||||
"""Reboot the underlying OS.
|
||||
|
||||
:param instance_id: The :class:`Instance` (or its ID) to share onto.
|
||||
"""
|
||||
|
@ -96,8 +87,7 @@ class Management(base.ManagerWithFind):
|
|||
self._action(instance_id, body)
|
||||
|
||||
def migrate(self, instance_id, host=None):
|
||||
"""
|
||||
Migrate the instance.
|
||||
"""Migrate the instance.
|
||||
|
||||
:param instance_id: The :class:`Instance` (or its ID) to share onto.
|
||||
"""
|
||||
|
@ -108,24 +98,18 @@ class Management(base.ManagerWithFind):
|
|||
self._action(instance_id, body)
|
||||
|
||||
def update(self, instance_id):
|
||||
"""
|
||||
Update the guest agent via apt-get.
|
||||
"""
|
||||
"""Update the guest agent via apt-get."""
|
||||
body = {'update': {}}
|
||||
self._action(instance_id, body)
|
||||
|
||||
def reset_task_status(self, instance_id):
|
||||
"""
|
||||
Set the task status to NONE.
|
||||
"""
|
||||
"""Set the task status to NONE."""
|
||||
body = {'reset-task-status': {}}
|
||||
self._action(instance_id, body)
|
||||
|
||||
|
||||
class MgmtFlavors(base.ManagerWithFind):
|
||||
"""
|
||||
Manage :class:`Flavor` resources.
|
||||
"""
|
||||
"""Manage :class:`Flavor` resources."""
|
||||
resource_class = flavors.Flavor
|
||||
|
||||
def __repr__(self):
|
||||
|
@ -138,9 +122,7 @@ class MgmtFlavors(base.ManagerWithFind):
|
|||
def create(self, name, ram, disk, vcpus,
|
||||
flavorid="auto", ephemeral=None, swap=None, rxtx_factor=None,
|
||||
service_type=None):
|
||||
"""
|
||||
Create a new flavor.
|
||||
"""
|
||||
"""Create a new flavor."""
|
||||
body = {"flavor": {
|
||||
"flavor_id": flavorid,
|
||||
"name": name,
|
||||
|
|
|
@ -20,14 +20,12 @@ from troveclient import common
|
|||
|
||||
|
||||
class Quotas(base.ManagerWithFind):
|
||||
"""
|
||||
Manage :class:`Quota` information.
|
||||
"""
|
||||
"""Manage :class:`Quota` information."""
|
||||
|
||||
resource_class = base.Resource
|
||||
|
||||
def show(self, tenant_id):
|
||||
"""Get a list of all quotas for a tenant id"""
|
||||
"""Get a list of all quotas for a tenant id."""
|
||||
|
||||
url = "/mgmt/quotas/%s" % tenant_id
|
||||
resp, body = self.api.client.get(url)
|
||||
|
@ -39,9 +37,7 @@ class Quotas(base.ManagerWithFind):
|
|||
return body['quotas']
|
||||
|
||||
def update(self, id, quotas):
|
||||
"""
|
||||
Set limits for quotas
|
||||
"""
|
||||
"""Set limits for quotas."""
|
||||
url = "/mgmt/quotas/%s" % id
|
||||
body = {"quotas": quotas}
|
||||
resp, body = self.api.client.put(url, body=body)
|
||||
|
|
|
@ -15,21 +15,20 @@
|
|||
# under the License.
|
||||
|
||||
from troveclient import base
|
||||
from troveclient.v1 import users
|
||||
from troveclient import common
|
||||
from troveclient.v1 import users
|
||||
|
||||
|
||||
class Root(base.ManagerWithFind):
|
||||
"""
|
||||
Manager class for Root resource
|
||||
"""
|
||||
"""Manager class for Root resource."""
|
||||
resource_class = users.User
|
||||
url = "/instances/%s/root"
|
||||
|
||||
def create(self, instance_id):
|
||||
"""
|
||||
"""Implements root-enable API.
|
||||
|
||||
Enable the root user and return the root password for the
|
||||
specified db instance
|
||||
specified db instance.
|
||||
"""
|
||||
resp, body = self.api.client.post(self.url % instance_id)
|
||||
common.check_for_exceptions(resp, body, self.url)
|
||||
|
|
|
@ -20,23 +20,18 @@ from troveclient import common
|
|||
|
||||
|
||||
class SecurityGroup(base.Resource):
|
||||
"""
|
||||
Security Group is a resource used to hold security group information.
|
||||
"""
|
||||
"""Security Group is a resource used to hold security group information."""
|
||||
|
||||
def __repr__(self):
|
||||
return "<SecurityGroup: %s>" % self.name
|
||||
|
||||
|
||||
class SecurityGroups(base.ManagerWithFind):
|
||||
"""
|
||||
Manage :class:`SecurityGroup` resources.
|
||||
"""
|
||||
"""Manage :class:`SecurityGroup` resources."""
|
||||
resource_class = SecurityGroup
|
||||
|
||||
def list(self, limit=None, marker=None):
|
||||
"""
|
||||
Get a list of all security groups.
|
||||
"""Get a list of all security groups.
|
||||
|
||||
:rtype: list of :class:`SecurityGroup`.
|
||||
"""
|
||||
|
@ -44,8 +39,7 @@ class SecurityGroups(base.ManagerWithFind):
|
|||
limit, marker)
|
||||
|
||||
def get(self, security_group):
|
||||
"""
|
||||
Get a specific security group.
|
||||
"""Get a specific security group.
|
||||
|
||||
:rtype: :class:`SecurityGroup`
|
||||
"""
|
||||
|
@ -54,10 +48,7 @@ class SecurityGroups(base.ManagerWithFind):
|
|||
|
||||
|
||||
class SecurityGroupRule(base.Resource):
|
||||
"""
|
||||
Security Group Rule is a resource used to hold security group
|
||||
rule related information.
|
||||
"""
|
||||
"""This resource is used to hold security group rule information."""
|
||||
|
||||
def __repr__(self):
|
||||
return ("<SecurityGroupRule: "
|
||||
|
@ -69,15 +60,11 @@ class SecurityGroupRule(base.Resource):
|
|||
|
||||
|
||||
class SecurityGroupRules(base.ManagerWithFind):
|
||||
"""
|
||||
Manage :class:`SecurityGroupRules` resources.
|
||||
"""
|
||||
"""Manage :class:`SecurityGroupRules` resources."""
|
||||
resource_class = SecurityGroupRule
|
||||
|
||||
def create(self, group_id, cidr):
|
||||
"""
|
||||
Create a new security group rule.
|
||||
"""
|
||||
"""Create a new security group rule."""
|
||||
body = {"security_group_rule": {
|
||||
"group_id": group_id,
|
||||
"cidr": cidr
|
||||
|
@ -86,8 +73,7 @@ class SecurityGroupRules(base.ManagerWithFind):
|
|||
"security_group_rule", return_raw=True)
|
||||
|
||||
def delete(self, security_group_rule):
|
||||
"""
|
||||
Delete the specified security group rule.
|
||||
"""Delete the specified security group rule.
|
||||
|
||||
:param security_group_rule: The security group rule to delete
|
||||
"""
|
||||
|
|
|
@ -18,17 +18,13 @@ from troveclient import base
|
|||
|
||||
|
||||
class Device(base.Resource):
|
||||
"""
|
||||
Storage is an opaque instance used to hold storage information.
|
||||
"""
|
||||
"""Storage is an opaque instance used to hold storage information."""
|
||||
def __repr__(self):
|
||||
return "<Device: %s>" % self.name
|
||||
|
||||
|
||||
class StorageInfo(base.ManagerWithFind):
|
||||
"""
|
||||
Manage :class:`Storage` resources.
|
||||
"""
|
||||
"""Manage :class:`Storage` resources."""
|
||||
resource_class = Device
|
||||
|
||||
def _list(self, url, response_key):
|
||||
|
@ -38,8 +34,7 @@ class StorageInfo(base.ManagerWithFind):
|
|||
return [self.resource_class(self, res) for res in body[response_key]]
|
||||
|
||||
def index(self):
|
||||
"""
|
||||
Get a list of all storages.
|
||||
"""Get a list of all storages.
|
||||
|
||||
:rtype: list of :class:`Storages`.
|
||||
"""
|
||||
|
|
|
@ -15,43 +15,36 @@
|
|||
# under the License.
|
||||
|
||||
from troveclient import base
|
||||
from troveclient.v1 import databases
|
||||
from troveclient import common
|
||||
from troveclient.v1 import databases
|
||||
|
||||
|
||||
class User(base.Resource):
|
||||
"""
|
||||
A database user
|
||||
"""
|
||||
"""A database user."""
|
||||
def __repr__(self):
|
||||
return "<User: %s>" % self.name
|
||||
|
||||
|
||||
class Users(base.ManagerWithFind):
|
||||
"""
|
||||
Manage :class:`Users` resources.
|
||||
"""
|
||||
"""Manage :class:`Users` resources."""
|
||||
resource_class = User
|
||||
|
||||
def create(self, instance_id, users):
|
||||
"""
|
||||
Create users with permissions to the specified databases
|
||||
"""
|
||||
"""Create users with permissions to the specified databases."""
|
||||
body = {"users": users}
|
||||
url = "/instances/%s/users" % instance_id
|
||||
resp, body = self.api.client.post(url, body=body)
|
||||
common.check_for_exceptions(resp, body, url)
|
||||
|
||||
def delete(self, instance_id, username, hostname=None):
|
||||
"""Delete an existing user in the specified instance"""
|
||||
"""Delete an existing user in the specified instance."""
|
||||
user = common.quote_user_host(username, hostname)
|
||||
url = "/instances/%s/users/%s" % (instance_id, user)
|
||||
resp, body = self.api.client.delete(url)
|
||||
common.check_for_exceptions(resp, body, url)
|
||||
|
||||
def list(self, instance, limit=None, marker=None):
|
||||
"""
|
||||
Get a list of all Users from the instance's Database.
|
||||
"""Get a list of all Users from the instance's Database.
|
||||
|
||||
:rtype: list of :class:`User`.
|
||||
"""
|
||||
|
@ -59,8 +52,7 @@ class Users(base.ManagerWithFind):
|
|||
return self._paginated(url, "users", limit, marker)
|
||||
|
||||
def get(self, instance_id, username, hostname=None):
|
||||
"""
|
||||
Get a single User from the instance's Database.
|
||||
"""Get a single User from the instance's Database.
|
||||
|
||||
:rtype: :class:`User`.
|
||||
"""
|
||||
|
@ -70,8 +62,7 @@ class Users(base.ManagerWithFind):
|
|||
|
||||
def update_attributes(self, instance, username, newuserattr=None,
|
||||
hostname=None):
|
||||
"""
|
||||
Update attributes of a single User in an instance.
|
||||
"""Update attributes of a single User in an instance.
|
||||
|
||||
:rtype: :class:`User`.
|
||||
"""
|
||||
|
@ -86,7 +77,7 @@ class Users(base.ManagerWithFind):
|
|||
common.check_for_exceptions(resp, body, url)
|
||||
|
||||
def list_access(self, instance, username, hostname=None):
|
||||
"""Show all databases the given user has access to. """
|
||||
"""Show all databases the given user has access to."""
|
||||
instance_id = base.getid(instance)
|
||||
user = common.quote_user_host(username, hostname)
|
||||
url = "/instances/%(instance_id)s/users/%(user)s/databases"
|
||||
|
|
Loading…
Reference in New Issue