systemd: added new dependency PartOf
This should address TODO item "new dependency type to "group" services in a target". Semantic of new dependency is as follows. Once configured it creates dependency which will cause that all dependent units get stopped if unit they all depend on is stopped or restarted. Usual use case would be configuring PartOf=some.target in template unit file and WantedBy=some.target in [Install] section and enabling desired number of instances. In this case starting one instance won't pull in target but stopping or starting target(in case of WantedBy is properly configured) will cause stop/start of all instances.
This commit is contained in:
committed by
Michal Schmidt
parent
c37046cd3c
commit
85e9a1010d
@@ -112,6 +112,7 @@ Unit.PropagatesReloadTo, config_parse_unit_deps, UNIT_PROPAG
|
||||
Unit.PropagateReloadTo, config_parse_unit_deps, UNIT_PROPAGATES_RELOAD_TO, 0
|
||||
Unit.ReloadPropagatedFrom, config_parse_unit_deps, UNIT_RELOAD_PROPAGATED_FROM, 0
|
||||
Unit.PropagateReloadFrom, config_parse_unit_deps, UNIT_RELOAD_PROPAGATED_FROM, 0
|
||||
Unit.PartOf, config_parse_unit_deps, UNIT_PART_OF, 0
|
||||
Unit.RequiresMountsFor, config_parse_unit_requires_mounts_for, 0, offsetof(Unit, requires_mounts_for)
|
||||
Unit.StopWhenUnneeded, config_parse_bool, 0, offsetof(Unit, stop_when_unneeded)
|
||||
Unit.RefuseManualStart, config_parse_bool, 0, offsetof(Unit, refuse_manual_start)
|
||||
|
||||
@@ -994,6 +994,18 @@ int transaction_add_job_and_dependencies(
|
||||
dbus_error_free(e);
|
||||
}
|
||||
}
|
||||
|
||||
SET_FOREACH(dep, ret->unit->dependencies[UNIT_CONSISTS_OF], i) {
|
||||
r = transaction_add_job_and_dependencies(tr, type, dep, ret, true, override, false, false, ignore_order, e);
|
||||
if (r < 0) {
|
||||
if (r != -EBADR)
|
||||
goto fail;
|
||||
|
||||
if (e)
|
||||
dbus_error_free(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (type == JOB_RELOAD) {
|
||||
|
||||
+2
-1
@@ -1610,7 +1610,8 @@ int unit_add_dependency(Unit *u, UnitDependency d, Unit *other, bool add_referen
|
||||
[UNIT_TRIGGERS] = UNIT_TRIGGERED_BY,
|
||||
[UNIT_TRIGGERED_BY] = UNIT_TRIGGERS,
|
||||
[UNIT_PROPAGATES_RELOAD_TO] = UNIT_RELOAD_PROPAGATED_FROM,
|
||||
[UNIT_RELOAD_PROPAGATED_FROM] = UNIT_PROPAGATES_RELOAD_TO
|
||||
[UNIT_RELOAD_PROPAGATED_FROM] = UNIT_PROPAGATES_RELOAD_TO,
|
||||
[UNIT_PART_OF] = UNIT_CONSISTS_OF
|
||||
};
|
||||
int r, q = 0, v = 0, w = 0;
|
||||
|
||||
|
||||
@@ -75,12 +75,14 @@ enum UnitDependency {
|
||||
UNIT_REQUISITE_OVERRIDABLE,
|
||||
UNIT_WANTS,
|
||||
UNIT_BINDS_TO,
|
||||
UNIT_PART_OF,
|
||||
|
||||
/* Inverse of the above */
|
||||
UNIT_REQUIRED_BY, /* inverse of 'requires' and 'requisite' is 'required_by' */
|
||||
UNIT_REQUIRED_BY_OVERRIDABLE, /* inverse of 'requires_overridable' and 'requisite_overridable' is 'soft_required_by' */
|
||||
UNIT_WANTED_BY, /* inverse of 'wants' */
|
||||
UNIT_BOUND_BY, /* inverse of 'binds_to' */
|
||||
UNIT_CONSISTS_OF, /* inverse of 'part_of' */
|
||||
|
||||
/* Negative dependencies */
|
||||
UNIT_CONFLICTS, /* inverse of 'conflicts' is 'conflicted_by' */
|
||||
|
||||
Reference in New Issue
Block a user