diff --git a/nodepool/cmd/__init__.py b/nodepool/cmd/__init__.py index b832e384a..493e43cba 100644 --- a/nodepool/cmd/__init__.py +++ b/nodepool/cmd/__init__.py @@ -85,6 +85,11 @@ class NodepoolApp(object): self.parser = None self.args = None + def get_path(self, path): + if path is None: + return None + return os.path.abspath(os.path.expanduser(path)) + def create_parser(self): parser = argparse.ArgumentParser(description=self.app_description) @@ -98,10 +103,14 @@ class NodepoolApp(object): return parser + def parse_args(self): + args = self.parser.parse_args() + self.logconfig = self.get_path(args.logconfig) + return args + def setup_logging(self): - if self.args.logconfig: - fp = os.path.expanduser(self.args.logconfig) - logging_config = logconfig.load_config(fp) + if self.logconfig: + logging_config = logconfig.load_config(self.logconfig) else: # If someone runs in the foreground and doesn't give a logging # config, leave the config set to emit to stdout. @@ -121,7 +130,7 @@ class NodepoolApp(object): argv = sys.argv[1:] self.parser = self.create_parser() - self.args = self.parser.parse_args() + self.args = self.parse_args() return self._do_run() def _do_run(self): @@ -156,12 +165,17 @@ class NodepoolDaemonApp(NodepoolApp): return parser + def parse_args(self): + args = super(NodepoolDaemonApp, self).parse_args() + self.pidfile = self.get_path(args.pidfile) + return args + def _do_run(self): if self.args.nodaemon: return super(NodepoolDaemonApp, self)._do_run() else: - pid = pid_file_module.TimeoutPIDLockFile(self.args.pidfile, 10) + pid = pid_file_module.TimeoutPIDLockFile(self.pidfile, 10) if is_pidfile_stale(pid): pid.break_lock() diff --git a/nodepool/cmd/builder.py b/nodepool/cmd/builder.py index 7ac993b2a..d0bf15665 100644 --- a/nodepool/cmd/builder.py +++ b/nodepool/cmd/builder.py @@ -47,10 +47,16 @@ class NodePoolBuilderApp(nodepool.cmd.NodepoolDaemonApp): '(used for testing)') return parser + def parse_args(self): + args = super(NodePoolBuilderApp, self).parse_args() + self.config_file = self.get_path(args.config) + self.secure_file = self.get_path(args.secure) + return args + def run(self): self.nb = builder.NodePoolBuilder( - self.args.config, - secure_path=self.args.secure, + self.config_file, + secure_path=self.secure_file, num_builders=self.args.build_workers, num_uploaders=self.args.upload_workers, fake=self.args.fake) diff --git a/nodepool/cmd/launcher.py b/nodepool/cmd/launcher.py index d5594a458..4e95ce0a8 100755 --- a/nodepool/cmd/launcher.py +++ b/nodepool/cmd/launcher.py @@ -41,6 +41,12 @@ class NodePoolLauncherApp(nodepool.cmd.NodepoolDaemonApp): parser.add_argument('--no-webapp', action='store_true') return parser + def parse_args(self): + args = super(NodePoolLauncherApp, self).parse_args() + self.config_file = self.get_path(args.config) + self.secure_file = self.get_path(args.secure) + return args + def exit_handler(self, signum, frame): self.pool.stop() if not self.args.no_webapp: @@ -51,8 +57,8 @@ class NodePoolLauncherApp(nodepool.cmd.NodepoolDaemonApp): os._exit(0) def run(self): - self.pool = nodepool.launcher.NodePool(self.args.secure, - self.args.config) + self.pool = nodepool.launcher.NodePool(self.secure_file, + self.config_file) if not self.args.no_webapp: config = self.pool.loadConfig() self.webapp = nodepool.webapp.WebApp(self.pool,