Sabyasachi Nayak ba92ca3c62 User confirmation support in the Software CLI
Added a generic user confirmation prompt in the Software CLI Framework
for all service-impacting commands.
This ensures critical operations require explicit user approval unless
overridden with --yes.
The "cli_confirmations" system service parameter is used to enabling or
disabling the confirmation prompt.

Confirmation Prompt:
            WARNING: This is a high-risk operation that may cause a
            service interruption or remove critical resources.
            Do you want to continue? (yes/No):

Service-Impacting Commands:
           software deploy host 1
           software delete fake-release

Behavior:
      1. When cli_confirmations is disabled, commands execute without
         confirmation.

      2. When cli_confirmations is disabled & --yes is used, commands
         proceed normally to maintain consistency in internal calls.

      3. When cli_confirmations is enabled & --yes is used, commands
         execute without prompts.

      4. When cli_confirmations is enabled & --yes is not provided, a
         confirmation prompt appears, and if no response is given, it
         times out.

      5. Normal operations should not prompt cli confirmations prompt.

Test Plan:
PASS - AIO-SX:
      Verified CLI behavior aligns with the above conditions.

Story: 2011240
Task: 51197

Change-Id: If7ab960272bff6cc1f33fc3500435c225f2b5dc9
Signed-off-by: Sabyasachi Nayak <sabyasachi.nayak@windriver.com>
2025-04-17 12:47:56 +00:00

49 lines
1.3 KiB
Python

#
# Copyright (c) 2013-2025 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
#
from software_client.common import utils
from software_client.v1 import deploy_shell
DEPLOY_COMMAND_MODULES = [
deploy_shell,
]
# sofware deploy commands
# - precheck
# - start
# - host
# - abort
# - activate
# - activate-rollback
# - complete
# - delete
# non root/sudo users can run:
# - host-list
# - show
# Deploy commands are region_restricted, which means
# that they are not permitted to be run in DC
#
# UN_RESTRICTED_COMMANDS is used to set argparser argument 'restricted' to False
UN_RESTRICTED_COMMANDS = ['show', 'host-list']
def enhance_parser(parser, subparsers, cmd_mapper):
'''Take a basic (nonversioned) parser and enhance it with
commands and options specific for this version of API.
:param parser: top level parser :param subparsers: top level
parser's subparsers collection where subcommands will go
'''
deploy_cmds = {}
for command_module in DEPLOY_COMMAND_MODULES:
utils.define_commands_from_module(subparsers, command_module,
deploy_cmds, UN_RESTRICTED_COMMANDS, cmd_area='deploy')
cmd_mapper.update({f"deploy {k}": v for k, v in deploy_cmds.items()})