From e8386a27968f5a53f97681e7caf63b2243b7ed05 Mon Sep 17 00:00:00 2001 From: Rafi Khardalian Date: Wed, 23 Jan 2013 01:55:09 +0000 Subject: Allow users to specify a tmp location via config Fixes bug 981104 Although the temporary directory used can be controlled via environment variables, this patch provides a way to define it explicitly via a config option. The default value is None, which behaves per the doc below: http://docs.python.org/2/library/tempfile.html#tempfile.tempdir Flags: DocImpact Change-Id: I47b6d8bac734f453c80d541b46086a30e847c859 --- nova/service.py | 11 +++++++++++ nova/utils.py | 4 ++++ 2 files changed, 15 insertions(+) diff --git a/nova/service.py b/nova/service.py index c250673f4..4fc12f374 100644 --- a/nova/service.py +++ b/nova/service.py @@ -426,6 +426,7 @@ class Service(object): verstr = version.version_string_with_package() LOG.audit(_('Starting %(topic)s node (version %(version)s)'), {'topic': self.topic, 'version': verstr}) + self.basic_config_check() self.manager.init_host() self.model_disconnected = False ctxt = context.get_admin_context() @@ -570,6 +571,16 @@ class Service(object): ctxt = context.get_admin_context() return self.manager.periodic_tasks(ctxt, raise_on_error=raise_on_error) + def basic_config_check(self): + """Perform basic config checks before starting processing.""" + # Make sure the tempdir exists and is writable + try: + with utils.tempdir() as tmpdir: + pass + except Exception as e: + LOG.error(_('Temporary directory is invalid: %s'), e) + sys.exit(1) + class WSGIService(object): """Provides ability to launch API from a 'paste' configuration.""" diff --git a/nova/utils.py b/nova/utils.py index 97091e42c..52d4868c9 100644 --- a/nova/utils.py +++ b/nova/utils.py @@ -76,6 +76,9 @@ utils_opts = [ default="/etc/nova/rootwrap.conf", help='Path to the rootwrap configuration file to use for ' 'running commands as root'), + cfg.StrOpt('tempdir', + default=None, + help='Explicitly specify the temporary working directory'), ] CONF = cfg.CONF CONF.register_opts(monkey_patch_opts) @@ -1147,6 +1150,7 @@ def temporary_chown(path, owner_uid=None): @contextlib.contextmanager def tempdir(**kwargs): + tempfile.tempdir = CONF.tempdir tmpdir = tempfile.mkdtemp(**kwargs) try: yield tmpdir -- cgit