unit: drop the Names= option

Names= is a source of errors, simply because alias names specified like
this only become relevant after a unit has been loaded but cannot be
used to load a unit.

Let's get rid of the confusion and drop this field. To establish alias
names peope should use symlinks, which have the the benefit of being
useful as key to load a unit, even though they are not taken into
account if unit names are listed but they haven't been explicitly
referenced before.
This commit is contained in:
Lennart Poettering 2012-06-22 16:24:57 +02:00
parent a3a3e5b6ae
commit 8ff290af3b
5 changed files with 1 additions and 101 deletions

2
TODO
View File

@ -399,5 +399,3 @@ Regularly:
Scheduled for removal (or fixing):
* xxxOverridable dependencies
* Names= unit option

View File

@ -869,35 +869,6 @@
symlinks.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>Names=</varname></term>
<listitem><para>Additional names for
this unit. The names listed here must
have the same suffix (i.e. type) as
the unit file name. This option may be
specified more than once, in which
case all listed names are used. Note
that this option is different from the
<varname>Alias=</varname> option from
the [Install] section mentioned
below. See below for details. Note
that in almost all cases this option
is not what you want. A symlink alias
in the file system is generally
preferable since it can be used as
lookup key. If a unit with a symlinked
alias name is not loaded and needs to
be it is easily found via the
symlink. However, if a unit with an
alias name configured with this
setting is not loaded it will not be
discovered. This settings' only use is
in conjunction with service
instances.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>SourcePath=</varname></term>
<listitem><para>A path to a
@ -936,30 +907,7 @@
time,
<command>systemctl enable</command>
will create symlinks from these names
to the unit file name. Note that this
is different from the
<varname>Names=</varname> option from
the [Unit] section mentioned above:
The names from
<varname>Names=</varname> apply
unconditionally if the unit is
loaded. The names from
<varname>Alias=</varname> apply only
if the unit has actually been
installed with the
<command>systemctl enable</command>
command. Also, if systemd searches for a
unit, it will discover symlinked alias
names as configured with
<varname>Alias=</varname>, but not
names configured with
<varname>Names=</varname> only. It is
a common pattern to list a name in
both options. In this case, a unit
will be active under all names if
installed, but also if not installed
but requested explicitly under its
main name.</para></listitem>
to the unit file name.</para></listitem>
</varlistentry>
<varlistentry>

View File

@ -90,7 +90,6 @@ $1.UtmpIdentifier, config_parse_unit_string_printf, 0,
$1.ControlGroupModify, config_parse_bool, 0, offsetof($1, exec_context.control_group_modify)
$1.ControlGroupPersistent, config_parse_tristate, 0, offsetof($1, exec_context.control_group_persistent)'
)m4_dnl
Unit.Names, config_parse_unit_names, 0, 0
Unit.Description, config_parse_unit_string_printf, 0, offsetof(Unit, description)
Unit.Documentation, config_parse_documentation, 0, offsetof(Unit, documentation)
Unit.SourcePath, config_parse_path, 0, offsetof(Unit, source_path)

View File

@ -105,49 +105,6 @@ int config_parse_unit_deps(
return 0;
}
int config_parse_unit_names(
const char *filename,
unsigned line,
const char *section,
const char *lvalue,
int ltype,
const char *rvalue,
void *data,
void *userdata) {
Unit *u = userdata;
char *w;
size_t l;
char *state;
assert(filename);
assert(lvalue);
assert(rvalue);
assert(data);
FOREACH_WORD_QUOTED(w, l, rvalue, state) {
char *t, *k;
int r;
t = strndup(w, l);
if (!t)
return -ENOMEM;
k = unit_name_printf(u, t);
free(t);
if (!k)
return -ENOMEM;
r = unit_merge_by_name(u, k);
if (r < 0)
log_error("Failed to add name %s, ignoring: %s", k, strerror(-r));
free(k);
}
return 0;
}
int config_parse_unit_string_printf(
const char *filename,
unsigned line,
@ -2395,7 +2352,6 @@ void unit_dump_config_items(FILE *f) {
{ config_parse_limit, "LIMIT" },
{ config_parse_unit_cgroup, "CGROUP [...]" },
{ config_parse_unit_deps, "UNIT [...]" },
{ config_parse_unit_names, "UNIT [...]" },
{ config_parse_exec, "PATH [ARGUMENT [...]]" },
{ config_parse_service_type, "SERVICETYPE" },
{ config_parse_service_restart, "SERVICERESTART" },

View File

@ -32,7 +32,6 @@ void unit_dump_config_items(FILE *f);
int config_parse_warn_compat(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
int config_parse_unit_deps(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
int config_parse_unit_names(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
int config_parse_unit_string_printf(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
int config_parse_unit_strv_printf(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
int config_parse_unit_path_printf(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);