X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/2a10865c50390dbc54c60a04d814710fa7e08b56..8c229cc7e24f1c7075b38ff0e21aab7c75299c4d:/lib/backend.py diff --git a/lib/backend.py b/lib/backend.py index 89ceb24..382eec5 100644 --- a/lib/backend.py +++ b/lib/backend.py @@ -139,6 +139,9 @@ def LeaveCluster(): utils.RemoveFile(priv_key) utils.RemoveFile(pub_key) + # Return a reassuring string to the caller, and quit + raise errors.QuitGanetiException(False, 'Shutdown scheduled') + def GetNodeInfo(vgname): """Gives back a hash with different informations about the node. @@ -979,6 +982,7 @@ def UploadFile(file_name, data, mode, uid, gid, atime, mtime): constants.CLUSTER_CONF_FILE, constants.ETC_HOSTS, constants.SSH_KNOWN_HOSTS_FILE, + constants.VNC_PASSWORD_FILE, ] allowed_files.extend(ssconf.SimpleStore().GetFileList()) if file_name not in allowed_files: @@ -1137,6 +1141,32 @@ def OSFromDisk(name, base_dir=None): api_version=api_version) +def GrowBlockDevice(disk, amount): + """Grow a stack of block devices. + + This function is called recursively, with the childrens being the + first one resize. + + Args: + disk: the disk to be grown + + Returns: a tuple of (status, result), with: + status: the result (true/false) of the operation + result: the error message if the operation failed, otherwise not used + + """ + r_dev = _RecursiveFindBD(disk) + if r_dev is None: + return False, "Cannot find block device %s" % (disk,) + + try: + r_dev.Grow(amount) + except errors.BlockDeviceError, err: + return False, str(err) + + return True, None + + def SnapshotBlockDevice(disk): """Create a snapshot copy of a block device. @@ -1451,7 +1481,7 @@ def _TransformFileStorageDir(file_storage_dir): Args: file_storage_dir: string with path - + Returns: normalized file_storage_dir (string) if valid, None otherwise @@ -1566,6 +1596,31 @@ def RenameFileStorageDir(old_file_storage_dir, new_file_storage_dir): return result +def CloseBlockDevices(disks): + """Closes the given block devices. + + This means they will be switched to secondary mode (in case of DRBD). + + """ + bdevs = [] + for cf in disks: + rd = _RecursiveFindBD(cf) + if rd is None: + return (False, "Can't find device %s" % cf) + bdevs.append(rd) + + msg = [] + for rd in bdevs: + try: + rd.Close() + except errors.BlockDeviceError, err: + msg.append(str(err)) + if msg: + return (False, "Can't make devices secondary: %s" % ",".join(msg)) + else: + return (True, "All devices secondary") + + class HooksRunner(object): """Hook runner.