diff --git a/cts/scheduler/dot/coloc-cloned-group-promoted-dependent2.dot b/cts/scheduler/dot/coloc-cloned-group-promoted-dependent2.dot
index f6de4a45d7..d8f1c9f22b 100644
--- a/cts/scheduler/dot/coloc-cloned-group-promoted-dependent2.dot
+++ b/cts/scheduler/dot/coloc-cloned-group-promoted-dependent2.dot
@@ -1,26 +1,2 @@
  digraph "g" {
-"Cancel rsc1_monitor_10000 node2" -> "rsc1_promote_0 node2" [ style = bold]
-"Cancel rsc1_monitor_10000 node2" [ style=bold color="green" fontcolor="black"]
-"grp1-clone_demote_0" -> "grp1-clone_demoted_0" [ style = bold]
-"grp1-clone_demote_0" -> "grp1:1_demote_0" [ style = bold]
-"grp1-clone_demote_0" [ style=bold color="green" fontcolor="orange"]
-"grp1-clone_demoted_0" -> "grp1-clone_promote_0" [ style = bold]
-"grp1-clone_demoted_0" [ style=bold color="green" fontcolor="orange"]
-"grp1-clone_promote_0" -> "grp1:0_promote_0" [ style = bold]
-"grp1-clone_promote_0" [ style=bold color="green" fontcolor="orange"]
-"grp1-clone_promoted_0" [ style=bold color="green" fontcolor="orange"]
-"grp1:0_promote_0" -> "rsc1_promote_0 node2" [ style = bold]
-"grp1:0_promote_0" [ style=bold color="green" fontcolor="orange"]
-"grp1:0_promoted_0" -> "grp1-clone_promoted_0" [ style = bold]
-"grp1:0_promoted_0" [ style=bold color="green" fontcolor="orange"]
-"grp1:1_demote_0" -> "rsc1_demote_0 node1" [ style = bold]
-"grp1:1_demote_0" [ style=bold color="green" fontcolor="orange"]
-"grp1:1_demoted_0" -> "grp1-clone_demoted_0" [ style = bold]
-"grp1:1_demoted_0" [ style=bold color="green" fontcolor="orange"]
-"rsc1_demote_0 node1" -> "grp1:1_demoted_0" [ style = bold]
-"rsc1_demote_0 node1" -> "rsc1_monitor_10000 node1" [ style = bold]
-"rsc1_demote_0 node1" [ style=bold color="green" fontcolor="black"]
-"rsc1_monitor_10000 node1" [ style=bold color="green" fontcolor="black"]
-"rsc1_promote_0 node2" -> "grp1:0_promoted_0" [ style = bold]
-"rsc1_promote_0 node2" [ style=bold color="green" fontcolor="black"]
 }
diff --git a/cts/scheduler/exp/coloc-cloned-group-promoted-dependent2.exp b/cts/scheduler/exp/coloc-cloned-group-promoted-dependent2.exp
index 1f95c4db13..56e315ff01 100644
--- a/cts/scheduler/exp/coloc-cloned-group-promoted-dependent2.exp
+++ b/cts/scheduler/exp/coloc-cloned-group-promoted-dependent2.exp
@@ -1,148 +1 @@
-<transition_graph cluster-delay="60s" stonith-timeout="60s" failed-stop-offset="INFINITY" failed-start-offset="INFINITY"  transition_id="0">
-  <synapse id="0">
-    <action_set>
-      <pseudo_event id="13" operation="promoted" operation_key="grp1:0_promoted_0">
-        <attributes CRM_meta_clone_max="2" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_master_max="1" CRM_meta_master_node_max="1" CRM_meta_notify="false" CRM_meta_promoted_max="1" CRM_meta_promoted_node_max="1" CRM_meta_timeout="20000" />
-      </pseudo_event>
-    </action_set>
-    <inputs>
-      <trigger>
-        <rsc_op id="5" operation="promote" operation_key="rsc1_promote_0" internal_operation_key="rsc1:0_promote_0" on_node="node2" on_node_uuid="2"/>
-      </trigger>
-    </inputs>
-  </synapse>
-  <synapse id="1">
-    <action_set>
-      <pseudo_event id="12" operation="promote" operation_key="grp1:0_promote_0">
-        <attributes CRM_meta_clone_max="2" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_master_max="1" CRM_meta_master_node_max="1" CRM_meta_notify="false" CRM_meta_promoted_max="1" CRM_meta_promoted_node_max="1" CRM_meta_timeout="20000" />
-      </pseudo_event>
-    </action_set>
-    <inputs>
-      <trigger>
-        <pseudo_event id="30" operation="promote" operation_key="grp1-clone_promote_0"/>
-      </trigger>
-    </inputs>
-  </synapse>
-  <synapse id="2">
-    <action_set>
-      <rsc_op id="5" operation="promote" operation_key="rsc1_promote_0" internal_operation_key="rsc1:0_promote_0" on_node="node2" on_node_uuid="2">
-        <primitive id="rsc1" long-id="rsc1:0" class="ocf" provider="pacemaker" type="Stateful"/>
-        <attributes CRM_meta_clone="0" CRM_meta_clone_max="2" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_master_max="1" CRM_meta_master_node_max="1" CRM_meta_notify="false" CRM_meta_on_node="node2" CRM_meta_on_node_uuid="2" CRM_meta_promoted_max="1" CRM_meta_promoted_node_max="1" CRM_meta_timeout="20000" />
-      </rsc_op>
-    </action_set>
-    <inputs>
-      <trigger>
-        <rsc_op id="1" operation="cancel" operation_key="rsc1_monitor_10000" internal_operation_key="rsc1:0_monitor_10000" on_node="node2" on_node_uuid="2"/>
-      </trigger>
-      <trigger>
-        <pseudo_event id="12" operation="promote" operation_key="grp1:0_promote_0"/>
-      </trigger>
-    </inputs>
-  </synapse>
-  <synapse id="3">
-    <action_set>
-      <rsc_op id="1" operation="cancel" operation_key="rsc1_monitor_10000" internal_operation_key="rsc1:0_monitor_10000" on_node="node2" on_node_uuid="2">
-        <primitive id="rsc1" long-id="rsc1:0" class="ocf" provider="pacemaker" type="Stateful"/>
-        <attributes CRM_meta_clone="0" CRM_meta_clone_max="2" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_master_max="1" CRM_meta_master_node_max="1" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_on_node="node2" CRM_meta_on_node_uuid="2" CRM_meta_operation="monitor" CRM_meta_promoted_max="1" CRM_meta_promoted_node_max="1" CRM_meta_timeout="20000" />
-      </rsc_op>
-    </action_set>
-    <inputs/>
-  </synapse>
-  <synapse id="4">
-    <action_set>
-      <pseudo_event id="23" operation="demoted" operation_key="grp1:1_demoted_0">
-        <attributes CRM_meta_clone_max="2" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_master_max="1" CRM_meta_master_node_max="1" CRM_meta_notify="false" CRM_meta_promoted_max="1" CRM_meta_promoted_node_max="1" CRM_meta_timeout="20000" />
-      </pseudo_event>
-    </action_set>
-    <inputs>
-      <trigger>
-        <rsc_op id="15" operation="demote" operation_key="rsc1_demote_0" internal_operation_key="rsc1:1_demote_0" on_node="node1" on_node_uuid="1"/>
-      </trigger>
-    </inputs>
-  </synapse>
-  <synapse id="5">
-    <action_set>
-      <pseudo_event id="22" operation="demote" operation_key="grp1:1_demote_0">
-        <attributes CRM_meta_clone_max="2" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_master_max="1" CRM_meta_master_node_max="1" CRM_meta_notify="false" CRM_meta_promoted_max="1" CRM_meta_promoted_node_max="1" CRM_meta_timeout="20000" />
-      </pseudo_event>
-    </action_set>
-    <inputs>
-      <trigger>
-        <pseudo_event id="32" operation="demote" operation_key="grp1-clone_demote_0"/>
-      </trigger>
-    </inputs>
-  </synapse>
-  <synapse id="6" priority="2000">
-    <action_set>
-      <rsc_op id="17" operation="monitor" operation_key="rsc1_monitor_10000" internal_operation_key="rsc1:1_monitor_10000" on_node="node1" on_node_uuid="1">
-        <primitive id="rsc1" long-id="rsc1:1" class="ocf" provider="pacemaker" type="Stateful"/>
-        <attributes CRM_meta_clone="1" CRM_meta_clone_max="2" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_master_max="1" CRM_meta_master_node_max="1" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_on_node="node1" CRM_meta_on_node_uuid="1" CRM_meta_promoted_max="1" CRM_meta_promoted_node_max="1" CRM_meta_timeout="20000" />
-      </rsc_op>
-    </action_set>
-    <inputs>
-      <trigger>
-        <rsc_op id="15" operation="demote" operation_key="rsc1_demote_0" internal_operation_key="rsc1:1_demote_0" on_node="node1" on_node_uuid="1"/>
-      </trigger>
-    </inputs>
-  </synapse>
-  <synapse id="7" priority="2000">
-    <action_set>
-      <rsc_op id="15" operation="demote" operation_key="rsc1_demote_0" internal_operation_key="rsc1:1_demote_0" on_node="node1" on_node_uuid="1">
-        <primitive id="rsc1" long-id="rsc1:1" class="ocf" provider="pacemaker" type="Stateful"/>
-        <attributes CRM_meta_clone="1" CRM_meta_clone_max="2" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_master_max="1" CRM_meta_master_node_max="1" CRM_meta_notify="false" CRM_meta_on_node="node1" CRM_meta_on_node_uuid="1" CRM_meta_promoted_max="1" CRM_meta_promoted_node_max="1" CRM_meta_timeout="20000" />
-      </rsc_op>
-    </action_set>
-    <inputs>
-      <trigger>
-        <pseudo_event id="22" operation="demote" operation_key="grp1:1_demote_0"/>
-      </trigger>
-    </inputs>
-  </synapse>
-  <synapse id="8" priority="1000000">
-    <action_set>
-      <pseudo_event id="33" operation="demoted" operation_key="grp1-clone_demoted_0">
-        <attributes CRM_meta_clone_max="2" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_master_max="1" CRM_meta_master_node_max="1" CRM_meta_notify="false" CRM_meta_promoted_max="1" CRM_meta_promoted_node_max="1" CRM_meta_timeout="20000" />
-      </pseudo_event>
-    </action_set>
-    <inputs>
-      <trigger>
-        <pseudo_event id="23" operation="demoted" operation_key="grp1:1_demoted_0"/>
-      </trigger>
-      <trigger>
-        <pseudo_event id="32" operation="demote" operation_key="grp1-clone_demote_0"/>
-      </trigger>
-    </inputs>
-  </synapse>
-  <synapse id="9">
-    <action_set>
-      <pseudo_event id="32" operation="demote" operation_key="grp1-clone_demote_0">
-        <attributes CRM_meta_clone_max="2" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_master_max="1" CRM_meta_master_node_max="1" CRM_meta_notify="false" CRM_meta_promoted_max="1" CRM_meta_promoted_node_max="1" CRM_meta_timeout="20000" />
-      </pseudo_event>
-    </action_set>
-    <inputs/>
-  </synapse>
-  <synapse id="10" priority="1000000">
-    <action_set>
-      <pseudo_event id="31" operation="promoted" operation_key="grp1-clone_promoted_0">
-        <attributes CRM_meta_clone_max="2" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_master_max="1" CRM_meta_master_node_max="1" CRM_meta_notify="false" CRM_meta_promoted_max="1" CRM_meta_promoted_node_max="1" CRM_meta_timeout="20000" />
-      </pseudo_event>
-    </action_set>
-    <inputs>
-      <trigger>
-        <pseudo_event id="13" operation="promoted" operation_key="grp1:0_promoted_0"/>
-      </trigger>
-    </inputs>
-  </synapse>
-  <synapse id="11">
-    <action_set>
-      <pseudo_event id="30" operation="promote" operation_key="grp1-clone_promote_0">
-        <attributes CRM_meta_clone_max="2" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_master_max="1" CRM_meta_master_node_max="1" CRM_meta_notify="false" CRM_meta_promoted_max="1" CRM_meta_promoted_node_max="1" CRM_meta_timeout="20000" />
-      </pseudo_event>
-    </action_set>
-    <inputs>
-      <trigger>
-        <pseudo_event id="33" operation="demoted" operation_key="grp1-clone_demoted_0"/>
-      </trigger>
-    </inputs>
-  </synapse>
-</transition_graph>
+<transition_graph cluster-delay="60s" stonith-timeout="60s" failed-stop-offset="INFINITY" failed-start-offset="INFINITY"  transition_id="0"/>
diff --git a/cts/scheduler/scores/coloc-clone-stays-active.scores b/cts/scheduler/scores/coloc-clone-stays-active.scores
index 52c6bc59ef..6995176853 100644
--- a/cts/scheduler/scores/coloc-clone-stays-active.scores
+++ b/cts/scheduler/scores/coloc-clone-stays-active.scores
@@ -1,505 +1,505 @@
 
 drbd-pool-0:0 promotion score on s01-1: 10000
 drbd-pool-0:1 promotion score on s01-0: 12000
 drbd-pool-1:0 promotion score on s01-1: 12000
 drbd-pool-1:1 promotion score on s01-0: 10000
 drbd-s01-logs:0 promotion score on s01-1: 10000
 drbd-s01-logs:1 promotion score on s01-0: 10000
 drbd-s01-service:0 promotion score on s01-1: 10000
 drbd-s01-service:1 promotion score on s01-0: 10000
 drbd-s01-vm-data:0 promotion score on s01-1: 10000
 drbd-s01-vm-data:1 promotion score on s01-0: 1
 drbd-vds-dom0-stateless-0:0 promotion score on s01-1: 10000
 drbd-vds-dom0-stateless-0:1 promotion score on s01-0: 10000
 drbd-vds-http:0 promotion score on s01-1: 10000
 drbd-vds-http:1 promotion score on s01-0: 10000
 drbd-vds-tftpboot:0 promotion score on s01-1: 10000
 drbd-vds-tftpboot:1 promotion score on s01-0: 10000
 iscsi-pool-0-vips-fw:0 promotion score on s01-1: -INFINITY
-iscsi-pool-0-vips-fw:1 promotion score on s01-0: 2000
-iscsi-pool-1-vips-fw:0 promotion score on s01-1: 2000
+iscsi-pool-0-vips-fw:1 promotion score on s01-0: INFINITY
+iscsi-pool-1-vips-fw:0 promotion score on s01-1: INFINITY
 iscsi-pool-1-vips-fw:1 promotion score on s01-0: -INFINITY
 iscsi-vds-dom0-stateless-0-vips-fw:0 promotion score on s01-1: -INFINITY
 iscsi-vds-dom0-stateless-0-vips-fw:1 promotion score on s01-0: -INFINITY
 pcmk__clone_assign: cl-clvmd allocation score on s01-0: 0
 pcmk__clone_assign: cl-clvmd allocation score on s01-1: 0
 pcmk__clone_assign: cl-dhcpd allocation score on s01-0: 0
 pcmk__clone_assign: cl-dhcpd allocation score on s01-1: 0
 pcmk__clone_assign: cl-dlm allocation score on s01-0: 0
 pcmk__clone_assign: cl-dlm allocation score on s01-1: 0
 pcmk__clone_assign: cl-drbdlinks-s01-service allocation score on s01-0: 0
 pcmk__clone_assign: cl-drbdlinks-s01-service allocation score on s01-1: 0
 pcmk__clone_assign: cl-gfs2 allocation score on s01-0: 0
 pcmk__clone_assign: cl-gfs2 allocation score on s01-1: 0
 pcmk__clone_assign: cl-ietd allocation score on s01-0: 12001
 pcmk__clone_assign: cl-ietd allocation score on s01-1: 1000
 pcmk__clone_assign: cl-libvirtd allocation score on s01-0: 0
 pcmk__clone_assign: cl-libvirtd allocation score on s01-1: 0
 pcmk__clone_assign: cl-o2cb allocation score on s01-0: 0
 pcmk__clone_assign: cl-o2cb allocation score on s01-1: 0
 pcmk__clone_assign: cl-ospf-routing allocation score on s01-0: 0
 pcmk__clone_assign: cl-ospf-routing allocation score on s01-1: 0
 pcmk__clone_assign: cl-s01-logs-fs allocation score on s01-0: 0
 pcmk__clone_assign: cl-s01-logs-fs allocation score on s01-1: 0
 pcmk__clone_assign: cl-s01-service-fs allocation score on s01-0: 0
 pcmk__clone_assign: cl-s01-service-fs allocation score on s01-1: 0
 pcmk__clone_assign: cl-s01-vm-data-metadata-fs allocation score on s01-0: 0
 pcmk__clone_assign: cl-s01-vm-data-metadata-fs allocation score on s01-1: 0
 pcmk__clone_assign: cl-s01-vm-data-storage-pool allocation score on s01-0: 0
 pcmk__clone_assign: cl-s01-vm-data-storage-pool allocation score on s01-1: 0
 pcmk__clone_assign: cl-vds-http-fs allocation score on s01-0: 0
 pcmk__clone_assign: cl-vds-http-fs allocation score on s01-1: 0
 pcmk__clone_assign: cl-vds-tftpboot-fs allocation score on s01-0: 0
 pcmk__clone_assign: cl-vds-tftpboot-fs allocation score on s01-1: 0
 pcmk__clone_assign: cl-vg-s01-vm-data allocation score on s01-0: 0
 pcmk__clone_assign: cl-vg-s01-vm-data allocation score on s01-1: 0
 pcmk__clone_assign: cl-xinetd allocation score on s01-0: 0
 pcmk__clone_assign: cl-xinetd allocation score on s01-1: 0
 pcmk__clone_assign: clvmd:0 allocation score on s01-0: 0
 pcmk__clone_assign: clvmd:0 allocation score on s01-1: 1
 pcmk__clone_assign: clvmd:1 allocation score on s01-0: 1
 pcmk__clone_assign: clvmd:1 allocation score on s01-1: 0
 pcmk__clone_assign: connected-outer allocation score on s01-0: 0
 pcmk__clone_assign: connected-outer allocation score on s01-1: 0
 pcmk__clone_assign: dhcpd:0 allocation score on s01-0: 0
 pcmk__clone_assign: dhcpd:0 allocation score on s01-1: 0
 pcmk__clone_assign: dhcpd:1 allocation score on s01-0: 0
 pcmk__clone_assign: dhcpd:1 allocation score on s01-1: 0
 pcmk__clone_assign: dlm:0 allocation score on s01-0: 0
 pcmk__clone_assign: dlm:0 allocation score on s01-1: 1
 pcmk__clone_assign: dlm:1 allocation score on s01-0: 1
 pcmk__clone_assign: dlm:1 allocation score on s01-1: 0
 pcmk__clone_assign: drbd-pool-0:0 allocation score on s01-0: 0
 pcmk__clone_assign: drbd-pool-0:0 allocation score on s01-1: 10001
 pcmk__clone_assign: drbd-pool-0:1 allocation score on s01-0: 10001
 pcmk__clone_assign: drbd-pool-0:1 allocation score on s01-1: 0
 pcmk__clone_assign: drbd-pool-1:0 allocation score on s01-0: 0
 pcmk__clone_assign: drbd-pool-1:0 allocation score on s01-1: 10001
 pcmk__clone_assign: drbd-pool-1:1 allocation score on s01-0: 10001
 pcmk__clone_assign: drbd-pool-1:1 allocation score on s01-1: 0
 pcmk__clone_assign: drbd-s01-logs:0 allocation score on s01-0: 0
 pcmk__clone_assign: drbd-s01-logs:0 allocation score on s01-1: 10001
 pcmk__clone_assign: drbd-s01-logs:1 allocation score on s01-0: 10001
 pcmk__clone_assign: drbd-s01-logs:1 allocation score on s01-1: 0
 pcmk__clone_assign: drbd-s01-service:0 allocation score on s01-0: 0
 pcmk__clone_assign: drbd-s01-service:0 allocation score on s01-1: 10001
 pcmk__clone_assign: drbd-s01-service:1 allocation score on s01-0: 10001
 pcmk__clone_assign: drbd-s01-service:1 allocation score on s01-1: 0
 pcmk__clone_assign: drbd-s01-vm-data:0 allocation score on s01-0: 0
 pcmk__clone_assign: drbd-s01-vm-data:0 allocation score on s01-1: 10001
 pcmk__clone_assign: drbd-s01-vm-data:1 allocation score on s01-0: 10001
 pcmk__clone_assign: drbd-s01-vm-data:1 allocation score on s01-1: 0
 pcmk__clone_assign: drbd-vds-dom0-stateless-0:0 allocation score on s01-0: 0
 pcmk__clone_assign: drbd-vds-dom0-stateless-0:0 allocation score on s01-1: 10001
 pcmk__clone_assign: drbd-vds-dom0-stateless-0:1 allocation score on s01-0: 10001
 pcmk__clone_assign: drbd-vds-dom0-stateless-0:1 allocation score on s01-1: 0
 pcmk__clone_assign: drbd-vds-http:0 allocation score on s01-0: 0
 pcmk__clone_assign: drbd-vds-http:0 allocation score on s01-1: 10001
 pcmk__clone_assign: drbd-vds-http:1 allocation score on s01-0: 10001
 pcmk__clone_assign: drbd-vds-http:1 allocation score on s01-1: 0
 pcmk__clone_assign: drbd-vds-tftpboot:0 allocation score on s01-0: 0
 pcmk__clone_assign: drbd-vds-tftpboot:0 allocation score on s01-1: 10001
 pcmk__clone_assign: drbd-vds-tftpboot:1 allocation score on s01-0: 10001
 pcmk__clone_assign: drbd-vds-tftpboot:1 allocation score on s01-1: 0
 pcmk__clone_assign: drbdlinks-s01-service:0 allocation score on s01-0: 0
 pcmk__clone_assign: drbdlinks-s01-service:0 allocation score on s01-1: 1
 pcmk__clone_assign: drbdlinks-s01-service:1 allocation score on s01-0: 1
 pcmk__clone_assign: drbdlinks-s01-service:1 allocation score on s01-1: 0
 pcmk__clone_assign: gfs2:0 allocation score on s01-0: 0
 pcmk__clone_assign: gfs2:0 allocation score on s01-1: 1
 pcmk__clone_assign: gfs2:1 allocation score on s01-0: 1
 pcmk__clone_assign: gfs2:1 allocation score on s01-1: 0
 pcmk__clone_assign: ietd:0 allocation score on s01-0: 0
 pcmk__clone_assign: ietd:0 allocation score on s01-1: 1
 pcmk__clone_assign: ietd:1 allocation score on s01-0: 1
 pcmk__clone_assign: ietd:1 allocation score on s01-1: 0
 pcmk__clone_assign: iscsi-pool-0-vips-fw:0 allocation score on s01-0: 0
 pcmk__clone_assign: iscsi-pool-0-vips-fw:0 allocation score on s01-1: 2000
 pcmk__clone_assign: iscsi-pool-0-vips-fw:1 allocation score on s01-0: 2000
 pcmk__clone_assign: iscsi-pool-0-vips-fw:1 allocation score on s01-1: 0
 pcmk__clone_assign: iscsi-pool-1-vips-fw:0 allocation score on s01-0: 0
 pcmk__clone_assign: iscsi-pool-1-vips-fw:0 allocation score on s01-1: 2000
 pcmk__clone_assign: iscsi-pool-1-vips-fw:1 allocation score on s01-0: 2000
 pcmk__clone_assign: iscsi-pool-1-vips-fw:1 allocation score on s01-1: 0
 pcmk__clone_assign: iscsi-vds-dom0-stateless-0-vips-fw:0 allocation score on s01-0: 0
 pcmk__clone_assign: iscsi-vds-dom0-stateless-0-vips-fw:0 allocation score on s01-1: 2000
 pcmk__clone_assign: iscsi-vds-dom0-stateless-0-vips-fw:1 allocation score on s01-0: 2000
 pcmk__clone_assign: iscsi-vds-dom0-stateless-0-vips-fw:1 allocation score on s01-1: 0
 pcmk__clone_assign: libvirtd:0 allocation score on s01-0: 0
 pcmk__clone_assign: libvirtd:0 allocation score on s01-1: 1
 pcmk__clone_assign: libvirtd:1 allocation score on s01-0: 1
 pcmk__clone_assign: libvirtd:1 allocation score on s01-1: 0
 pcmk__clone_assign: ms-drbd-pool-0 allocation score on s01-0: 1000
 pcmk__clone_assign: ms-drbd-pool-0 allocation score on s01-1: 0
 pcmk__clone_assign: ms-drbd-pool-1 allocation score on s01-0: 0
 pcmk__clone_assign: ms-drbd-pool-1 allocation score on s01-1: 1000
 pcmk__clone_assign: ms-drbd-s01-logs allocation score on s01-0: 0
 pcmk__clone_assign: ms-drbd-s01-logs allocation score on s01-1: 0
 pcmk__clone_assign: ms-drbd-s01-service allocation score on s01-0: 0
 pcmk__clone_assign: ms-drbd-s01-service allocation score on s01-1: 0
 pcmk__clone_assign: ms-drbd-s01-vm-data allocation score on s01-0: 0
 pcmk__clone_assign: ms-drbd-s01-vm-data allocation score on s01-1: 0
 pcmk__clone_assign: ms-drbd-vds-dom0-stateless-0 allocation score on s01-0: 0
 pcmk__clone_assign: ms-drbd-vds-dom0-stateless-0 allocation score on s01-1: 0
 pcmk__clone_assign: ms-drbd-vds-http allocation score on s01-0: 0
 pcmk__clone_assign: ms-drbd-vds-http allocation score on s01-1: 0
 pcmk__clone_assign: ms-drbd-vds-tftpboot allocation score on s01-0: 0
 pcmk__clone_assign: ms-drbd-vds-tftpboot allocation score on s01-1: 0
 pcmk__clone_assign: ms-iscsi-pool-0-vips-fw allocation score on s01-0: 0
 pcmk__clone_assign: ms-iscsi-pool-0-vips-fw allocation score on s01-1: 0
 pcmk__clone_assign: ms-iscsi-pool-1-vips-fw allocation score on s01-0: 0
 pcmk__clone_assign: ms-iscsi-pool-1-vips-fw allocation score on s01-1: 0
 pcmk__clone_assign: ms-iscsi-vds-dom0-stateless-0-vips-fw allocation score on s01-0: 0
 pcmk__clone_assign: ms-iscsi-vds-dom0-stateless-0-vips-fw allocation score on s01-1: 0
 pcmk__clone_assign: o2cb:0 allocation score on s01-0: 0
 pcmk__clone_assign: o2cb:0 allocation score on s01-1: 0
 pcmk__clone_assign: o2cb:1 allocation score on s01-0: 0
 pcmk__clone_assign: o2cb:1 allocation score on s01-1: 0
 pcmk__clone_assign: ospf-routing:0 allocation score on s01-0: 0
 pcmk__clone_assign: ospf-routing:0 allocation score on s01-1: 0
 pcmk__clone_assign: ospf-routing:1 allocation score on s01-0: 0
 pcmk__clone_assign: ospf-routing:1 allocation score on s01-1: 0
 pcmk__clone_assign: ospfd:0 allocation score on s01-0: 0
 pcmk__clone_assign: ospfd:0 allocation score on s01-1: 1
 pcmk__clone_assign: ospfd:1 allocation score on s01-0: 1
 pcmk__clone_assign: ospfd:1 allocation score on s01-1: 0
 pcmk__clone_assign: ping-bmc-and-switch:0 allocation score on s01-0: 0
 pcmk__clone_assign: ping-bmc-and-switch:0 allocation score on s01-1: 1
 pcmk__clone_assign: ping-bmc-and-switch:1 allocation score on s01-0: 1
 pcmk__clone_assign: ping-bmc-and-switch:1 allocation score on s01-1: 0
 pcmk__clone_assign: s01-logs-fs:0 allocation score on s01-0: 0
 pcmk__clone_assign: s01-logs-fs:0 allocation score on s01-1: 1
 pcmk__clone_assign: s01-logs-fs:1 allocation score on s01-0: 1
 pcmk__clone_assign: s01-logs-fs:1 allocation score on s01-1: 0
 pcmk__clone_assign: s01-service-fs:0 allocation score on s01-0: 0
 pcmk__clone_assign: s01-service-fs:0 allocation score on s01-1: 1
 pcmk__clone_assign: s01-service-fs:1 allocation score on s01-0: 1
 pcmk__clone_assign: s01-service-fs:1 allocation score on s01-1: 0
 pcmk__clone_assign: s01-vm-data-metadata-fs:0 allocation score on s01-0: 0
 pcmk__clone_assign: s01-vm-data-metadata-fs:0 allocation score on s01-1: 1
 pcmk__clone_assign: s01-vm-data-metadata-fs:1 allocation score on s01-0: 1
 pcmk__clone_assign: s01-vm-data-metadata-fs:1 allocation score on s01-1: 0
 pcmk__clone_assign: s01-vm-data-storage-pool:0 allocation score on s01-0: 0
 pcmk__clone_assign: s01-vm-data-storage-pool:0 allocation score on s01-1: 1
 pcmk__clone_assign: s01-vm-data-storage-pool:1 allocation score on s01-0: 1
 pcmk__clone_assign: s01-vm-data-storage-pool:1 allocation score on s01-1: 0
 pcmk__clone_assign: vds-http-fs:0 allocation score on s01-0: 0
 pcmk__clone_assign: vds-http-fs:0 allocation score on s01-1: 1
 pcmk__clone_assign: vds-http-fs:1 allocation score on s01-0: 1
 pcmk__clone_assign: vds-http-fs:1 allocation score on s01-1: 0
 pcmk__clone_assign: vds-tftpboot-fs:0 allocation score on s01-0: 0
 pcmk__clone_assign: vds-tftpboot-fs:0 allocation score on s01-1: 0
 pcmk__clone_assign: vds-tftpboot-fs:1 allocation score on s01-0: 0
 pcmk__clone_assign: vds-tftpboot-fs:1 allocation score on s01-1: 0
 pcmk__clone_assign: vg-s01-vm-data:0 allocation score on s01-0: 0
 pcmk__clone_assign: vg-s01-vm-data:0 allocation score on s01-1: 1
 pcmk__clone_assign: vg-s01-vm-data:1 allocation score on s01-0: 1
 pcmk__clone_assign: vg-s01-vm-data:1 allocation score on s01-1: 0
 pcmk__clone_assign: vip-227-fw:0 allocation score on s01-0: 0
 pcmk__clone_assign: vip-227-fw:0 allocation score on s01-1: 1
 pcmk__clone_assign: vip-227-fw:1 allocation score on s01-0: 1
 pcmk__clone_assign: vip-227-fw:1 allocation score on s01-1: 0
 pcmk__clone_assign: vip-228-fw:0 allocation score on s01-0: 0
 pcmk__clone_assign: vip-228-fw:0 allocation score on s01-1: 1
 pcmk__clone_assign: vip-228-fw:1 allocation score on s01-0: 1
 pcmk__clone_assign: vip-228-fw:1 allocation score on s01-1: 0
 pcmk__clone_assign: vip-235-fw:0 allocation score on s01-0: 0
 pcmk__clone_assign: vip-235-fw:0 allocation score on s01-1: 1
 pcmk__clone_assign: vip-235-fw:1 allocation score on s01-0: 1
 pcmk__clone_assign: vip-235-fw:1 allocation score on s01-1: 0
 pcmk__clone_assign: vip-236-fw:0 allocation score on s01-0: 0
 pcmk__clone_assign: vip-236-fw:0 allocation score on s01-1: 1
 pcmk__clone_assign: vip-236-fw:1 allocation score on s01-0: 1
 pcmk__clone_assign: vip-236-fw:1 allocation score on s01-1: 0
 pcmk__clone_assign: vip-237-fw:0 allocation score on s01-0: 0
 pcmk__clone_assign: vip-237-fw:0 allocation score on s01-1: 1
 pcmk__clone_assign: vip-237-fw:1 allocation score on s01-0: 1
 pcmk__clone_assign: vip-237-fw:1 allocation score on s01-1: 0
 pcmk__clone_assign: vip-238-fw:0 allocation score on s01-0: 0
 pcmk__clone_assign: vip-238-fw:0 allocation score on s01-1: 1
 pcmk__clone_assign: vip-238-fw:1 allocation score on s01-0: 1
 pcmk__clone_assign: vip-238-fw:1 allocation score on s01-1: 0
 pcmk__clone_assign: xinetd:0 allocation score on s01-0: 0
 pcmk__clone_assign: xinetd:0 allocation score on s01-1: 1
 pcmk__clone_assign: xinetd:1 allocation score on s01-0: 1
 pcmk__clone_assign: xinetd:1 allocation score on s01-1: 0
 pcmk__clone_assign: zebra:0 allocation score on s01-0: 0
 pcmk__clone_assign: zebra:0 allocation score on s01-1: 1
 pcmk__clone_assign: zebra:1 allocation score on s01-0: 1
 pcmk__clone_assign: zebra:1 allocation score on s01-1: 0
 pcmk__group_assign: http-server allocation score on s01-0: 0
 pcmk__group_assign: http-server allocation score on s01-1: 0
 pcmk__group_assign: iscsi-pool-0-lun-1 allocation score on s01-0: 0
 pcmk__group_assign: iscsi-pool-0-lun-1 allocation score on s01-1: 0
 pcmk__group_assign: iscsi-pool-0-target allocation score on s01-0: 1000
 pcmk__group_assign: iscsi-pool-0-target allocation score on s01-1: 0
 pcmk__group_assign: iscsi-pool-0-target-all allocation score on s01-0: 1000
 pcmk__group_assign: iscsi-pool-0-target-all allocation score on s01-1: 0
 pcmk__group_assign: iscsi-pool-0-vips allocation score on s01-0: 0
 pcmk__group_assign: iscsi-pool-0-vips allocation score on s01-1: 0
 pcmk__group_assign: iscsi-pool-0-vips-fw:0 allocation score on s01-0: -INFINITY
 pcmk__group_assign: iscsi-pool-0-vips-fw:0 allocation score on s01-1: 2000
 pcmk__group_assign: iscsi-pool-0-vips-fw:1 allocation score on s01-0: 2000
 pcmk__group_assign: iscsi-pool-0-vips-fw:1 allocation score on s01-1: 0
 pcmk__group_assign: iscsi-pool-1-lun-1 allocation score on s01-0: 0
 pcmk__group_assign: iscsi-pool-1-lun-1 allocation score on s01-1: 0
 pcmk__group_assign: iscsi-pool-1-target allocation score on s01-0: 0
 pcmk__group_assign: iscsi-pool-1-target allocation score on s01-1: 1000
 pcmk__group_assign: iscsi-pool-1-target-all allocation score on s01-0: 0
 pcmk__group_assign: iscsi-pool-1-target-all allocation score on s01-1: 1000
 pcmk__group_assign: iscsi-pool-1-vips allocation score on s01-0: 0
 pcmk__group_assign: iscsi-pool-1-vips allocation score on s01-1: 0
 pcmk__group_assign: iscsi-pool-1-vips-fw:0 allocation score on s01-0: 0
 pcmk__group_assign: iscsi-pool-1-vips-fw:0 allocation score on s01-1: 2000
 pcmk__group_assign: iscsi-pool-1-vips-fw:1 allocation score on s01-0: 2000
 pcmk__group_assign: iscsi-pool-1-vips-fw:1 allocation score on s01-1: -INFINITY
 pcmk__group_assign: iscsi-vds-dom0-stateless-0-lun-1 allocation score on s01-0: 0
 pcmk__group_assign: iscsi-vds-dom0-stateless-0-lun-1 allocation score on s01-1: 0
 pcmk__group_assign: iscsi-vds-dom0-stateless-0-target allocation score on s01-0: 0
 pcmk__group_assign: iscsi-vds-dom0-stateless-0-target allocation score on s01-1: 0
 pcmk__group_assign: iscsi-vds-dom0-stateless-0-target-all allocation score on s01-0: 0
 pcmk__group_assign: iscsi-vds-dom0-stateless-0-target-all allocation score on s01-1: 0
 pcmk__group_assign: iscsi-vds-dom0-stateless-0-vips allocation score on s01-0: 0
 pcmk__group_assign: iscsi-vds-dom0-stateless-0-vips allocation score on s01-1: 0
 pcmk__group_assign: iscsi-vds-dom0-stateless-0-vips-fw:0 allocation score on s01-0: 0
 pcmk__group_assign: iscsi-vds-dom0-stateless-0-vips-fw:0 allocation score on s01-1: 2000
 pcmk__group_assign: iscsi-vds-dom0-stateless-0-vips-fw:1 allocation score on s01-0: 2000
 pcmk__group_assign: iscsi-vds-dom0-stateless-0-vips-fw:1 allocation score on s01-1: -INFINITY
 pcmk__group_assign: nginx allocation score on s01-0: 0
 pcmk__group_assign: nginx allocation score on s01-1: 0
 pcmk__group_assign: ospf-routing:0 allocation score on s01-0: 0
 pcmk__group_assign: ospf-routing:0 allocation score on s01-1: 0
 pcmk__group_assign: ospf-routing:1 allocation score on s01-0: 0
 pcmk__group_assign: ospf-routing:1 allocation score on s01-1: -INFINITY
 pcmk__group_assign: ospfd:0 allocation score on s01-0: 0
 pcmk__group_assign: ospfd:0 allocation score on s01-1: 1
 pcmk__group_assign: ospfd:1 allocation score on s01-0: 1
 pcmk__group_assign: ospfd:1 allocation score on s01-1: -INFINITY
 pcmk__group_assign: syslog-ng allocation score on s01-0: 0
 pcmk__group_assign: syslog-ng allocation score on s01-1: 0
 pcmk__group_assign: syslog-server allocation score on s01-0: 0
 pcmk__group_assign: syslog-server allocation score on s01-1: 0
 pcmk__group_assign: tftp-server allocation score on s01-0: 0
 pcmk__group_assign: tftp-server allocation score on s01-1: 0
 pcmk__group_assign: tftpd allocation score on s01-0: 0
 pcmk__group_assign: tftpd allocation score on s01-1: 0
 pcmk__group_assign: vip-227 allocation score on s01-0: 0
 pcmk__group_assign: vip-227 allocation score on s01-1: 0
 pcmk__group_assign: vip-227-fw:0 allocation score on s01-0: 0
 pcmk__group_assign: vip-227-fw:0 allocation score on s01-1: 1
 pcmk__group_assign: vip-227-fw:1 allocation score on s01-0: 1
 pcmk__group_assign: vip-227-fw:1 allocation score on s01-1: -INFINITY
 pcmk__group_assign: vip-228 allocation score on s01-0: 0
 pcmk__group_assign: vip-228 allocation score on s01-1: 0
 pcmk__group_assign: vip-228-fw:0 allocation score on s01-0: 0
 pcmk__group_assign: vip-228-fw:0 allocation score on s01-1: 1
 pcmk__group_assign: vip-228-fw:1 allocation score on s01-0: 1
 pcmk__group_assign: vip-228-fw:1 allocation score on s01-1: -INFINITY
 pcmk__group_assign: vip-232 allocation score on s01-0: 0
 pcmk__group_assign: vip-232 allocation score on s01-1: 0
 pcmk__group_assign: vip-233 allocation score on s01-0: 0
 pcmk__group_assign: vip-233 allocation score on s01-1: 0
 pcmk__group_assign: vip-234 allocation score on s01-0: 0
 pcmk__group_assign: vip-234 allocation score on s01-1: 0
 pcmk__group_assign: vip-235 allocation score on s01-0: 0
 pcmk__group_assign: vip-235 allocation score on s01-1: 0
 pcmk__group_assign: vip-235-fw:0 allocation score on s01-0: -INFINITY
 pcmk__group_assign: vip-235-fw:0 allocation score on s01-1: 1
 pcmk__group_assign: vip-235-fw:1 allocation score on s01-0: 1
 pcmk__group_assign: vip-235-fw:1 allocation score on s01-1: 0
 pcmk__group_assign: vip-236 allocation score on s01-0: 0
 pcmk__group_assign: vip-236 allocation score on s01-1: 0
 pcmk__group_assign: vip-236-fw:0 allocation score on s01-0: -INFINITY
 pcmk__group_assign: vip-236-fw:0 allocation score on s01-1: 1
 pcmk__group_assign: vip-236-fw:1 allocation score on s01-0: 1
 pcmk__group_assign: vip-236-fw:1 allocation score on s01-1: 0
 pcmk__group_assign: vip-237 allocation score on s01-0: 0
 pcmk__group_assign: vip-237 allocation score on s01-1: 0
 pcmk__group_assign: vip-237-fw:0 allocation score on s01-0: 0
 pcmk__group_assign: vip-237-fw:0 allocation score on s01-1: 1
 pcmk__group_assign: vip-237-fw:1 allocation score on s01-0: 1
 pcmk__group_assign: vip-237-fw:1 allocation score on s01-1: -INFINITY
 pcmk__group_assign: vip-238 allocation score on s01-0: 0
 pcmk__group_assign: vip-238 allocation score on s01-1: 0
 pcmk__group_assign: vip-238-fw:0 allocation score on s01-0: 0
 pcmk__group_assign: vip-238-fw:0 allocation score on s01-1: 1
 pcmk__group_assign: vip-238-fw:1 allocation score on s01-0: 1
 pcmk__group_assign: vip-238-fw:1 allocation score on s01-1: -INFINITY
 pcmk__group_assign: zebra:0 allocation score on s01-0: 0
 pcmk__group_assign: zebra:0 allocation score on s01-1: 1
 pcmk__group_assign: zebra:1 allocation score on s01-0: 1
 pcmk__group_assign: zebra:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: clvmd:0 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: clvmd:0 allocation score on s01-1: 1
 pcmk__primitive_assign: clvmd:1 allocation score on s01-0: 1
 pcmk__primitive_assign: clvmd:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: dhcpd:0 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: dhcpd:0 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: dhcpd:1 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: dhcpd:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: dlm:0 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: dlm:0 allocation score on s01-1: 1
 pcmk__primitive_assign: dlm:1 allocation score on s01-0: 1
 pcmk__primitive_assign: dlm:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: drbd-pool-0:0 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: drbd-pool-0:0 allocation score on s01-1: 10001
 pcmk__primitive_assign: drbd-pool-0:1 allocation score on s01-0: 11001
 pcmk__primitive_assign: drbd-pool-0:1 allocation score on s01-1: 0
 pcmk__primitive_assign: drbd-pool-1:0 allocation score on s01-0: 0
 pcmk__primitive_assign: drbd-pool-1:0 allocation score on s01-1: 11001
 pcmk__primitive_assign: drbd-pool-1:1 allocation score on s01-0: 10001
 pcmk__primitive_assign: drbd-pool-1:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: drbd-s01-logs:0 allocation score on s01-0: 0
 pcmk__primitive_assign: drbd-s01-logs:0 allocation score on s01-1: 10001
 pcmk__primitive_assign: drbd-s01-logs:1 allocation score on s01-0: 10001
 pcmk__primitive_assign: drbd-s01-logs:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: drbd-s01-service:0 allocation score on s01-0: 0
 pcmk__primitive_assign: drbd-s01-service:0 allocation score on s01-1: 10001
 pcmk__primitive_assign: drbd-s01-service:1 allocation score on s01-0: 10001
 pcmk__primitive_assign: drbd-s01-service:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: drbd-s01-vm-data:0 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: drbd-s01-vm-data:0 allocation score on s01-1: 10001
 pcmk__primitive_assign: drbd-s01-vm-data:1 allocation score on s01-0: 10001
 pcmk__primitive_assign: drbd-s01-vm-data:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: drbd-vds-dom0-stateless-0:0 allocation score on s01-0: 0
 pcmk__primitive_assign: drbd-vds-dom0-stateless-0:0 allocation score on s01-1: 10001
 pcmk__primitive_assign: drbd-vds-dom0-stateless-0:1 allocation score on s01-0: 10001
 pcmk__primitive_assign: drbd-vds-dom0-stateless-0:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: drbd-vds-http:0 allocation score on s01-0: 0
 pcmk__primitive_assign: drbd-vds-http:0 allocation score on s01-1: 10001
 pcmk__primitive_assign: drbd-vds-http:1 allocation score on s01-0: 10001
 pcmk__primitive_assign: drbd-vds-http:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: drbd-vds-tftpboot:0 allocation score on s01-0: 0
 pcmk__primitive_assign: drbd-vds-tftpboot:0 allocation score on s01-1: 10001
 pcmk__primitive_assign: drbd-vds-tftpboot:1 allocation score on s01-0: 10001
 pcmk__primitive_assign: drbd-vds-tftpboot:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: drbdlinks-s01-service:0 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: drbdlinks-s01-service:0 allocation score on s01-1: 1
 pcmk__primitive_assign: drbdlinks-s01-service:1 allocation score on s01-0: 1
 pcmk__primitive_assign: drbdlinks-s01-service:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: gfs2:0 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: gfs2:0 allocation score on s01-1: 1
 pcmk__primitive_assign: gfs2:1 allocation score on s01-0: 1
 pcmk__primitive_assign: gfs2:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: ietd:0 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: ietd:0 allocation score on s01-1: 1001
 pcmk__primitive_assign: ietd:1 allocation score on s01-0: 12002
 pcmk__primitive_assign: ietd:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: iscsi-pool-0-lun-1 allocation score on s01-0: 0
 pcmk__primitive_assign: iscsi-pool-0-lun-1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: iscsi-pool-0-target allocation score on s01-0: 12001
 pcmk__primitive_assign: iscsi-pool-0-target allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: iscsi-pool-1-lun-1 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: iscsi-pool-1-lun-1 allocation score on s01-1: 0
 pcmk__primitive_assign: iscsi-pool-1-target allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: iscsi-pool-1-target allocation score on s01-1: 12001
 pcmk__primitive_assign: iscsi-vds-dom0-stateless-0-lun-1 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: iscsi-vds-dom0-stateless-0-lun-1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: iscsi-vds-dom0-stateless-0-target allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: iscsi-vds-dom0-stateless-0-target allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: libvirtd:0 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: libvirtd:0 allocation score on s01-1: 1
 pcmk__primitive_assign: libvirtd:1 allocation score on s01-0: 1
 pcmk__primitive_assign: libvirtd:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: mgmt-vm allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: mgmt-vm allocation score on s01-1: 0
 pcmk__primitive_assign: nginx allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: nginx allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: o2cb:0 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: o2cb:0 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: o2cb:1 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: o2cb:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: ospfd:0 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: ospfd:0 allocation score on s01-1: 1
 pcmk__primitive_assign: ospfd:1 allocation score on s01-0: 1
 pcmk__primitive_assign: ospfd:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: ping-bmc-and-switch:0 allocation score on s01-0: 0
 pcmk__primitive_assign: ping-bmc-and-switch:0 allocation score on s01-1: 1
 pcmk__primitive_assign: ping-bmc-and-switch:1 allocation score on s01-0: 1
 pcmk__primitive_assign: ping-bmc-and-switch:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: s01-logs-fs:0 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: s01-logs-fs:0 allocation score on s01-1: 10002
 pcmk__primitive_assign: s01-logs-fs:1 allocation score on s01-0: 10002
 pcmk__primitive_assign: s01-logs-fs:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: s01-service-fs:0 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: s01-service-fs:0 allocation score on s01-1: 10002
 pcmk__primitive_assign: s01-service-fs:1 allocation score on s01-0: 10002
 pcmk__primitive_assign: s01-service-fs:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: s01-vm-data-metadata-fs:0 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: s01-vm-data-metadata-fs:0 allocation score on s01-1: 1
 pcmk__primitive_assign: s01-vm-data-metadata-fs:1 allocation score on s01-0: 1
 pcmk__primitive_assign: s01-vm-data-metadata-fs:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: s01-vm-data-storage-pool:0 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: s01-vm-data-storage-pool:0 allocation score on s01-1: 1
 pcmk__primitive_assign: s01-vm-data-storage-pool:1 allocation score on s01-0: 1
 pcmk__primitive_assign: s01-vm-data-storage-pool:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: stonith-s01-0 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: stonith-s01-0 allocation score on s01-1: 0
 pcmk__primitive_assign: stonith-s01-1 allocation score on s01-0: 0
 pcmk__primitive_assign: stonith-s01-1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: syslog-ng allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: syslog-ng allocation score on s01-1: 0
 pcmk__primitive_assign: tftpd allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: tftpd allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: vds-http-fs:0 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: vds-http-fs:0 allocation score on s01-1: 10002
 pcmk__primitive_assign: vds-http-fs:1 allocation score on s01-0: 10002
 pcmk__primitive_assign: vds-http-fs:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: vds-tftpboot-fs:0 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: vds-tftpboot-fs:0 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: vds-tftpboot-fs:1 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: vds-tftpboot-fs:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: vg-s01-vm-data:0 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: vg-s01-vm-data:0 allocation score on s01-1: 10002
 pcmk__primitive_assign: vg-s01-vm-data:1 allocation score on s01-0: 10002
 pcmk__primitive_assign: vg-s01-vm-data:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: vip-227 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: vip-227 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: vip-227-fw:0 allocation score on s01-0: 0
 pcmk__primitive_assign: vip-227-fw:0 allocation score on s01-1: 2
 pcmk__primitive_assign: vip-227-fw:1 allocation score on s01-0: 2
 pcmk__primitive_assign: vip-227-fw:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: vip-228 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: vip-228 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: vip-228-fw:0 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: vip-228-fw:0 allocation score on s01-1: 1
 pcmk__primitive_assign: vip-228-fw:1 allocation score on s01-0: 1
 pcmk__primitive_assign: vip-228-fw:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: vip-232 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: vip-232 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: vip-233 allocation score on s01-0: 0
 pcmk__primitive_assign: vip-233 allocation score on s01-1: 0
 pcmk__primitive_assign: vip-234 allocation score on s01-0: 0
 pcmk__primitive_assign: vip-234 allocation score on s01-1: 0
 pcmk__primitive_assign: vip-235 allocation score on s01-0: 0
 pcmk__primitive_assign: vip-235 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: vip-235-fw:0 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: vip-235-fw:0 allocation score on s01-1: 2
 pcmk__primitive_assign: vip-235-fw:1 allocation score on s01-0: 2
 pcmk__primitive_assign: vip-235-fw:1 allocation score on s01-1: 0
 pcmk__primitive_assign: vip-236 allocation score on s01-0: 0
 pcmk__primitive_assign: vip-236 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: vip-236-fw:0 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: vip-236-fw:0 allocation score on s01-1: 1
 pcmk__primitive_assign: vip-236-fw:1 allocation score on s01-0: 1
 pcmk__primitive_assign: vip-236-fw:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: vip-237 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: vip-237 allocation score on s01-1: 0
 pcmk__primitive_assign: vip-237-fw:0 allocation score on s01-0: 0
 pcmk__primitive_assign: vip-237-fw:0 allocation score on s01-1: 2
 pcmk__primitive_assign: vip-237-fw:1 allocation score on s01-0: 2
 pcmk__primitive_assign: vip-237-fw:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: vip-238 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: vip-238 allocation score on s01-1: 0
 pcmk__primitive_assign: vip-238-fw:0 allocation score on s01-0: -INFINITY
 pcmk__primitive_assign: vip-238-fw:0 allocation score on s01-1: 1
 pcmk__primitive_assign: vip-238-fw:1 allocation score on s01-0: 1
 pcmk__primitive_assign: vip-238-fw:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: xinetd:0 allocation score on s01-0: 0
 pcmk__primitive_assign: xinetd:0 allocation score on s01-1: 1
 pcmk__primitive_assign: xinetd:1 allocation score on s01-0: 1
 pcmk__primitive_assign: xinetd:1 allocation score on s01-1: -INFINITY
 pcmk__primitive_assign: zebra:0 allocation score on s01-0: 0
 pcmk__primitive_assign: zebra:0 allocation score on s01-1: 2
 pcmk__primitive_assign: zebra:1 allocation score on s01-0: 2
 pcmk__primitive_assign: zebra:1 allocation score on s01-1: -INFINITY
diff --git a/cts/scheduler/scores/coloc-cloned-group-promoted-dependent1.scores b/cts/scheduler/scores/coloc-cloned-group-promoted-dependent1.scores
index cb587f5d8d..a900815c34 100644
--- a/cts/scheduler/scores/coloc-cloned-group-promoted-dependent1.scores
+++ b/cts/scheduler/scores/coloc-cloned-group-promoted-dependent1.scores
@@ -1,27 +1,27 @@
 
-grp1:0 promotion score on node2: 50
-grp1:1 promotion score on node1: 11
+grp1:0 promotion score on node2: -INFINITY
+grp1:1 promotion score on node1: INFINITY
 pcmk__clone_assign: grp1-clone allocation score on node1: 0
 pcmk__clone_assign: grp1-clone allocation score on node2: 0
 pcmk__clone_assign: grp1:0 allocation score on node1: 0
 pcmk__clone_assign: grp1:0 allocation score on node2: 50
 pcmk__clone_assign: grp1:1 allocation score on node1: 10
 pcmk__clone_assign: grp1:1 allocation score on node2: 0
 pcmk__clone_assign: rsc1:0 allocation score on node1: 0
 pcmk__clone_assign: rsc1:0 allocation score on node2: 1
 pcmk__clone_assign: rsc1:1 allocation score on node1: 1
 pcmk__clone_assign: rsc1:1 allocation score on node2: 0
 pcmk__group_assign: grp1:0 allocation score on node1: 0
 pcmk__group_assign: grp1:0 allocation score on node2: 50
 pcmk__group_assign: grp1:1 allocation score on node1: 10
 pcmk__group_assign: grp1:1 allocation score on node2: -INFINITY
 pcmk__group_assign: rsc1:0 allocation score on node1: 0
 pcmk__group_assign: rsc1:0 allocation score on node2: 1
 pcmk__group_assign: rsc1:1 allocation score on node1: 1
 pcmk__group_assign: rsc1:1 allocation score on node2: -INFINITY
 pcmk__primitive_assign: primary allocation score on node1: 1
 pcmk__primitive_assign: primary allocation score on node2: 0
 pcmk__primitive_assign: rsc1:0 allocation score on node1: 0
 pcmk__primitive_assign: rsc1:0 allocation score on node2: 1
 pcmk__primitive_assign: rsc1:1 allocation score on node1: 1
 pcmk__primitive_assign: rsc1:1 allocation score on node2: -INFINITY
diff --git a/cts/scheduler/scores/coloc-cloned-group-promoted-dependent2.scores b/cts/scheduler/scores/coloc-cloned-group-promoted-dependent2.scores
index cb587f5d8d..151a57d702 100644
--- a/cts/scheduler/scores/coloc-cloned-group-promoted-dependent2.scores
+++ b/cts/scheduler/scores/coloc-cloned-group-promoted-dependent2.scores
@@ -1,27 +1,27 @@
 
 grp1:0 promotion score on node2: 50
-grp1:1 promotion score on node1: 11
+grp1:1 promotion score on node1: 2011
 pcmk__clone_assign: grp1-clone allocation score on node1: 0
 pcmk__clone_assign: grp1-clone allocation score on node2: 0
 pcmk__clone_assign: grp1:0 allocation score on node1: 0
 pcmk__clone_assign: grp1:0 allocation score on node2: 50
 pcmk__clone_assign: grp1:1 allocation score on node1: 10
 pcmk__clone_assign: grp1:1 allocation score on node2: 0
 pcmk__clone_assign: rsc1:0 allocation score on node1: 0
 pcmk__clone_assign: rsc1:0 allocation score on node2: 1
 pcmk__clone_assign: rsc1:1 allocation score on node1: 1
 pcmk__clone_assign: rsc1:1 allocation score on node2: 0
 pcmk__group_assign: grp1:0 allocation score on node1: 0
 pcmk__group_assign: grp1:0 allocation score on node2: 50
 pcmk__group_assign: grp1:1 allocation score on node1: 10
 pcmk__group_assign: grp1:1 allocation score on node2: -INFINITY
 pcmk__group_assign: rsc1:0 allocation score on node1: 0
 pcmk__group_assign: rsc1:0 allocation score on node2: 1
 pcmk__group_assign: rsc1:1 allocation score on node1: 1
 pcmk__group_assign: rsc1:1 allocation score on node2: -INFINITY
 pcmk__primitive_assign: primary allocation score on node1: 1
 pcmk__primitive_assign: primary allocation score on node2: 0
 pcmk__primitive_assign: rsc1:0 allocation score on node1: 0
 pcmk__primitive_assign: rsc1:0 allocation score on node2: 1
 pcmk__primitive_assign: rsc1:1 allocation score on node1: 1
 pcmk__primitive_assign: rsc1:1 allocation score on node2: -INFINITY
diff --git a/cts/scheduler/scores/promoted-partially-demoted-group.scores b/cts/scheduler/scores/promoted-partially-demoted-group.scores
index f266c64753..d1504ac08c 100644
--- a/cts/scheduler/scores/promoted-partially-demoted-group.scores
+++ b/cts/scheduler/scores/promoted-partially-demoted-group.scores
@@ -1,93 +1,93 @@
 
 cdev-pool-0-drbd:0 promotion score on sd01-1: 10800
 cdev-pool-0-drbd:1 promotion score on sd01-0: INFINITY
 cdev-pool-0-iscsi-vips-fw:0 promotion score on sd01-1: -INFINITY
-cdev-pool-0-iscsi-vips-fw:1 promotion score on sd01-0: 2000
+cdev-pool-0-iscsi-vips-fw:1 promotion score on sd01-0: INFINITY
 pcmk__clone_assign: cdev-pool-0-drbd:0 allocation score on sd01-0: 0
 pcmk__clone_assign: cdev-pool-0-drbd:0 allocation score on sd01-1: 10100
 pcmk__clone_assign: cdev-pool-0-drbd:1 allocation score on sd01-0: 10100
 pcmk__clone_assign: cdev-pool-0-drbd:1 allocation score on sd01-1: 0
 pcmk__clone_assign: cdev-pool-0-iscsi-vips-fw:0 allocation score on sd01-0: 0
 pcmk__clone_assign: cdev-pool-0-iscsi-vips-fw:0 allocation score on sd01-1: 2000
 pcmk__clone_assign: cdev-pool-0-iscsi-vips-fw:1 allocation score on sd01-0: 2000
 pcmk__clone_assign: cdev-pool-0-iscsi-vips-fw:1 allocation score on sd01-1: 0
 pcmk__clone_assign: cl-ietd allocation score on sd01-0: INFINITY
 pcmk__clone_assign: cl-ietd allocation score on sd01-1: 300
 pcmk__clone_assign: cl-vlan1-net allocation score on sd01-0: 0
 pcmk__clone_assign: cl-vlan1-net allocation score on sd01-1: 0
 pcmk__clone_assign: ietd:0 allocation score on sd01-0: 0
 pcmk__clone_assign: ietd:0 allocation score on sd01-1: 100
 pcmk__clone_assign: ietd:1 allocation score on sd01-0: 100
 pcmk__clone_assign: ietd:1 allocation score on sd01-1: 0
 pcmk__clone_assign: ms-cdev-pool-0-drbd allocation score on sd01-0: INFINITY
 pcmk__clone_assign: ms-cdev-pool-0-drbd allocation score on sd01-1: 400
 pcmk__clone_assign: ms-cdev-pool-0-iscsi-vips-fw allocation score on sd01-0: 0
 pcmk__clone_assign: ms-cdev-pool-0-iscsi-vips-fw allocation score on sd01-1: 0
 pcmk__clone_assign: vip-164-fw:0 allocation score on sd01-0: 0
 pcmk__clone_assign: vip-164-fw:0 allocation score on sd01-1: 100
 pcmk__clone_assign: vip-164-fw:1 allocation score on sd01-0: 100
 pcmk__clone_assign: vip-164-fw:1 allocation score on sd01-1: 0
 pcmk__clone_assign: vip-165-fw:0 allocation score on sd01-0: 0
 pcmk__clone_assign: vip-165-fw:0 allocation score on sd01-1: 100
 pcmk__clone_assign: vip-165-fw:1 allocation score on sd01-0: 100
 pcmk__clone_assign: vip-165-fw:1 allocation score on sd01-1: 0
 pcmk__clone_assign: vlan1-net:0 allocation score on sd01-0: 0
 pcmk__clone_assign: vlan1-net:0 allocation score on sd01-1: 100
 pcmk__clone_assign: vlan1-net:1 allocation score on sd01-0: 100
 pcmk__clone_assign: vlan1-net:1 allocation score on sd01-1: 0
 pcmk__group_assign: cdev-pool-0-iscsi-export allocation score on sd01-0: INFINITY
 pcmk__group_assign: cdev-pool-0-iscsi-export allocation score on sd01-1: 0
 pcmk__group_assign: cdev-pool-0-iscsi-lun-1 allocation score on sd01-0: 0
 pcmk__group_assign: cdev-pool-0-iscsi-lun-1 allocation score on sd01-1: 100
 pcmk__group_assign: cdev-pool-0-iscsi-target allocation score on sd01-0: INFINITY
 pcmk__group_assign: cdev-pool-0-iscsi-target allocation score on sd01-1: 100
 pcmk__group_assign: cdev-pool-0-iscsi-vips allocation score on sd01-0: 0
 pcmk__group_assign: cdev-pool-0-iscsi-vips allocation score on sd01-1: 0
 pcmk__group_assign: cdev-pool-0-iscsi-vips-fw:0 allocation score on sd01-0: -INFINITY
 pcmk__group_assign: cdev-pool-0-iscsi-vips-fw:0 allocation score on sd01-1: 2000
 pcmk__group_assign: cdev-pool-0-iscsi-vips-fw:1 allocation score on sd01-0: 2000
 pcmk__group_assign: cdev-pool-0-iscsi-vips-fw:1 allocation score on sd01-1: 0
 pcmk__group_assign: vip-164 allocation score on sd01-0: 0
 pcmk__group_assign: vip-164 allocation score on sd01-1: 100
 pcmk__group_assign: vip-164-fw:0 allocation score on sd01-0: -INFINITY
 pcmk__group_assign: vip-164-fw:0 allocation score on sd01-1: 100
 pcmk__group_assign: vip-164-fw:1 allocation score on sd01-0: 100
 pcmk__group_assign: vip-164-fw:1 allocation score on sd01-1: 0
 pcmk__group_assign: vip-165 allocation score on sd01-0: 0
 pcmk__group_assign: vip-165 allocation score on sd01-1: 100
 pcmk__group_assign: vip-165-fw:0 allocation score on sd01-0: -INFINITY
 pcmk__group_assign: vip-165-fw:0 allocation score on sd01-1: 100
 pcmk__group_assign: vip-165-fw:1 allocation score on sd01-0: 100
 pcmk__group_assign: vip-165-fw:1 allocation score on sd01-1: 0
 pcmk__primitive_assign: cdev-pool-0-drbd:0 allocation score on sd01-0: -INFINITY
 pcmk__primitive_assign: cdev-pool-0-drbd:0 allocation score on sd01-1: 10500
 pcmk__primitive_assign: cdev-pool-0-drbd:1 allocation score on sd01-0: INFINITY
 pcmk__primitive_assign: cdev-pool-0-drbd:1 allocation score on sd01-1: 400
 pcmk__primitive_assign: cdev-pool-0-iscsi-lun-1 allocation score on sd01-0: 0
 pcmk__primitive_assign: cdev-pool-0-iscsi-lun-1 allocation score on sd01-1: -INFINITY
 pcmk__primitive_assign: cdev-pool-0-iscsi-target allocation score on sd01-0: INFINITY
 pcmk__primitive_assign: cdev-pool-0-iscsi-target allocation score on sd01-1: -INFINITY
 pcmk__primitive_assign: ietd:0 allocation score on sd01-0: -INFINITY
 pcmk__primitive_assign: ietd:0 allocation score on sd01-1: 100
 pcmk__primitive_assign: ietd:1 allocation score on sd01-0: INFINITY
 pcmk__primitive_assign: ietd:1 allocation score on sd01-1: -INFINITY
 pcmk__primitive_assign: stonith-xvm-sd01-0 allocation score on sd01-0: -INFINITY
 pcmk__primitive_assign: stonith-xvm-sd01-0 allocation score on sd01-1: 100
 pcmk__primitive_assign: stonith-xvm-sd01-1 allocation score on sd01-0: 100
 pcmk__primitive_assign: stonith-xvm-sd01-1 allocation score on sd01-1: -INFINITY
 pcmk__primitive_assign: vip-164 allocation score on sd01-0: 0
 pcmk__primitive_assign: vip-164 allocation score on sd01-1: -INFINITY
 pcmk__primitive_assign: vip-164-fw:0 allocation score on sd01-0: -INFINITY
 pcmk__primitive_assign: vip-164-fw:0 allocation score on sd01-1: 200
 pcmk__primitive_assign: vip-164-fw:1 allocation score on sd01-0: 200
 pcmk__primitive_assign: vip-164-fw:1 allocation score on sd01-1: 0
 pcmk__primitive_assign: vip-165 allocation score on sd01-0: 0
 pcmk__primitive_assign: vip-165 allocation score on sd01-1: -INFINITY
 pcmk__primitive_assign: vip-165-fw:0 allocation score on sd01-0: -INFINITY
 pcmk__primitive_assign: vip-165-fw:0 allocation score on sd01-1: 100
 pcmk__primitive_assign: vip-165-fw:1 allocation score on sd01-0: 100
 pcmk__primitive_assign: vip-165-fw:1 allocation score on sd01-1: -INFINITY
 pcmk__primitive_assign: vlan1-net:0 allocation score on sd01-0: 0
 pcmk__primitive_assign: vlan1-net:0 allocation score on sd01-1: 100
 pcmk__primitive_assign: vlan1-net:1 allocation score on sd01-0: 100
 pcmk__primitive_assign: vlan1-net:1 allocation score on sd01-1: -INFINITY
diff --git a/cts/scheduler/summary/coloc-cloned-group-promoted-dependent2.summary b/cts/scheduler/summary/coloc-cloned-group-promoted-dependent2.summary
index 68110d06ac..6e8518093e 100644
--- a/cts/scheduler/summary/coloc-cloned-group-promoted-dependent2.summary
+++ b/cts/scheduler/summary/coloc-cloned-group-promoted-dependent2.summary
@@ -1,37 +1,23 @@
 Current cluster status:
   * Node List:
     * Online: [ node1 node2 ]
 
   * Full List of Resources:
     * Clone Set: grp1-clone [grp1] (promotable):
       * Promoted: [ node1 ]
       * Unpromoted: [ node2 ]
     * primary	(ocf:pacemaker:Dummy):	 Started node1
 
 Transition Summary:
-  * Promote    rsc1:0     ( Unpromoted -> Promoted node2 )
-  * Demote     rsc1:1     ( Promoted -> Unpromoted node1 )
 
 Executing Cluster Transition:
-  * Resource action: rsc1            cancel=10000 on node2
-  * Pseudo action:   grp1-clone_demote_0
-  * Pseudo action:   grp1:1_demote_0
-  * Resource action: rsc1            demote on node1
-  * Pseudo action:   grp1:1_demoted_0
-  * Resource action: rsc1            monitor=10000 on node1
-  * Pseudo action:   grp1-clone_demoted_0
-  * Pseudo action:   grp1-clone_promote_0
-  * Pseudo action:   grp1:0_promote_0
-  * Resource action: rsc1            promote on node2
-  * Pseudo action:   grp1:0_promoted_0
-  * Pseudo action:   grp1-clone_promoted_0
 
 Revised Cluster Status:
   * Node List:
     * Online: [ node1 node2 ]
 
   * Full List of Resources:
     * Clone Set: grp1-clone [grp1] (promotable):
-      * Promoted: [ node2 ]
-      * Unpromoted: [ node1 ]
+      * Promoted: [ node1 ]
+      * Unpromoted: [ node2 ]
     * primary	(ocf:pacemaker:Dummy):	 Started node1
diff --git a/lib/pacemaker/pcmk_sched_group.c b/lib/pacemaker/pcmk_sched_group.c
index a34f1402d0..6d892b2c12 100644
--- a/lib/pacemaker/pcmk_sched_group.c
+++ b/lib/pacemaker/pcmk_sched_group.c
@@ -1,969 +1,1003 @@
 /*
  * Copyright 2004-2024 the Pacemaker project contributors
  *
  * The version control history for this file may have further details.
  *
  * This source code is licensed under the GNU General Public License version 2
  * or later (GPLv2+) WITHOUT ANY WARRANTY.
  */
 
 #include <crm_internal.h>
 
 #include <stdbool.h>
 
 #include <qb/qbdefs.h>              // QB_ABS()
 
 #include <crm/common/xml.h>
 
 #include <pacemaker-internal.h>
 #include "libpacemaker_private.h"
 
 /*!
  * \internal
  * \brief Assign a group resource to a node
  *
  * \param[in,out] rsc           Group resource to assign to a node
  * \param[in]     prefer        Node to prefer, if all else is equal
  * \param[in]     stop_if_fail  If \c true and a child of \p rsc can't be
  *                              assigned to a node, set the child's next role to
  *                              stopped and update existing actions
  *
  * \return Node that \p rsc is assigned to, if assigned entirely to one node
  *
  * \note If \p stop_if_fail is \c false, then \c pcmk__unassign_resource() can
  *       completely undo the assignment. A successful assignment can be either
  *       undone or left alone as final. A failed assignment has the same effect
  *       as calling pcmk__unassign_resource(); there are no side effects on
  *       roles or actions.
  */
 pcmk_node_t *
 pcmk__group_assign(pcmk_resource_t *rsc, const pcmk_node_t *prefer,
                    bool stop_if_fail)
 {
     pcmk_node_t *first_assigned_node = NULL;
     pcmk_resource_t *first_member = NULL;
 
     CRM_ASSERT(pcmk__is_group(rsc));
 
     if (!pcmk_is_set(rsc->flags, pcmk_rsc_unassigned)) {
         return rsc->allocated_to; // Assignment already done
     }
     if (pcmk_is_set(rsc->flags, pcmk_rsc_assigning)) {
         pcmk__rsc_debug(rsc, "Assignment dependency loop detected involving %s",
                         rsc->id);
         return NULL;
     }
 
     if (rsc->children == NULL) {
         // No members to assign
         pcmk__clear_rsc_flags(rsc, pcmk_rsc_unassigned);
         return NULL;
     }
 
     pcmk__set_rsc_flags(rsc, pcmk_rsc_assigning);
     first_member = (pcmk_resource_t *) rsc->children->data;
     rsc->role = first_member->role;
 
     pe__show_node_scores(!pcmk_is_set(rsc->cluster->flags,
                                       pcmk_sched_output_scores),
                          rsc, __func__, rsc->allowed_nodes, rsc->cluster);
 
     for (GList *iter = rsc->children; iter != NULL; iter = iter->next) {
         pcmk_resource_t *member = (pcmk_resource_t *) iter->data;
         pcmk_node_t *node = NULL;
 
         pcmk__rsc_trace(rsc, "Assigning group %s member %s",
                         rsc->id, member->id);
         node = member->cmds->assign(member, prefer, stop_if_fail);
         if (first_assigned_node == NULL) {
             first_assigned_node = node;
         }
     }
 
     pe__set_next_role(rsc, first_member->next_role, "first group member");
     pcmk__clear_rsc_flags(rsc, pcmk_rsc_assigning|pcmk_rsc_unassigned);
 
     if (!pe__group_flag_is_set(rsc, pcmk__group_colocated)) {
         return NULL;
     }
     return first_assigned_node;
 }
 
 /*!
  * \internal
  * \brief Create a pseudo-operation for a group as an ordering point
  *
  * \param[in,out] group   Group resource to create action for
  * \param[in]     action  Action name
  *
  * \return Newly created pseudo-operation
  */
 static pcmk_action_t *
 create_group_pseudo_op(pcmk_resource_t *group, const char *action)
 {
     pcmk_action_t *op = custom_action(group, pcmk__op_key(group->id, action, 0),
                                       action, NULL, TRUE, group->cluster);
 
     pcmk__set_action_flags(op, pcmk_action_pseudo|pcmk_action_runnable);
     return op;
 }
 
 /*!
  * \internal
  * \brief Create all actions needed for a given group resource
  *
  * \param[in,out] rsc  Group resource to create actions for
  */
 void
 pcmk__group_create_actions(pcmk_resource_t *rsc)
 {
     CRM_ASSERT(pcmk__is_group(rsc));
 
     pcmk__rsc_trace(rsc, "Creating actions for group %s", rsc->id);
 
     // Create actions for individual group members
     for (GList *iter = rsc->children; iter != NULL; iter = iter->next) {
         pcmk_resource_t *member = (pcmk_resource_t *) iter->data;
 
         member->cmds->create_actions(member);
     }
 
     // Create pseudo-actions for group itself to serve as ordering points
     create_group_pseudo_op(rsc, PCMK_ACTION_START);
     create_group_pseudo_op(rsc, PCMK_ACTION_RUNNING);
     create_group_pseudo_op(rsc, PCMK_ACTION_STOP);
     create_group_pseudo_op(rsc, PCMK_ACTION_STOPPED);
     if (crm_is_true(g_hash_table_lookup(rsc->meta, PCMK_META_PROMOTABLE))) {
         create_group_pseudo_op(rsc, PCMK_ACTION_DEMOTE);
         create_group_pseudo_op(rsc, PCMK_ACTION_DEMOTED);
         create_group_pseudo_op(rsc, PCMK_ACTION_PROMOTE);
         create_group_pseudo_op(rsc, PCMK_ACTION_PROMOTED);
     }
 }
 
 // User data for member_internal_constraints()
 struct member_data {
     // These could be derived from member but this avoids some function calls
     bool ordered;
     bool colocated;
     bool promotable;
 
     pcmk_resource_t *last_active;
     pcmk_resource_t *previous_member;
 };
 
 /*!
  * \internal
  * \brief Create implicit constraints needed for a group member
  *
  * \param[in,out] data       Group member to create implicit constraints for
  * \param[in,out] user_data  Member data (struct member_data *)
  */
 static void
 member_internal_constraints(gpointer data, gpointer user_data)
 {
     pcmk_resource_t *member = (pcmk_resource_t *) data;
     struct member_data *member_data = (struct member_data *) user_data;
 
     // For ordering demote vs demote or stop vs stop
     uint32_t down_flags = pcmk__ar_then_implies_first_graphed;
 
     // For ordering demote vs demoted or stop vs stopped
     uint32_t post_down_flags = pcmk__ar_first_implies_then_graphed;
 
     // Create the individual member's implicit constraints
     member->cmds->internal_constraints(member);
 
     if (member_data->previous_member == NULL) {
         // This is first member
         if (member_data->ordered) {
             pcmk__set_relation_flags(down_flags, pcmk__ar_ordered);
             post_down_flags = pcmk__ar_first_implies_then;
         }
 
     } else if (member_data->colocated) {
         uint32_t flags = pcmk__coloc_none;
 
         if (pcmk_is_set(member->flags, pcmk_rsc_critical)) {
             flags |= pcmk__coloc_influence;
         }
 
         // Colocate this member with the previous one
         pcmk__new_colocation("#group-members", NULL, PCMK_SCORE_INFINITY,
                              member, member_data->previous_member, NULL, NULL,
                              flags);
     }
 
     if (member_data->promotable) {
         // Demote group -> demote member -> group is demoted
         pcmk__order_resource_actions(member->parent, PCMK_ACTION_DEMOTE,
                                      member, PCMK_ACTION_DEMOTE, down_flags);
         pcmk__order_resource_actions(member, PCMK_ACTION_DEMOTE,
                                      member->parent, PCMK_ACTION_DEMOTED,
                                      post_down_flags);
 
         // Promote group -> promote member -> group is promoted
         pcmk__order_resource_actions(member, PCMK_ACTION_PROMOTE,
                                      member->parent, PCMK_ACTION_PROMOTED,
                                      pcmk__ar_unrunnable_first_blocks
                                      |pcmk__ar_first_implies_then
                                      |pcmk__ar_first_implies_then_graphed);
         pcmk__order_resource_actions(member->parent, PCMK_ACTION_PROMOTE,
                                      member, PCMK_ACTION_PROMOTE,
                                      pcmk__ar_then_implies_first_graphed);
     }
 
     // Stop group -> stop member -> group is stopped
     pcmk__order_stops(member->parent, member, down_flags);
     pcmk__order_resource_actions(member, PCMK_ACTION_STOP,
                                  member->parent, PCMK_ACTION_STOPPED,
                                  post_down_flags);
 
     // Start group -> start member -> group is started
     pcmk__order_starts(member->parent, member,
                        pcmk__ar_then_implies_first_graphed);
     pcmk__order_resource_actions(member, PCMK_ACTION_START,
                                  member->parent, PCMK_ACTION_RUNNING,
                                  pcmk__ar_unrunnable_first_blocks
                                  |pcmk__ar_first_implies_then
                                  |pcmk__ar_first_implies_then_graphed);
 
     if (!member_data->ordered) {
         pcmk__order_starts(member->parent, member,
                            pcmk__ar_first_implies_then
                            |pcmk__ar_unrunnable_first_blocks
                            |pcmk__ar_then_implies_first_graphed);
         if (member_data->promotable) {
             pcmk__order_resource_actions(member->parent, PCMK_ACTION_PROMOTE,
                                          member, PCMK_ACTION_PROMOTE,
                                          pcmk__ar_first_implies_then
                                          |pcmk__ar_unrunnable_first_blocks
                                          |pcmk__ar_then_implies_first_graphed);
         }
 
     } else if (member_data->previous_member == NULL) {
         pcmk__order_starts(member->parent, member, pcmk__ar_none);
         if (member_data->promotable) {
             pcmk__order_resource_actions(member->parent, PCMK_ACTION_PROMOTE,
                                          member, PCMK_ACTION_PROMOTE,
                                          pcmk__ar_none);
         }
 
     } else {
         // Order this member relative to the previous one
 
         pcmk__order_starts(member_data->previous_member, member,
                            pcmk__ar_first_implies_then
                            |pcmk__ar_unrunnable_first_blocks);
         pcmk__order_stops(member, member_data->previous_member,
                           pcmk__ar_ordered|pcmk__ar_intermediate_stop);
 
         /* In unusual circumstances (such as adding a new member to the middle
          * of a group with unmanaged later members), this member may be active
          * while the previous (new) member is inactive. In this situation, the
          * usual restart orderings will be irrelevant, so we need to order this
          * member's stop before the previous member's start.
          */
         if ((member->running_on != NULL)
             && (member_data->previous_member->running_on == NULL)) {
             pcmk__order_resource_actions(member, PCMK_ACTION_STOP,
                                          member_data->previous_member,
                                          PCMK_ACTION_START,
                                          pcmk__ar_then_implies_first
                                          |pcmk__ar_unrunnable_first_blocks);
         }
 
         if (member_data->promotable) {
             pcmk__order_resource_actions(member_data->previous_member,
                                          PCMK_ACTION_PROMOTE, member,
                                          PCMK_ACTION_PROMOTE,
                                          pcmk__ar_first_implies_then
                                          |pcmk__ar_unrunnable_first_blocks);
             pcmk__order_resource_actions(member, PCMK_ACTION_DEMOTE,
                                          member_data->previous_member,
                                          PCMK_ACTION_DEMOTE, pcmk__ar_ordered);
         }
     }
 
     // Make sure partially active groups shut down in sequence
     if (member->running_on != NULL) {
         if (member_data->ordered && (member_data->previous_member != NULL)
             && (member_data->previous_member->running_on == NULL)
             && (member_data->last_active != NULL)
             && (member_data->last_active->running_on != NULL)) {
             pcmk__order_stops(member, member_data->last_active,
                               pcmk__ar_ordered);
         }
         member_data->last_active = member;
     }
 
     member_data->previous_member = member;
 }
 
 /*!
  * \internal
  * \brief Create implicit constraints needed for a group resource
  *
  * \param[in,out] rsc  Group resource to create implicit constraints for
  */
 void
 pcmk__group_internal_constraints(pcmk_resource_t *rsc)
 {
     struct member_data member_data = { false, };
     const pcmk_resource_t *top = NULL;
 
     CRM_ASSERT(pcmk__is_group(rsc));
 
     /* Order group pseudo-actions relative to each other for restarting:
      * stop group -> group is stopped -> start group -> group is started
      */
     pcmk__order_resource_actions(rsc, PCMK_ACTION_STOP,
                                  rsc, PCMK_ACTION_STOPPED,
                                  pcmk__ar_unrunnable_first_blocks);
     pcmk__order_resource_actions(rsc, PCMK_ACTION_STOPPED,
                                  rsc, PCMK_ACTION_START,
                                  pcmk__ar_ordered);
     pcmk__order_resource_actions(rsc, PCMK_ACTION_START,
                                  rsc, PCMK_ACTION_RUNNING,
                                  pcmk__ar_unrunnable_first_blocks);
 
     top = pe__const_top_resource(rsc, false);
 
     member_data.ordered = pe__group_flag_is_set(rsc, pcmk__group_ordered);
     member_data.colocated = pe__group_flag_is_set(rsc, pcmk__group_colocated);
     member_data.promotable = pcmk_is_set(top->flags, pcmk_rsc_promotable);
     g_list_foreach(rsc->children, member_internal_constraints, &member_data);
 }
 
 /*!
  * \internal
  * \brief Apply a colocation's score to node scores or resource priority
  *
  * Given a colocation constraint for a group with some other resource, apply the
  * score to the dependent's allowed node scores (if we are still placing
  * resources) or priority (if we are choosing promotable clone instance roles).
  *
  * \param[in,out] dependent      Dependent group resource in colocation
  * \param[in]     primary        Primary resource in colocation
  * \param[in]     colocation     Colocation constraint to apply
  *
  * \return The score added to the dependent's priority
  */
 static int
 colocate_group_with(pcmk_resource_t *dependent, const pcmk_resource_t *primary,
                     const pcmk__colocation_t *colocation)
 {
+    int priority_delta = 0;
+
     if (dependent->children == NULL) {
         return 0;
     }
 
     pcmk__rsc_trace(primary, "Processing %s (group %s with %s) for dependent",
                     colocation->id, dependent->id, primary->id);
 
     if (pe__group_flag_is_set(dependent, pcmk__group_colocated)) {
         // Colocate first member (internal colocations will handle the rest)
         pcmk_resource_t *member = dependent->children->data;
 
-        member->cmds->apply_coloc_score(member, primary, colocation, true);
-        return 0;
-    }
+        priority_delta = member->cmds->apply_coloc_score(member, primary,
+                                                         colocation, true);
 
-    if (colocation->score >= PCMK_SCORE_INFINITY) {
-        pcmk__config_err("%s: Cannot perform mandatory colocation between "
-                         "non-colocated group and %s",
-                         dependent->id, primary->id);
-        return 0;
+    } else {
+        if (colocation->score >= PCMK_SCORE_INFINITY) {
+            pcmk__config_err("%s: Cannot perform mandatory colocation between "
+                             "non-colocated group and %s",
+                             dependent->id, primary->id);
+            return 0;
+        }
+
+        // Colocate each member individually
+        for (GList *iter = dependent->children; iter != NULL;
+             iter = iter->next) {
+
+            pcmk_resource_t *member = iter->data;
+            int instance_delta = member->cmds->apply_coloc_score(member,
+                                                                 primary,
+                                                                 colocation,
+                                                                 false);
+
+            /* priority_delta is used for determining which instances of a
+             * promotable clone to promote. It's possible that colocations
+             * involving promotable cloned non-colocated groups may not behave
+             * correctly in all circumstances. Non-colocated groups are
+             * deprecated, and testing focused on colocated groups.
+             */
+            priority_delta = pcmk__add_scores(priority_delta, instance_delta);
+        }
     }
 
-    // Colocate each member individually
-    for (GList *iter = dependent->children; iter != NULL; iter = iter->next) {
-        pcmk_resource_t *member = iter->data;
+    if (priority_delta != 0) {
+        dependent->priority = pcmk__add_scores(priority_delta,
+                                               dependent->priority);
 
-        member->cmds->apply_coloc_score(member, primary, colocation, true);
+        pcmk__rsc_trace(dependent,
+                        "Applied %s to %s promotion priority "
+                        "(now %s after %s %d)",
+                        colocation->id, dependent->id,
+                        pcmk_readable_score(dependent->priority),
+                        ((priority_delta > 0)? "adding" : "subtracting"),
+                        QB_ABS(priority_delta));
     }
-    return 0;
+    return priority_delta;
 }
 
 /*!
  * \internal
  * \brief Apply a colocation's score to node scores or resource priority
  *
  * Given a colocation constraint for some other resource with a group, apply the
  * score to the dependent's allowed node scores (if we are still placing
  * resources) or priority (if we are choosing promotable clone instance roles).
  *
  * \param[in,out] dependent      Dependent resource in colocation
  * \param[in]     primary        Primary group resource in colocation
  * \param[in]     colocation     Colocation constraint to apply
  *
  * \return The score added to the dependent's priority
  */
 static int
 colocate_with_group(pcmk_resource_t *dependent, const pcmk_resource_t *primary,
                     const pcmk__colocation_t *colocation)
 {
+    int priority_delta = 0;
     const pcmk_resource_t *member = NULL;
 
     pcmk__rsc_trace(primary,
                     "Processing colocation %s (%s with group %s) for primary",
                     colocation->id, dependent->id, primary->id);
 
     if (pcmk_is_set(primary->flags, pcmk_rsc_unassigned)) {
         return 0;
     }
 
     if (pe__group_flag_is_set(primary, pcmk__group_colocated)) {
 
         if (colocation->score >= PCMK_SCORE_INFINITY) {
             /* For mandatory colocations, the entire group must be assignable
              * (and in the specified role if any), so apply the colocation based
              * on the last member.
              */
             member = pe__last_group_member(primary);
         } else if (primary->children != NULL) {
             /* For optional colocations, whether the group is partially or fully
              * up doesn't matter, so apply the colocation based on the first
              * member.
              */
             member = (pcmk_resource_t *) primary->children->data;
         }
         if (member == NULL) {
             return 0;   // Nothing to colocate with
         }
 
-        member->cmds->apply_coloc_score(dependent, member, colocation, false);
-        return 0;
+        return member->cmds->apply_coloc_score(dependent, member, colocation,
+                                               false);
     }
 
     if (colocation->score >= PCMK_SCORE_INFINITY) {
         pcmk__config_err("%s: Cannot perform mandatory colocation with"
                          " non-colocated group %s",
                          dependent->id, primary->id);
         return 0;
     }
 
     // Colocate dependent with each member individually
     for (const GList *iter = primary->children; iter != NULL;
          iter = iter->next) {
+
+        int instance_delta = 0;
+
         member = iter->data;
-        member->cmds->apply_coloc_score(dependent, member, colocation, false);
+        instance_delta = member->cmds->apply_coloc_score(dependent, member,
+                                                         colocation, false);
+        priority_delta = pcmk__add_scores(priority_delta, instance_delta);
     }
-    return 0;
+    return priority_delta;
 }
 
 /*!
  * \internal
  * \brief Apply a colocation's score to node scores or resource priority
  *
  * Given a colocation constraint, apply its score to the dependent's
  * allowed node scores (if we are still placing resources) or priority (if
  * we are choosing promotable clone instance roles).
  *
  * \param[in,out] dependent      Dependent resource in colocation
  * \param[in]     primary        Primary resource in colocation
  * \param[in]     colocation     Colocation constraint to apply
  * \param[in]     for_dependent  true if called on behalf of dependent
  *
  * \return The score added to the dependent's priority
  */
 int
 pcmk__group_apply_coloc_score(pcmk_resource_t *dependent,
                               const pcmk_resource_t *primary,
                               const pcmk__colocation_t *colocation,
                               bool for_dependent)
 {
     CRM_ASSERT((dependent != NULL) && (primary != NULL)
                && (colocation != NULL));
 
     if (for_dependent) {
         return colocate_group_with(dependent, primary, colocation);
 
     } else {
         // Method should only be called for primitive dependents
         CRM_ASSERT(pcmk__is_primitive(dependent));
 
         return colocate_with_group(dependent, primary, colocation);
     }
 }
 
 /*!
  * \internal
  * \brief Return action flags for a given group resource action
  *
  * \param[in,out] action  Group action to get flags for
  * \param[in]     node    If not NULL, limit effects to this node
  *
  * \return Flags appropriate to \p action on \p node
  */
 uint32_t
 pcmk__group_action_flags(pcmk_action_t *action, const pcmk_node_t *node)
 {
     // Default flags for a group action
     uint32_t flags = pcmk_action_optional
                      |pcmk_action_runnable
                      |pcmk_action_pseudo;
 
     CRM_ASSERT(action != NULL);
 
     // Update flags considering each member's own flags for same action
     for (GList *iter = action->rsc->children; iter != NULL; iter = iter->next) {
         pcmk_resource_t *member = (pcmk_resource_t *) iter->data;
 
         // Check whether member has the same action
         enum action_tasks task = get_complex_task(member, action->task);
         const char *task_s = pcmk_action_text(task);
         pcmk_action_t *member_action = find_first_action(member->actions, NULL,
                                                          task_s, node);
 
         if (member_action != NULL) {
             uint32_t member_flags = member->cmds->action_flags(member_action,
                                                                node);
 
             // Group action is mandatory if any member action is
             if (pcmk_is_set(flags, pcmk_action_optional)
                 && !pcmk_is_set(member_flags, pcmk_action_optional)) {
                 pcmk__rsc_trace(action->rsc, "%s is mandatory because %s is",
                                 action->uuid, member_action->uuid);
                 pcmk__clear_raw_action_flags(flags, "group action",
                                              pcmk_action_optional);
                 pcmk__clear_action_flags(action, pcmk_action_optional);
             }
 
             // Group action is unrunnable if any member action is
             if (!pcmk__str_eq(task_s, action->task, pcmk__str_none)
                 && pcmk_is_set(flags, pcmk_action_runnable)
                 && !pcmk_is_set(member_flags, pcmk_action_runnable)) {
 
                 pcmk__rsc_trace(action->rsc, "%s is unrunnable because %s is",
                                 action->uuid, member_action->uuid);
                 pcmk__clear_raw_action_flags(flags, "group action",
                                              pcmk_action_runnable);
                 pcmk__clear_action_flags(action, pcmk_action_runnable);
             }
 
         /* Group (pseudo-)actions other than stop or demote are unrunnable
          * unless every member will do it.
          */
         } else if ((task != pcmk_action_stop) && (task != pcmk_action_demote)) {
             pcmk__rsc_trace(action->rsc,
                             "%s is not runnable because %s will not %s",
                             action->uuid, member->id, task_s);
             pcmk__clear_raw_action_flags(flags, "group action",
                                          pcmk_action_runnable);
         }
     }
 
     return flags;
 }
 
 /*!
  * \internal
  * \brief Update two actions according to an ordering between them
  *
  * Given information about an ordering of two actions, update the actions' flags
  * (and runnable_before members if appropriate) as appropriate for the ordering.
  * Effects may cascade to other orderings involving the actions as well.
  *
  * \param[in,out] first      'First' action in an ordering
  * \param[in,out] then       'Then' action in an ordering
  * \param[in]     node       If not NULL, limit scope of ordering to this node
  *                           (only used when interleaving instances)
  * \param[in]     flags      Action flags for \p first for ordering purposes
  * \param[in]     filter     Action flags to limit scope of certain updates (may
  *                           include pcmk_action_optional to affect only
  *                           mandatory actions, and pcmk_action_runnable to
  *                           affect only runnable actions)
  * \param[in]     type       Group of enum pcmk__action_relation_flags to apply
  * \param[in,out] scheduler  Scheduler data
  *
  * \return Group of enum pcmk__updated flags indicating what was updated
  */
 uint32_t
 pcmk__group_update_ordered_actions(pcmk_action_t *first, pcmk_action_t *then,
                                    const pcmk_node_t *node, uint32_t flags,
                                    uint32_t filter, uint32_t type,
                                    pcmk_scheduler_t *scheduler)
 {
     uint32_t changed = pcmk__updated_none;
 
     // Group method can be called only on behalf of "then" action
     CRM_ASSERT((first != NULL) && (then != NULL) && (then->rsc != NULL)
                && (scheduler != NULL));
 
     // Update the actions for the group itself
     changed |= pcmk__update_ordered_actions(first, then, node, flags, filter,
                                             type, scheduler);
 
     // Update the actions for each group member
     for (GList *iter = then->rsc->children; iter != NULL; iter = iter->next) {
         pcmk_resource_t *member = (pcmk_resource_t *) iter->data;
 
         pcmk_action_t *member_action = find_first_action(member->actions, NULL,
                                                          then->task, node);
 
         if (member_action != NULL) {
             changed |= member->cmds->update_ordered_actions(first,
                                                             member_action, node,
                                                             flags, filter, type,
                                                             scheduler);
         }
     }
     return changed;
 }
 
 /*!
  * \internal
  * \brief Apply a location constraint to a group's allowed node scores
  *
  * \param[in,out] rsc       Group resource to apply constraint to
  * \param[in,out] location  Location constraint to apply
  */
 void
 pcmk__group_apply_location(pcmk_resource_t *rsc, pcmk__location_t *location)
 {
     GList *node_list_orig = NULL;
     GList *node_list_copy = NULL;
 
     CRM_ASSERT(pcmk__is_group(rsc) && (location != NULL));
 
     // Save the constraint's original node list (with the constraint score)
     node_list_orig = location->nodes;
 
     // Make a copy of the nodes with all zero scores
     node_list_copy  = pcmk__copy_node_list(node_list_orig, true);
 
     /* Apply the constraint to the group itself. This ensures that any nodes
      * affected by the constraint are in the group's allowed nodes, with the
      * constraint score added.
      */
     pcmk__apply_location(rsc, location);
 
     // Apply the constraint for each member
     for (GList *iter = rsc->children; iter != NULL; iter = iter->next) {
         pcmk_resource_t *member = (pcmk_resource_t *) iter->data;
 
         if (pe__group_flag_is_set(rsc, pcmk__group_colocated)
             && (iter != rsc->children)) {
             /* When apply_location() is called below for the first member (iter
              * == rsc->children), the constraint score will be added to
              * the member's affected allowed nodes.
              *
              * For subsequent members, we reset the constraint's node table to
              * the copy with all 0 scores. Otherwise, when assigning the member,
              * the constraint score would be counted multiple times (once for
              * each later member) due to internal group colocations. Though the
              * 0 score will not affect these members' allowed node scores, it
              * ensures that affected nodes are in each member's allowed nodes,
              * enabling the member on those nodes in asymmetric clusters.
              */
             location->nodes = node_list_copy;
         }
 
         member->cmds->apply_location(member, location);
     }
 
     location->nodes = node_list_orig;
     g_list_free_full(node_list_copy, free);
 }
 
 // Group implementation of pcmk_assignment_methods_t:colocated_resources()
 GList *
 pcmk__group_colocated_resources(const pcmk_resource_t *rsc,
                                 const pcmk_resource_t *orig_rsc,
                                 GList *colocated_rscs)
 {
     const pcmk_resource_t *member = NULL;
 
     CRM_ASSERT(pcmk__is_group(rsc));
 
     if (orig_rsc == NULL) {
         orig_rsc = rsc;
     }
 
     if (pe__group_flag_is_set(rsc, pcmk__group_colocated)
         || pcmk__is_clone(rsc->parent)) {
         /* This group has colocated members and/or is cloned -- either way,
          * add every child's colocated resources to the list. The first and last
          * members will include the group's own colocations.
          */
         colocated_rscs = g_list_prepend(colocated_rscs, (gpointer) rsc);
         for (const GList *iter = rsc->children;
              iter != NULL; iter = iter->next) {
 
             member = (const pcmk_resource_t *) iter->data;
             colocated_rscs = member->cmds->colocated_resources(member, orig_rsc,
                                                                colocated_rscs);
         }
 
     } else if (rsc->children != NULL) {
         /* This group's members are not colocated, and the group is not cloned,
          * so just add the group's own colocations to the list.
          */
         colocated_rscs = pcmk__colocated_resources(rsc, orig_rsc,
                                                    colocated_rscs);
     }
 
     return colocated_rscs;
 }
 
 // Group implementation of pcmk_assignment_methods_t:with_this_colocations()
 void
 pcmk__with_group_colocations(const pcmk_resource_t *rsc,
                              const pcmk_resource_t *orig_rsc, GList **list)
 
 {
     CRM_ASSERT((orig_rsc != NULL) && (list != NULL) && pcmk__is_group(rsc));
 
     // Ignore empty groups
     if (rsc->children == NULL) {
         return;
     }
 
     /* "With this" colocations are needed only for the group itself and for its
      * last member. (Previous members will chain via the group internal
      * colocations.)
      */
     if ((orig_rsc != rsc) && (orig_rsc != pe__last_group_member(rsc))) {
         return;
     }
 
     pcmk__rsc_trace(rsc, "Adding 'with %s' colocations to list for %s",
                     rsc->id, orig_rsc->id);
 
     // Add the group's own colocations
     pcmk__add_with_this_list(list, rsc->rsc_cons_lhs, orig_rsc);
 
     // If cloned, add any relevant colocations with the clone
     if (rsc->parent != NULL) {
         rsc->parent->cmds->with_this_colocations(rsc->parent, orig_rsc,
                                                  list);
     }
 
     if (!pe__group_flag_is_set(rsc, pcmk__group_colocated)) {
         // @COMPAT Non-colocated groups are deprecated
         return;
     }
 
     // Add explicit colocations with the group's (other) children
     for (const GList *iter = rsc->children; iter != NULL; iter = iter->next) {
         const pcmk_resource_t *member = iter->data;
 
         if (member != orig_rsc) {
             member->cmds->with_this_colocations(member, orig_rsc, list);
         }
     }
 }
 
 // Group implementation of pcmk_assignment_methods_t:this_with_colocations()
 void
 pcmk__group_with_colocations(const pcmk_resource_t *rsc,
                              const pcmk_resource_t *orig_rsc, GList **list)
 {
     const pcmk_resource_t *member = NULL;
 
     CRM_ASSERT((orig_rsc != NULL) && (list != NULL) && pcmk__is_group(rsc));
 
     // Ignore empty groups
     if (rsc->children == NULL) {
         return;
     }
 
     /* "This with" colocations are normally needed only for the group itself and
      * for its first member.
      */
     if ((rsc == orig_rsc)
         || (orig_rsc == (const pcmk_resource_t *) rsc->children->data)) {
         pcmk__rsc_trace(rsc, "Adding '%s with' colocations to list for %s",
                         rsc->id, orig_rsc->id);
 
         // Add the group's own colocations
         pcmk__add_this_with_list(list, rsc->rsc_cons, orig_rsc);
 
         // If cloned, add any relevant colocations involving the clone
         if (rsc->parent != NULL) {
             rsc->parent->cmds->this_with_colocations(rsc->parent, orig_rsc,
                                                      list);
         }
 
         if (!pe__group_flag_is_set(rsc, pcmk__group_colocated)) {
             // @COMPAT Non-colocated groups are deprecated
             return;
         }
 
         // Add explicit colocations involving the group's (other) children
         for (const GList *iter = rsc->children;
              iter != NULL; iter = iter->next) {
             member = iter->data;
             if (member != orig_rsc) {
                 member->cmds->this_with_colocations(member, orig_rsc, list);
             }
         }
         return;
     }
 
     /* Later group members honor the group's colocations indirectly, due to the
      * internal group colocations that chain everything from the first member.
      * However, if an earlier group member is unmanaged, this chaining will not
      * happen, so the group's mandatory colocations must be explicitly added.
      */
     for (const GList *iter = rsc->children; iter != NULL; iter = iter->next) {
         member = iter->data;
         if (orig_rsc == member) {
             break; // We've seen all earlier members, and none are unmanaged
         }
 
         if (!pcmk_is_set(member->flags, pcmk_rsc_managed)) {
             crm_trace("Adding mandatory '%s with' colocations to list for "
                       "member %s because earlier member %s is unmanaged",
                       rsc->id, orig_rsc->id, member->id);
             for (const GList *cons_iter = rsc->rsc_cons; cons_iter != NULL;
                  cons_iter = cons_iter->next) {
                 const pcmk__colocation_t *colocation = NULL;
 
                 colocation = (const pcmk__colocation_t *) cons_iter->data;
                 if (colocation->score == PCMK_SCORE_INFINITY) {
                     pcmk__add_this_with(list, colocation, orig_rsc);
                 }
             }
             // @TODO Add mandatory (or all?) clone constraints if cloned
             break;
         }
     }
 }
 
 /*!
  * \internal
  * \brief Update nodes with scores of colocated resources' nodes
  *
  * Given a table of nodes and a resource, update the nodes' scores with the
  * scores of the best nodes matching the attribute used for each of the
  * resource's relevant colocations.
  *
  * \param[in,out] source_rsc  Group resource whose node scores to add
  * \param[in]     target_rsc  Resource on whose behalf to update \p *nodes
  * \param[in]     log_id      Resource ID for logs (if \c NULL, use
  *                            \p source_rsc ID)
  * \param[in,out] nodes       Nodes to update (set initial contents to \c NULL
  *                            to copy allowed nodes from \p source_rsc)
  * \param[in]     colocation  Original colocation constraint (used to get
  *                            configured primary resource's stickiness, and
  *                            to get colocation node attribute; if \c NULL,
  *                            <tt>source_rsc</tt>'s own matching node scores will
  *                            not be added, and \p *nodes must be \c NULL as
  *                            well)
  * \param[in]     factor      Incorporate scores multiplied by this factor
  * \param[in]     flags       Bitmask of enum pcmk__coloc_select values
  *
  * \note \c NULL \p target_rsc, \c NULL \p *nodes, \c NULL \p colocation, and
  *       the \c pcmk__coloc_select_this_with flag are used together (and only by
  *       \c cmp_resources()).
  * \note The caller remains responsible for freeing \p *nodes.
  * \note This is the group implementation of
  *       \c pcmk_assignment_methods_t:add_colocated_node_scores().
  */
 void
 pcmk__group_add_colocated_node_scores(pcmk_resource_t *source_rsc,
                                       const pcmk_resource_t *target_rsc,
                                       const char *log_id, GHashTable **nodes,
                                       const pcmk__colocation_t *colocation,
                                       float factor, uint32_t flags)
 {
     pcmk_resource_t *member = NULL;
 
     CRM_ASSERT(pcmk__is_group(source_rsc) && (nodes != NULL)
                && ((colocation != NULL)
                    || ((target_rsc == NULL) && (*nodes == NULL))));
 
     if (log_id == NULL) {
         log_id = source_rsc->id;
     }
 
     // Avoid infinite recursion
     if (pcmk_is_set(source_rsc->flags, pcmk_rsc_updating_nodes)) {
         pcmk__rsc_info(source_rsc, "%s: Breaking dependency loop at %s",
                        log_id, source_rsc->id);
         return;
     }
     pcmk__set_rsc_flags(source_rsc, pcmk_rsc_updating_nodes);
 
     // Ignore empty groups (only possible with schema validation disabled)
     if (source_rsc->children == NULL) {
         return;
     }
 
     /* Refer the operation to the first or last member as appropriate.
      *
      * cmp_resources() is the only caller that passes a NULL nodes table,
      * and is also the only caller using pcmk__coloc_select_this_with.
      * For "this with" colocations, the last member will recursively incorporate
      * all the other members' "this with" colocations via the internal group
      * colocations (and via the first member, the group's own colocations).
      *
      * For "with this" colocations, the first member works similarly.
      */
     if (*nodes == NULL) {
         member = pe__last_group_member(source_rsc);
     } else {
         member = source_rsc->children->data;
     }
     pcmk__rsc_trace(source_rsc, "%s: Merging scores from group %s using member %s "
                     "(at %.6f)", log_id, source_rsc->id, member->id, factor);
     member->cmds->add_colocated_node_scores(member, target_rsc, log_id, nodes,
                                             colocation, factor, flags);
     pcmk__clear_rsc_flags(source_rsc, pcmk_rsc_updating_nodes);
 }
 
 // Group implementation of pcmk_assignment_methods_t:add_utilization()
 void
 pcmk__group_add_utilization(const pcmk_resource_t *rsc,
                             const pcmk_resource_t *orig_rsc, GList *all_rscs,
                             GHashTable *utilization)
 {
     pcmk_resource_t *member = NULL;
 
     CRM_ASSERT((orig_rsc != NULL) && (utilization != NULL)
                && pcmk__is_group(rsc));
 
     if (!pcmk_is_set(rsc->flags, pcmk_rsc_unassigned)) {
         return;
     }
 
     pcmk__rsc_trace(orig_rsc, "%s: Adding group %s as colocated utilization",
                     orig_rsc->id, rsc->id);
     if (pe__group_flag_is_set(rsc, pcmk__group_colocated)
         || pcmk__is_clone(rsc->parent)) {
         // Every group member will be on same node, so sum all members
         for (GList *iter = rsc->children; iter != NULL; iter = iter->next) {
             member = (pcmk_resource_t *) iter->data;
 
             if (pcmk_is_set(member->flags, pcmk_rsc_unassigned)
                 && (g_list_find(all_rscs, member) == NULL)) {
                 member->cmds->add_utilization(member, orig_rsc, all_rscs,
                                               utilization);
             }
         }
 
     } else if (rsc->children != NULL) {
         // Just add first member's utilization
         member = (pcmk_resource_t *) rsc->children->data;
         if ((member != NULL)
             && pcmk_is_set(member->flags, pcmk_rsc_unassigned)
             && (g_list_find(all_rscs, member) == NULL)) {
 
             member->cmds->add_utilization(member, orig_rsc, all_rscs,
                                           utilization);
         }
     }
 }
 
 void
 pcmk__group_shutdown_lock(pcmk_resource_t *rsc)
 {
     CRM_ASSERT(pcmk__is_group(rsc));
 
     for (GList *iter = rsc->children; iter != NULL; iter = iter->next) {
         pcmk_resource_t *member = (pcmk_resource_t *) iter->data;
 
         member->cmds->shutdown_lock(member);
     }
 }