mirror of
https://github.com/systemd/systemd.git
synced 2024-12-27 07:22:31 +03:00
systemctl: suppress errors with "show" for nonexistent units and properties
Show is documented to be program-parseable, and printing the warning about about a non-existent unit, while useful for humans, broke a lot of scripts. Restore previous behaviour of returning success and printing empty or useless stuff for units which do not exist, and printing empty values for properties which do not exists. With SYSTEMD_LOG_LEVEL=debug, hints are printed, but the return value is still 0. This undoes parts ofe33a06a
and3dced37b7
and fixes #3856. We might consider adding an explicit switch to fail on missing units/properties (e.g. --ensure-exists or similar), and make -P foobar equivalent to --ensure-exists --property=foobar.
This commit is contained in:
parent
1cf03a4f8e
commit
bd5b9f0a12
@ -4695,12 +4695,14 @@ static int show_one(
|
||||
return log_error_errno(r, "Failed to map properties: %s", bus_error_message(&error, r));
|
||||
|
||||
if (streq_ptr(info.load_state, "not-found") && streq_ptr(info.active_state, "inactive")) {
|
||||
log_error("Unit %s could not be found.", unit);
|
||||
log_full(streq(verb, "status") ? LOG_ERR : LOG_DEBUG,
|
||||
"Unit %s could not be found.", unit);
|
||||
|
||||
if (streq(verb, "status"))
|
||||
return EXIT_PROGRAM_OR_SERVICES_STATUS_UNKNOWN;
|
||||
|
||||
return -ENOENT;
|
||||
if (!streq(verb, "show"))
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
r = sd_bus_message_rewind(reply, true);
|
||||
@ -4765,10 +4767,11 @@ static int show_one(
|
||||
r = 0;
|
||||
if (show_properties) {
|
||||
char **pp;
|
||||
int not_found_level = streq(verb, "show") ? LOG_DEBUG : LOG_WARNING;
|
||||
|
||||
STRV_FOREACH(pp, arg_properties)
|
||||
if (!set_contains(found_properties, *pp)) {
|
||||
log_warning("Property %s does not exist.", *pp);
|
||||
log_full(not_found_level, "Property %s does not exist.", *pp);
|
||||
r = -ENXIO;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user