From: Martin Schwenke Date: Tue, 6 Mar 2018 00:30:07 +0000 (+1100) Subject: ctdb-daemon: Provide a default location for public addresses file X-Git-Tag: talloc-2.1.12~120 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1dcc0adf1a9c0d1b56bf0a4d4c323e5e70c8e2e8;p=thirdparty%2Fsamba.git ctdb-daemon: Provide a default location for public addresses file If the specified file or the default does not exist then log a warning. This is done in the takeover code to localise the handling of the public addresses file. Soon the daemon command-line option will go away and the takeover code will be replaced in the not too distant future. Signed-off-by: Martin Schwenke Reviewed-by: Amitay Isaacs --- diff --git a/ctdb/doc/ctdbd.1.xml b/ctdb/doc/ctdbd.1.xml index 8791ead1df9..ac1d22c74f3 100644 --- a/ctdb/doc/ctdbd.1.xml +++ b/ctdb/doc/ctdbd.1.xml @@ -299,7 +299,7 @@ - --public_addresses=FILENAME + --public-addresses=FILENAME FILENAME specifying a file containing the public IP @@ -313,7 +313,7 @@ nodes. - This is usually the file + Default is /usr/local/etc/ctdb/public_addresses diff --git a/ctdb/doc/ctdbd.conf.5.xml b/ctdb/doc/ctdbd.conf.5.xml index 1685692a106..c59f8062826 100644 --- a/ctdb/doc/ctdbd.conf.5.xml +++ b/ctdb/doc/ctdbd.conf.5.xml @@ -329,7 +329,7 @@ CTDB_PUBLIC_ADDRESSES=FILENAME - No default, usually + Default is /usr/local/etc/ctdb/public_addresses. Corresponds to . diff --git a/ctdb/server/ctdb_daemon.c b/ctdb/server/ctdb_daemon.c index 35c1ab639b5..7665e2a29c3 100644 --- a/ctdb/server/ctdb_daemon.c +++ b/ctdb/server/ctdb_daemon.c @@ -1340,12 +1340,10 @@ int ctdb_start_daemon(struct ctdb_context *ctdb, bool do_fork) initialise_node_flags(ctdb); - if (ctdb->public_addresses_file) { - ret = ctdb_set_public_addresses(ctdb, true); - if (ret == -1) { - DEBUG(DEBUG_ALERT,("Unable to setup public address list\n")); - exit(1); - } + ret = ctdb_set_public_addresses(ctdb, true); + if (ret == -1) { + D_ERR("Unable to setup public IP addresses\n"); + exit(1); } ctdb_initialise_vnn_map(ctdb); diff --git a/ctdb/server/ctdb_takeover.c b/ctdb/server/ctdb_takeover.c index cd240875ba2..fb100aa6ffc 100644 --- a/ctdb/server/ctdb_takeover.c +++ b/ctdb/server/ctdb_takeover.c @@ -1106,10 +1106,34 @@ static int ctdb_add_public_address(struct ctdb_context *ctdb, */ int ctdb_set_public_addresses(struct ctdb_context *ctdb, bool check_addresses) { + bool ok; char **lines; int nlines; int i; + /* If no public addresses file given then try the default */ + if (ctdb->public_addresses_file == NULL) { + const char *b = getenv("CTDB_BASE"); + if (b == NULL) { + DBG_ERR("CTDB_BASE not set\n"); + return -1; + } + ctdb->public_addresses_file = talloc_asprintf( + ctdb, "%s/%s", b, "public_addresses"); + if (ctdb->public_addresses_file == NULL) { + DBG_ERR("Out of memory\n"); + return -1; + } + } + + /* If the file doesn't exist then warn and do nothing */ + ok = file_exist(ctdb->public_addresses_file); + if (!ok) { + D_WARNING("Not loading public addresses, no file %s\n", + ctdb->public_addresses_file); + return 0; + } + lines = file_lines_load(ctdb->public_addresses_file, &nlines, 0, ctdb); if (lines == NULL) { ctdb_set_error(ctdb, "Failed to load public address list '%s'\n", ctdb->public_addresses_file); @@ -1164,6 +1188,9 @@ int ctdb_set_public_addresses(struct ctdb_context *ctdb, bool check_addresses) } + D_NOTICE("Loaded public addresses from %s\n", + ctdb->public_addresses_file); + talloc_free(lines); return 0; }