From dffa2b05acce8b73c2fdd085311732bf57f01b7f Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Sat, 16 Jan 2010 10:36:35 +0100 Subject: [PATCH] tools/ctdb: display interfaces in "ctdb ip" and "ctdb ip -Y" outputs metze --- tests/simple/11_ctdb_ip.sh | 13 +++++--- tools/ctdb.c | 66 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 72 insertions(+), 7 deletions(-) diff --git a/tests/simple/11_ctdb_ip.sh b/tests/simple/11_ctdb_ip.sh index 6ea1f956..59c5d52e 100755 --- a/tests/simple/11_ctdb_ip.sh +++ b/tests/simple/11_ctdb_ip.sh @@ -34,13 +34,18 @@ cluster_is_healthy echo "Getting list of public IPs..." try_command_on_node -v 1 $CTDB ip -n all ips=$(echo "$out" | sed \ - -e '1d') -machineout1=":Public IP:Node:" + -e '1d' \ + -e 's@ node\[@ @' \ + -e 's@\].*$@:@') +machineout1=":Public IP:Node:ActiveInterface:AvailableInterfaces:ConfiguredInterfaces:" machineout2=$(echo "$out" | sed \ -e '1d' \ -e 's@^@:@' \ - -e 's@ @:@' \ - -e 's@$@:@') + -e 's@ node\[@:@' \ + -e 's@\] active\[@:@' \ + -e 's@\] available\[@:@' \ + -e 's@\] configured\[@:@' \ + -e 's@\]$@:@') machineout=`echo -e "$machineout1\n$machineout2"` while read ip pnn ; do diff --git a/tools/ctdb.c b/tools/ctdb.c index 5c49dbaa..0aac3946 100644 --- a/tools/ctdb.c +++ b/tools/ctdb.c @@ -1658,7 +1658,7 @@ static int control_ip(struct ctdb_context *ctdb, int argc, const char **argv) } if (options.machinereadable){ - printf(":Public IP:Node:\n"); + printf(":Public IP:Node:ActiveInterface:AvailableInterfaces:ConfiguredInterfaces:\n"); } else { if (options.pnn == CTDB_BROADCAST_ALL) { printf("Public IPs on ALL nodes\n"); @@ -1668,11 +1668,71 @@ static int control_ip(struct ctdb_context *ctdb, int argc, const char **argv) } for (i=1;i<=ips->num;i++) { + struct ctdb_control_public_ip_info *info = NULL; + int32_t pnn; + char *aciface = NULL; + char *avifaces = NULL; + char *cifaces = NULL; + + if (options.pnn == CTDB_BROADCAST_ALL) { + pnn = ips->ips[ips->num-i].pnn; + } else { + pnn = options.pnn; + } + + if (pnn != -1) { + ret = ctdb_ctrl_get_public_ip_info(ctdb, TIMELIMIT(), pnn, ctdb, + &ips->ips[ips->num-i].addr, &info); + } else { + ret = -1; + } + + if (ret == 0) { + int j; + for (j=0; j < info->num; j++) { + if (cifaces == NULL) { + cifaces = talloc_strdup(info, + info->ifaces[j].name); + } else { + cifaces = talloc_asprintf_append(cifaces, + ",%s", + info->ifaces[j].name); + } + + if (info->active_idx == j) { + aciface = info->ifaces[j].name; + } + + if (info->ifaces[j].link_state == 0) { + continue; + } + + if (avifaces == NULL) { + avifaces = talloc_strdup(info, info->ifaces[j].name); + } else { + avifaces = talloc_asprintf_append(avifaces, + ",%s", + info->ifaces[j].name); + } + } + } + if (options.machinereadable){ - printf(":%s:%d:\n", ctdb_addr_to_str(&ips->ips[ips->num-i].addr), ips->ips[ips->num-i].pnn); + printf(":%s:%d:%s:%s:%s:\n", + ctdb_addr_to_str(&ips->ips[ips->num-i].addr), + ips->ips[ips->num-i].pnn, + aciface?aciface:"", + avifaces?avifaces:"", + cifaces?cifaces:""); } else { - printf("%s %d\n", ctdb_addr_to_str(&ips->ips[ips->num-i].addr), ips->ips[ips->num-i].pnn); + printf("%s node[%d] active[%s] available[%s] configured[%s]\n", + ctdb_addr_to_str(&ips->ips[ips->num-i].addr), + ips->ips[ips->num-i].pnn, + aciface?aciface:"", + avifaces?avifaces:"", + cifaces?cifaces:""); } + talloc_free(info); } talloc_free(tmp_ctx); -- 2.34.1