X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/c4feafe8e7377e9ac0f3d716f4d30149e3c8276f..04a69a18254e32073e4904ff77254dea9866bc7a:/lib/backend.py diff --git a/lib/backend.py b/lib/backend.py index 4732d56..367e89c 100644 --- a/lib/backend.py +++ b/lib/backend.py @@ -799,6 +799,24 @@ def GetAllInstancesInfo(hypervisor_list): return output +def _InstanceLogName(kind, os_name, instance): + """Compute the OS log filename for a given instance and operation. + + The instance name and os name are passed in as strings since not all + operations have these as part of an instance object. + + @type kind: string + @param kind: the operation type (e.g. add, import, etc.) + @type os_name: string + @param os_name: the os name + @type instance: string + @param instance: the name of the instance being imported/added/etc. + + """ + base = "%s-%s-%s-%d.log" % (kind, os_name, instance, int(time.time())) + return utils.PathJoin(constants.LOG_OS_DIR, base) + + def InstanceOsAdd(instance, reinstall, debug): """Add an OS to an instance. @@ -817,8 +835,7 @@ def InstanceOsAdd(instance, reinstall, debug): if reinstall: create_env['INSTANCE_REINSTALL'] = "1" - logfile = "%s/add-%s-%s-%d.log" % (constants.LOG_OS_DIR, instance.os, - instance.name, int(time.time())) + logfile = _InstanceLogName("add", instance.os, instance.name) result = utils.RunCmd([inst_os.create_script], env=create_env, cwd=inst_os.path, output=logfile,) @@ -850,9 +867,8 @@ def RunRenameInstance(instance, old_name, debug): rename_env = OSEnvironment(instance, inst_os, debug) rename_env['OLD_INSTANCE_NAME'] = old_name - logfile = "%s/rename-%s-%s-%s-%d.log" % (constants.LOG_OS_DIR, instance.os, - old_name, - instance.name, int(time.time())) + logfile = _InstanceLogName("rename", instance.os, + "%s-%s" % (old_name, instance.name)) result = utils.RunCmd([inst_os.rename_script], env=rename_env, cwd=inst_os.path, output=logfile) @@ -1445,6 +1461,8 @@ def BlockdevRemovechildren(parent_cdev, new_cdevs): else: devs.append(bd.dev_path) else: + if not utils.IsNormAbsPath(rpath): + _Fail("Strange path returned from StaticDevPath: '%s'", rpath) devs.append(rpath) parent_bdev.RemoveChildren(devs) @@ -1666,7 +1684,7 @@ def _OSOndiskAPIVersion(os_dir): data holding either the vaid versions or an error message """ - api_file = os.path.sep.join([os_dir, constants.OS_API_FILE]) + api_file = utils.PathJoin(os_dir, constants.OS_API_FILE) try: st = os.stat(api_file) @@ -1722,7 +1740,7 @@ def DiagnoseOS(top_dirs=None): logging.exception("Can't list the OS directory %s: %s", dir_name, err) break for name in f_names: - os_path = os.path.sep.join([dir_name, name]) + os_path = utils.PathJoin(dir_name, name) status, os_inst = _TryOSFromDisk(name, base_dir=dir_name) if status: diagnose = "" @@ -1773,7 +1791,7 @@ def _TryOSFromDisk(name, base_dir=None): os_files[constants.OS_VARIANTS_FILE] = '' for filename in os_files: - os_files[filename] = os.path.sep.join([os_dir, filename]) + os_files[filename] = utils.PathJoin(os_dir, filename) try: st = os.stat(os_files[filename]) @@ -1982,8 +2000,7 @@ def ExportSnapshot(disk, dest_node, instance, cluster_name, idx, debug): export_script = inst_os.export_script - logfile = "%s/exp-%s-%s-%s.log" % (constants.LOG_OS_DIR, inst_os.name, - instance.name, int(time.time())) + logfile = _InstanceLogName("export", inst_os.name, instance.name) if not os.path.exists(constants.LOG_OS_DIR): os.mkdir(constants.LOG_OS_DIR, 0750) real_disk = _RecursiveFindBD(disk) @@ -2006,8 +2023,8 @@ def ExportSnapshot(disk, dest_node, instance, cluster_name, idx, debug): comprcmd = "gzip" - destcmd = utils.BuildShellCmd("mkdir -p %s && cat > %s/%s", - destdir, destdir, destfile) + destcmd = utils.BuildShellCmd("mkdir -p %s && cat > %s", + destdir, utils.PathJoin(destdir, destfile)) remotecmd = _GetSshRunner(cluster_name).BuildCmd(dest_node, constants.GANETI_RUNAS, destcmd) @@ -2127,8 +2144,7 @@ def ImportOSIntoInstance(instance, src_node, src_images, cluster_name, debug): import_env = OSEnvironment(instance, inst_os, debug) import_script = inst_os.import_script - logfile = "%s/import-%s-%s-%s.log" % (constants.LOG_OS_DIR, instance.os, - instance.name, int(time.time())) + logfile = _InstanceLogName("import", instance.os, instance.name) if not os.path.exists(constants.LOG_OS_DIR): os.mkdir(constants.LOG_OS_DIR, 0750) @@ -2241,6 +2257,8 @@ def _TransformFileStorageDir(file_storage_dir): @return: the normalized path if valid, None otherwise """ + if not constants.ENABLE_FILE_STORAGE: + _Fail("File storage disabled at configure time") cfg = _GetConfig() file_storage_dir = os.path.normpath(file_storage_dir) base_file_storage_dir = cfg.GetFileStorageDir() @@ -2678,10 +2696,17 @@ class HooksRunner(object): subdir = "%s-%s.d" % (hpath, suffix) - dir_name = "%s/%s" % (self._BASE_DIR, subdir) - runparts_results = utils.RunParts(dir_name, env=env, reset_env=True) + dir_name = utils.PathJoin(self._BASE_DIR, subdir) results = [] + + if not os.path.isdir(dir_name): + # for non-existing/non-dirs, we simply exit instead of logging a + # warning at every operation + return results + + runparts_results = utils.RunParts(dir_name, env=env, reset_env=True) + for (relname, relstatus, runresult) in runparts_results: if relstatus == constants.RUNPARTS_SKIP: rrval = constants.HKR_SKIP @@ -2764,7 +2789,7 @@ class DevCacheManager(object): if dev_path.startswith(cls._DEV_PREFIX): dev_path = dev_path[len(cls._DEV_PREFIX):] dev_path = dev_path.replace("/", "_") - fpath = "%s/bdev_%s" % (cls._ROOT_DIR, dev_path) + fpath = utils.PathJoin(cls._ROOT_DIR, "bdev_%s" % dev_path) return fpath @classmethod