def system_profile(machine_id, installed_rpms, yum_repos_d, dnf_modules): profile = {} if machine_id: profile["id"] = machine_id.content[0].strip() profile["installed_packages"] = [] if installed_rpms: for pkg_name in installed_rpms.packages: pkg = installed_rpms.get_max(pkg_name) profile["installed_packages"].append(pkg.nevra) profile["yum_repos"] = [] if yum_repos_d: for repo_file in yum_repos_d: if repo_file.file_name == 'redhat.repo': for repo in repo_file: if repo_file[repo].get('enabled', '1').lower() in ('1', 'true', 'enabled', 'yes', 'on'): profile["yum_repos"].append(repo) break profile["dnf_modules"] = [] if dnf_modules: for module in dnf_modules: for module_name in module.sections(): profile["dnf_modules"].append({ 'name': module_name, 'stream': module.get(module_name, 'stream') }) metadata_response = make_metadata() metadata_response.update(profile) return metadata_response
def canonical_facts(insights_id, machine_id, bios_uuid, submanid, ips, fqdn, mac_addresses): return make_metadata( insights_id=_safe_parse(insights_id), machine_id=_safe_parse(machine_id), bios_uuid=_safe_parse(bios_uuid), subscription_manager_id=submanid.data if submanid else None, ip_addresses=ips.data if ips else [], mac_addresses=list( filter(None, (_safe_parse(c) for c in mac_addresses))) if mac_addresses else [], fqdn=_safe_parse(fqdn), )
def canonical_facts( insights_id, machine_id, bios_uuid, submanid, ips, fqdn, mac_addresses ): facts = dict( insights_id=valid_uuid_or_None(_safe_parse(insights_id)), machine_id=valid_uuid_or_None(_safe_parse(machine_id)), bios_uuid=valid_uuid_or_None(_safe_parse(bios_uuid)), subscription_manager_id=valid_uuid_or_None(submanid.data if submanid else None), ip_addresses=ips.data if ips else [], mac_addresses=valid_mac_addresses(mac_addresses) if mac_addresses else [], fqdn=_safe_parse(fqdn), ) return make_metadata(**_filter_falsy(facts))
def performance_profile(pmlog_summary, lscpu, aws_instance_id, azure_instance_type): profile = {} performance_metrics = [ 'mem.physmem', 'mem.util.used', 'kernel.all.cpu.user', 'kernel.all.cpu.sys', 'kernel.all.cpu.nice', 'kernel.all.cpu.steal', 'kernel.all.cpu.idle', 'kernel.all.cpu.wait.total', 'disk.all.total', 'mem.util.cached', 'mem.util.bufmem', 'mem.util.free' ] profile["total_cpus"] = int(lscpu.info.get('CPUs')) if aws_instance_id: profile["instance_type"] = aws_instance_id.get('instanceType') elif azure_instance_type: profile["instance_type"] = azure_instance_type.raw else: profile["instance_type"] = None for i in performance_metrics: profile[i] = _.get(pmlog_summary, f'{i}.val') metadata_response = make_metadata() metadata_response.update(profile) return metadata_response
def performance_profile(lscpu, aws_instance_id, azure_instance_type, pmlog_summary): profile = {} if pmlog_summary is not None: performance_metrics = [ 'hinv.ncpu', 'mem.physmem', 'mem.util.available', 'disk.dev.total', 'kernel.all.cpu.idle', 'kernel.all.pressure.cpu.some.avg', 'kernel.all.pressure.io.full.avg', 'kernel.all.pressure.io.some.avg', 'kernel.all.pressure.memory.full.avg', 'kernel.all.pressure.memory.some.avg', ] for i in performance_metrics: if i in [ 'hinv.ncpu', 'mem.physmem', 'mem.util.available', 'kernel.all.cpu.idle' ]: profile[i] = _.get(pmlog_summary, f'{i}.val') else: profile[i] = _.get(pmlog_summary, i) profile["total_cpus"] = int(lscpu.info.get('CPUs')) if aws_instance_id: profile["instance_type"] = aws_instance_id.get('instanceType') profile["region"] = aws_instance_id.get('region') elif azure_instance_type: profile["instance_type"] = azure_instance_type.raw else: profile["instance_type"] = None profile["region"] = None metadata_response = make_metadata() metadata_response.update(profile) return metadata_response
def system_profile(hostname, cpu_info, virt_what, meminfo, ip_addr, dmidecode, redhat_release, uname, lsmod, installed_rpms, unit_files, ps_auxcww, date_utc, uptime, yum_repos_d, ls_etc, cloud_provider, display_name, version_info): """ This method applies parsers to a host and returns a system profile that can be sent to inventory service. Note that we strip all keys with the value of "None". Inventory service ignores any key with None as the value. """ profile = {} if uname: profile['arch'] = uname.arch if dmidecode: try: profile['bios_release_date'] = dmidecode.bios.get('release_date') profile['bios_vendor'] = dmidecode.bios.get('vendor') profile['bios_version'] = dmidecode.bios.get('version') except AttributeError: pass if cpu_info: profile['cpu_flags'] = cpu_info.flags profile['number_of_cpus'] = cpu_info.cpu_count profile['number_of_sockets'] = cpu_info.socket_count if cpu_info.core_total and cpu_info.socket_count: profile[ 'cores_per_socket'] = cpu_info.core_total // cpu_info.socket_count if unit_files: profile['enabled_services'] = _enabled_services(unit_files) profile['installed_services'] = _installed_services(unit_files) if virt_what: profile['infrastructure_type'] = _get_virt_phys_fact(virt_what) profile['infrastructure_vendor'] = virt_what.generic if installed_rpms: profile['installed_packages'] = sorted( [str(p[0]) for p in installed_rpms.packages.values()]) if lsmod: profile['kernel_modules'] = list(lsmod.data.keys()) if uptime and date_utc: boot_time = date_utc.datetime - uptime.uptime profile['last_boot_time'] = boot_time.isoformat() if ip_addr: network_interfaces = [] for iface in ip_addr: interface = { 'ipv4_addresses': iface.addrs(version=4), 'ipv6_addresses': iface.addrs(version=6), 'mac_address': _safe_fetch_interface_field(iface, 'mac'), 'mtu': _safe_fetch_interface_field(iface, 'mtu'), 'name': _safe_fetch_interface_field(iface, 'name'), 'state': _safe_fetch_interface_field(iface, 'state'), 'type': _safe_fetch_interface_field(iface, 'type') } network_interfaces.append(_remove_empties(interface)) profile['network_interfaces'] = network_interfaces if uname: profile['os_kernel_version'] = uname.version profile['os_kernel_release'] = uname.release if redhat_release: try: profile['os_release'] = redhat_release.rhel except AttributeError: pass if ps_auxcww: profile['running_processes'] = list(ps_auxcww.running) if meminfo: profile['system_memory_bytes'] = meminfo.total if yum_repos_d: repos = [] for yum_repo_file in yum_repos_d: for yum_repo_definition in yum_repo_file: baseurl = yum_repo_file[yum_repo_definition].get('baseurl', []) repo = { 'name': yum_repo_file[yum_repo_definition].get('name'), 'base_url': baseurl[0] if len(baseurl) > 0 else None, 'enabled': _to_bool( yum_repo_file[yum_repo_definition].get('enabled')), 'gpgcheck': _to_bool( yum_repo_file[yum_repo_definition].get('gpgcheck')) } repos.append(_remove_empties(repo)) profile['yum_repos'] = repos if ls_etc: profile['satellite_managed'] = any( ls_etc.dir_contains(*satellite_file) for satellite_file in SATELLITE_MANAGED_FILES.values() if satellite_file[0] in ls_etc) if cloud_provider: profile['cloud_provider'] = cloud_provider.cloud_provider if display_name: profile['display_name'] = display_name.content[0] if version_info: version_info_json = json.loads(version_info.content[0]) profile['insights_client_version'] = version_info_json[ 'client_version'] profile['insights_egg_version'] = version_info_json['core_version'] metadata_response = make_metadata() profile_sans_none = _remove_empties(profile) metadata_response.update(profile_sans_none) return metadata_response
def system_profile(hostname, cpu_info, virt_what, meminfo, ip_addr, dmidecode, redhat_release, uname, lsmod, installed_rpms, unit_files, ps_auxcww, date_utc, uptime, yum_repos_d, dnf_modules, cloud_provider, display_name, version_info, product_ids, branch_info, tags): """ This method applies parsers to a host and returns a system profile that can be sent to inventory service. Note that we strip all keys with the value of "None". Inventory service ignores any key with None as the value. """ profile = {"tags": []} if uname: profile['arch'] = uname.arch if dmidecode: try: profile['bios_release_date'] = dmidecode.bios.get('release_date') profile['bios_vendor'] = dmidecode.bios.get('vendor') profile['bios_version'] = dmidecode.bios.get('version') except AttributeError: pass if cpu_info: profile['cpu_flags'] = cpu_info.flags profile['number_of_cpus'] = cpu_info.cpu_count profile['number_of_sockets'] = cpu_info.socket_count if cpu_info.core_total and cpu_info.socket_count: profile[ 'cores_per_socket'] = cpu_info.core_total // cpu_info.socket_count if unit_files: profile['enabled_services'] = _enabled_services(unit_files) profile['installed_services'] = _installed_services(unit_files) if virt_what: profile['infrastructure_type'] = _get_virt_phys_fact(virt_what) profile['infrastructure_vendor'] = virt_what.generic if installed_rpms: profile['installed_packages'] = sorted( [installed_rpms.get_max(p).nevra for p in installed_rpms.packages]) if lsmod: profile['kernel_modules'] = list(lsmod.data.keys()) if date_utc: # re-inject UTC timezone into date_utc in order to obtain isoformat w/ TZ offset utc_tz = datetime.timezone(datetime.timedelta(hours=0), name="UTC") utcdate = date_utc.datetime.replace(tzinfo=utc_tz) profile['captured_date'] = utcdate.isoformat() if uptime and date_utc: boot_time = date_utc.datetime - uptime.uptime profile['last_boot_time'] = boot_time.isoformat() if ip_addr: network_interfaces = [] for iface in ip_addr: interface = { 'ipv4_addresses': iface.addrs(version=4), 'ipv6_addresses': iface.addrs(version=6), 'mac_address': _safe_fetch_interface_field(iface, 'mac'), 'mtu': _safe_fetch_interface_field(iface, 'mtu'), 'name': _safe_fetch_interface_field(iface, 'name'), 'state': _safe_fetch_interface_field(iface, 'state'), 'type': _safe_fetch_interface_field(iface, 'type') } network_interfaces.append(_remove_empties(interface)) profile['network_interfaces'] = network_interfaces if uname: profile['os_kernel_version'] = uname.version profile['os_kernel_release'] = uname.release if redhat_release: try: profile['os_release'] = redhat_release.rhel except AttributeError: pass if ps_auxcww: profile['running_processes'] = list(ps_auxcww.running) if meminfo: profile['system_memory_bytes'] = meminfo.total if yum_repos_d: repos = [] for yum_repo_file in yum_repos_d: for yum_repo_definition in yum_repo_file: baseurl = yum_repo_file[yum_repo_definition].get('baseurl', []) repo = { 'id': yum_repo_definition, 'name': yum_repo_file[yum_repo_definition].get('name'), 'base_url': baseurl[0] if len(baseurl) > 0 else None, 'enabled': _to_bool( yum_repo_file[yum_repo_definition].get('enabled')), 'gpgcheck': _to_bool( yum_repo_file[yum_repo_definition].get('gpgcheck')) } repos.append(_remove_empties(repo)) profile['yum_repos'] = repos if dnf_modules: modules = [] for module in dnf_modules: for module_name in module.sections(): modules.append({ 'name': module_name, 'stream': module.get(module_name, 'stream') }) profile['dnf_modules'] = modules if cloud_provider: profile['cloud_provider'] = cloud_provider.cloud_provider if display_name: profile['display_name'] = display_name.content[0] if version_info: version_info_json = json.loads(version_info.content[0]) profile['insights_client_version'] = version_info_json[ 'client_version'] profile['insights_egg_version'] = version_info_json['core_version'] if branch_info: branch_info_json = json.loads(branch_info.content.decode("utf-8")) if branch_info_json["remote_branch"] != -1: profile["satellite_managed"] = True profile["satellite_id"] = branch_info_json["remote_leaf"] else: profile["satellite_managed"] = False if branch_info_json.get("labels"): profile["tags"] = profile["tags"] + branch_info_json["labels"] if product_ids: profile['installed_products'] = [{ 'id': product_id } for product_id in product_ids.ids] if tags: tags_json = json.loads(tags.content.decode("utf-8")) for item in tags_json: item["namespace"] = "insights-client" profile["tags"] = profile["tags"] + tags_json metadata_response = make_metadata() profile_sans_none = _remove_empties(profile) metadata_response.update(profile_sans_none) return metadata_response
def system_profile( hostname, cpu_info, virt_what, meminfo, ip_addr, dmidecode, redhat_release, uname, lsmod, lscpu, sap, sestatus, tuned, installed_rpms, unit_files, ps_auxcww, date_utc, uptime, yum_repos_d, dnf_modules, cloud_provider, display_name, version_info, product_ids, branch_info, tags, ): """ This method applies parsers to a host and returns a system profile that can be sent to inventory service. Note that we strip all keys with the value of "None". Inventory service ignores any key with None as the value. """ profile = {"tags": {}} if uname: profile["arch"] = uname.arch if dmidecode: try: profile["bios_release_date"] = dmidecode.bios.get("release_date") profile["bios_vendor"] = dmidecode.bios.get("vendor") profile["bios_version"] = dmidecode.bios.get("version") except AttributeError: pass if cpu_info: profile["cpu_flags"] = cpu_info.flags profile["number_of_cpus"] = cpu_info.cpu_count profile["number_of_sockets"] = cpu_info.socket_count if lscpu: profile["cores_per_socket"] = lscpu.info['Cores per socket'] if sap: profile["sap_system"] = True sids = {sap.sid(instance) for instance in sap.local_instances} profile["sap_sids"] = sorted(list(sids)) if sap.local_instances: inst = sap.local_instances[0] if sap[inst].number not in ["98", "99"]: profile["sap_instance_number"] = sap[inst].number if tuned: profile["tuned_profile"] = tuned.data['active'] if sestatus: profile["selinux_current_mode"] = sestatus.data['current_mode'].lower() profile["selinux_config_file"] = sestatus.data['mode_from_config_file'] if unit_files: profile["enabled_services"] = _enabled_services(unit_files) profile["installed_services"] = _installed_services(unit_files) if virt_what: profile["infrastructure_type"] = _get_virt_phys_fact(virt_what) profile["infrastructure_vendor"] = virt_what.generic if installed_rpms: profile["installed_packages"] = sorted( [installed_rpms.get_max(p).nevra for p in installed_rpms.packages]) if lsmod: profile["kernel_modules"] = list(lsmod.data.keys()) if date_utc: # re-inject UTC timezone into date_utc in order to obtain isoformat w/ TZ offset utc_tz = datetime.timezone(datetime.timedelta(hours=0), name="UTC") utcdate = date_utc.datetime.replace(tzinfo=utc_tz) profile["captured_date"] = utcdate.isoformat() if uptime and date_utc: boot_time = date_utc.datetime - uptime.uptime profile["last_boot_time"] = boot_time.isoformat() if ip_addr: network_interfaces = [] for iface in ip_addr: interface = { "ipv4_addresses": iface.addrs(version=4), "ipv6_addresses": iface.addrs(version=6), "mac_address": _safe_fetch_interface_field(iface, "mac"), "mtu": _safe_fetch_interface_field(iface, "mtu"), "name": _safe_fetch_interface_field(iface, "name"), "state": _safe_fetch_interface_field(iface, "state"), "type": _safe_fetch_interface_field(iface, "type"), } network_interfaces.append(_remove_empties(interface)) profile["network_interfaces"] = network_interfaces if uname: profile["os_kernel_version"] = uname.version profile["os_kernel_release"] = uname.release if redhat_release: try: profile["os_release"] = redhat_release.rhel except AttributeError: pass if ps_auxcww: profile["running_processes"] = list(ps_auxcww.running) if meminfo: profile["system_memory_bytes"] = meminfo.total if yum_repos_d: repos = [] for yum_repo_file in yum_repos_d: for yum_repo_definition in yum_repo_file: baseurl = yum_repo_file[yum_repo_definition].get("baseurl", []) repo = { "id": yum_repo_definition, "name": yum_repo_file[yum_repo_definition].get("name"), "base_url": baseurl[0] if len(baseurl) > 0 else None, "enabled": _to_bool( yum_repo_file[yum_repo_definition].get("enabled")), "gpgcheck": _to_bool( yum_repo_file[yum_repo_definition].get("gpgcheck")), } repos.append(_remove_empties(repo)) profile["yum_repos"] = repos if dnf_modules: modules = [] for module in dnf_modules: for module_name in module.sections(): modules.append({ "name": module_name, "stream": module.get(module_name, "stream") }) profile["dnf_modules"] = modules if cloud_provider: profile["cloud_provider"] = cloud_provider.cloud_provider if display_name: profile["display_name"] = display_name.content[0] if version_info: version_info_json = json.loads(version_info.content[0]) profile["insights_client_version"] = version_info_json[ "client_version"] profile["insights_egg_version"] = version_info_json["core_version"] if branch_info: branch_info_json = json.loads(branch_info.content.decode("utf-8")) if branch_info_json["remote_branch"] != -1: profile["satellite_managed"] = True profile["satellite_id"] = branch_info_json["remote_leaf"] else: profile["satellite_managed"] = False if branch_info_json.get("labels"): if type(branch_info_json["labels"]) == list: new_tags = format_tags(branch_info_json["labels"]) profile["tags"].update(new_tags) else: profile["tags"].update(branch_info_json["labels"]) if product_ids: profile["installed_products"] = [{ "id": product_id } for product_id in product_ids.ids] if tags: tags_json = json.loads(tags.content.decode("utf-8")) if type(tags_json) == list: new_tags = format_tags(tags_json) profile["tags"].update(new_tags) else: # Need to turn the values into a list for entry in tags_json.keys(): for k, v in tags_json[entry].items(): if type(tags_json[entry][k]) != list: tags_json[entry][k] = [] tags_json[entry][k].append(v) profile["tags"].update(tags_json) metadata_response = make_metadata() profile_sans_none = _remove_empties(profile) metadata_response.update(profile_sans_none) return metadata_response
def system_profile( hostname, aws_instance_id, azure_instance_plan, cpu_info, virt_what, meminfo, ip_addr, dmidecode, redhat_release, rhsm_releasever, uname, lsmod, lscpu, sap, sestatus, tuned, gcp_license_codes, gb_status, hdb_version, installed_rpms, unit_files, pmlog_summary, ps_auxcww, date_utc, uptime, yum_repos_d, dnf_modules, cloud_provider, display_name, ansible_host, version_info, product_ids, branch_info, tags, ): """ This method applies parsers to a host and returns a system profile that can be sent to inventory service. Note that we strip all keys with the value of "None". Inventory service ignores any key with None as the value. """ profile = {"tags": {"insights-client": {}}} if uname: try: profile["arch"] = uname.arch except Exception as e: catch_error("uname", e) raise if dmidecode: try: if dmidecode.bios: profile["bios_release_date"] = dmidecode.bios.get( "release_date") profile["bios_vendor"] = dmidecode.bios.get("vendor") profile["bios_version"] = dmidecode.bios.get("version") except Exception as e: catch_error("dmidecode", e) raise if aws_instance_id: if aws_instance_id.get("marketplaceProductCodes"): if len(aws_instance_id["marketplaceProductCodes"]) >= 1: profile["is_marketplace"] = True if azure_instance_plan: if any([ azure_instance_plan.name, azure_instance_plan.product, azure_instance_plan.publisher, ]): profile["is_marketplace"] = True if gcp_license_codes: for i in gcp_license_codes.ids: if i in GCP_CONFIRMED_CODES: profile["is_marketplace"] = True if gb_status: # use presence of greenboot as proxy for whether the system should be # considered "edge" this should change to use rpm-ostree status once we # have it in place. profile["host_type"] = "edge" # Set the greenboot status profile["greenboot_status"] = ("red" if gb_status.red else "green" if gb_status.green else "Unknown") profile["greenboot_status"] = ("red" if gb_status.red else "green" if gb_status.green else "Unknown") profile[ "greenboot_fallback_detected"] = True if gb_status.fallback else False if cpu_info: try: profile["cpu_flags"] = cpu_info.flags profile["cpu_model"] = cpu_info.model_name profile["number_of_cpus"] = cpu_info.cpu_count profile["number_of_sockets"] = cpu_info.socket_count except Exception as e: catch_error("cpuinfo", e) raise if lscpu: try: profile["cores_per_socket"] = int( lscpu.info.get("Cores per socket")) except Exception as e: catch_error("lscpu", e) raise if sap: try: profile["sap_system"] = True sids = {sap.sid(instance) for instance in sap.local_instances} profile["sap_sids"] = sorted(list(sids)) if sap.local_instances: inst = sap.local_instances[0] profile["sap_instance_number"] = sap[inst].number except Exception as e: catch_error("sap", e) raise if hdb_version: try: if type(hdb_version) == list: profile["sap_version"] = hdb_version[0].version else: profile["sap_version"] = hdb_version.version except Exception as e: catch_error("hdb_version", e) raise if tuned: try: if "active" in tuned.data: profile["tuned_profile"] = tuned.data["active"] except Exception as e: catch_error("tuned", e) raise if sestatus: try: profile["selinux_current_mode"] = sestatus.data[ "current_mode"].lower() profile["selinux_config_file"] = sestatus.data[ "mode_from_config_file"] except Exception as e: catch_error("sestatus", e) raise if unit_files: try: profile["enabled_services"] = _enabled_services(unit_files) profile["installed_services"] = _installed_services(unit_files) except Exception as e: catch_error("unit_files", e) raise if virt_what: try: profile["infrastructure_type"] = _get_virt_phys_fact(virt_what) profile["infrastructure_vendor"] = virt_what.generic except Exception as e: catch_error("virt_what", e) raise if installed_rpms: try: # the sorts work on InstalledRpm instances, which will use the RPM # ordering algorithm. latest = _get_latest_packages(installed_rpms) profile["installed_packages"] = [ p.nevra for p in _sort_packages(latest) ] stale = _get_stale_packages(installed_rpms) profile["installed_packages_delta"] = [ p.nevra for p in _sort_packages(stale) ] gpg_pubkeys = _get_gpg_pubkey_packages(installed_rpms) profile["gpg_pubkeys"] = [p.package for p in sorted(gpg_pubkeys)] except Exception as e: catch_error("installed_packages", e) raise if lsmod: try: profile["kernel_modules"] = sorted(list(lsmod.data.keys())) except Exception as e: catch_error("lsmod", e) raise if date_utc: try: # re-inject UTC timezone into date_utc in order to obtain isoformat w/ TZ offset utc_tz = datetime.timezone(datetime.timedelta(hours=0), name="UTC") utcdate = date_utc.datetime.replace(tzinfo=utc_tz) profile["captured_date"] = utcdate.isoformat() except Exception as e: catch_error("date_utc", e) raise if uptime and date_utc: try: boot_time = date_utc.datetime - uptime.uptime profile["last_boot_time"] = boot_time.astimezone().isoformat() except Exception as e: catch_error("uptime", e) raise if ip_addr: try: network_interfaces = [] for iface in ip_addr: interface = { "ipv4_addresses": iface.addrs(version=4), "ipv6_addresses": iface.addrs(version=6), "mac_address": _safe_fetch_interface_field(iface, "mac"), "mtu": _safe_fetch_interface_field(iface, "mtu"), "name": _safe_fetch_interface_field(iface, "name"), "state": _safe_fetch_interface_field(iface, "state"), "type": _safe_fetch_interface_field(iface, "type"), } network_interfaces.append(_remove_empties(interface)) profile["network_interfaces"] = sorted(network_interfaces, key=lambda k: k["name"]) except Exception as e: catch_error("ip_addr", e) raise if uname: try: profile["os_kernel_version"] = uname.version profile["os_kernel_release"] = uname.release except Exception as e: catch_error("uname", e) raise if redhat_release: try: profile["os_release"] = redhat_release.rhel profile["operating_system"] = { "major": redhat_release.major, "minor": redhat_release.minor, "name": "RHEL", } except Exception as e: catch_error("redhat_release", e) raise # When inventory allows us to delete system facts, do that instead using empty string here profile["rhsm"] = {"version": ""} if rhsm_releasever: try: # We can add pre-parsed minor + major values, but the schema specifies just version # {"major": rhsm_releasever.major, "minor": rhsm_releasever.minor} if rhsm_releasever.set: profile["rhsm"] = {"version": rhsm_releasever.set} except Exception as e: catch_error("rhsm_releasever", e) raise if ps_auxcww: try: profile["running_processes"] = sorted(list(ps_auxcww.running)) except Exception as e: catch_error("ps_auxcww", e) raise if meminfo: try: profile["system_memory_bytes"] = meminfo.total except Exception as e: catch_error("meminfo", e) raise if yum_repos_d: try: repos = [] for yum_repo_file in yum_repos_d: for yum_repo_definition in yum_repo_file: baseurl = yum_repo_file[yum_repo_definition].get( "baseurl", []) repo = { "id": yum_repo_definition, "name": yum_repo_file[yum_repo_definition].get("name"), "base_url": baseurl[0] if len(baseurl) > 0 else None, "enabled": _to_bool( yum_repo_file[yum_repo_definition].get("enabled")), "gpgcheck": _to_bool(yum_repo_file[yum_repo_definition].get( "gpgcheck")), } repos.append(_remove_empties(repo)) profile["yum_repos"] = sorted(repos, key=lambda k: k["name"]) except Exception as e: catch_error("yum_repos_d", e) raise if dnf_modules: try: modules = [] for module in dnf_modules: for module_name in module.sections(): modules.append({ "name": module_name, "stream": module.get(module_name, "stream"), }) profile["dnf_modules"] = sorted(modules, key=lambda k: k["name"]) except Exception as e: catch_error("dnf_modules", e) raise if cloud_provider: try: profile["cloud_provider"] = cloud_provider.cloud_provider except Exception as e: catch_error("cloud_provider", e) raise if display_name: try: profile["display_name"] = display_name.content[0] except Exception as e: catch_error("display_name", e) raise if ansible_host: try: profile["ansible_host"] = ansible_host.content[0] except Exception as e: catch_error("ansible_host", e) raise if version_info: try: version_info_json = json.loads(version_info.content[0]) profile["insights_client_version"] = version_info_json[ "client_version"] profile["insights_egg_version"] = version_info_json["core_version"] except Exception as e: catch_error("version_info", e) raise if branch_info: try: branch_info_json = json.loads(branch_info.content.decode("utf-8")) if branch_info_json["remote_branch"] != -1: profile["satellite_managed"] = True profile["satellite_id"] = branch_info_json["remote_leaf"] else: profile["satellite_managed"] = False if branch_info_json.get("labels"): if type(branch_info_json["labels"]) == list: new_tags = format_tags(branch_info_json["labels"]) profile["tags"].update(new_tags) else: profile["tags"].update(branch_info_json["labels"]) except Exception as e: catch_error("branch_info", e) raise if product_ids: installed_products = [] try: for product_id in list(product_ids.ids): installed_products.append({"id": product_id}) profile["installed_products"] = sorted(installed_products, key=lambda k: k["id"]) except Exception as e: catch_error("product_ids", e) raise if tags: try: tags_json = json.loads(tags.content.decode("utf-8")) if type(tags_json) == list: new_tags = format_tags(tags_json) profile["tags"].update(new_tags) else: # Need to turn the values into a list for entry in tags_json.keys(): for k, v in tags_json[entry].items(): if type(tags_json[entry][k]) != list: tags_json[entry][k] = [] tags_json[entry][k].append(v) profile["tags"].update(tags_json) except Exception as e: catch_error("tags", e) raise if pmlog_summary: profile["is_ros"] = True metadata_response = make_metadata() profile_sans_none = _remove_empties(profile) metadata_response.update(profile_sans_none) return metadata_response