ctdb-scripts: Avoid using testparm to process its own output
commit238056e5aadb597e3f6165757990a88952644866
authorMartin Schwenke <mschwenke@ddn.com>
Mon, 13 Feb 2023 03:59:18 +0000 (13 14:59 +1100)
committerVolker Lendecke <vl@samba.org>
Tue, 14 Feb 2023 08:43:53 +0000 (14 08:43 +0000)
treebd812f2dda4742f670b060212791ebcc52e8e3b1
parent9a04ca1e1cdf90065338b0ecb27043e63109a2cb
ctdb-scripts: Avoid using testparm to process its own output

When testparm processes the output of "testparm -v" (which includes
default values) it appears to do global checks (or some other sort of
initialisation logic) for all specified values.  This includes a DNS
lookup for the node's hostname, as a side-effect of a libldap
ldap_set_option() call when processing "ldap debug level".  If DNS
servers are down then this can induce timeouts, possibly resulting in
monitor timeouts.

Avoid this by using sed to extract configuration values from the
testparm cache file.

This is already shown to work when retrieving share paths, where
testparm is basically used as cat.  Update the sed pattern to avoid
matching empty values on the right-hand side of the equals ('=') -
this avoids the default empty path value (and "smb ports" never has an
empty value).

Corresponding test changes:

* 50.samba.monitor.111.sh no longer expects a failure from being
  unable to set smb ports, since testparm is no longer used in that
  code path.

* smb ports needs to be set in fake smb.conf so it is in the default
  output and can be extracted using sed.

* Although testparm --parameter-name is no longer used in
  50.samba.script, update the stub implementation (in case it is ever
  used again) to extract from fake smb.conf, since "smb ports" is now
  set there.  The change from $parameter to $param allows a long line
  to stay below 80 columns.

Signed-off-by: Martin Schwenke <mschwenke@ddn.com>
Reviewed-by: Volker Lendecke <vl@samba.org>
Autobuild-User(master): Volker Lendecke <vl@samba.org>
Autobuild-Date(master): Tue Feb 14 08:43:53 UTC 2023 on atb-devel-224
ctdb/config/events/legacy/50.samba.script
ctdb/tests/UNIT/eventscripts/50.samba.monitor.111.sh
ctdb/tests/UNIT/eventscripts/etc/samba/smb.conf
ctdb/tests/UNIT/eventscripts/stubs/testparm