Discover the correct default config dir
Change the tempest init to discover the correct default config
dir. When no config dir is specified, we should use a sane default.
Which is /etc/tempest when tempest is installed system-wide, or
[virtualenv_root]/etc/tempest when tempest is installed in a
virtualenv.
Closes bug #1480389
Change-Id: I88aee53dbbe9262fbb4bf1686b18e1371f00bf69
diff --git a/tempest/cmd/init.py b/tempest/cmd/init.py
index c13fbe5..5e616f7 100644
--- a/tempest/cmd/init.py
+++ b/tempest/cmd/init.py
@@ -15,6 +15,7 @@
import os
import shutil
import subprocess
+import sys
from cliff import command
from oslo_log import log as logging
@@ -33,13 +34,44 @@
"""
+def get_tempest_default_config_dir():
+ """Returns the correct default config dir to support both cases of
+ tempest being or not installed in a virtualenv.
+ Cases considered:
+ - no virtual env, python2: real_prefix and base_prefix not set
+ - no virtual env, python3: real_prefix not set, base_prefix set and
+ identical to prefix
+ - virtualenv, python2: real_prefix and prefix are set and different
+ - virtualenv, python3: real_prefix not set, base_prefix and prefix are
+ set and identical
+ - pyvenv, any python version: real_prefix not set, base_prefix and prefix
+ are set and different
+
+ :return: default config dir
+ """
+ real_prefix = getattr(sys, 'real_prefix', None)
+ base_prefix = getattr(sys, 'base_prefix', None)
+ prefix = sys.prefix
+ if real_prefix is None and base_prefix is None:
+ # Not running in a virtual environnment of any kind
+ return '/etc/tempest'
+ elif (real_prefix is None and base_prefix is not None and
+ base_prefix == prefix):
+ # Probably not running in a virtual environment
+ # NOTE(andreaf) we cannot distinguish this case from the case of
+ # a virtual environment created with virtualenv, and running python3.
+ return '/etc/tempest'
+ else:
+ return os.path.join(sys.prefix, 'etc/tempest')
+
+
class TempestInit(command.Command):
"""Setup a local working environment for running tempest"""
def get_parser(self, prog_name):
parser = super(TempestInit, self).get_parser(prog_name)
parser.add_argument('dir', nargs='?', default=os.getcwd())
- parser.add_argument('--config-dir', '-c', default='/etc/tempest')
+ parser.add_argument('--config-dir', '-c', default=None)
return parser
def generate_testr_conf(self, local_path):
@@ -96,4 +128,5 @@
subprocess.call(['testr', 'init'], cwd=local_dir)
def take_action(self, parsed_args):
- self.create_working_dir(parsed_args.dir, parsed_args.config_dir)
+ config_dir = parsed_args.config_dir or get_tempest_default_config_dir()
+ self.create_working_dir(parsed_args.dir, config_dir)