Add configuration-instances to OSC
This change adds database support to the python-openstackclient project for the configuration-instances command. The trove command configuration-instances is now: openstack database configuration instances Change-Id: I4ad52cc8772534c95b708b49d018f4b2e35d6f86 Partially-Implements: blueprint trove-support-in-python-openstackclient
This commit is contained in:
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
The command ``trove configuration-instances`` is now available
|
||||||
|
to use in the python-openstackclient CLI as ``openstack
|
||||||
|
database configuration instances``
|
@@ -50,6 +50,7 @@ openstack.database.v1 =
|
|||||||
database_configuration_create = troveclient.osc.v1.database_configurations:CreateDatabaseConfiguration
|
database_configuration_create = troveclient.osc.v1.database_configurations:CreateDatabaseConfiguration
|
||||||
database_configuration_delete = troveclient.osc.v1.database_configurations:DeleteDatabaseConfiguration
|
database_configuration_delete = troveclient.osc.v1.database_configurations:DeleteDatabaseConfiguration
|
||||||
database_configuration_detach = troveclient.osc.v1.database_configurations:DetachDatabaseConfiguration
|
database_configuration_detach = troveclient.osc.v1.database_configurations:DetachDatabaseConfiguration
|
||||||
|
database_configuration_instances = troveclient.osc.v1.database_configurations:ListDatabaseConfigurationInstances
|
||||||
database_configuration_list = troveclient.osc.v1.database_configurations:ListDatabaseConfigurations
|
database_configuration_list = troveclient.osc.v1.database_configurations:ListDatabaseConfigurations
|
||||||
database_configuration_parameter_list = troveclient.osc.v1.database_configurations:ListDatabaseConfigurationParameters
|
database_configuration_parameter_list = troveclient.osc.v1.database_configurations:ListDatabaseConfigurationParameters
|
||||||
database_configuration_parameter_show = troveclient.osc.v1.database_configurations:ShowDatabaseConfigurationParameter
|
database_configuration_parameter_show = troveclient.osc.v1.database_configurations:ShowDatabaseConfigurationParameter
|
||||||
|
@@ -306,3 +306,47 @@ class DetachDatabaseConfiguration(command.Command):
|
|||||||
instance = osc_utils.find_resource(db_instances,
|
instance = osc_utils.find_resource(db_instances,
|
||||||
parsed_args.instance)
|
parsed_args.instance)
|
||||||
db_instances.modify(instance)
|
db_instances.modify(instance)
|
||||||
|
|
||||||
|
|
||||||
|
class ListDatabaseConfigurationInstances(command.Lister):
|
||||||
|
|
||||||
|
_description = _("Lists all instances associated "
|
||||||
|
"with a configuration group.")
|
||||||
|
columns = ['ID', 'Name']
|
||||||
|
|
||||||
|
def get_parser(self, prog_name):
|
||||||
|
parser = super(ListDatabaseConfigurationInstances, self).\
|
||||||
|
get_parser(prog_name)
|
||||||
|
parser.add_argument(
|
||||||
|
'configuration_group',
|
||||||
|
metavar='<configuration_group>',
|
||||||
|
help=_('ID or name of the configuration group.')
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--limit',
|
||||||
|
metavar='<limit>',
|
||||||
|
default=None,
|
||||||
|
type=int,
|
||||||
|
help=_('Limit the number of results displayed.')
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--marker',
|
||||||
|
metavar='<ID>',
|
||||||
|
default=None,
|
||||||
|
type=str,
|
||||||
|
help=_('Begin displaying the results for IDs greater than the '
|
||||||
|
'specified marker. When used with --limit, set this to '
|
||||||
|
'the last ID displayed in the previous run.')
|
||||||
|
)
|
||||||
|
return parser
|
||||||
|
|
||||||
|
def take_action(self, parsed_args):
|
||||||
|
db_configurations = self.app.client_manager.database.configurations
|
||||||
|
configuration = osc_utils.find_resource(
|
||||||
|
db_configurations, parsed_args.configuration_group)
|
||||||
|
params = db_configurations.instances(configuration,
|
||||||
|
limit=parsed_args.limit,
|
||||||
|
marker=parsed_args.marker)
|
||||||
|
instance = [osc_utils.get_item_properties(p, self.columns)
|
||||||
|
for p in params]
|
||||||
|
return self.columns, instance
|
||||||
|
@@ -527,7 +527,13 @@ class FakeHTTPClient(base_client.HTTPClient):
|
|||||||
return (200, {}, r)
|
return (200, {}, r)
|
||||||
|
|
||||||
def get_configurations_c_123_instances(self, **kw):
|
def get_configurations_c_123_instances(self, **kw):
|
||||||
return (200, {}, {"instances": []})
|
return (200, {}, {"instances": [
|
||||||
|
{
|
||||||
|
"id": "1",
|
||||||
|
"name": "instance-1"},
|
||||||
|
{
|
||||||
|
"id": "2",
|
||||||
|
"name": "instance-2"}]})
|
||||||
|
|
||||||
def delete_configurations_c_123(self, **kw):
|
def delete_configurations_c_123(self, **kw):
|
||||||
return (202, {}, None)
|
return (202, {}, None)
|
||||||
|
@@ -71,10 +71,16 @@ class FakeClusters(object):
|
|||||||
class FakeConfigurations(object):
|
class FakeConfigurations(object):
|
||||||
fake_config = (fakes.FakeHTTPClient().get_configurations()
|
fake_config = (fakes.FakeHTTPClient().get_configurations()
|
||||||
[2]['configurations'])
|
[2]['configurations'])
|
||||||
|
fake_config_instances = (fakes.FakeHTTPClient().
|
||||||
|
get_configurations_c_123_instances()[2])
|
||||||
|
|
||||||
def get_configurations_c_123(self):
|
def get_configurations_c_123(self):
|
||||||
return configurations.Configuration(None, self.fake_config[0])
|
return configurations.Configuration(None, self.fake_config[0])
|
||||||
|
|
||||||
|
def get_configuration_instances(self):
|
||||||
|
return [instances.Instance(None, fake_instance)
|
||||||
|
for fake_instance in self.fake_config_instances['instances']]
|
||||||
|
|
||||||
|
|
||||||
class FakeConfigurationParameters(object):
|
class FakeConfigurationParameters(object):
|
||||||
fake_config_param = (fakes.FakeHTTPClient().
|
fake_config_param = (fakes.FakeHTTPClient().
|
||||||
|
@@ -293,3 +293,33 @@ class TestConfigurationDetach(TestConfigurations):
|
|||||||
result = self.cmd.take_action(parsed_args)
|
result = self.cmd.take_action(parsed_args)
|
||||||
self.instance_client.modify.assert_called_with('instance2')
|
self.instance_client.modify.assert_called_with('instance2')
|
||||||
self.assertIsNone(result)
|
self.assertIsNone(result)
|
||||||
|
|
||||||
|
|
||||||
|
class TestConfigurationInstancesList(TestConfigurations):
|
||||||
|
defaults = {
|
||||||
|
'limit': None,
|
||||||
|
'marker': None
|
||||||
|
}
|
||||||
|
|
||||||
|
columns = (
|
||||||
|
database_configurations.ListDatabaseConfigurationInstances.columns)
|
||||||
|
values = [('1', 'instance-1'),
|
||||||
|
('2', 'instance-2')]
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(TestConfigurationInstancesList, self).setUp()
|
||||||
|
self.cmd = database_configurations.ListDatabaseConfigurationInstances(
|
||||||
|
self.app, None)
|
||||||
|
data = (
|
||||||
|
self.fake_configurations.get_configuration_instances())
|
||||||
|
self.configuration_client.instances.return_value = common.Paginated(
|
||||||
|
data)
|
||||||
|
|
||||||
|
@mock.patch.object(utils, 'find_resource')
|
||||||
|
def test_configuration_instances_list(self, mock_find):
|
||||||
|
args = ['c-123']
|
||||||
|
mock_find.return_value = args[0]
|
||||||
|
parsed_args = self.check_parser(self.cmd, args, [])
|
||||||
|
columns, data = self.cmd.take_action(parsed_args)
|
||||||
|
self.assertEqual(self.columns, columns)
|
||||||
|
self.assertEqual(self.values, data)
|
||||||
|
Reference in New Issue
Block a user