1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
# 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.
"""Database v1 Root action implementations"""
from osc_lib.command import command
from osc_lib import exceptions
from osc_lib import utils as osc_utils
import six
from troveclient.i18n import _
def find_instance_or_cluster(database_client_manager,
instance_or_cluster):
"""Returns an instance or cluster, found by ID or name,
along with the type of resource, instance or cluster.
Raises CommandError if none is found.
"""
db_instances = database_client_manager.instances
try:
return (osc_utils.find_resource(db_instances,
instance_or_cluster),
'instance')
except exceptions.CommandError:
db_clusters = database_client_manager.clusters
try:
return (osc_utils.find_resource(db_clusters,
instance_or_cluster),
'cluster')
except exceptions.CommandError:
raise exceptions.CommandError(
_("No instance or cluster with a name or ID of '%s' exists.")
% instance_or_cluster)
class EnableDatabaseRoot(command.ShowOne):
_description = _("Enables root for an instance and resets "
"if already exists.")
def get_parser(self, prog_name):
parser = super(EnableDatabaseRoot, self).get_parser(prog_name)
parser.add_argument(
'instance_or_cluster',
metavar='<instance_or_cluster>',
help=_('ID or name of the instance or cluster.'),
)
parser.add_argument(
'--root_password',
metavar='<root_password>',
default=None,
help=_('Root password to set.'))
return parser
def take_action(self, parsed_args):
database_client_manager = self.app.client_manager.database
instance_or_cluster, resource_type = find_instance_or_cluster(
database_client_manager,
parsed_args.instance_or_cluster)
db_root = database_client_manager.root
if resource_type == 'instance':
root = db_root.create_instance_root(instance_or_cluster,
parsed_args.root_password)
else:
root = db_root.create_cluster_root(instance_or_cluster,
parsed_args.root_password)
result = {'name': root[0],
'password': root[1]}
return zip(*sorted(six.iteritems(result)))
class DisableDatabaseRoot(command.Command):
_description = _("Disables root for an instance.")
def get_parser(self, prog_name):
parser = super(DisableDatabaseRoot, self).get_parser(prog_name)
parser.add_argument(
'instance',
metavar='<instance>',
help=_('ID or name of the instance.'),
)
return parser
def take_action(self, parsed_args):
database_client_manager = self.app.client_manager.database
db_instances = database_client_manager.instances
instance = osc_utils.find_resource(db_instances,
parsed_args.instance)
db_root = database_client_manager.root
db_root.disable_instance_root(instance)
class ShowDatabaseRoot(command.ShowOne):
_description = _("Gets status if root was ever enabled for "
"an instance or cluster.")
def get_parser(self, prog_name):
parser = super(ShowDatabaseRoot, self).get_parser(prog_name)
parser.add_argument(
'instance_or_cluster',
metavar='<instance_or_cluster>',
help=_('ID or name of the instance or cluster.'),
)
return parser
def take_action(self, parsed_args):
database_client_manager = self.app.client_manager.database
instance_or_cluster, resource_type = find_instance_or_cluster(
database_client_manager,
parsed_args.instance_or_cluster)
db_root = database_client_manager.root
if resource_type == 'instance':
root = db_root.is_instance_root_enabled(instance_or_cluster)
else:
root = db_root.is_cluster_root_enabled(instance_or_cluster)
result = {'is_root_enabled': root.rootEnabled}
return zip(*sorted(six.iteritems(result)))
|