libmultipath: add overrides section to multipath.conf
authorBenjamin Marzinski <bmarzins@redhat.com>
Wed, 19 Nov 2014 06:17:36 +0000 (00:17 -0600)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Mon, 12 Jan 2015 21:57:16 +0000 (22:57 +0100)
commit3b40d0d9f39fe32a203d000e88d0f60fe5796e62
tree4879af0bef04391b07b3fb047b152748630e1cf7
parentf08ad14880fd11698944240b98a868ba1799e54c
libmultipath: add overrides section to multipath.conf

Sometimes users want to be able to set a configuration value for all their
devices (for instance, they may want all devices to set no_path_retry to
fail). The builtin device configurations make this tricky, since users need
to change each device configuration individually. To avoid that, this patch
adds a new section to multipath.conf, "overrides".  This section has all of
the attributes that are in both the devices and defaults section.
Attributes set in the overrides section have a higher priority that those
in the devices section. With this section added, the multipath
configuration order now goes:

multipaths > overrides > devices > defaults

I also made want_user_friendly_names print out where the configuration came
from, and I made made select_hwhandler and select_selector always strdup
the string, instead of only on the defaults.  Since multipathd will update
the device strings from the kernel anyway, the old way just added
complexity without saving any memory.

To store the overrides configuration, I used a hwentry structure. We may
want to make a new overrides structure, so that we set any of the defaults
values in overrides.  That way, users could skip using defaults and just
use overrides if they wanted. However, this would take some additional
changes to make sure that all the defaults options can undefined, which
they can't currently be.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
13 files changed:
libmultipath/config.c
libmultipath/config.h
libmultipath/dict.c
libmultipath/print.c
libmultipath/print.h
libmultipath/propsel.c
libmultipath/structs.c
multipath.conf.annotated
multipath.conf.defaults
multipath.conf.synthetic
multipath/main.c
multipath/multipath.conf.5
multipathd/cli_handlers.c