Server IP : 127.0.0.2 / Your IP : 3.148.217.66 Web Server : Apache/2.4.18 (Ubuntu) System : User : www-data ( ) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : disk_free_space,disk_total_space,diskfreespace,dl,exec,fpaththru,getmyuid,getmypid,highlight_file,ignore_user_abord,leak,listen,link,opcache_get_configuration,opcache_get_status,passthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,php_uname,phpinfo,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix,_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_times,posix_ttyname,posix_uname,pclose,popen,proc_open,proc_close,proc_get_status,proc_nice,proc_terminate,shell_exec,source,show_source,system,virtual MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/share/sosreport/sos/plugins/ |
Upload File : |
# This file is part of the sos project: https://github.com/sosreport/sos # # This copyrighted material is made available to anyone wishing to use, # modify, copy, or redistribute it subject to the terms and conditions of # version 2 of the GNU General Public License. # # See the LICENSE file in the source distribution for further information. from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin from datetime import datetime, timedelta import re import os.path class Pacemaker(Plugin): """Pacemaker high-availability cluster resource manager """ plugin_name = "pacemaker" version = "1.0" profiles = ("cluster", ) packages = ( "pacemaker", "pacemaker-remote", ) option_list = [ ("crm_from", "specify the start time for crm_report", "fast", ''), ("crm_scrub", "enable password scrubbing for crm_report", "", True), ] envfile = "" def setup_crm_mon(self): self.add_cmd_output("crm_mon -1 -A -n -r -t") def setup_crm_shell(self): self.add_cmd_output([ "crm status", "crm configure show", ]) def setup_pcs(self): self.add_copy_spec("/var/log/pcsd/pcsd.log") self.add_cmd_output([ "pcs config", "pcs status --full", "pcs stonith sbd status --full", "pcs stonith sbd watchdog list", "pcs stonith history show", "pcs quorum status", "pcs property list --all" ]) def postproc_crm_shell(self): self.do_cmd_output_sub( "crm configure show", r"passw(\S*)=\S+", r"passw\1=********" ) def postproc_pcs(self): self.do_cmd_output_sub( "pcs config", r"passw(\S*)=\S+", r"passw\1=********" ) def setup(self): self.add_copy_spec([ # Pacemaker 2.x default log locations "/var/log/pacemaker/pacemaker.log", "/var/log/pacemaker/bundles/*/", # Pacemaker 1.x default log locations "/var/log/pacemaker.log", "/var/log/pacemaker/bundles/*/", # Common user-specified locations "/var/log/cluster/pacemaker.log", "/var/log/cluster/bundles/*/", ]) self.setup_crm_mon() # crm_report needs to be given a --from "YYYY-MM-DD HH:MM:SS" start # time in order to collect data. crm_from = (datetime.today() - timedelta(hours=72)).strftime("%Y-%m-%d %H:%m:%S") if self.get_option("crm_from"): if re.match(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}', str(self.get_option("crm_from"))): crm_from = self.get_option("crm_from") else: self._log_error( "crm_from parameter '%s' is not a valid date: using " "default" % self.get_option("crm_from")) crm_dest = self.get_cmd_output_path(name="crm_report", make=False) if self.get_option("crm_scrub"): crm_scrub = '-p "passw.*"' else: crm_scrub = "" self._log_warn("scrubbing of crm passwords has been disabled:") self._log_warn("data collected by crm_report may contain" " sensitive values.") self.add_cmd_output('crm_report --sos-mode %s -S -d ' ' --dest %s --from "%s"' % (crm_scrub, crm_dest, crm_from), chroot=self.tmp_in_sysroot()) # collect user-defined logfiles, matching a shell-style syntax: # PCMK_logfile=filename # specified in the pacemaker start-up environment file. pattern = r'^\s*PCMK_logfile=[\'\"]?(\S+)[\'\"]?\s*(\s#.*)?$' if os.path.isfile(self.envfile): self.add_copy_spec(self.envfile) with open(self.envfile) as f: for line in f: if re.match(pattern, line): # remove trailing and leading quote marks, in case the # line is e.g. PCMK_logfile="/var/log/pacemaker.log" logfile = re.search(pattern, line).group(1) for regexp in [r'^"', r'"$', r'^\'', r'\'$']: logfile = re.sub(regexp, '', logfile) self.add_copy_spec(logfile) class DebianPacemaker(Pacemaker, DebianPlugin, UbuntuPlugin): def setup(self): self.envfile = "/etc/default/pacemaker" self.setup_crm_shell() self.setup_pcs() super(DebianPacemaker, self).setup() def postproc(self): self.postproc_crm_shell() self.postproc_pcs() class RedHatPacemaker(Pacemaker, RedHatPlugin): def setup(self): self.envfile = "/etc/sysconfig/pacemaker" self.setup_pcs() self.add_copy_spec("/etc/sysconfig/sbd") super(RedHatPacemaker, self).setup() def postproc(self): self.postproc_pcs() # vim: et ts=4 sw=4