def _hookUpdateOrAdd(glusterCmd, hookLevel, hookName, hookData, hookMd5Sum, update=True, enable=False): enabledFile, disabledFile = _getHookFileNames(glusterCmd, hookLevel.lower(), hookName) hookStat = [os.path.exists(enabledFile), os.path.exists(disabledFile)] if update: if not any(hookStat): raise ge.GlusterHookNotFoundException(glusterCmd, hookLevel, hookName) else: if any(hookStat): raise ge.GlusterHookAlreadyExistException(glusterCmd, hookLevel, hookName) content = base64.b64decode(hookData) md5Sum = hashlib.md5(content).hexdigest() if hookMd5Sum != md5Sum: raise ge.GlusterHookCheckSumMismatchException(md5Sum, hookMd5Sum) if enable or hookStat[0]: safeWrite(enabledFile, content) st = os.stat(enabledFile) os.chmod(enabledFile, st.st_mode | stat.S_IEXEC) else: safeWrite(disabledFile, content)
def hookRead(glusterCmd, hookLevel, hookName): """ Returns: {'content': HOOK_CONTENT, 'mimetype': MIME_TYPE, 'md5sum': MD5SUM} """ enabledFile, disabledFile = _getHookFileNames(glusterCmd, hookLevel.lower(), hookName) if os.path.exists(enabledFile): hookFile = enabledFile elif os.path.exists(disabledFile): hookFile = disabledFile else: raise ge.GlusterHookNotFoundException(glusterCmd, hookLevel, hookName) try: with open(hookFile, 'r') as f: encodedString = base64.b64encode(f.read()) return { 'content': encodedString, 'mimetype': _getMimeType(hookFile), 'md5sum': _computeMd5Sum(hookFile) } except IOError as e: errMsg = "[Errno %s] %s: '%s'" % (e.errno, e.strerror, e.filename) raise ge.GlusterHookReadException(err=[errMsg])
def hookDisable(glusterCmd, hookLevel, hookName): enabledFile, disabledFile = _getHookFileNames(glusterCmd, hookLevel.lower(), hookName) try: os.rename(enabledFile, disabledFile) except OSError as e: if errno.ENOENT == e.errno: if os.path.exists(disabledFile): log.warn("Disabled hook file:%s already exists" % disabledFile) else: raise ge.GlusterHookNotFoundException(glusterCmd, hookLevel, hookName) else: errMsg = "[Errno %s] %s: '%s'" % (e.errno, e.strerror, e.filename) raise ge.GlusterHookDisableFailedException(err=[errMsg])
def hookEnable(glusterCmd, hookLevel, hookName): enabledFile, disabledFile = _getHookFileNames(glusterCmd, hookLevel.lower(), hookName) if os.path.exists(enabledFile): log.warn("Enabled hook file:%s already exists" % enabledFile) return try: os.rename(disabledFile, enabledFile) st = os.stat(enabledFile) os.chmod(enabledFile, st.st_mode | stat.S_IEXEC) except OSError as e: if errno.ENOENT == e.errno: raise ge.GlusterHookNotFoundException(glusterCmd, hookLevel, hookName) else: errMsg = "[Errno %s] %s: '%s'" % (e.errno, e.strerror, e.filename) raise ge.GlusterHookEnableFailedException(err=[errMsg])