def load_presets(self, presets_path=None): """Load presets from disk. Read JSON formatted preset data from the specified path, or the default location at ``/var/lib/sos/presets``. :param presets_path: a directory containing JSON presets. """ presets_path = presets_path or self.presets_path if not os.path.exists(presets_path): return for preset_path in os.listdir(presets_path): preset_path = os.path.join(presets_path, preset_path) try: preset_data = json.load(open(preset_path)) except ValueError: continue for preset in preset_data.keys(): pd = PresetDefaults(preset, opts=SoSOptions()) data = preset_data[preset] pd.desc = data[DESC] if DESC in data else "" pd.note = data[NOTE] if NOTE in data else "" if OPTS in data: for arg in _arg_names: if arg in data[OPTS]: setattr(pd.opts, arg, data[OPTS][arg]) pd.builtin = False self.presets[preset] = pd
def __init__(self, name="", desc="", note=None, opts=SoSOptions()): """Initialise a new ``PresetDefaults`` object with the specified arguments. :param name: The name of the new preset :param desc: A description for the new preset :param note: Note for the new preset :param opts: Options set for the new preset :returns: The newly initialised ``PresetDefaults`` """ self.name = name self.desc = desc self.note = note self.opts = opts
def add_preset(self, name=None, desc=None, note=None, opts=SoSOptions()): """Add a new on-disk preset and write it to the configured presets path. :param preset: the new PresetDefaults to add """ presets_path = self.presets_path if not name: raise ValueError("Preset name cannot be empty") if name in self.presets.keys(): raise ValueError("A preset with name '%s' already exists" % name) preset = PresetDefaults(name=name, desc=desc, note=note, opts=opts) preset.builtin = False self.presets[preset.name] = preset preset.write(presets_path)
return ret def get_tmp_dir(self, opt_tmp_dir): if not opt_tmp_dir: return self._tmp_dir return opt_tmp_dir def get_local_name(self): return self.host_name() # Container environment variables on Red Hat systems. ENV_CONTAINER = 'container' ENV_HOST_SYSROOT = 'HOST' _opts_verify = SoSOptions(verify=True) _opts_all_logs = SoSOptions(all_logs=True) _opts_all_logs_verify = SoSOptions(all_logs=True, verify=True) _opts_all_logs_no_lsof = SoSOptions(all_logs=True, plugopts=['process.lsof=off']) _cb_plugs = [ 'abrt', 'block', 'boot', 'dnf', 'dracut', 'filesys', 'grub2', 'hardware', 'host', 'kernel', 'logs', 'lvm2', 'memory', 'rpm', 'process', 'systemd', 'yum', 'xfs' ] RHEL_RELEASE_STR = "Red Hat Enterprise Linux" RHV = "rhv" RHV_DESC = "Red Hat Virtualization"
from sos import _sos as _ from sos import SoSOptions sys.path.insert(0, "/usr/share/rhn/") try: from up2date_client import up2dateAuth from up2date_client import config from rhn import rpclib except ImportError: # might fail if non-RHEL pass rh_presets = { "": PresetDefaults(name="rhel"), "rhel7": PresetDefaults(name="rhel7"), "rhosp": PresetDefaults(name="rhosp", opts=SoSOptions(all_logs=True)), "ocp": PresetDefaults(name="ocp", opts=SoSOptions(all_logs=True, verify=True)), "rhv": PresetDefaults(name="rhv", opts=SoSOptions(verify=True)) } OS_RELEASE = "/etc/os-release" class RedHatPolicy(LinuxPolicy): distro = "Red Hat" vendor = "Red Hat" vendor_url = "http://www.redhat.com/" _redhat_release = '/etc/redhat-release' _tmp_dir = "/var/tmp" _rpmq_cmd = 'rpm -qa --queryformat "%{NAME}|%{VERSION}|%{RELEASE}\\n"'
class PresetDefaults(object): """Preset command line defaults. """ #: Preset name, used for selection name = None #: Human readable preset description desc = None #: Notes on preset behaviour note = None #: Options set for this preset opts = SoSOptions() #: ``True`` if this preset if built-in or ``False`` otherwise. builtin = True def __str__(self): """Return a human readable string representation of this ``PresetDefaults`` object. """ return ("name=%s desc=%s note=%s opts=(%s)" % (self.name, self.desc, self.note, str(self.opts))) def __repr__(self): """Return a machine readable string representation of this ``PresetDefaults`` object. """ return ("PresetDefaults(name='%s' desc='%s' note='%s' opts=(%s)" % (self.name, self.desc, self.note, repr(self.opts))) def __init__(self, name="", desc="", note=None, opts=SoSOptions()): """Initialise a new ``PresetDefaults`` object with the specified arguments. :param name: The name of the new preset :param desc: A description for the new preset :param note: Note for the new preset :param opts: Options set for the new preset :returns: The newly initialised ``PresetDefaults`` """ self.name = name self.desc = desc self.note = note self.opts = opts def write(self, presets_path): """Write this preset to disk in JSON notation. :param presets_path: the directory where the preset will be written. """ if self.builtin: raise TypeError("Cannot write built-in preset") # Make dictionaries of PresetDefaults values odict = self.opts.dict() pdict = {self.name: {DESC: self.desc, NOTE: self.note, OPTS: odict}} if not os.path.exists(presets_path): os.makedirs(presets_path, mode=0o755) with open(os.path.join(presets_path, self.name), "w") as pfile: json.dump(pdict, pfile) def delete(self, presets_path): os.unlink(os.path.join(presets_path, self.name))
os.makedirs(presets_path, mode=0o755) with open(os.path.join(presets_path, self.name), "w") as pfile: json.dump(pdict, pfile) def delete(self, presets_path): os.unlink(os.path.join(presets_path, self.name)) NO_PRESET = 'none' NO_PRESET_DESC = 'Do not load a preset' NO_PRESET_NOTE = 'Use to disable automatically loaded presets' GENERIC_PRESETS = { NO_PRESET: PresetDefaults(name=NO_PRESET, desc=NO_PRESET_DESC, note=NO_PRESET_NOTE, opts=SoSOptions()) } class Policy(object): msg = _("""\ This command will collect system configuration and diagnostic information \ from this %(distro)s system. An archive containing the collected information \ will be generated in %(tmpdir)s. For more information on %(vendor)s visit: %(vendor_url)s The generated archive may contain data considered sensitive and its content \
return ret def get_tmp_dir(self, opt_tmp_dir): if not opt_tmp_dir: return self._tmp_dir return opt_tmp_dir def get_local_name(self): return self.host_name() # Container environment variables on Red Hat systems. ENV_CONTAINER = 'container' ENV_HOST_SYSROOT = 'HOST' _opts_verify = SoSOptions(verify=True) _opts_all_logs = SoSOptions(all_logs=True) _opts_all_logs_verify = SoSOptions(all_logs=True, verify=True) _opts_all_logs_no_lsof = SoSOptions(all_logs=True, plugopts=['process.lsof=off']) RHEL_RELEASE_STR = "Red Hat Enterprise Linux" RHV = "rhv" RHV_DESC = "Red Hat Virtualization" RHEL = "rhel" RHEL_DESC = RHEL_RELEASE_STR RHOSP = "rhosp" RHOSP_DESC = "Red Hat OpenStack Platform"
json.dump(pdict, pfile) def delete(self, presets_path): os.unlink(os.path.join(presets_path, self.name)) NO_PRESET = 'none' NO_PRESET_DESC = 'Do not load a preset' NO_PRESET_NOTE = 'Use to disable automatically loaded presets' GENERIC_PRESETS = { NO_PRESET: PresetDefaults(name=NO_PRESET, desc=NO_PRESET_DESC, note=NO_PRESET_NOTE, opts=SoSOptions()) } class Policy(object): msg = _("""\ This command will collect system configuration and diagnostic information \ from this %(distro)s system. An archive containing the collected information \ will be generated in %(tmpdir)s. For more information on %(vendor)s visit: %(vendor_url)s The generated archive may contain data considered sensitive and its content \
else: if onoff == "on": ret.append(int(runlevel)) return ret def get_tmp_dir(self, opt_tmp_dir): if not opt_tmp_dir: return self._tmp_dir return opt_tmp_dir # Container environment variables on Red Hat systems. ENV_CONTAINER = 'container' ENV_HOST_SYSROOT = 'HOST' _opts_verify = SoSOptions(verify=True) _opts_all_logs = SoSOptions(all_logs=True) _opts_all_logs_verify = SoSOptions(all_logs=True, verify=True) _cb_profiles = ['boot', 'storage', 'system'] _cb_plugopts = ['boot.all-images=on', 'rpm.rpmva=on', 'rpm.rpmdb=on'] RHEL_RELEASE_STR = "Red Hat Enterprise Linux" RHV = "rhv" RHV_DESC = "Red Hat Virtualization" RHEL = "rhel" RHEL_DESC = RHEL_RELEASE_STR RHOSP = "rhosp" RHOSP_DESC = "Red Hat OpenStack Platform"
return ret def get_tmp_dir(self, opt_tmp_dir): if not opt_tmp_dir: return self._tmp_dir return opt_tmp_dir def get_local_name(self): return self.host_name() # Container environment variables on Red Hat systems. ENV_CONTAINER = 'container' ENV_HOST_SYSROOT = 'HOST' _opts_verify = SoSOptions(verify=True) _opts_all_logs = SoSOptions(all_logs=True) _opts_all_logs_verify = SoSOptions(all_logs=True, verify=True) RHEL_RELEASE_STR = "Red Hat Enterprise Linux" RHV = "rhv" RHV_DESC = "Red Hat Virtualization" RHEL = "rhel" RHEL_DESC = RHEL_RELEASE_STR RHOSP = "rhosp" RHOSP_DESC = "Red Hat OpenStack Platform" RHOCP = "ocp"