| Server IP : 165.22.154.248 / Your IP : 216.73.217.54 [ Web Server : Apache/2.4.29 (Ubuntu) System : Linux droplet-integra 4.15.0-197-generic #208-Ubuntu SMP Tue Nov 1 17:23:37 UTC 2022 x86_64 User : www-data ( 33) PHP Version : 7.2.24-0ubuntu0.18.04.15 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals, Domains : 1 Domains MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /usr/lib/python3/dist-packages/sos/collector/clusters/ |
Upload File : |
# Copyright Red Hat 2020, Jake Hunsaker <jhunsake@redhat.com>
# 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.collector.clusters import Cluster
class pacemaker(Cluster):
cluster_name = 'Pacemaker High Availability Cluster Manager'
sos_plugins = ['pacemaker']
packages = ('pacemaker',)
option_list = [
('online', True, 'Collect nodes listed as online'),
('offline', True, 'Collect nodes listed as offline')
]
def get_nodes(self):
self.res = self.exec_primary_cmd('pcs status')
if self.res['status'] != 0:
self.log_error('Cluster status could not be determined. Is the '
'cluster running on this node?')
return []
if 'node names do not match' in self.res['output']:
self.log_warn('Warning: node name mismatch reported. Attempts to '
'connect to some nodes may fail.\n')
return self.parse_pcs_output()
def parse_pcs_output(self):
nodes = []
if self.get_option('online'):
nodes += self.get_online_nodes()
if self.get_option('offline'):
nodes += self.get_offline_nodes()
return nodes
def get_online_nodes(self):
for line in self.res['output'].splitlines():
if line.startswith('Online:'):
nodes = line.split('[')[1].split(']')[0]
return [n for n in nodes.split(' ') if n]
def get_offline_nodes(self):
offline = []
for line in self.res['output'].splitlines():
if line.startswith('Node') and line.endswith('(offline)'):
offline.append(line.split()[1].replace(':', ''))
if line.startswith('OFFLINE:'):
nodes = line.split('[')[1].split(']')[0]
offline.extend([n for n in nodes.split(' ') if n])
return offline
# vim: set et ts=4 sw=4 :