# under the License.
import fcntl
+import glob
import os
import shlex
-import shutil
import socket
import struct
import tempfile
return [x.strip() for x in raw_pids.split('\n') if x.strip()]
-def _get_conf_dir(cfg_root, uuid, ensure_conf_dir):
- confs_dir = os.path.abspath(os.path.normpath(cfg_root))
- conf_dir = os.path.join(confs_dir, uuid)
+def _get_conf_base(cfg_root, uuid, ensure_conf_dir):
+ conf_dir = os.path.abspath(os.path.normpath(cfg_root))
+ conf_base = os.path.join(conf_dir, uuid)
if ensure_conf_dir:
if not os.path.isdir(conf_dir):
os.makedirs(conf_dir, 0o755)
- return conf_dir
+ return conf_base
def get_conf_file_name(cfg_root, uuid, cfg_file, ensure_conf_dir=False):
"""Returns the file name for a given kind of config file."""
- conf_dir = _get_conf_dir(cfg_root, uuid, ensure_conf_dir)
- return os.path.join(conf_dir, cfg_file)
+ conf_base = _get_conf_base(cfg_root, uuid, ensure_conf_dir)
+ return "%s.%s" % (conf_base, cfg_file)
def get_value_from_conf_file(cfg_root, uuid, cfg_file, converter=None):
def remove_conf_files(cfg_root, uuid):
- conf_dir = _get_conf_dir(cfg_root, uuid, False)
- shutil.rmtree(conf_dir, ignore_errors=True)
+ conf_base = _get_conf_base(cfg_root, uuid, False)
+ for file_path in glob.iglob("%s.*" % conf_base):
+ os.unlink(file_path)
def remove_conf_file(cfg_root, uuid, cfg_file):
- """Remove a config file. Remove the directory if this is the last file."""
+ """Remove a config file."""
conf_file = get_conf_file_name(cfg_root, uuid, cfg_file)
if os.path.exists(conf_file):
os.unlink(conf_file)
- conf_dir = _get_conf_dir(cfg_root, uuid, False)
- if not os.listdir(conf_dir):
- shutil.rmtree(conf_dir, ignore_errors=True)
isdir.return_value = True
manager = ep.ProcessManager(self.conf, 'uuid')
retval = manager.get_pid_file_name(ensure_pids_dir=True)
- self.assertEqual(retval, '/var/path/uuid/pid')
+ self.assertEqual(retval, '/var/path/uuid.pid')
def test_get_pid_file_name_not_existing(self):
with mock.patch.object(ep.utils.os.path, 'isdir') as isdir:
isdir.return_value = False
manager = ep.ProcessManager(self.conf, 'uuid')
retval = manager.get_pid_file_name(ensure_pids_dir=True)
- self.assertEqual(retval, '/var/path/uuid/pid')
- makedirs.assert_called_once_with('/var/path/uuid', 0o755)
+ self.assertEqual(retval, '/var/path/uuid.pid')
+ makedirs.assert_called_once_with('/var/path', 0o755)
def test_get_pid_file_name_default(self):
with mock.patch.object(ep.utils.os.path, 'isdir') as isdir:
isdir.return_value = True
manager = ep.ProcessManager(self.conf, 'uuid')
retval = manager.get_pid_file_name(ensure_pids_dir=False)
- self.assertEqual(retval, '/var/path/uuid/pid')
+ self.assertEqual(retval, '/var/path/uuid.pid')
self.assertFalse(isdir.called)
def test_pid(self):