From 6a6b03b13642e64ac03cc880dca8afb1acb8cd46 Mon Sep 17 00:00:00 2001 From: Radoslaw Smigielski Date: Thu, 29 Nov 2018 13:49:39 +0100 Subject: [PATCH] Default log location failes for non-root users Any sub-command fails when executed as non-root user due to default location being set to /var/log/paunch.log Log location should be optional and specified by user. Closes-bug: 1803421 Change-Id: I520add525efa7b7f959fb61aeb2053ef6a4085aa --- paunch/cmd.py | 44 ++++++++++-------------------------------- paunch/utils/common.py | 20 +++++++++++++++++++ 2 files changed, 30 insertions(+), 34 deletions(-) diff --git a/paunch/cmd.py b/paunch/cmd.py index 22823f7..4d39c52 100644 --- a/paunch/cmd.py +++ b/paunch/cmd.py @@ -20,7 +20,6 @@ import yaml import paunch -from paunch import constants from paunch import utils @@ -68,13 +67,8 @@ class Apply(command.Command): return parser def take_action(self, parsed_args): - - # takes 1, or 2 if --verbose, or 4 - 5 if --debug - log_level = (self.app_args.verbose_level + - int(self.app_args.debug) * 3) - log_file = self.app_args.log_file or constants.LOG_FILE - self.log = utils.common.configure_logging( - __name__, log_level, log_file) + (self.log, log_file, log_level) = \ + utils.common.configure_logging_from_args(__name__, self.app_args) labels = collections.OrderedDict() for l in parsed_args.labels: k, v = l.split(('='), 1) @@ -119,12 +113,8 @@ class Cleanup(command.Command): return parser def take_action(self, parsed_args): - # takes 1, or 2 if --verbose, or 4 - 5 if --debug - log_level = (self.app_args.verbose_level + - int(self.app_args.debug) * 3) - log_file = self.app_args.log_file or constants.LOG_FILE - self.log = utils.common.configure_logging( - __name__, log_level, log_file) + (self.log, log_file, log_level) = \ + utils.common.configure_logging_from_args(__name__, self.app_args) paunch.cleanup( parsed_args.config_id, managed_by=parsed_args.managed_by, @@ -155,12 +145,8 @@ class Delete(command.Command): return parser def take_action(self, parsed_args): - # takes 1, or 2 if --verbose, or 4 - 5 if --debug - log_level = (self.app_args.verbose_level + - int(self.app_args.debug) * 3) - log_file = self.app_args.log_file or constants.LOG_FILE - self.log = utils.common.configure_logging( - __name__, log_level, log_file) + (self.log, log_file, log_level) = \ + utils.common.configure_logging_from_args(__name__, self.app_args) paunch.delete( parsed_args.config_id, parsed_args.managed_by, @@ -253,14 +239,8 @@ class Debug(command.Command): return parser def take_action(self, parsed_args): - - # takes 1, or 2 if --verbose, or 4 - 5 if --debug - log_level = (self.app_args.verbose_level + - int(self.app_args.debug) * 3) - # Only log to a file if explicitely set via CLI args - log_file = self.app_args.log_file - self.log = utils.common.configure_logging( - __name__, log_level, log_file) + (self.log, log_file, log_level) = \ + utils.common.configure_logging_from_args(__name__, self.app_args) labels = collections.OrderedDict() for l in parsed_args.labels: k, v = l.split(('='), 1) @@ -323,12 +303,8 @@ class List(lister.Lister): return parser def take_action(self, parsed_args): - # takes 1, or 2 if --verbose, or 4 - 5 if --debug - log_level = (self.app_args.verbose_level + - int(self.app_args.debug) * 3) - log_file = self.app_args.log_file or constants.LOG_FILE - self.log = utils.common.configure_logging( - __name__, log_level, log_file) + (self.log, log_file, log_level) = \ + utils.common.configure_logging_from_args(__name__, self.app_args) configs = paunch.list( parsed_args.managed_by, log_level=log_level, diff --git a/paunch/utils/common.py b/paunch/utils/common.py index 3078012..806e414 100644 --- a/paunch/utils/common.py +++ b/paunch/utils/common.py @@ -14,8 +14,12 @@ # under the License. import logging +import os import sys +from paunch import constants +from paunch import utils + def configure_logging(name, level=3, log_file=None): '''Mimic oslo_log default levels and formatting for the logger. ''' @@ -44,3 +48,19 @@ def configure_logging(name, level=3, log_file=None): log.propagate = False return log + + +def configure_logging_from_args(name, app_args): + # takes 1, or 2 if --verbose, or 4 - 5 if --debug + log_level = (app_args.verbose_level + + int(app_args.debug) * 3) + + # if executed as root log to specified file or default log file + if os.getuid() == 0: + log_file = app_args.log_file or constants.LOG_FILE + else: + log_file = app_args.log_file + + log = utils.common.configure_logging( + __name__, log_level, log_file) + return (log, log_file, log_level)