| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Adds two mechanisms by which users can choose to disable postprocessing
of collected information.
First, is a global method exposed via the `--no-postproc` option. Using
this option will skip postprocessing for all plugins.
Second, is a per-plugin option exposed via a new 'postproc' plugin
option. This is set to _True_ by default (meaning yes, perform
postprocessing), which users can set to False or off to disable
postprocessing for that plugin only; e.g. `-k podman.postproc=off`
Closes: #286
Resolves: #1862
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
|
|
|
|
|
|
|
|
|
|
| |
Rather than call just Plugin.setup() and Plugin._do_copy_path(),
add an add_copy_spec() call to the mock plugin setup() method,
and invoke copying by calling the Plugin.collect() method.
Related: #1845
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Current HTML report generation is slow and its implementation is full
of scattered html code. We shall utilize Report class instead.
Additionally, add JSON report format for easy automated parsing.
Further, fixed decoding of unicode content of a report.
Fixed report_tests suite including some pycodestyle errors.
Resolves: #1713
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
| |
Adds a --since switch that takes a date as an argument. This switch
will skip the archive files with a mtime older than the date.
Also, --since affects journalctl execution for --all.
Resolves: #1678
Signed-off-by: David Vallee Delisle <dvd@redhat.com>
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
|
|
|
|
|
|
|
|
|
|
| |
If the --allow-system-changes option is in effect, bypass checking
of kernel modules and allow commands to attempt to auto-load any
missing modules when run.
Related: #1678
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously, in _make_leading_paths(), checking host file paths did not
account for non / sysroots, for situations where sos is run in a
container and the host's / is actually mounted under /host for example.
This would lead to copy errors when trying to copy symlinks.
This method now will use sysroot if one is set, thus avoiding copy
errors.
Resolves: #1705
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
|
|
|
|
| |
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
There's a lot of ancient junk in this method (and associated code
strewn around sos.sosreport and tests). Remove the ability to pass
a list of options to the method since nothing uses this, and also
delete the incomplete implementation of global plugin options via
the commons dictionary (this work was already completed some time
ago by mapping these options directly to the command line args).
Resolves: #1498
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Adds an option to encrypt the resulting archive that sos generates.
There are two methods for doing so:
--encrypt-key Uses a key-pair for asymmetric encryption
--encrypt-pass Uses a password for symmetric encryption
For key-pair encryption, the key-to-be-used must be imported into the
root user's keyring, as gpg does not allow for the use of keyfiles.
If the encryption process fails, sos will not abort as the unencrypted
archive will have already been created. The assumption being that the
archive is still of use and/or the user has another means of encrypting
it.
Resolves: #1320
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A change in the handling of add_string() operations in the archive
class causes the Plugin string substitution methods to fail (since
the archive was enforcing a check that the path did not already
exist - for substitutions this is always the case).
Maintain the check for content that is being copied into the
archive anew, but make the add_string() method override this and
disable the existence checks.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
| |
If the caller does not specific an explicit size limit (or 0 to
disable limits) automatically set the sizelimit argument for the
add_copy_spec(), add_cmd_output(), and add_journal() methods to
the value of the "log_size" option.
Resolves: #1325
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
| |
Moving also building of the command from Archive to Plugin class.
Closes: #1196
Resolves: #1338
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Since plugins are now run concurrently the Archive class must be
re-entrant: different plugins may attempt to create the same
paths in the archive, and since they are executing in parallel
and with no locking, there exists a TOCTOU race between the use
of os.path.{exists,isdir, etc.}() and the subsequent creation of
a new path.
Address this by implementing a simple monitor-style locking scheme
for the FileCacheArchive class. A `_path_lock` member is added to
the class and this must be held across any operation that modifies
the namespace of the archive (including file, directory, symlink,
and special node creation).
Additionally, the `_check_path()` Archive method (which checks
for the existence of path components up to the basename of the
file, creating directories as required) is extended to also carry
out a test for the existence of the path, and if the path does
exist, that the object is of the expected type. A mismatch in the
object type generates a ValueError with an appropriate string
description of the problem.
Benchmarking shows a consistent small improvement with the patch:
this is a result of reduced redundant copy operations that the
previous archive structure allowed (since duplicate operations
are now aborted as soon as the _path_lock is acquired).
Resolves: #1340
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
| |
Moves Plugin.policy to be an object for plugins instead of a function,
making it easier to leverage the active policy within sos plugins.
Resolves: #1179
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
| |
When --all-logs is used, ignore any sizelimits in add_copy_spec.
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
|
|
|
|
|
|
|
| |
test_exe.py fails with nosetests-3.
Updated to python 3 compatible syntax.
Signed-off-by: Sandro Bonazzola <sbonazzo@redhat.com>
|
|
|
|
| |
Signed-off-by: Michael Adam <obnox@samba.org>
|
|
|
|
| |
Signed-off-by: Michael Adam <obnox@samba.org>
|
|
|
|
|
|
| |
instead of add_copy_spec_limit()
Signed-off-by: Michael Adam <obnox@samba.org>
|
|
|
|
| |
Signed-off-by: Michael Adam <obnox@samba.org>
|
|
|
|
|
|
|
| |
- a test with a single file without limit
- a test with a single glob without limit
Signed-off-by: Michael Adam <obnox@samba.org>
|
|
|
|
| |
Signed-off-by: Michael Adam <obnox@samba.org>
|
|
|
|
| |
Signed-off-by: Michael Adam <obnox@samba.org>
|
|
|
|
| |
Signed-off-by: Michael Adam <obnox@samba.org>
|
|
|
|
| |
Signed-off-by: Michael Adam <obnox@samba.org>
|
|
|
|
|
|
|
|
| |
Originally,f there were other files matching the glob of /tmp/tmp*
then the test would fail. By using a tmpdir, we make sure that we
know what files to expect.
Signed-off-by: Michael Adam <obnox@samba.org>
|
|
|
|
| |
Signed-off-by: Michael Adam <obnox@samba.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Adding /dev/null as a node will trigger EPERM. This can happen namely
when masking systemd units which symlinks to /dev/null. This fix will
avoid a stacktrace and will generate a INFO message about it.
Test for that situation is also included.
Resolves: #893.
Signed-off-by: Louis Bouchard <louis.bouchard@canonical.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
replace str class functions by unicode variants:
1) "\n".join(buf) needs to pass decoded UTF-8 text
2) uniform python2 and python3 str/unicode type
3) fd.write needs to replace str(..) by some other function name
4) fd.write needs to encode UTF-8
5) update tests/report_tests.py like 2)
Resolves: #722, #723.
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
It's crazy having the Policy classes call a function in the
utilities module only to have that function then load the Policy
module, call policy.get_preferred_hash_algorithm() and then test
the result.
Get rid of the get_hash_name() function in the utilities module
and simplify the calls in the policies module to obtain the
preferred hash name.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
| |
When add_string receives output from tail() it fails in py3
since tail() returns a byte object. Mimic this behavior.
Signed-off-by: Louis Bouchard <louis.bouchard@canonical.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add a --chroot option to sosreport to control command chrooting.
The option takes one of three values:
* auto - Allow callers of the API to control chroot behaviour
* always - Always chroot external commands to --sysroot
* never - Never chroot external commands
This is a fairly low-level option and may not be exposed to the
user in a final release; for now it will allow tests in container
environments to control the chrooting behaviour used for a run.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
| |
Allow callers of sos_get_command_output() to specify a path to
chroot into before executing command.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
| |
Prefix copyspecs with self.sysroot when using an alternate root
path. Prefixes are applied before expanding copyspecs and the
prefixed paths are stored as the 'srcpath' attribute in the
archive. Destination paths in the report archive do not include
the prefix.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Fix the syntax of the vim modeline used to enable the required
editing mode in all python sources files.
The desired options are:
et - expand tabs (convert tab chars to spaces)
ts=4 - set tabstop to 4 characters
sw=4 - set shiftwidth to 4 characters
Signed-off-by: Kamalesh Babulal <kamalesh@linux.vnet.ibm.com>
(edits for commit message, modeline compatibility & options)
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
---
__run__.py | 2 +-
example_plugins/example.py | 2 +-
setup.py | 2 +-
sos/archive.py | 2 +-
sos/plugins/__init__.py | 2 +-
sos/plugins/abrt.py | 2 +-
sos/plugins/acpid.py | 2 +-
sos/plugins/anaconda.py | 2 +-
sos/plugins/anacron.py | 2 +-
sos/plugins/apache.py | 2 +-
sos/plugins/apparmor.py | 2 +-
sos/plugins/apport.py | 2 +-
sos/plugins/apt.py | 2 +-
sos/plugins/ata.py | 2 +-
sos/plugins/auditd.py | 2 +-
sos/plugins/autofs.py | 2 +-
sos/plugins/azure.py | 2 +-
sos/plugins/block.py | 2 +-
sos/plugins/boot.py | 2 +-
sos/plugins/ceph.py | 2 +-
sos/plugins/cgroups.py | 2 +-
sos/plugins/cluster.py | 2 +-
sos/plugins/cobbler.py | 2 +-
sos/plugins/corosync.py | 2 +-
sos/plugins/cron.py | 2 +-
sos/plugins/cs.py | 2 +-
sos/plugins/ctdb.py | 2 +-
sos/plugins/cups.py | 2 +-
sos/plugins/dbus.py | 2 +-
sos/plugins/devicemapper.py | 2 +-
sos/plugins/dhcp.py | 2 +-
sos/plugins/distupgrade.py | 2 +-
sos/plugins/dmraid.py | 2 +-
sos/plugins/docker.py | 2 +-
sos/plugins/dovecot.py | 2 +-
sos/plugins/dpkg.py | 2 +-
sos/plugins/ds.py | 2 +-
sos/plugins/fcoe.py | 2 +-
sos/plugins/filesys.py | 2 +-
sos/plugins/firewalld.py | 2 +-
sos/plugins/foreman.py | 2 +-
sos/plugins/gdm.py | 2 +-
sos/plugins/general.py | 2 +-
sos/plugins/gluster.py | 2 +-
sos/plugins/grub.py | 2 +-
sos/plugins/grub2.py | 2 +-
sos/plugins/haproxy.py | 2 +-
sos/plugins/hardware.py | 2 +-
sos/plugins/hpasm.py | 2 +-
sos/plugins/hts.py | 2 +-
sos/plugins/i18n.py | 2 +-
sos/plugins/infiniband.py | 2 +-
sos/plugins/ipa.py | 2 +-
sos/plugins/ipsec.py | 2 +-
sos/plugins/ipvs.py | 2 +-
sos/plugins/iscsi.py | 2 +-
sos/plugins/iscsitarget.py | 2 +-
sos/plugins/java.py | 2 +-
sos/plugins/juju.py | 2 +-
sos/plugins/kdump.py | 2 +-
sos/plugins/keepalived.py | 2 +-
sos/plugins/kernel.py | 2 +-
sos/plugins/kernelrt.py | 2 +-
sos/plugins/keyutils.py | 2 +-
sos/plugins/kpatch.py | 2 +-
sos/plugins/krb5.py | 2 +-
sos/plugins/kvm.py | 2 +-
sos/plugins/landscape.py | 2 +-
sos/plugins/ldap.py | 2 +-
sos/plugins/libraries.py | 2 +-
sos/plugins/libvirt.py | 2 +-
sos/plugins/lightdm.py | 2 +-
sos/plugins/lilo.py | 2 +-
sos/plugins/logrotate.py | 2 +-
sos/plugins/logs.py | 2 +-
sos/plugins/lsbrelease.py | 2 +-
sos/plugins/lvm2.py | 2 +-
sos/plugins/maas.py | 2 +-
sos/plugins/manageiq.py | 2 +-
sos/plugins/md.py | 2 +-
sos/plugins/megacli.py | 2 +-
sos/plugins/memory.py | 2 +-
sos/plugins/mongodb.py | 2 +-
sos/plugins/mpt.py | 2 +-
sos/plugins/mrggrid.py | 2 +-
sos/plugins/mrgmessg.py | 2 +-
sos/plugins/multipath.py | 2 +-
sos/plugins/mysql.py | 2 +-
sos/plugins/named.py | 2 +-
sos/plugins/navicli.py | 2 +-
sos/plugins/networking.py | 2 +-
sos/plugins/nfs.py | 2 +-
sos/plugins/nfsserver.py | 2 +-
sos/plugins/nis.py | 2 +-
sos/plugins/nscd.py | 2 +-
sos/plugins/ntp.py | 2 +-
sos/plugins/numa.py | 2 +-
sos/plugins/oddjob.py | 2 +-
sos/plugins/openhpi.py | 2 +-
sos/plugins/openshift.py | 2 +-
sos/plugins/openssl.py | 2 +-
sos/plugins/openstack_ceilometer.py | 2 +-
sos/plugins/openstack_cinder.py | 2 +-
sos/plugins/openstack_glance.py | 2 +-
sos/plugins/openstack_heat.py | 2 +-
sos/plugins/openstack_horizon.py | 2 +-
sos/plugins/openstack_keystone.py | 2 +-
sos/plugins/openstack_neutron.py | 2 +-
sos/plugins/openstack_nova.py | 2 +-
sos/plugins/openstack_swift.py | 2 +-
sos/plugins/openstack_trove.py | 2 +-
sos/plugins/openswan.py | 2 +-
sos/plugins/openvswitch.py | 2 +-
sos/plugins/pam.py | 2 +-
sos/plugins/pci.py | 2 +-
sos/plugins/pcp.py | 2 +-
sos/plugins/postfix.py | 2 +-
sos/plugins/postgresql.py | 2 +-
sos/plugins/powerpath.py | 2 +-
sos/plugins/powerpc.py | 2 +-
sos/plugins/ppp.py | 2 +-
sos/plugins/procenv.py | 2 +-
sos/plugins/process.py | 2 +-
sos/plugins/processor.py | 2 +-
sos/plugins/psacct.py | 2 +-
sos/plugins/pxe.py | 2 +-
sos/plugins/python.py | 2 +-
sos/plugins/qpid.py | 2 +-
sos/plugins/quagga.py | 2 +-
sos/plugins/rabbitmq.py | 2 +-
sos/plugins/radius.py | 2 +-
sos/plugins/rhui.py | 2 +-
sos/plugins/rpm.py | 2 +-
sos/plugins/s390.py | 2 +-
sos/plugins/samba.py | 2 +-
sos/plugins/sanlock.py | 2 +-
sos/plugins/sar.py | 2 +-
sos/plugins/satellite.py | 2 +-
sos/plugins/scsi.py | 2 +-
sos/plugins/selinux.py | 2 +-
sos/plugins/sendmail.py | 2 +-
sos/plugins/smartcard.py | 2 +-
sos/plugins/snmp.py | 2 +-
sos/plugins/soundcard.py | 2 +-
sos/plugins/squid.py | 2 +-
sos/plugins/ssh.py | 2 +-
sos/plugins/ssmtp.py | 2 +-
sos/plugins/sssd.py | 2 +-
sos/plugins/startup.py | 2 +-
sos/plugins/sunrpc.py | 2 +-
sos/plugins/symcli.py | 2 +-
sos/plugins/system.py | 2 +-
sos/plugins/systemd.py | 2 +-
sos/plugins/systemtap.py | 2 +-
sos/plugins/sysvipc.py | 2 +-
sos/plugins/targetcli.py | 2 +-
sos/plugins/teamd.py | 2 +-
sos/plugins/tftpserver.py | 2 +-
sos/plugins/tomcat.py | 2 +-
sos/plugins/tuned.py | 2 +-
sos/plugins/udev.py | 2 +-
sos/plugins/unity.py | 2 +-
sos/plugins/upstart.py | 2 +-
sos/plugins/usb.py | 2 +-
sos/plugins/veritas.py | 2 +-
sos/plugins/vmware.py | 2 +-
sos/plugins/vsftpd.py | 2 +-
sos/plugins/x11.py | 2 +-
sos/plugins/xen.py | 2 +-
sos/plugins/xfs.py | 2 +-
sos/plugins/xinetd.py | 2 +-
sos/plugins/yum.py | 2 +-
sos/policies/__init__.py | 2 +-
sos/policies/debian.py | 2 +-
sos/policies/osx.py | 2 +-
sos/policies/redhat.py | 2 +-
sos/policies/ubuntu.py | 2 +-
sos/reporting.py | 2 +-
sos/sosreport.py | 2 +-
sos/utilities.py | 2 +-
tests/archive_tests.py | 2 +-
tests/importer_tests.py | 2 +-
tests/option_tests.py | 2 +-
tests/plugin_tests.py | 2 +-
tests/policy_tests.py | 2 +-
tests/report_tests.py | 2 +-
tests/sosreport_pexpect.py | 2 +-
tests/test_exe.py | 2 +-
tests/utilities_tests.py | 2 +-
189 files changed, 189 insertions(+), 189 deletions(-)
|
|
|
|
|
|
|
|
| |
Remove the ZipArchive class and associated test code.
Fixes #322.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Commit 8bf7b0c removed the truncation of mangled command names to
64 chars. This causes problems for some plugins (e.g. Issue #415)
that generate long enough command lines to hit system name length
limits.
Instead of arbitrarily limiting to 64 characters limit to the
lesser of the archive format limit (if present) or the value of
PC_NAME_MAX for any intermediate FileCacheArchive path.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
| |
Merge add_copy_specs() into add_copy_spec() and treat any strings
passed to the new method as though they were a single item list.
Mirrors the prior change to add_cmd_outputs().
Fixes #301.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
| |
There's no reason to truncate mangled command names within an
archive. This isn't MS-DOS 3.1 and there are cases where the 64
character limit causes a loss of uniqueness and resulting name
collisions (e.g. namespaced network commands).
Fixes #388.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Numerous Plugin methods are not expected to be called from outside
the base class. Mark them private with a leading underscore:
_copy_dir()
_copy_node()
_copy_symlink()
_do_copy_path()
_expand_copy_spec()
_mangle_command()
_make_command_filename()
_is_forbidden_path()
_collect_copy_specs()
_collect_cmd_output()
_collect_strings()
A couple of these (_mangle_command() and _do_copy_path()) are
invoked from the Plugin test suite; update the relevant cases to
call the new names.
Fixes #348.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
| |
Signed-off-by: Adam Stokes <adam.stokes@ubuntu.com>
|
|
|
|
|
|
|
| |
The 'u' prefix wasn't reintroduced back into Python 3 until
version 3.3. Use six here to accomodate for that.
Signed-off-by: Adam Stokes <adam.stokes@ubuntu.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Returning a 3-tuple has always been ugly. It gets worse as the
parameter list for this family of functions grows. Worse, the 3rd
member of the tuple is unused and is always set to 0.
Rip the whole mess out and return a single, simple dictionary
object with 'status' and 'output' keys.
Update utilities_tests to reflect the new interface.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
| |
Since strings are iterable a plugin attempting to call
add_copy_specs("/something") results in a plugin calling
add_copy_spec("/"). Raise a TypeError if this happens.
Fixes Issue #141.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
| |
Give add_copy_spec() and add_copy_specs() their own test cases.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
| |
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
| |
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
| |
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
| |
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
| |
Fixes Issue #243.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|