/* Format of each line is "IP CURRENT_PNN [ALLOWED_PNN,...]".
* If multi is true then ALLOWED_PNNs are not allowed. */
static bool read_ctdb_public_ip_info_node(bool multi,
+ int numnodes,
struct ctdb_public_ip_list **k,
struct ctdb_public_ip_list *known)
{
tok = strtok(NULL, " \t#");
if (tok == NULL) {
+ if (! multi) {
+ for (n = 0; n < numnodes; n++) {
+ if (! add_ip(known, &known[n],
+ &addr, pnn)) {
+ goto fail;
+ }
+ }
+ }
continue;
}
if (multi) {
for (n = 0; n < numnodes; n++) {
- if (! read_ctdb_public_ip_info_node(multi, &k, known)) {
+ if (! read_ctdb_public_ip_info_node(multi, numnodes,
+ &k, known)) {
goto fail;
}
known[n] = *k;
}
} else {
- if (! read_ctdb_public_ip_info_node(multi, &k, known)) {
+ if (! read_ctdb_public_ip_info_node(multi, numnodes,
+ &k, known)) {
goto fail;
}
-
- /* Copy it to any nodes that don't have a
- * list assigned
- */
- for (n = 0; n < numnodes; n++) {
- if (known[n].num == 0) {
- known[n].num = k->num;
- known[n].ip = talloc_memdup(
- known, k->ip,
- k->num * sizeof(struct ctdb_public_ip));
- if (known[n].ip == NULL) {
- goto fail;
- }
- }
- }
}
return known;
--- /dev/null
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "3 nodes, all ok, IPs defined on 2, IPs all unassigned"
+
+setup_ctdbd <<EOF
+NODEMAP
+0 192.168.20.41 0x0 CURRENT RECMASTER
+1 192.168.20.42 0x0
+2 192.168.20.43 0x0
+
+IFACES
+:Name:LinkStatus:References:
+:eth2:1:2:
+:eth1:1:4:
+
+PUBLICIPS
+10.0.0.31 -1 0,2
+10.0.0.32 -1 0,2
+10.0.0.33 -1 0,2
+10.0.0.34 -1 0,2
+EOF
+
+ok_null
+test_takeover_helper
+
+required_result 0 <<EOF
+Public IPs on ALL nodes
+10.0.0.31 0
+10.0.0.32 2
+10.0.0.33 2
+10.0.0.34 0
+EOF
+test_ctdb_ip_all