diff options
Diffstat (limited to 'openstackclient/compute/v2/server.py')
-rw-r--r-- | openstackclient/compute/v2/server.py | 44 |
1 files changed, 30 insertions, 14 deletions
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py index 37c78b6f..0d40d96a 100644 --- a/openstackclient/compute/v2/server.py +++ b/openstackclient/compute/v2/server.py @@ -4576,7 +4576,7 @@ class StartServer(command.Command): _description = _("Start server(s)") def get_parser(self, prog_name): - parser = super(StartServer, self).get_parser(prog_name) + parser = super().get_parser(prog_name) parser.add_argument( 'server', metavar='<server>', @@ -4595,20 +4595,28 @@ class StartServer(command.Command): return parser def take_action(self, parsed_args): - compute_client = self.app.client_manager.compute + compute_client = self.app.client_manager.sdk_connection.compute for server in parsed_args.server: - utils.find_resource( - compute_client.servers, - server, - all_tenants=parsed_args.all_projects, - ).start() + try: + server_id = compute_client.find_server( + name=server, + details=False, + all_projects=parsed_args.all_projects, + ignore_missing=False, + ).id + except sdk_exceptions.HttpException as exc: + if exc.status_code == 403: + msg = _("Policy doesn't allow passing all-projects") + raise exceptions.Forbidden(msg) + + compute_client.start_server(server_id) class StopServer(command.Command): _description = _("Stop server(s)") def get_parser(self, prog_name): - parser = super(StopServer, self).get_parser(prog_name) + parser = super().get_parser(prog_name) parser.add_argument( 'server', metavar='<server>', @@ -4627,13 +4635,21 @@ class StopServer(command.Command): return parser def take_action(self, parsed_args): - compute_client = self.app.client_manager.compute + compute_client = self.app.client_manager.sdk_connection.compute for server in parsed_args.server: - utils.find_resource( - compute_client.servers, - server, - all_tenants=parsed_args.all_projects, - ).stop() + try: + server_id = compute_client.find_server( + name=server, + details=False, + all_projects=parsed_args.all_projects, + ignore_missing=False, + ).id + except sdk_exceptions.HttpException as exc: + if exc.status_code == 403: + msg = _("Policy doesn't allow passing all-projects") + raise exceptions.Forbidden(msg) + + compute_client.stop_server(server_id) class SuspendServer(command.Command): |