mirror of
https://github.com/containers/podman.git
synced 2025-06-21 09:28:09 +08:00
77 lines
2.2 KiB
Python
Executable File
77 lines
2.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""Remote podman client."""
|
|
|
|
import logging
|
|
import os
|
|
import sys
|
|
|
|
import lib.actions
|
|
from lib import PodmanArgumentParser
|
|
|
|
assert lib.actions # silence pyflakes
|
|
|
|
|
|
def main():
|
|
"""Entry point."""
|
|
# Setup logging so we use stderr and can change logging level later
|
|
# Do it now before there is any chance of a default setup hardcoding crap.
|
|
log = logging.getLogger()
|
|
fmt = logging.Formatter('%(asctime)s | %(levelname)-8s | %(message)s',
|
|
'%Y-%m-%d %H:%M:%S %Z')
|
|
stderr = logging.StreamHandler(stream=sys.stderr)
|
|
stderr.setFormatter(fmt)
|
|
log.addHandler(stderr)
|
|
log.setLevel(logging.WARNING)
|
|
|
|
parser = PodmanArgumentParser()
|
|
args = parser.parse_args()
|
|
|
|
log.setLevel(args.log_level)
|
|
logging.debug('Logging initialized at level {}'.format(
|
|
logging.getLevelName(logging.getLogger().getEffectiveLevel())))
|
|
|
|
def want_tb():
|
|
"""Add traceback when logging events."""
|
|
return log.getEffectiveLevel() == logging.DEBUG
|
|
|
|
try:
|
|
if not os.path.exists(args.run_dir):
|
|
os.makedirs(args.run_dir)
|
|
except PermissionError as e:
|
|
logging.critical(e, exc_info=want_tb())
|
|
sys.exit(6)
|
|
|
|
# class_(args).method() are set by the sub-command's parser
|
|
returncode = None
|
|
try:
|
|
obj = args.class_(args)
|
|
except Exception as e:
|
|
logging.critical(repr(e), exc_info=want_tb())
|
|
logging.warning('See subparser "{}" configuration.'.format(
|
|
args.subparser_name))
|
|
sys.exit(5)
|
|
|
|
try:
|
|
returncode = getattr(obj, args.method)()
|
|
except AttributeError as e:
|
|
logging.critical(e, exc_info=want_tb())
|
|
logging.warning('See subparser "{}" configuration.'.format(
|
|
args.subparser_name))
|
|
returncode = 3
|
|
except KeyboardInterrupt:
|
|
pass
|
|
except (
|
|
ConnectionRefusedError,
|
|
ConnectionResetError,
|
|
TimeoutError,
|
|
) as e:
|
|
logging.critical(e, exc_info=want_tb())
|
|
logging.info('Review connection arguments for correctness.')
|
|
returncode = 4
|
|
|
|
return 0 if returncode is None else returncode
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main())
|