Source code for credproxy.cli
# SPDX-License-Identifier: MPL-2.0
# Copyright 2025-present John Mille <john@ews-network.net>
"""Command-line interface for CredProxy."""
from __future__ import annotations
import argparse
from typing import TYPE_CHECKING
if TYPE_CHECKING:
import argparse
from credproxy import __version__
from credproxy.logger import LOG
[docs]
def create_parser() -> argparse.ArgumentParser:
"""Create the command-line argument parser."""
parser = argparse.ArgumentParser(
prog="credproxy",
description=(
"AWS container credential provider - CLI for validation and development"
),
)
_ = parser.add_argument(
"--config",
default="/credproxy/config.yaml",
help="Path to configuration file (default: /credproxy/config.yaml)",
)
_ = parser.add_argument(
"--validate-only", action="store_true", help="Validate configuration and exit"
)
_ = parser.add_argument(
"--version", action="version", version=f"%(prog)s {__version__}"
)
_ = parser.add_argument(
"--log-level",
choices=["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"],
help="Set logging level (default: INFO)",
)
_ = parser.add_argument(
"--dev",
action="store_true",
help="Enable development mode (sets debug=True and log-level=DEBUG)",
)
return parser
[docs]
def main(argv: list[str] | None = None) -> int:
"""Main CLI entry point - parse arguments and delegate."""
parser = create_parser()
args = parser.parse_args(argv)
# Handle --dev flag: set debug mode and default log level to DEBUG
if args.dev:
args.log_level = args.log_level or "DEBUG"
# Set up logging level from CLI argument if provided
if args.log_level:
from credproxy.runner import setup_cli_logging
setup_cli_logging(args.log_level)
try:
# If validation only, validate and exit
if args.validate_only:
from credproxy.runner import validate_config_file
success = validate_config_file(args.config)
return 0 if success else 1
except Exception as error:
LOG.error("Fatal error during validation: %s", str(error))
return 1
# Delegate to server runner for normal operation
from credproxy.runner import run_server
return run_server(args)
if __name__ == "__main__":
import sys
sys.exit(main())