def _get_rows(self, content): """ Yields: a list per row of the following form: .. code:: python [ <name.arch>, <[epoch:]version-release>, <repo or @installed-from-repo> ] """ start = self._find_start(content) if start == len(content): raise SkipComponent() # join hanging wrapped lines together into a single line. # see https://bugzilla.redhat.com/show_bug.cgi?id=584525 cur = [] for line in content[start:]: if not cur: cur.append(line.strip()) elif line.startswith(" "): cur.append(line.strip()) else: yield " ".join(cur).split() cur = [line.strip()] if cur: yield " ".join(cur).split()
def __init__(self, rpms, sat_server): self.full = None self.version = None self.release = None self.major = None self.minor = None if sat_server: raise SkipComponent('Not a Satellite Capsule machine') # For Capsule, ONLY 6.2 and newer are supported sat62_pkg = rpms.get_max('satellite-capsule') if sat62_pkg: self.full = sat62_pkg.package self.version = sat62_pkg.version self.release = sat62_pkg.release self.major, self.minor = _parse_sat_version(self.version) else: raise SkipComponent( "Not a Satellite Capsule machine or unable to determine the version" )
def __init__(self, local, shared): super(HttpdV, self).__init__() rhel_ver = shared[redhat_release].major self.data = shared[HV].data if HV in shared else None if rhel_ver == 6: ps = shared[PsAuxww] if ps.fuzzy_match('httpd.worker'): self.data = shared[HWV].data if HWV in shared else None elif ps.fuzzy_match('httpd.event'): self.data = shared[HEV].data if HEV in shared else None if self.data is None: raise SkipComponent("Unable to get the valid `httpd -V` command")
def __init__(self, rel, ps, hv, hev, hwv): deprecated(HttpdV, "Use the `HttpdV` parser in `insights.parsers.httpd_V`.") super(HttpdV, self).__init__() rhel_ver = rel.major self.data = hv.data if hv else None if rhel_ver == 6: if ps.fuzzy_match('httpd.worker'): self.data = hwv.data if hwv else None elif ps.fuzzy_match('httpd.event'): self.data = hev.data if hev else None if self.data is None: raise SkipComponent("Unable to get the valid `httpd -V` command")
def __init__(self, rpms, sat6_ver): self.full = None self.version = None self.release = None self.major = None self.minor = None # For Satellite 6.1, if satellite_version/version.rb is available: if sat6_ver: # no 'release' in this case, but more accurate self.full = sat6_ver.full self.version = sat6_ver.version self.major = sat6_ver.major self.minor = sat6_ver.minor else: # For Satellite 6.2 and newer, check the satellite package directly sat62_pkg = rpms.get_max('satellite') if sat62_pkg: self.full = sat62_pkg.package self.version = sat62_pkg.version self.release = sat62_pkg.release self.major, self.minor = _parse_sat_version(self.version) else: # For Satellite 6.0/6.1, check the version of: # - foreman, candlepin and katello fman = rpms.get_max('foreman') cndp = rpms.get_max('candlepin') ktlo = rpms.get_max('katello') if fman and cndp and ktlo: for sat_ver, map_ver in sat6_ver_map.items(): if all( pkg.version.startswith(mv) for pkg, mv in zip( [fman, cndp, ktlo], map_ver)): # no 'release' in this situation self.major, self.minor = _parse_sat_version( sat_ver) self.full = self.version = sat_ver else: # For Satellite 5.x sat5_pkg = rpms.get_max( 'satellite-schema') or rpms.get_max( 'rhn-satellite-schema') if sat5_pkg: self.full = sat5_pkg.package self.version = sat5_pkg.version self.release = sat5_pkg.release self.major, self.minor = _parse_sat_version( self.version) if not self.full: raise SkipComponent( "Not a Satellite machine or unable to determine Satellite version" )
def __init__(self, mi_all, mi_each): self.retpoline_y = set() self.retpoline_n = set() if mi_all: self.update(mi_all) self.retpoline_y = mi_all.retpoline_y self.retpoline_n = mi_all.retpoline_n else: for m in mi_each: name = m.module_name self[name] = m self.retpoline_y.add(name) if m.get( 'retpoline') == 'Y' else None self.retpoline_n.add(name) if m.get( 'retpoline') == 'N' else None if len(self) == 0: raise SkipComponent("No Parsed Contents")
def __init__(self, grub_bles, sys_firmware): self.version = self._version = 2 self.is_efi = self._efi = '/sys/firmware/efi' in sys_firmware if sys_firmware else False self.entries = [] self.boot_entries = [] self.is_kdump_iommu_enabled = False for ble in grub_bles: self.entries.append(ble.entry) self.boot_entries.append( BootEntry({ 'name': ble.title, 'cmdline': ble.cmdline })) self.is_kdump_iommu_enabled = self.is_kdump_iommu_enabled or ble.is_kdump_iommu_enabled self.kernel_initrds = get_kernel_initrds(self.entries) if not self.entries: raise SkipComponent()
def __init__(self, rpms): self.full = None self.version = None self.release = None self.major = None self.minor = None # For Capsule, ONLY 6.2 and newer are supported sat62_pkg = rpms.get_max('satellite-capsule') # foreman package should not be there on Capsule Server if sat62_pkg and 'foreman' not in rpms: self.full = sat62_pkg.package self.version = sat62_pkg.version self.release = sat62_pkg.release self.major, self.minor = _parse_sat_version(self.version) else: raise SkipComponent( "Not a Satellite Capsule machine or unable to determine the version" )
def __init__(self, hostname, insts, lssap): hn = hostname.hostname fqdn = hostname.fqdn data = {} self.local_instances = [] self.business_instances = [] self.function_instances = [] self.all_instances = [] self._types = set() if insts: self._types = insts.types self.all_instances = insts.instances for inst in insts.data: k = inst['InstanceName'] if (hn == inst['Hostname'].split('.')[0] or fqdn == inst['FullQualifiedHostname'] or fqdn == inst['Hostname']): self.local_instances.append(k) data[k] = SAPInstances(k, inst['Hostname'], inst['SID'], inst['InstanceType'], inst['SystemNumber'], inst['FullQualifiedHostname'], inst['SapVersionInfo']) elif lssap: for inst in lssap.data: k = inst['Instance'] t = k.rstrip('1234567890') self.all_instances.append(k) self._types.add(t) self.local_instances.append( k) if hn == inst['SAPLOCALHOST'].split('.')[0] else None data[k] = SAPInstances(k, inst['SAPLOCALHOST'], inst['SID'], t, inst['Nr'], None, inst['Version']) if not data: raise SkipComponent('No SAP instance.') self.update(data) for i in self.all_instances: (self.function_instances if i.startswith(FUNC_TYPES) else self.business_instances).append(i)
def __init__(self, grub_bles, grubenv, sys_firmware): self.version = self._version = 2 self.is_efi = self._efi = '/sys/firmware/efi' in sys_firmware if sys_firmware else False self.entries = [] self.boot_entries = [] self.is_kdump_iommu_enabled = False for ble in grub_bles: # Make a copy of the ble entry, so that no write # backs occur below when expanding variables. self.entries.append(ble.entry.copy()) self.boot_entries.append(BootEntry({'name': ble.title, 'cmdline': ble.cmdline, 'version': ble.entry.get('version')})) self.is_kdump_iommu_enabled = self.is_kdump_iommu_enabled or ble.is_kdump_iommu_enabled # If grub_bles and grubenv expand the $kernelopts, # $tuned_params, and $tuned_initrd variables. if grub_bles and grubenv: for entry in self.entries: entry_options = entry.get('options', "") if "$kernelopts" in entry_options or "$tuned_params" in entry_options: entry['options'] = re.sub("\\$kernelopts", grubenv.kernelopts, entry['options']).strip() entry['options'] = re.sub("\\$tuned_params", grubenv.tuned_params, entry['options']).strip() if "$tuned_initrd" in entry.get('initrd', "") and grubenv.get('tuned_initrd'): entry['initrd'] = re.sub("\\$tuned_initrd", grubenv.get('tuned_initrd', ""), entry['initrd']).strip() for entry in self.boot_entries: entry_options = entry.get('cmdline', "") if "$kernelopts" in entry_options or "$tuned_params" in entry_options: entry['cmdline'] = re.sub("\\$kernelopts", grubenv.kernelopts, entry['cmdline']).strip() entry['cmdline'] = re.sub("\\$tuned_params", grubenv.tuned_params, entry['cmdline']).strip() self.kernel_initrds = get_kernel_initrds(self.entries) if not self.entries: raise SkipComponent()
def uptime(ut): """ .. warning:: This combiner method is deprecated, please use :py:class:`insights.parsers.uptime.Uptime` instead. Check uptime to get the uptime information. Returns: insights.combiners.uptime.Uptime: A named tuple with `currtime`, `updays`, `uphhmm`, `users`, `loadavg` and `uptime` components. Raises: SkipComponent: If no data is available or if ``loadavg`` is not available. """ deprecated(uptime, "Use the `Uptime` parser instead.") if ut.loadavg: return Uptime(ut.currtime, ut.updays, ut.uphhmm, ut.users, ut.loadavg, ut.uptime) raise SkipComponent("Unable to get uptime information.")
def yum_updates(_broker): """ This datasource provides a list of available updates on the system. It uses the yum python library installed locally, and collects list of available package updates, along with advisory info where applicable. Sample data returned:: { "releasever": "8", "basearch": "x86_64", "update_list": { "NetworkManager-1:1.22.8-4.el8.x86_64": { "available_updates": [ { "package": "NetworkManager-1:1.22.8-5.el8_2.x86_64", "repository": "rhel-8-for-x86_64-baseos-rpms", "basearch": "x86_64", "releasever": "8", "erratum": "RHSA-2020:3011" } ] } }, "metadata_time": "2021-01-01T09:39:45Z" } Returns: list: List of available updates Raises: SkipComponent: Raised on systems different than RHEL 7 """ if not _broker.get(IsRhel7): raise SkipComponent("Yum updates currently only works on RHEL 7") with UpdatesManager() as umgr: umgr.load() response = { "releasever": umgr.releasever, "basearch": umgr.basearch, "update_list": {}, } data = {'package_list': umgr.installed_packages()} updates = {} for pkg in data["package_list"]: (nevra, updates_list) = umgr.updates(pkg) updates[nevra] = updates_list for (nevra, update_list) in updates.items(): if update_list: out_list = [] for pkg in umgr.sorted_pkgs(update_list): pkg_dict = { "package": umgr.pkg_nevra(pkg), "repository": umgr.pkg_repo(pkg), "basearch": response["basearch"], "releasever": response["releasever"], } erratum = umgr.advisory(pkg) if erratum: pkg_dict["erratum"] = erratum out_list.append(pkg_dict) response["update_list"][nevra] = {"available_updates": out_list} ts = umgr.last_update() if ts: response["metadata_time"] = time.strftime("%FT%TZ", time.gmtime(ts)) return DatasourceProvider(content=json.dumps(response), relative_path='insights_commands/yum_updates_list')