These test cases show the current behavior of manual HA resource migrations, where the HA resource is in a strict or non-strict node affinity rule.
These are added in preparation of preventing manual HA resource migrations/relocations to nodes, which are not in the allowed set according to the HA resource's node affinity rules. Signed-off-by: Daniel Kral <[email protected]> --- src/test/test-node-affinity-nonstrict7/README | 9 ++ .../test-node-affinity-nonstrict7/cmdlist | 9 ++ .../hardware_status | 5 ++ .../test-node-affinity-nonstrict7/log.expect | 89 +++++++++++++++++++ .../manager_status | 1 + .../rules_config | 7 ++ .../service_config | 4 + src/test/test-node-affinity-strict7/README | 9 ++ src/test/test-node-affinity-strict7/cmdlist | 9 ++ .../hardware_status | 5 ++ .../test-node-affinity-strict7/log.expect | 87 ++++++++++++++++++ .../test-node-affinity-strict7/manager_status | 1 + .../test-node-affinity-strict7/rules_config | 9 ++ .../test-node-affinity-strict7/service_config | 4 + 14 files changed, 248 insertions(+) create mode 100644 src/test/test-node-affinity-nonstrict7/README create mode 100644 src/test/test-node-affinity-nonstrict7/cmdlist create mode 100644 src/test/test-node-affinity-nonstrict7/hardware_status create mode 100644 src/test/test-node-affinity-nonstrict7/log.expect create mode 100644 src/test/test-node-affinity-nonstrict7/manager_status create mode 100644 src/test/test-node-affinity-nonstrict7/rules_config create mode 100644 src/test/test-node-affinity-nonstrict7/service_config create mode 100644 src/test/test-node-affinity-strict7/README create mode 100644 src/test/test-node-affinity-strict7/cmdlist create mode 100644 src/test/test-node-affinity-strict7/hardware_status create mode 100644 src/test/test-node-affinity-strict7/log.expect create mode 100644 src/test/test-node-affinity-strict7/manager_status create mode 100644 src/test/test-node-affinity-strict7/rules_config create mode 100644 src/test/test-node-affinity-strict7/service_config diff --git a/src/test/test-node-affinity-nonstrict7/README b/src/test/test-node-affinity-nonstrict7/README new file mode 100644 index 00000000..35e532cc --- /dev/null +++ b/src/test/test-node-affinity-nonstrict7/README @@ -0,0 +1,9 @@ +Test whether services in a non-strict node affinity rule handle manual +migrations to nodes as expected with respect to whether these are part of the +node affinity rule or not. + +The test scenario is: +- vm:101 should be kept on node1 or node3 (preferred) +- vm:102 should be kept on node1 or node2 (preferred) +- vm:101 is running on node3 with failback enabled +- vm:102 is running on node3 with failback disabled diff --git a/src/test/test-node-affinity-nonstrict7/cmdlist b/src/test/test-node-affinity-nonstrict7/cmdlist new file mode 100644 index 00000000..d992c805 --- /dev/null +++ b/src/test/test-node-affinity-nonstrict7/cmdlist @@ -0,0 +1,9 @@ +[ + [ "power node1 on", "power node2 on", "power node3 on"], + [ "service vm:101 migrate node1" ], + [ "service vm:101 migrate node2" ], + [ "service vm:101 migrate node3" ], + [ "service vm:102 migrate node3" ], + [ "service vm:102 migrate node2" ], + [ "service vm:102 migrate node1" ] +] diff --git a/src/test/test-node-affinity-nonstrict7/hardware_status b/src/test/test-node-affinity-nonstrict7/hardware_status new file mode 100644 index 00000000..451beb13 --- /dev/null +++ b/src/test/test-node-affinity-nonstrict7/hardware_status @@ -0,0 +1,5 @@ +{ + "node1": { "power": "off", "network": "off" }, + "node2": { "power": "off", "network": "off" }, + "node3": { "power": "off", "network": "off" } +} diff --git a/src/test/test-node-affinity-nonstrict7/log.expect b/src/test/test-node-affinity-nonstrict7/log.expect new file mode 100644 index 00000000..31daa618 --- /dev/null +++ b/src/test/test-node-affinity-nonstrict7/log.expect @@ -0,0 +1,89 @@ +info 0 hardware: starting simulation +info 20 cmdlist: execute power node1 on +info 20 node1/crm: status change startup => wait_for_quorum +info 20 node1/lrm: status change startup => wait_for_agent_lock +info 20 cmdlist: execute power node2 on +info 20 node2/crm: status change startup => wait_for_quorum +info 20 node2/lrm: status change startup => wait_for_agent_lock +info 20 cmdlist: execute power node3 on +info 20 node3/crm: status change startup => wait_for_quorum +info 20 node3/lrm: status change startup => wait_for_agent_lock +info 20 node1/crm: got lock 'ha_manager_lock' +info 20 node1/crm: status change wait_for_quorum => master +info 20 node1/crm: node 'node1': state changed from 'unknown' => 'online' +info 20 node1/crm: node 'node2': state changed from 'unknown' => 'online' +info 20 node1/crm: node 'node3': state changed from 'unknown' => 'online' +info 20 node1/crm: adding new service 'vm:101' on node 'node3' +info 20 node1/crm: adding new service 'vm:102' on node 'node2' +info 20 node1/crm: service 'vm:101': state changed from 'request_start' to 'started' (node = node3) +info 20 node1/crm: service 'vm:102': state changed from 'request_start' to 'started' (node = node2) +info 22 node2/crm: status change wait_for_quorum => slave +info 23 node2/lrm: got lock 'ha_agent_node2_lock' +info 23 node2/lrm: status change wait_for_agent_lock => active +info 23 node2/lrm: starting service vm:102 +info 23 node2/lrm: service status vm:102 started +info 24 node3/crm: status change wait_for_quorum => slave +info 25 node3/lrm: got lock 'ha_agent_node3_lock' +info 25 node3/lrm: status change wait_for_agent_lock => active +info 25 node3/lrm: starting service vm:101 +info 25 node3/lrm: service status vm:101 started +info 120 cmdlist: execute service vm:101 migrate node1 +info 120 node1/crm: got crm command: migrate vm:101 node1 +info 120 node1/crm: migrate service 'vm:101' to node 'node1' +info 120 node1/crm: service 'vm:101': state changed from 'started' to 'migrate' (node = node3, target = node1) +info 121 node1/lrm: got lock 'ha_agent_node1_lock' +info 121 node1/lrm: status change wait_for_agent_lock => active +info 125 node3/lrm: service vm:101 - start migrate to node 'node1' +info 125 node3/lrm: service vm:101 - end migrate to node 'node1' +info 140 node1/crm: service 'vm:101': state changed from 'migrate' to 'started' (node = node1) +info 140 node1/crm: migrate service 'vm:101' to node 'node3' (running) +info 140 node1/crm: service 'vm:101': state changed from 'started' to 'migrate' (node = node1, target = node3) +info 141 node1/lrm: service vm:101 - start migrate to node 'node3' +info 141 node1/lrm: service vm:101 - end migrate to node 'node3' +info 160 node1/crm: service 'vm:101': state changed from 'migrate' to 'started' (node = node3) +info 165 node3/lrm: starting service vm:101 +info 165 node3/lrm: service status vm:101 started +info 220 cmdlist: execute service vm:101 migrate node2 +info 220 node1/crm: got crm command: migrate vm:101 node2 +info 220 node1/crm: migrate service 'vm:101' to node 'node2' +info 220 node1/crm: service 'vm:101': state changed from 'started' to 'migrate' (node = node3, target = node2) +info 225 node3/lrm: service vm:101 - start migrate to node 'node2' +info 225 node3/lrm: service vm:101 - end migrate to node 'node2' +info 240 node1/crm: service 'vm:101': state changed from 'migrate' to 'started' (node = node2) +info 240 node1/crm: migrate service 'vm:101' to node 'node3' (running) +info 240 node1/crm: service 'vm:101': state changed from 'started' to 'migrate' (node = node2, target = node3) +info 243 node2/lrm: service vm:101 - start migrate to node 'node3' +info 243 node2/lrm: service vm:101 - end migrate to node 'node3' +info 260 node1/crm: service 'vm:101': state changed from 'migrate' to 'started' (node = node3) +info 265 node3/lrm: starting service vm:101 +info 265 node3/lrm: service status vm:101 started +info 320 cmdlist: execute service vm:101 migrate node3 +info 320 node1/crm: ignore crm command - service already on target node: migrate vm:101 node3 +info 420 cmdlist: execute service vm:102 migrate node3 +info 420 node1/crm: got crm command: migrate vm:102 node3 +info 420 node1/crm: migrate service 'vm:102' to node 'node3' +info 420 node1/crm: service 'vm:102': state changed from 'started' to 'migrate' (node = node2, target = node3) +info 423 node2/lrm: service vm:102 - start migrate to node 'node3' +info 423 node2/lrm: service vm:102 - end migrate to node 'node3' +info 440 node1/crm: service 'vm:102': state changed from 'migrate' to 'started' (node = node3) +info 445 node3/lrm: starting service vm:102 +info 445 node3/lrm: service status vm:102 started +info 520 cmdlist: execute service vm:102 migrate node2 +info 520 node1/crm: got crm command: migrate vm:102 node2 +info 520 node1/crm: migrate service 'vm:102' to node 'node2' +info 520 node1/crm: service 'vm:102': state changed from 'started' to 'migrate' (node = node3, target = node2) +info 525 node3/lrm: service vm:102 - start migrate to node 'node2' +info 525 node3/lrm: service vm:102 - end migrate to node 'node2' +info 540 node1/crm: service 'vm:102': state changed from 'migrate' to 'started' (node = node2) +info 543 node2/lrm: starting service vm:102 +info 543 node2/lrm: service status vm:102 started +info 620 cmdlist: execute service vm:102 migrate node1 +info 620 node1/crm: got crm command: migrate vm:102 node1 +info 620 node1/crm: migrate service 'vm:102' to node 'node1' +info 620 node1/crm: service 'vm:102': state changed from 'started' to 'migrate' (node = node2, target = node1) +info 623 node2/lrm: service vm:102 - start migrate to node 'node1' +info 623 node2/lrm: service vm:102 - end migrate to node 'node1' +info 640 node1/crm: service 'vm:102': state changed from 'migrate' to 'started' (node = node1) +info 641 node1/lrm: starting service vm:102 +info 641 node1/lrm: service status vm:102 started +info 1220 hardware: exit simulation - done diff --git a/src/test/test-node-affinity-nonstrict7/manager_status b/src/test/test-node-affinity-nonstrict7/manager_status new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/src/test/test-node-affinity-nonstrict7/manager_status @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/test/test-node-affinity-nonstrict7/rules_config b/src/test/test-node-affinity-nonstrict7/rules_config new file mode 100644 index 00000000..8aa2c589 --- /dev/null +++ b/src/test/test-node-affinity-nonstrict7/rules_config @@ -0,0 +1,7 @@ +node-affinity: vm101-should-be-on-node1-node3 + nodes node1:1,node3:2 + resources vm:101 + +node-affinity: vm102-should-be-on-node1-node2 + nodes node1:1,node2:2 + resources vm:102 diff --git a/src/test/test-node-affinity-nonstrict7/service_config b/src/test/test-node-affinity-nonstrict7/service_config new file mode 100644 index 00000000..3a916390 --- /dev/null +++ b/src/test/test-node-affinity-nonstrict7/service_config @@ -0,0 +1,4 @@ +{ + "vm:101": { "node": "node3", "state": "started", "failback": 1 }, + "vm:102": { "node": "node2", "state": "started", "failback": 0 } +} diff --git a/src/test/test-node-affinity-strict7/README b/src/test/test-node-affinity-strict7/README new file mode 100644 index 00000000..bc0096f5 --- /dev/null +++ b/src/test/test-node-affinity-strict7/README @@ -0,0 +1,9 @@ +Test whether services in a strict node affinity rule handle manual migrations +to nodes as expected with respect to whether these are part of the node +affinity rule or not. + +The test scenario is: +- vm:101 must be kept on node1 or node3 (preferred) +- vm:102 must be kept on node1 or node2 (preferred) +- vm:101 is running on node3 with failback enabled +- vm:102 is running on node3 with failback disabled diff --git a/src/test/test-node-affinity-strict7/cmdlist b/src/test/test-node-affinity-strict7/cmdlist new file mode 100644 index 00000000..d992c805 --- /dev/null +++ b/src/test/test-node-affinity-strict7/cmdlist @@ -0,0 +1,9 @@ +[ + [ "power node1 on", "power node2 on", "power node3 on"], + [ "service vm:101 migrate node1" ], + [ "service vm:101 migrate node2" ], + [ "service vm:101 migrate node3" ], + [ "service vm:102 migrate node3" ], + [ "service vm:102 migrate node2" ], + [ "service vm:102 migrate node1" ] +] diff --git a/src/test/test-node-affinity-strict7/hardware_status b/src/test/test-node-affinity-strict7/hardware_status new file mode 100644 index 00000000..451beb13 --- /dev/null +++ b/src/test/test-node-affinity-strict7/hardware_status @@ -0,0 +1,5 @@ +{ + "node1": { "power": "off", "network": "off" }, + "node2": { "power": "off", "network": "off" }, + "node3": { "power": "off", "network": "off" } +} diff --git a/src/test/test-node-affinity-strict7/log.expect b/src/test/test-node-affinity-strict7/log.expect new file mode 100644 index 00000000..cbe9f323 --- /dev/null +++ b/src/test/test-node-affinity-strict7/log.expect @@ -0,0 +1,87 @@ +info 0 hardware: starting simulation +info 20 cmdlist: execute power node1 on +info 20 node1/crm: status change startup => wait_for_quorum +info 20 node1/lrm: status change startup => wait_for_agent_lock +info 20 cmdlist: execute power node2 on +info 20 node2/crm: status change startup => wait_for_quorum +info 20 node2/lrm: status change startup => wait_for_agent_lock +info 20 cmdlist: execute power node3 on +info 20 node3/crm: status change startup => wait_for_quorum +info 20 node3/lrm: status change startup => wait_for_agent_lock +info 20 node1/crm: got lock 'ha_manager_lock' +info 20 node1/crm: status change wait_for_quorum => master +info 20 node1/crm: node 'node1': state changed from 'unknown' => 'online' +info 20 node1/crm: node 'node2': state changed from 'unknown' => 'online' +info 20 node1/crm: node 'node3': state changed from 'unknown' => 'online' +info 20 node1/crm: adding new service 'vm:101' on node 'node3' +info 20 node1/crm: adding new service 'vm:102' on node 'node2' +info 20 node1/crm: service 'vm:101': state changed from 'request_start' to 'started' (node = node3) +info 20 node1/crm: service 'vm:102': state changed from 'request_start' to 'started' (node = node2) +info 22 node2/crm: status change wait_for_quorum => slave +info 23 node2/lrm: got lock 'ha_agent_node2_lock' +info 23 node2/lrm: status change wait_for_agent_lock => active +info 23 node2/lrm: starting service vm:102 +info 23 node2/lrm: service status vm:102 started +info 24 node3/crm: status change wait_for_quorum => slave +info 25 node3/lrm: got lock 'ha_agent_node3_lock' +info 25 node3/lrm: status change wait_for_agent_lock => active +info 25 node3/lrm: starting service vm:101 +info 25 node3/lrm: service status vm:101 started +info 120 cmdlist: execute service vm:101 migrate node1 +info 120 node1/crm: got crm command: migrate vm:101 node1 +info 120 node1/crm: migrate service 'vm:101' to node 'node1' +info 120 node1/crm: service 'vm:101': state changed from 'started' to 'migrate' (node = node3, target = node1) +info 121 node1/lrm: got lock 'ha_agent_node1_lock' +info 121 node1/lrm: status change wait_for_agent_lock => active +info 125 node3/lrm: service vm:101 - start migrate to node 'node1' +info 125 node3/lrm: service vm:101 - end migrate to node 'node1' +info 140 node1/crm: service 'vm:101': state changed from 'migrate' to 'started' (node = node1) +info 140 node1/crm: migrate service 'vm:101' to node 'node3' (running) +info 140 node1/crm: service 'vm:101': state changed from 'started' to 'migrate' (node = node1, target = node3) +info 141 node1/lrm: service vm:101 - start migrate to node 'node3' +info 141 node1/lrm: service vm:101 - end migrate to node 'node3' +info 160 node1/crm: service 'vm:101': state changed from 'migrate' to 'started' (node = node3) +info 165 node3/lrm: starting service vm:101 +info 165 node3/lrm: service status vm:101 started +info 220 cmdlist: execute service vm:101 migrate node2 +info 220 node1/crm: got crm command: migrate vm:101 node2 +info 220 node1/crm: migrate service 'vm:101' to node 'node2' +info 220 node1/crm: service 'vm:101': state changed from 'started' to 'migrate' (node = node3, target = node2) +info 225 node3/lrm: service vm:101 - start migrate to node 'node2' +info 225 node3/lrm: service vm:101 - end migrate to node 'node2' +info 240 node1/crm: service 'vm:101': state changed from 'migrate' to 'started' (node = node2) +info 240 node1/crm: migrate service 'vm:101' to node 'node3' (running) +info 240 node1/crm: service 'vm:101': state changed from 'started' to 'migrate' (node = node2, target = node3) +info 243 node2/lrm: service vm:101 - start migrate to node 'node3' +info 243 node2/lrm: service vm:101 - end migrate to node 'node3' +info 260 node1/crm: service 'vm:101': state changed from 'migrate' to 'started' (node = node3) +info 265 node3/lrm: starting service vm:101 +info 265 node3/lrm: service status vm:101 started +info 320 cmdlist: execute service vm:101 migrate node3 +info 320 node1/crm: ignore crm command - service already on target node: migrate vm:101 node3 +info 420 cmdlist: execute service vm:102 migrate node3 +info 420 node1/crm: got crm command: migrate vm:102 node3 +info 420 node1/crm: migrate service 'vm:102' to node 'node3' +info 420 node1/crm: service 'vm:102': state changed from 'started' to 'migrate' (node = node2, target = node3) +info 423 node2/lrm: service vm:102 - start migrate to node 'node3' +info 423 node2/lrm: service vm:102 - end migrate to node 'node3' +info 440 node1/crm: service 'vm:102': state changed from 'migrate' to 'started' (node = node3) +info 440 node1/crm: migrate service 'vm:102' to node 'node2' (running) +info 440 node1/crm: service 'vm:102': state changed from 'started' to 'migrate' (node = node3, target = node2) +info 445 node3/lrm: service vm:102 - start migrate to node 'node2' +info 445 node3/lrm: service vm:102 - end migrate to node 'node2' +info 460 node1/crm: service 'vm:102': state changed from 'migrate' to 'started' (node = node2) +info 463 node2/lrm: starting service vm:102 +info 463 node2/lrm: service status vm:102 started +info 520 cmdlist: execute service vm:102 migrate node2 +info 520 node1/crm: ignore crm command - service already on target node: migrate vm:102 node2 +info 620 cmdlist: execute service vm:102 migrate node1 +info 620 node1/crm: got crm command: migrate vm:102 node1 +info 620 node1/crm: migrate service 'vm:102' to node 'node1' +info 620 node1/crm: service 'vm:102': state changed from 'started' to 'migrate' (node = node2, target = node1) +info 623 node2/lrm: service vm:102 - start migrate to node 'node1' +info 623 node2/lrm: service vm:102 - end migrate to node 'node1' +info 640 node1/crm: service 'vm:102': state changed from 'migrate' to 'started' (node = node1) +info 641 node1/lrm: starting service vm:102 +info 641 node1/lrm: service status vm:102 started +info 1220 hardware: exit simulation - done diff --git a/src/test/test-node-affinity-strict7/manager_status b/src/test/test-node-affinity-strict7/manager_status new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/src/test/test-node-affinity-strict7/manager_status @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/test/test-node-affinity-strict7/rules_config b/src/test/test-node-affinity-strict7/rules_config new file mode 100644 index 00000000..622ba80b --- /dev/null +++ b/src/test/test-node-affinity-strict7/rules_config @@ -0,0 +1,9 @@ +node-affinity: vm101-must-be-on-node1-node3 + nodes node1:1,node3:2 + resources vm:101 + strict 1 + +node-affinity: vm102-must-be-on-node1-node2 + nodes node1:1,node2:2 + resources vm:102 + strict 1 diff --git a/src/test/test-node-affinity-strict7/service_config b/src/test/test-node-affinity-strict7/service_config new file mode 100644 index 00000000..3a916390 --- /dev/null +++ b/src/test/test-node-affinity-strict7/service_config @@ -0,0 +1,4 @@ +{ + "vm:101": { "node": "node3", "state": "started", "failback": 1 }, + "vm:102": { "node": "node2", "state": "started", "failback": 0 } +} -- 2.47.3 _______________________________________________ pve-devel mailing list [email protected] https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
