mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-24 21:34:08 +03:00
Merge pull request #1828 from fbuihuu/set-property-on-inactive-unit
core: allow 'SetUnitProperties()' to run on inactive units too
This commit is contained in:
commit
2281b56044
@ -888,6 +888,11 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
|
||||
|
||||
<para>Example: <command>systemctl set-property foobar.service CPUShares=777</command></para>
|
||||
|
||||
<para>If the specified unit appears to be inactive, the
|
||||
changes will be only stored on disk as described
|
||||
previously hence they will be effective when the unit will
|
||||
be started.</para>
|
||||
|
||||
<para>Note that this command allows changing multiple
|
||||
properties at the same time, which is preferable over
|
||||
setting them individually. Like unit file configuration
|
||||
|
@ -630,9 +630,13 @@ static int method_set_unit_properties(sd_bus_message *message, void *userdata, s
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
u = manager_get_unit(m, name);
|
||||
if (!u)
|
||||
return sd_bus_error_setf(error, BUS_ERROR_NO_SUCH_UNIT, "Unit %s is not loaded.", name);
|
||||
r = manager_load_unit(m, name, NULL, error, &u);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = bus_unit_check_load_state(u, error);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return bus_unit_method_set_properties(message, u, error);
|
||||
}
|
||||
|
@ -1251,3 +1251,20 @@ int bus_unit_set_properties(
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
int bus_unit_check_load_state(Unit *u, sd_bus_error *error) {
|
||||
|
||||
if (u->load_state == UNIT_LOADED)
|
||||
return 0;
|
||||
|
||||
/* Give a better description of the unit error when
|
||||
* possible. Note that in the case of UNIT_MASKED, load_error
|
||||
* is not set. */
|
||||
if (u->load_state == UNIT_MASKED)
|
||||
return sd_bus_error_setf(error, BUS_ERROR_UNIT_MASKED, "Unit is masked.");
|
||||
|
||||
if (u->load_state == UNIT_NOT_FOUND)
|
||||
return sd_bus_error_setf(error, BUS_ERROR_NO_SUCH_UNIT, "Unit not found.");
|
||||
|
||||
return sd_bus_error_set_errnof(error, u->load_error, "Unit is not loaded properly: %m.");
|
||||
}
|
||||
|
@ -38,3 +38,5 @@ int bus_unit_method_reset_failed(sd_bus_message *message, void *userdata, sd_bus
|
||||
int bus_unit_queue_job(sd_bus_message *message, Unit *u, JobType type, JobMode mode, bool reload_if_possible, sd_bus_error *error);
|
||||
int bus_unit_set_properties(Unit *u, sd_bus_message *message, UnitSetPropertiesMode mode, bool commit, sd_bus_error *error);
|
||||
int bus_unit_method_set_properties(sd_bus_message *message, void *userdata, sd_bus_error *error);
|
||||
|
||||
int bus_unit_check_load_state(Unit *u, sd_bus_error *error);
|
||||
|
Loading…
Reference in New Issue
Block a user