404

[ Avaa Bypassed ]




Upload:

Command:

elspacio@3.133.160.239: ~ $
# 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 fnmatch import translate
import os
import re
from sos.report.plugins import Plugin, RedHatPlugin, PluginOpt


class Openshift(Plugin, RedHatPlugin):
    """This is the plugin for OCP 4.x collections. While this product is still
    built ontop of kubernetes, there is enough difference in the collection
    requirements and approach to warrant a separate plugin as opposed to
    further extending the kubernetes plugin (or the OCP 3.x extensions included
    in the Red Hat version of the kube plugin).

    This plugin may collect OCP API information when the `with-api` option is
    enabled. This option is disabled by default.

    When enabled, this plugin will collect cluster information and inspect the
    default namespaces/projects that are created during deployment - i.e. the
    namespaces of the cluster projects matching openshift.* and kube.*. At the
    time of this plugin's creation that number of default projects is already
    north of 50; hence this plugin is expected to take a long time in both the
    setup() and collect() phases. End-user projects may also be collected from
    when those projects are included in the `add-namespaces` or
    `only-namespaces` options.

    It is expected to need to perform an `oc login` command in order for this
    plugin to be able to correctly capture information, as system root is not
    considered cluster root on the cluster nodes in order to access the API.

    Users will need to either:

        1) Accept the use of a well-known stock kubeconfig file provided via a
           static pod resource for the kube-apiserver
        2) Provide the bearer token via the `-k openshift.token` option
        3) Provide the bearer token via the `SOSOCPTOKEN` environment variable
        4) Otherwise ensure that the root user can successfully run `oc` and
           get proper output prior to running this plugin


    It is highly suggested that option #1 be used first, as this uses well
    known configurations and requires the least information from the user. If
    using a token, it is recommended to use option #3 as this will prevent
    the token from being recorded in output saved to the archive. Option #2 may
    be used if this is considered an acceptable risk. It is not recommended to
    rely on option #4, though it will provide the functionality needed.
    """

    short_desc = 'Openshift Container Platform 4.x'

    plugin_name = "openshift"
    plugin_timeout = 900
    profiles = ('openshift',)
    packages = ('openshift-hyperkube',)

    master_localhost_kubeconfig = (
        '/etc/kubernetes/static-pod-resources/'
        'kube-apiserver-certs/secrets/node-kubeconfigs/localhost.kubeconfig'
        )

    oc_cmd = "oc get "

    option_list = [
        PluginOpt('token', default=None, val_type=str,
                  desc='admin token to allow API queries'),
        PluginOpt('kubeconfig', default=None, val_type=str,
                  desc='Path to a locally available kubeconfig file'),
        PluginOpt('host', default='https://localhost:6443',
                  desc='host address to use for oc login, including port'),
        PluginOpt('with-api', default=False,
                  desc='collect output from the OCP API'),
        PluginOpt('podlogs', default=True, desc='collect logs from each pod'),
        PluginOpt('podlogs-filter', default='', val_type=str,
                  desc='only collect logs from pods matching this pattern'),
        PluginOpt('only-namespaces', default='', val_type=str,
                  desc='colon-delimited list of namespaces to collect from'),
        PluginOpt('add-namespaces', default='', val_type=str,
                  desc=('colon-delimited list of namespaces to add to the '
                        'default collection list'))
    ]

    def _check_oc_function(self):
        """Check to see if we can run `oc` commands"""
        return self.exec_cmd('oc whoami')['status'] == 0

    def _check_localhost_kubeconfig(self):
        """Check if the localhost.kubeconfig exists with system:admin user"""
        return self.path_exists(self.get_option('kubeconfig'))

    def _check_oc_logged_in(self):
        """See if we're logged in to the API service, and if not attempt to do
        so using provided plugin options
        """
        if self._check_oc_function():
            return True

        if self.get_option('kubeconfig') is None:
            # If admin doesn't add the kubeconfig
            # use default localhost.kubeconfig
            self.set_option(
                'kubeconfig',
                self.master_localhost_kubeconfig
            )

        # Check first if we can use the localhost.kubeconfig before
        # using token. We don't want to use 'host' option due we use
        # cluster url from kubeconfig. Default is localhost.
        if self._check_localhost_kubeconfig():
            self.set_default_cmd_environment({
                'KUBECONFIG': self.get_option('kubeconfig')
            })

            oc_res = self.exec_cmd(
                "oc login -u system:admin "
                "--insecure-skip-tls-verify=True"
            )
            if oc_res['status'] == 0 and self._check_oc_function():
                return True

            self._log_warn(
                "The login command failed with status: %s and error: %s"
                % (oc_res['status'], oc_res['output'])
            )
            return False

        # If kubeconfig is not defined, check if token is provided.
        token = self.get_option('token') or os.getenv('SOSOCPTOKEN', None)

        if token:
            oc_res = self.exec_cmd("oc login %s --token=%s "
                                   "--insecure-skip-tls-verify=True"
                                   % (self.get_option('host'), token))
            if oc_res['status'] == 0:
                if self._check_oc_function():
                    return True

            self._log_warn("Attempt to login to OCP API failed, will not run "
                           "or collect `oc` commands")
            return False

        self._log_warn("Not logged in to OCP API, and no login token provided."
                       " Will not collect `oc` commands")
        return False

    def _setup_namespace_regexes(self):
        """Combine a set of regexes for collection with any namespaces passed
        to sos via the -k openshift.add-namespaces option. Note that this does
        allow for end users to specify namespace regexes of their own.
        """

        if self.get_option('only-namespaces'):
            return list(self.get_option('only-namespaces').split(':'))

        collect_regexes = [
            'openshift.*',
            'kube.*'
        ]

        if self.get_option('add-namespaces'):
            for nsp in self.get_option('add-namespaces').split(':'):
                collect_regexes.append(nsp)

        return collect_regexes

    def _reduce_namespace_list(self, nsps):
        """Reduce the namespace listing returned to just the ones we want to
        collect from. By default, as requested by OCP support personnel, this
        must include all 'openshift' prefixed namespaces

            :param nsps list:            Namespace names from oc output
        """

        def _match_namespace(namespace, regexes):
            """Match a particular namespace for inclusion (or not) in the
            collection phases

                :param namespace str:   The name of a namespace
            """

            for regex in regexes:
                if re.match(regex, namespace):
                    return True
            return False

        regexes = self._setup_namespace_regexes()

        return list({n for n in nsps if _match_namespace(n, regexes)})

    def setup(self):
        """The setup() phase of this plugin will iterate through all default
        projects (namespaces), and/or those specified via the `add-namespaces`
        and `only-namespaces` plugin options. Both of these options accept
        shell-style regexes.

        Cluster-wide information, that is information that is not tied to a
        specific namespace, will be saved in the top-level plugin directory.
        Each namespace will have it's own subdir within the `namespaces` subdir
        to aide in organization. From there, each namespace subdir will have a
        subsequent subdir for each type of API resource the plugin collects.

        In contrast with the `kubernetes` plugin, this plugin will collect
        logs from all pods within each namespace, as well as the previous pod's
        logs, by default. The `-k openshift.podlogs-filter` option can be used
        to greatly reduce the amount of collected information.
        """

        # Capture the kubelet journal, but don't use it as a service which
        # would simultaneously enable this and the kubernetes plugin
        self.add_journal('kubelet')
        self.add_service_status('kubelet')
        self.add_forbidden_path([
            '/etc/kubernetes/*.crt',
            '/etc/kubernetes/*.key',
        ])
        self.add_copy_spec('/etc/kubernetes/*')

        # see if we run `oc` commands
        if self.get_option('with-api'):
            can_run_oc = self._check_oc_logged_in()
        else:
            can_run_oc = False

        if can_run_oc:
            # with an out-of-the-box install, setup time alone has been known
            # to take over 5 minutes. Print a notification message so that
            # users don't prematurely think sos has hung during setup
            self._log_warn(
                'Note that the Openshift Container Platform plugin can be '
                'expected in most configurations to take 5+ minutes in both '
                'the setup and collection phases'
            )

            oc_nsps = []

            # get 'global' or cluster-level information
            self.add_cmd_output([
                'oc cluster-info',
                'oc get -A pv',
                'oc get -A csr',
                'oc status',
                'oc version'
            ])

            # get non-namespaces api resources
            self.collect_cluster_resources()

            # get all namespaces, as data collection will be organized by that
            _nm_res = self.collect_cmd_output("%s namespaces" % self.oc_cmd)
            if _nm_res['status'] == 0:
                nsps = [
                    n.split()[0] for n in _nm_res['output'].splitlines()[1:]
                ]
                oc_nsps = self._reduce_namespace_list(nsps)

            # collect each namespace individually
            for namespace in oc_nsps:
                self.collect_from_namespace(namespace)

    def collect_cluster_resources(self):
        """Collect cluster-level (non-namespaced) resources from the API
        """
        global_resources = [
            'clusternetworks',
            'clusteroperators',
            'clusterversions',
            'componentstatuses',
            'configs',
            'containerruntimeconfigs',
            'controllerconfigs',
            'dnses',
            'hostsubnets',
            'infrastructures',
            'machineconfigpools',
            'machineconfigs',
            'netnamespaces',
            'networks',
            'nodes',
            'proxies',
            'storageclasses'
        ]

        for resource in global_resources:
            _subdir = "cluster_resources/%s" % resource
            _tag = ["ocp_%s" % resource]
            _res = self.collect_cmd_output("%s %s" % (self.oc_cmd, resource),
                                           subdir=_subdir, tags=_tag)
            if _res['status'] == 0:
                for _res_name in _res['output'].splitlines()[1:]:
                    self.add_cmd_output(
                        "oc describe %s %s" % (resource, _res_name.split()[0]),
                        subdir=_subdir
                    )

    def collect_from_namespace(self, namespace):
        """Run through the collection routines for an individual namespace.
        This collection should include all requested resources that exist
        within that namesapce

            :param namespace str:           The name of the namespace
        """

        # define the list of resources to collect
        resources = [
            'buildconfigs',
            'builds',
            'catalogsourceconfigs',
            'catalogsources',
            'clusterserviceversions',
            'configmaps',
            'daemonsets',
            'deploymentconfigs',
            'deployments',
            'events',
            'horizontalpodautoscalers',
            'imagestreams',
            'ingresscontrollers',
            'ingresses',
            'installplans',
            'limitranges',
            'machines',
            'machinesets',
            'mcoconfigs',
            'net-attach-def',
            'operatorgroups',
            'operatorsources',
            'pods',
            'pvc',
            'resourcequotas',
            'routes',
            'secrets',
            'services',
            'statefulsets',
            'subscriptions'

        ]

        # save to namespace-specific subdirs to keep the plugin dir organized
        subdir = "namespaces/%s" % namespace

        # namespace-specific non-resource collections
        self.add_cmd_output("oc describe namespace %s" % namespace,
                            subdir=subdir)

        for res in resources:
            _subdir = "%s/%s" % (subdir, res)
            _tags = [
                "ocp_%s" % res,
                "ocp_%s_%s" % (namespace, res),
                namespace
            ]
            _get_cmd = "%s --namespace=%s %s" % (self.oc_cmd, namespace, res)
            # get the 'normal' output first
            _res_out = self.collect_cmd_output(
                _get_cmd,
                subdir=_subdir,
                tags=_tags
            )

            # then get specific detail on each instance of the resource
            if _res_out['status'] == 0:
                _instances = _res_out['output'].splitlines()[1:]
                for _instance in _instances:
                    _instance_name = _instance.split()[0]
                    self.add_cmd_output(
                        "%s %s -o yaml" % (_get_cmd, _instance_name),
                        subdir=_subdir,
                        suggest_filename="%s.yaml" % _instance_name
                    )
                # check for podlogs here as a slight optimization to re-running
                # 'oc get pods' on all namespaces
                if res == 'pods' and _instances and self.get_option('podlogs'):
                    pod_list = [p.split()[0] for p in _instances]
                    self.collect_podlogs(namespace, pod_list)

    def collect_podlogs(self, namespace, pod_list):
        """For any namespace that has active pods in it, collect the current
        and previous pod's logs

            :param pod_list list:       A list of pod names
        """
        _log_dir = "namespaces/%s/pods/podlogs" % namespace

        if self.get_option('podlogs-filter'):
            # this allows shell-style regex which is more commonly known by
            # sysadmins than python-style regex
            regex = translate(self.get_option('podlogs-filter'))
        else:
            regex = None

        for pod in pod_list:
            if regex and not re.match(regex, pod):
                continue
            _log_cmd = "oc logs --namespace=%s %s" % (namespace, pod)
            self.add_cmd_output([
                _log_cmd,
                _log_cmd + " -p"
            ], subdir=_log_dir)

    def postproc(self):

        # clear any certificate output
        self.do_cmd_private_sub('oc ')
        self.do_file_private_sub('/etc/kubernetes/*')

        # clear the certificate data from /etc/kubernetes that does not have
        # the certificate banners that the _private_sub() methods look for
        _fields = [
            '.*.crt',
            'client-certificate-data',
            'client-key-data',
            'certificate-authority-data',
            '.*.key',
            'token',
            '.*token.*.value'  # don't blind match `.*token.*` and lose names
        ]

        regex = r'(\s*(%s):)(.*)' % '|'.join(_fields)

        self.do_path_regex_sub('/etc/kubernetes/*', regex, r'\1 *******')
        # scrub secret content
        self.do_cmd_output_sub('secrets', regex, r'\1 *******')

        # `oc describe` output can include url-encoded file content. For the
        # most part this is not important as the majority of these instances
        # are the contents of bash scripts. However, a select few can contain
        # actual data, so just scrub everything that matches the describe
        # format for this content
        regex = r'(?P<var>(.*\\n)?Source:\s(.*),)((.*?))\n'
        self.do_cmd_output_sub('oc describe', regex, r'\g<var> *******\n')

# vim: set et ts=4 sw=4 :

Filemanager

Name Type Size Permission Actions
__pycache__ Folder 0755
__init__.py File 132.74 KB 0644
aap_controller.py File 3.1 KB 0644
aap_eda.py File 1.88 KB 0644
aap_hub.py File 1.31 KB 0644
abrt.py File 1.51 KB 0644
acpid.py File 917 B 0644
activemq.py File 1.65 KB 0644
aide.py File 1.41 KB 0644
alternatives.py File 2.29 KB 0644
anaconda.py File 1.37 KB 0644
anacron.py File 782 B 0644
ansible.py File 1.04 KB 0644
apache.py File 5.2 KB 0644
apparmor.py File 1.05 KB 0644
apport.py File 1.37 KB 0644
apt.py File 1.85 KB 0644
arcconf.py File 2.13 KB 0644
ata.py File 1016 B 0644
auditd.py File 1.83 KB 0644
autofs.py File 2.77 KB 0644
azure.py File 2.37 KB 0644
bcache.py File 2.2 KB 0644
block.py File 2.34 KB 0644
boom.py File 1.05 KB 0644
boot.py File 1.92 KB 0644
btrfs.py File 739 B 0644
buildah.py File 1.83 KB 0644
candlepin.py File 5.84 KB 0644
canonical_livepatch.py File 958 B 0644
canonical_livepatch_onprem.py File 1.22 KB 0644
ceph_ansible.py File 956 B 0644
ceph_common.py File 3.49 KB 0644
ceph_iscsi.py File 1.55 KB 0644
ceph_mds.py File 4.07 KB 0644
ceph_mgr.py File 5.81 KB 0644
ceph_mon.py File 9.41 KB 0644
ceph_osd.py File 5.22 KB 0644
ceph_rgw.py File 2.23 KB 0644
cgroups.py File 1.36 KB 0644
chrony.py File 1.54 KB 0644
cifs.py File 962 B 0644
clear_containers.py File 2.58 KB 0644
cloud_init.py File 1.07 KB 0644
cman.py File 1.78 KB 0644
cobbler.py File 1.29 KB 0644
cockpit.py File 968 B 0644
collectd.py File 2.24 KB 0644
collectl.py File 752 B 0644
composer.py File 2.11 KB 0644
conntrack.py File 2.37 KB 0644
console.py File 871 B 0644
container_log.py File 1.07 KB 0644
containerd.py File 935 B 0644
containers_common.py File 2.62 KB 0644
convert2rhel.py File 1.04 KB 0644
coredump.py File 1.45 KB 0644
corosync.py File 2.42 KB 0644
crio.py File 3.67 KB 0644
cron.py File 1.01 KB 0644
crypto.py File 1.38 KB 0644
cs.py File 4.5 KB 0644
ctdb.py File 1.42 KB 0644
cups.py File 1.2 KB 0644
cxl.py File 1.32 KB 0644
date.py File 867 B 0644
dbus.py File 877 B 0644
dellrac.py File 1.71 KB 0644
devicemapper.py File 1.13 KB 0644
devices.py File 740 B 0644
dhcp.py File 1.03 KB 0644
discovery.py File 1.15 KB 0644
distupgrade.py File 1.51 KB 0644
dlm.py File 1.52 KB 0644
dmraid.py File 1.29 KB 0644
dnf.py File 5.2 KB 0644
docker.py File 5.01 KB 0644
docker_distribution.py File 1.3 KB 0644
dovecot.py File 1007 B 0644
dpkg.py File 1.14 KB 0644
dracut.py File 902 B 0644
drbd.py File 955 B 0644
ds.py File 3.61 KB 0644
ebpf.py File 3.09 KB 0644
elastic.py File 2.52 KB 0644
etcd.py File 2.1 KB 0644
fapolicyd.py File 1.21 KB 0644
fcoe.py File 1018 B 0644
fibrechannel.py File 1.77 KB 0644
filesys.py File 3.82 KB 0644
firewall_tables.py File 5.07 KB 0644
firewalld.py File 1.95 KB 0644
flatpak.py File 1.29 KB 0644
foreman.py File 14.53 KB 0644
foreman_installer.py File 3.8 KB 0644
foreman_openscap.py File 830 B 0644
foreman_proxy.py File 2.29 KB 0644
freeipmi.py File 896 B 0644
frr.py File 1.79 KB 0644
fwupd.py File 1.41 KB 0644
gcp.py File 5.38 KB 0644
gdm.py File 735 B 0644
gfs2.py File 1.04 KB 0644
gluster.py File 5.36 KB 0644
gluster_block.py File 1.07 KB 0644
grafana.py File 2.25 KB 0644
greenboot.py File 905 B 0644
grub.py File 988 B 0644
grub2.py File 2.87 KB 0644
gssproxy.py File 823 B 0644
haproxy.py File 2.41 KB 0644
hardware.py File 1.13 KB 0644
host.py File 1.74 KB 0644
hpasm.py File 898 B 0644
hpssm.py File 2.72 KB 0644
hts.py File 700 B 0644
hyperv.py File 886 B 0644
i18n.py File 774 B 0644
infiniband.py File 2.67 KB 0644
infinidat.py File 1.38 KB 0644
insights.py File 2.51 KB 0644
ipa.py File 7.33 KB 0644
ipmitool.py File 1.56 KB 0644
iprconfig.py File 4.54 KB 0644
ipvs.py File 1.04 KB 0644
iscsi.py File 2.18 KB 0644
iscsitarget.py File 1.25 KB 0644
jars.py File 5.15 KB 0644
java.py File 978 B 0644
juju.py File 2.45 KB 0644
kata_containers.py File 1.34 KB 0644
kdump.py File 3.86 KB 0644
keepalived.py File 855 B 0644
kernel.py File 5.63 KB 0644
kernelrt.py File 1.66 KB 0644
keyutils.py File 894 B 0644
kimchi.py File 1009 B 0644
kpatch.py File 1.02 KB 0644
krb5.py File 1.66 KB 0644
kubernetes.py File 10.92 KB 0644
kvm.py File 954 B 0644
landscape.py File 3.17 KB 0644
ldap.py File 2.99 KB 0644
leapp.py File 1.04 KB 0644
libraries.py File 1.55 KB 0644
libreswan.py File 2.47 KB 0644
libvirt.py File 3.76 KB 0644
lightdm.py File 1.11 KB 0644
lilo.py File 716 B 0644
login.py File 1 KB 0644
logrotate.py File 1.24 KB 0644
logs.py File 4.69 KB 0644
lstopo.py File 1.21 KB 0644
lustre.py File 2.73 KB 0644
lvm2.py File 4.61 KB 0644
lxd.py File 2.37 KB 0644
maas.py File 4.79 KB 0644
manageiq.py File 2.86 KB 0644
md.py File 1.22 KB 0644
megacli.py File 1.02 KB 0644
mellanox_firmware.py File 4.7 KB 0644
memcached.py File 1.19 KB 0644
memory.py File 1.36 KB 0644
microk8s.py File 1.98 KB 0644
microshift.py File 6.99 KB 0644
microshift_ovn.py File 1.69 KB 0644
migration_results.py File 637 B 0644
mongodb.py File 1.95 KB 0644
monit.py File 1.68 KB 0644
mpt.py File 732 B 0644
mssql.py File 3.34 KB 0644
multipath.py File 1011 B 0644
mvcli.py File 978 B 0644
mysql.py File 3.99 KB 0644
named.py File 2.5 KB 0644
navicli.py File 2.49 KB 0644
networking.py File 12.45 KB 0644
networkmanager.py File 5.01 KB 0644
nfs.py File 1.32 KB 0644
nfsganesha.py File 1.2 KB 0644
nginx.py File 1.53 KB 0644
nis.py File 812 B 0644
nodejs.py File 1.18 KB 0644
npm.py File 2.06 KB 0644
nscd.py File 989 B 0644
nss.py File 885 B 0644
ntb.py File 937 B 0644
ntp.py File 1.41 KB 0644
numa.py File 1.46 KB 0644
nvidia.py File 1.63 KB 0644
nvme.py File 1.71 KB 0644
nvmetcli.py File 977 B 0644
oddjob.py File 871 B 0644
omnipath_client.py File 2.06 KB 0644
omnipath_manager.py File 2.49 KB 0644
omsa.py File 1.64 KB 0644
opencl.py File 692 B 0644
opencontrail.py File 1.35 KB 0644
opendaylight.py File 1.38 KB 0644
opengl.py File 694 B 0644
openhpi.py File 878 B 0644
openshift.py File 16.93 KB 0644
openshift_ovn.py File 2.61 KB 0644
openssl.py File 1.4 KB 0644
openstack_ansible.py File 1.31 KB 0644
openstack_aodh.py File 3.91 KB 0644
openstack_barbican.py File 1.74 KB 0644
openstack_ceilometer.py File 3.22 KB 0644
openstack_cinder.py File 6.82 KB 0644
openstack_database.py File 2.48 KB 0644
openstack_designate.py File 3.61 KB 0644
openstack_edpm.py File 1.38 KB 0644
openstack_glance.py File 4.65 KB 0644
openstack_gnocchi.py File 3.38 KB 0644
openstack_heat.py File 5.3 KB 0644
openstack_horizon.py File 3.26 KB 0644
openstack_instack.py File 6 KB 0644
openstack_ironic.py File 8.29 KB 0644
openstack_keystone.py File 4.88 KB 0644
openstack_manila.py File 3.65 KB 0644
openstack_masakari.py File 2.06 KB 0644
openstack_masakarimonitors.py File 1.5 KB 0644
openstack_mistral.py File 1.6 KB 0644
openstack_neutron.py File 5.27 KB 0644
openstack_nova.py File 8.74 KB 0644
openstack_novajoin.py File 1.15 KB 0644
openstack_octavia.py File 5.17 KB 0644
openstack_placement.py File 4.83 KB 0644
openstack_sahara.py File 2.65 KB 0644
openstack_swift.py File 2.92 KB 0644
openstack_tripleo.py File 1.62 KB 0644
openstack_trove.py File 2.23 KB 0644
opensvc.py File 2.72 KB 0644
openvswitch.py File 16.77 KB 0644
origin.py File 8.68 KB 0644
os_net_config.py File 743 B 0644
ostree.py File 1.05 KB 0644
ovirt.py File 9.47 KB 0644
ovirt_engine_backup.py File 1.76 KB 0644
ovirt_hosted_engine.py File 2.16 KB 0644
ovirt_imageio.py File 1.56 KB 0644
ovirt_node.py File 1.62 KB 0644
ovirt_provider_ovn.py File 1.16 KB 0644
ovn_central.py File 8.21 KB 0644
ovn_host.py File 2.27 KB 0644
pacemaker.py File 5.85 KB 0644
pam.py File 1.32 KB 0644
pci.py File 1.35 KB 0644
pcp.py File 5.99 KB 0644
perccli.py File 1.84 KB 0644
peripety.py File 1.19 KB 0644
perl.py File 662 B 0644
pmem.py File 3.34 KB 0644
podman.py File 5.44 KB 0644
postfix.py File 4.32 KB 0644
postgresql.py File 4.44 KB 0644
powerpath.py File 1.82 KB 0644
powerpc.py File 4.29 KB 0644
ppp.py File 848 B 0644
procenv.py File 710 B 0644
process.py File 4.12 KB 0644
processor.py File 2.11 KB 0644
proxmox.py File 2.98 KB 0644
psacct.py File 1.29 KB 0644
ptp.py File 817 B 0644
pulp.py File 7.55 KB 0644
pulpcore.py File 7.15 KB 0644
puppet.py File 2.16 KB 0644
pxe.py File 1.39 KB 0644
python.py File 3.79 KB 0644
qaucli.py File 1.37 KB 0644
qpid.py File 3.54 KB 0644
qpid_dispatch.py File 2.19 KB 0644
qt.py File 809 B 0644
quagga.py File 755 B 0644
rabbitmq.py File 2.73 KB 0644
radius.py File 1.34 KB 0644
rasdaemon.py File 996 B 0644
rear.py File 1.22 KB 0644
redis.py File 1.58 KB 0644
release.py File 1.2 KB 0644
rhc.py File 1.48 KB 0644
rhcos.py File 1.36 KB 0644
rhui.py File 2.25 KB 0644
rhv_analyzer.py File 941 B 0644
rpm.py File 2.33 KB 0644
rpmostree.py File 1.12 KB 0644
ruby.py File 813 B 0644
s390.py File 2.38 KB 0644
salt.py File 2.14 KB 0644
saltmaster.py File 2.15 KB 0644
samba.py File 1.76 KB 0644
sanlock.py File 1000 B 0644
saphana.py File 2.56 KB 0644
sapnw.py File 5.22 KB 0644
sar.py File 3.96 KB 0644
sas3ircu.py File 1.21 KB 0644
scsi.py File 2.38 KB 0644
seagate_ses.py File 2.12 KB 0644
sedutil.py File 1.7 KB 0644
selinux.py File 2 KB 0644
sendmail.py File 1.18 KB 0644
services.py File 1.44 KB 0644
shmcli.py File 4.32 KB 0644
skydive.py File 2.28 KB 0644
slurm.py File 3.76 KB 0644
smartcard.py File 1.48 KB 0644
smclient.py File 1.91 KB 0644
snap.py File 2.99 KB 0644
snapper.py File 730 B 0644
snmp.py File 903 B 0644
sos_extras.py File 3.74 KB 0644
soundcard.py File 1.08 KB 0644
squid.py File 1.28 KB 0644
ssh.py File 3.45 KB 0644
ssmtp.py File 976 B 0644
sssd.py File 2.33 KB 0644
storageconsole.py File 1.66 KB 0644
storcli.py File 1.83 KB 0644
stratis.py File 1.12 KB 0644
subscription_manager.py File 4.99 KB 0644
sudo.py File 873 B 0644
sunrpc.py File 818 B 0644
symcli.py File 3.46 KB 0644
system.py File 1.23 KB 0644
systemd.py File 3.48 KB 0644
systemtap.py File 881 B 0644
sysvipc.py File 886 B 0644
targetcli.py File 1.12 KB 0644
teamd.py File 1.24 KB 0644
telegraf.py File 1.68 KB 0644
tftpserver.py File 840 B 0644
tigervnc.py File 1.67 KB 0644
tomcat.py File 1.99 KB 0644
tpm2.py File 989 B 0644
tuned.py File 1.17 KB 0644
ubuntu.py File 1.93 KB 0644
udev.py File 900 B 0644
udisks.py File 804 B 0644
ufw.py File 987 B 0644
ultrapath.py File 1.29 KB 0644
unbound.py File 899 B 0644
unity.py File 703 B 0644
unpackaged.py File 3.48 KB 0644
usb.py File 731 B 0644
usbguard.py File 813 B 0644
validation_framework.py File 1.5 KB 0644
vault.py File 1.78 KB 0644
vdo.py File 976 B 0644
vdsm.py File 5.08 KB 0644
vectordev.py File 1.2 KB 0644
veritas.py File 1.33 KB 0644
vhostmd.py File 1.76 KB 0644
virsh.py File 3.79 KB 0644
virtwho.py File 985 B 0644
vmware.py File 1.73 KB 0644
vsftpd.py File 724 B 0644
vulkan.py File 700 B 0644
watchdog.py File 2.83 KB 0644
wireless.py File 886 B 0644
x11.py File 1.38 KB 0644
xdp.py File 659 B 0644
xen.py File 3.32 KB 0644
xfs.py File 1.35 KB 0644
xinetd.py File 837 B 0644
zfs.py File 1.91 KB 0644
zvm.py File 2.77 KB 0644