| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
| |
Preset arguments should not be included in presets: simplify the
filtering to use lists of filtered argument names.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
| |
Preset arguments should not be included in presets: simplify the
filtering to use lists of filtered argument names.
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>
|
|
|
|
|
|
|
|
|
| |
Allow user-defined named presets, stored by default in the
/var/lib/sos/presets directory. A description and note for user
presets may be optionally spefified using the --desc/--description
and --note options.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
| |
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
| |
Add a method to convert an SoSOptions() instance into a dict:
the keys of the dictionary are the argument names and the values
are the current option values.
Any argument with a deque() value is converted to a plain list
prior to processing.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
| |
Instead of hard-coding a tuple for every member of SoSOptions
(% (self.foo, self.bar, ...)), use a list comprehension on the
existing _arg_names list to obtain the attribute values via
getattr(). This avoids the need to maintain the tuple manually
as options are added or removed.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
| |
Add a command line option to list out presets and their options:
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add the ability for the Policy class to load presets in JSON
format: a PresetDefaults object maps directly to the JSON file
structure: the outer container is a dictionary whose keys are the
names of the contained presets, and each preset may contain a
"name", "desc", "note", and "opts" member.
Methods are provided to load, write, delete, user presets, and
to register policy-defined built-in presets:
PresetDefaults.write()
PresetDefaults.delete()
Policy.register_presets()
Policy.load_presets()
policy.add_preset()
policy.del_preset()
The name is used to select a preset (in the same way as a policy
defined preset), and the description and note give further
information on the preset and its behaviour (for e.g. performance
impact).
The "opts" key maps to a further dictionary mapping sos argument
names to their preset values.
Loaded presets are added to the active policie's presets store
and are available to the user via --preset.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add a new special value for the --preset argument, 'auto', which
enables automatic detection of the preset identifier string by
the policy class.
A new method, probe_preset() is added which should be implemented
by derived classes of Policy to return a ProductDefaults() object
initialised appropriately for the running preset.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
| |
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
| |
Add initial RHEL product family presets to the RHELPolicy class
and implement automatic preset detection for known Red Hat
products (RHEL, Satellite, and Atomic).
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>
|
|
|
|
|
|
|
|
| |
To be consistent with other deque()-typed arguments make the
defined value of SoSOptions.profile be [] (this simplifies JSON
encoding of the object).
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
| |
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
| |
The options object now needs to be referenced in both the main
sosreport script, and the policy classes: move its definition
from the sos.sosreport module to sos to avoid recursive import
errors between sosreport and policy.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
| |
Add a method to merge a pair of SoSOptions, replacing unset or
default values with those from the source options (and optionally
overwriting already set values).
This will be used to allow the policy framework to define default
command line behaviour for specific products.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
| |
Add a dictionary mapping all argument names with a non-zero
default value to the appropriate default.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
| |
Debugging is either on or off: make the argument match the option.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
| |
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
| |
Simplify the SoSOptions class by removing the wrapping of the
command line options and individual property methods.
This removes some validation for API users implemented via the
property methods: this can be re-added later if required as the
interface is formalised.
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>
|
|
|
|
|
|
|
| |
The add_journal() method _must_ use explicit kwarg notation when
calling the _add_cmd_output() helper.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
| |
The add_cmd_output() method _must_ use explicit kwarg notation
when calling the _add_cmd_output() helper.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Fixes an issue where verbosity would be set to 'None' rather than 0 in
the event that a sosreport was run with options, when those options did
not include -v at all. This meant that if any options were specified, a
newline would be printed for each started plugin when instead we should
still have been refreshing a single line.
Related to this, the previous newline behavior was beneficial when
running with --batch, so that behavior is maintained if --batch is
specified.
Resolves: #1355
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The 'pep8' tool has been renamed to 'pycodestyle' to avoid confusion
with pep8 the document. pep8 (the tool) will no longer be updated and as
such we should transition to the new pycodestyle.
This commit fixes a number of PEP8 issues with the new pycodestyle
linter that has tests for new additions to PEP8 that the pep8 tool did
not include. Most of these are exception handling fixes like:
sos/plugins/logs.py:96:13: E722 do not use bare 'except'
Which are relatively straight forward to address, by instead catching
just the applicable exceptions, e.g. IOError, ValueError, etc... In
cases where there were many possible exceptions or where the "bare
'except'" was a final catch-all, we now use 'except Exception' to catch
anything from the base exception class.
Another frequent correction was for escape sequencing, such as:
sos/plugins/logs.py:48:15: W605 invalid escape sequence '\S'
The solution for this is to mark these regex strings as raw strings,
which is preferred by `re` as future releases of that module may/will
become more strict in its parsing of regex strings.
Resolves: #1344
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
| |
Catch and log any exception and set port as string before
concatenating it.
Resolves: #1352
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
| |
Use a list comprehension to both generate the list of paths to
collect, and to filter out any directories in the standard list
of fibrechannel paths that do not exist on the running system.
Resolves: #1353
Related: #1341
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
| |
Adds the condition that no more plugins are supposed to run when there
are no plugins running to report that sosreport has finished running
plugins.
Resolves: #1354
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In some cases the concurrent plugins patch will produce output
like the following (with a starting set of plugins of [activemq,
apache, dbus, dhcp, manageiq, openshift, openstack_swift,
puppet]:
Starting 1/8 activemq [Running: activemq]
Starting 2/8 apache [Running: apache]
Starting 4/8 dhcp [Running: apache dhcp]
Starting 5/8 manageiq [Running: apache dhcp manageiq]
Starting 6/8 openshift [Running: apache openshift]
Starting 7/8 openstack_swift [Running: apache openshift openstack_swift]
Starting 8/8 puppet [Running: apache openshift puppet]
Plugin #3 on the list (dbus) has vanished from the plugin run
list.
The ThreadPoolExecutor class uses itertools.izip() to walk the
passed iterable of arguments. Since this references the same
SoSReport.pluglist list that is being concurrently modified by
the collect_plugin() methods it is possible for the pool iterator
to "lose" an entry (another entry is removed by during the call to
its collect_plugin() method, causing the list indices to shift,
and making the index used in the next iteration of the pool's
map() submission loop point one past the correct next entry.
Avoid this problem by initialising a fresh copy of the pluglist
to pass into the pool.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously this had no checks and would run for every sosreport,
many of which don't have puppet installed.
There have been several name changes so I included a lot of package
names to try to cover all of the possible versions/distros.
Resolves: #1345
Signed-off-by: Bryan Quigley <bryan.quigley@canonical.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
| |
skydive is an open source real-time network topology and protocols
analyzer for more info: http://skydive.network/
Resolves: #1351
Signed-off-by: Masco Kaliyamoorthy <mkaliyam@redhat.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
| |
to prevent uncaught exception on py3
also dont import already imported traceback class
Resolves: #1349
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
| |
I found a permission error when trying to copy /sys/fs/pstore when
running on LXD containers. Adding a permission check first allows
it to skip folders it can't list.
Resolves: #1348
Signed-off-by: Bryan Quigley <bryan.quigley@canonical.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
| |
Resolves: #1346
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
|
|
|
|
|
|
| |
Resolves: #1343
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
|
|
|
|
|
|
| |
Resolves: #1342
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
|
|
|
|
|
|
| |
Resolves: #1341
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
|
|
|
|
|
|
|
|
| |
Fixing a regression caused by 8e69d36 .
Resolves: #1337
Signed-off-by: Pavel Moravec <pmoravec@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>
|
|
|
|
|
|
|
|
|
|
| |
In some cases, we need to determine what package provides given
binary. This auxiliary function implements it - so far it works
for and will be used by archive methods.
Related to: #1196
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Fixes an issue where sosreport would not run due to an unset number of
threads if 'sosreport' was run bare, with no options. Any option
(threads or otherwise) would mask this problem due to how the default
threads value was set by the parser. Now sosreport can be run without
any options and run normally, with the concurrency provided by the
threads.
Additionally, changes the status line printed during plugin execution to
be of a fixed length, so that output lines are not mangled when the
status line is updated, rather than a new line being printed (such as
what happens when using --batch).
Resolves: #1336
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
| |
Closes: #1334
Resolves: #1335
Signed-off-by: Amit Ghadge <amitg.b14@gmail.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Adds a new plugin for Microsoft SQL Server on Linux.
Collect log files.
Collect journal logs.
Collect keytab file info if AD auth is configured.
Resolves: #1326
Signed-off-by: Takayoshi Tanaka <tatanaka@redhat.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Since OCP 3.6+, there are some DNS config under /etc/origin/node/ such
as `node-dnsmasq.conf` and `resolv.conf`. Although current sosreport
does not gather them, these are important for troubleshooting of DNS
issues.
This patch updates origin.py to collect {resolv,node-dnsmasq}.conf
under /etc/origin/node/.
Resolves: #1311
Signed-off-by: Kenjiro Nakayama <nakayamakenjiro@gmail.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
1) Do the copy in one call with variables, so it's more efficient.
2) Collect the config tarball
It'll be very useful to collect the config tarball which containers
TripleO Heat Templates used to deploy the undercloud and the Ansible
playbooks generated by config-download as well.
Both of them are archived and compressed in
/home/stack/undercloud-install-*.tar.bzip2 files everytime
install/upgrade commands are run.
3) Collect ephemeral Heat logs
/var/log/heat-launcher is a new directory that contains the
heat-installer sqlite, logs and configuration.
The content is small because it's only used once and it's ephemeral
(purged everytime an operator install or upgrade an undercloud).
However, collecting these files will be useful to help customers.
4) Collect new logfile
When containerizing the undercloud, we're moving install-undercloud.log
into $HOME which makes it more accessible for the users, while we're
removing instack(-undercloud) bits over time.
This patch add $HOME/install-undercloud.log file and document why we're
doing this. Note that we still collect old file for previous releases.
Resolves: #1279
Signed-off-by: Emilien Macchi <emilien@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>
|