Page MenuHomeClusterLabs Projects

No OneTemporary

diff --git a/cts/cli/regression.crm_attribute.exp b/cts/cli/regression.crm_attribute.exp
index adad151c9f..194b146fa5 100644
--- a/cts/cli/regression.crm_attribute.exp
+++ b/cts/cli/regression.crm_attribute.exp
@@ -1,1913 +1,1951 @@
=#=#=#= Begin test: List all available options (invalid type) =#=#=#=
crm_attribute: Invalid --list-options value 'asdf'. Allowed values: cluster
=#=#=#= End test: List all available options (invalid type) - Incorrect usage (64) =#=#=#=
* Passed: crm_attribute - List all available options (invalid type)
=#=#=#= Begin test: List all available options (invalid type) (XML) =#=#=#=
<pacemaker-result api-version="X" request="crm_attribute --output-as=xml --list-options=asdf">
<status code="64" message="Incorrect usage">
<errors>
<error>crm_attribute: Invalid --list-options value 'asdf'. Allowed values: cluster</error>
</errors>
</status>
</pacemaker-result>
=#=#=#= End test: List all available options (invalid type) (XML) - Incorrect usage (64) =#=#=#=
* Passed: crm_attribute - List all available options (invalid type) (XML)
=#=#=#= Begin test: List non-advanced cluster options =#=#=#=
Pacemaker cluster options
Also known as properties, these are options that affect behavior across the entire cluster. They are configured within cluster_property_set elements inside the crm_config subsection of the CIB configuration section.
* dc-version: Pacemaker version on cluster node elected Designated Controller (DC)
* Includes a hash which identifies the exact revision the code was built from. Used for diagnostic purposes.
* Possible values (generated by Pacemaker): version (no default)
* cluster-infrastructure: The messaging layer on which Pacemaker is currently running
* Used for informational and diagnostic purposes.
* Possible values (generated by Pacemaker): string (no default)
* cluster-name: An arbitrary name for the cluster
* This optional value is mostly for users' convenience as desired in administration, but may also be used in Pacemaker configuration rules via the #cluster-name node attribute, and by higher-level tools and resource agents.
* Possible values: string (no default)
* dc-deadtime: How long to wait for a response from other nodes during start-up
* The optimal value will depend on the speed and load of your network and the type of switches used.
* Possible values: duration (default: )
* cluster-recheck-interval: Polling interval to recheck cluster state and evaluate rules with date specifications
* Pacemaker is primarily event-driven, and looks ahead to know when to recheck cluster state for failure-timeout settings and most time-based rules. However, it will also recheck the cluster after this amount of inactivity, to evaluate rules with date specifications and serve as a fail-safe for certain types of scheduler bugs. A value of 0 disables polling. A positive value sets an interval in seconds, unless other units are specified (for example, "5min").
* Possible values: duration (default: )
* fence-reaction: How a cluster node should react if notified of its own fencing
* A cluster node may receive notification of a "succeeded" fencing that targeted it if fencing is misconfigured, or if fabric fencing is in use that doesn't cut cluster communication. Use "stop" to attempt to immediately stop Pacemaker and stay stopped, or "panic" to attempt to immediately reboot the local node, falling back to stop on failure.
* Possible values: "stop" (default), "panic"
* no-quorum-policy: What to do when the cluster does not have quorum
* Possible values: "stop" (default), "freeze", "ignore", "demote", "fence", "suicide"
* shutdown-lock: Whether to lock resources to a cleanly shut down node
* When true, resources active on a node when it is cleanly shut down are kept "locked" to that node (not allowed to run elsewhere) until they start again on that node after it rejoins (or for at most shutdown-lock-limit, if set). Stonith resources and Pacemaker Remote connections are never locked. Clone and bundle instances and the promoted role of promotable clones are currently never locked, though support could be added in a future release.
* Possible values: boolean (default: )
* shutdown-lock-limit: Do not lock resources to a cleanly shut down node longer than this
* If shutdown-lock is true and this is set to a nonzero time duration, shutdown locks will expire after this much time has passed since the shutdown was initiated, even if the node has not rejoined.
* Possible values: duration (default: )
* enable-acl: Enable Access Control Lists (ACLs) for the CIB
* Possible values: boolean (default: )
* symmetric-cluster: Whether resources can run on any node by default
* Possible values: boolean (default: )
* maintenance-mode: Whether the cluster should refrain from monitoring, starting, and stopping resources
* Possible values: boolean (default: )
* start-failure-is-fatal: Whether a start failure should prevent a resource from being recovered on the same node
* When true, the cluster will immediately ban a resource from a node if it fails to start there. When false, the cluster will instead check the resource's fail count against its migration-threshold.
* Possible values: boolean (default: )
* enable-startup-probes: Whether the cluster should check for active resources during start-up
* Possible values: boolean (default: )
* stonith-action: Action to send to fence device when a node needs to be fenced
* Possible values: "reboot" (default), "off"
* stonith-timeout: How long to wait for on, off, and reboot fence actions to complete by default
* Possible values: duration (default: )
* have-watchdog: Whether watchdog integration is enabled
* This is set automatically by the cluster according to whether SBD is detected to be in use. User-configured values are ignored. The value `true` is meaningful if diskless SBD is used and `stonith-watchdog-timeout` is nonzero. In that case, if fencing is required, watchdog-based self-fencing will be performed via SBD without requiring a fencing resource explicitly configured.
* Possible values (generated by Pacemaker): boolean (default: )
* stonith-watchdog-timeout: How long before nodes can be assumed to be safely down when watchdog-based self-fencing via SBD is in use
* If this is set to a positive value, lost nodes are assumed to achieve self-fencing using watchdog-based SBD within this much time. This does not require a fencing resource to be explicitly configured, though a fence_watchdog resource can be configured, to limit use to specific nodes. If this is set to 0 (the default), the cluster will never assume watchdog-based self-fencing. If this is set to a negative value, the cluster will use twice the local value of the `SBD_WATCHDOG_TIMEOUT` environment variable if that is positive, or otherwise treat this as 0. WARNING: When used, this timeout must be larger than `SBD_WATCHDOG_TIMEOUT` on all nodes that use watchdog-based SBD, and Pacemaker will refuse to start on any of those nodes where this is not true for the local value or SBD is not active. When this is set to a negative value, `SBD_WATCHDOG_TIMEOUT` must be set to the same value on all nodes that use SBD, otherwise data corruption or loss could occur.
* Possible values: timeout (default: )
* stonith-max-attempts: How many times fencing can fail before it will no longer be immediately re-attempted on a target
* Possible values: score (default: )
* priority-fencing-delay: Apply fencing delay targeting the lost nodes with the highest total resource priority
* Apply specified delay for the fencings that are targeting the lost nodes with the highest total resource priority in case we don't have the majority of the nodes in our cluster partition, so that the more significant nodes potentially win any fencing match, which is especially meaningful under split-brain of 2-node cluster. A promoted resource instance takes the base priority + 1 on calculation if the base priority is not 0. Any static/random delays that are introduced by `pcmk_delay_base/max` configured for the corresponding fencing resources will be added to this delay. This delay should be significantly greater than, safely twice, the maximum `pcmk_delay_base/max`. By default, priority fencing delay is disabled.
* Possible values: duration (default: )
* node-pending-timeout: How long to wait for a node that has joined the cluster to join the controller process group
* Fence nodes that do not join the controller process group within this much time after joining the cluster, to allow the cluster to continue managing resources. A value of 0 means never fence pending nodes. Setting the value to 2h means fence nodes after 2 hours.
* Possible values: duration (default: )
* cluster-delay: Maximum time for node-to-node communication
* The node elected Designated Controller (DC) will consider an action failed if it does not get a response from the node executing the action within this time (after considering the action's own timeout). The "correct" value will depend on the speed and load of your network and cluster nodes.
* Possible values: duration (default: )
* load-threshold: Maximum amount of system load that should be used by cluster nodes
* The cluster will slow down its recovery process when the amount of system resources used (currently CPU) approaches this limit
* Possible values: percentage (default: )
* node-action-limit: Maximum number of jobs that can be scheduled per node (defaults to 2x cores)
* Possible values: integer (default: )
* batch-limit: Maximum number of jobs that the cluster may execute in parallel across all nodes
* The "correct" value will depend on the speed and load of your network and cluster nodes. If set to 0, the cluster will impose a dynamically calculated limit when any node has a high load.
* Possible values: integer (default: )
* migration-limit: The number of live migration actions that the cluster is allowed to execute in parallel on a node (-1 means no limit)
* Possible values: integer (default: )
* cluster-ipc-limit: Maximum IPC message backlog before disconnecting a cluster daemon
* Raise this if log has "Evicting client" messages for cluster daemon PIDs (a good value is the number of resources in the cluster multiplied by the number of nodes).
* Possible values: nonnegative_integer (default: )
* stop-all-resources: Whether the cluster should stop all active resources
* Possible values: boolean (default: )
* stop-removed-resources: Whether to stop resources that were removed from the configuration
* Possible values: boolean (default: )
* stop-removed-actions: Whether to cancel recurring actions removed from the configuration
* Possible values: boolean (default: )
* pe-error-series-max: The number of scheduler inputs resulting in errors to save
* Zero to disable, -1 to store unlimited.
* Possible values: integer (default: )
* pe-warn-series-max: The number of scheduler inputs resulting in warnings to save
* Zero to disable, -1 to store unlimited.
* Possible values: integer (default: )
* pe-input-series-max: The number of scheduler inputs without errors or warnings to save
* Zero to disable, -1 to store unlimited.
* Possible values: integer (default: )
* node-health-strategy: How cluster should react to node health attributes
* Requires external entities to create node attributes (named with the prefix "#health") with values "red", "yellow", or "green".
* Possible values: "none" (default), "migrate-on-red", "only-green", "progressive", "custom"
* node-health-base: Base health score assigned to a node
* Only used when "node-health-strategy" is set to "progressive".
* Possible values: score (default: )
* node-health-green: The score to use for a node health attribute whose value is "green"
* Only used when "node-health-strategy" is set to "custom" or "progressive".
* Possible values: score (default: )
* node-health-yellow: The score to use for a node health attribute whose value is "yellow"
* Only used when "node-health-strategy" is set to "custom" or "progressive".
* Possible values: score (default: )
* node-health-red: The score to use for a node health attribute whose value is "red"
* Only used when "node-health-strategy" is set to "custom" or "progressive".
* Possible values: score (default: )
* placement-strategy: How the cluster should allocate resources to nodes
* Possible values: "default" (default), "utilization", "minimal", "balanced"
=#=#=#= End test: List non-advanced cluster options - OK (0) =#=#=#=
* Passed: crm_attribute - List non-advanced cluster options
=#=#=#= Begin test: List non-advanced cluster options (XML) =#=#=#=
<pacemaker-result api-version="X" request="crm_attribute --output-as=xml --list-options=cluster">
<resource-agent name="cluster-options" version="">
<version>1.1</version>
<longdesc lang="en">Also known as properties, these are options that affect behavior across the entire cluster. They are configured within cluster_property_set elements inside the crm_config subsection of the CIB configuration section.</longdesc>
<shortdesc lang="en">Pacemaker cluster options</shortdesc>
<parameters>
<parameter name="dc-version" advanced="0" generated="1">
<longdesc lang="en">Includes a hash which identifies the exact revision the code was built from. Used for diagnostic purposes.</longdesc>
<shortdesc lang="en">Pacemaker version on cluster node elected Designated Controller (DC)</shortdesc>
<content type="version"/>
</parameter>
<parameter name="cluster-infrastructure" advanced="0" generated="1">
<longdesc lang="en">Used for informational and diagnostic purposes.</longdesc>
<shortdesc lang="en">The messaging layer on which Pacemaker is currently running</shortdesc>
<content type="string"/>
</parameter>
<parameter name="cluster-name" advanced="0" generated="0">
<longdesc lang="en">This optional value is mostly for users' convenience as desired in administration, but may also be used in Pacemaker configuration rules via the #cluster-name node attribute, and by higher-level tools and resource agents.</longdesc>
<shortdesc lang="en">An arbitrary name for the cluster</shortdesc>
<content type="string"/>
</parameter>
<parameter name="dc-deadtime" advanced="0" generated="0">
<longdesc lang="en">The optimal value will depend on the speed and load of your network and the type of switches used.</longdesc>
<shortdesc lang="en">How long to wait for a response from other nodes during start-up</shortdesc>
<content type="duration" default=""/>
</parameter>
<parameter name="cluster-recheck-interval" advanced="0" generated="0">
<longdesc lang="en">Pacemaker is primarily event-driven, and looks ahead to know when to recheck cluster state for failure-timeout settings and most time-based rules. However, it will also recheck the cluster after this amount of inactivity, to evaluate rules with date specifications and serve as a fail-safe for certain types of scheduler bugs. A value of 0 disables polling. A positive value sets an interval in seconds, unless other units are specified (for example, "5min").</longdesc>
<shortdesc lang="en">Polling interval to recheck cluster state and evaluate rules with date specifications</shortdesc>
<content type="duration" default=""/>
</parameter>
<parameter name="fence-reaction" advanced="0" generated="0">
<longdesc lang="en">A cluster node may receive notification of a "succeeded" fencing that targeted it if fencing is misconfigured, or if fabric fencing is in use that doesn't cut cluster communication. Use "stop" to attempt to immediately stop Pacemaker and stay stopped, or "panic" to attempt to immediately reboot the local node, falling back to stop on failure.</longdesc>
<shortdesc lang="en">How a cluster node should react if notified of its own fencing</shortdesc>
<content type="select" default="">
<option value="stop"/>
<option value="panic"/>
</content>
</parameter>
<parameter name="election-timeout" advanced="1" generated="0">
<longdesc lang="en">Declare an election failed if it is not decided within this much time. If you need to adjust this value, it probably indicates the presence of a bug.</longdesc>
<shortdesc lang="en">Declare an election failed if it is not decided within this much time. If you need to adjust this value, it probably indicates the presence of a bug.</shortdesc>
<content type="duration" default=""/>
</parameter>
<parameter name="shutdown-escalation" advanced="1" generated="0">
<longdesc lang="en">Exit immediately if shutdown does not complete within this much time. If you need to adjust this value, it probably indicates the presence of a bug.</longdesc>
<shortdesc lang="en">Exit immediately if shutdown does not complete within this much time. If you need to adjust this value, it probably indicates the presence of a bug.</shortdesc>
<content type="duration" default=""/>
</parameter>
<parameter name="join-integration-timeout" advanced="1" generated="0">
<longdesc lang="en">If you need to adjust this value, it probably indicates the presence of a bug.</longdesc>
<shortdesc lang="en">If you need to adjust this value, it probably indicates the presence of a bug.</shortdesc>
<content type="duration" default=""/>
</parameter>
<parameter name="join-finalization-timeout" advanced="1" generated="0">
<longdesc lang="en">If you need to adjust this value, it probably indicates the presence of a bug.</longdesc>
<shortdesc lang="en">If you need to adjust this value, it probably indicates the presence of a bug.</shortdesc>
<content type="duration" default=""/>
</parameter>
<parameter name="transition-delay" advanced="1" generated="0">
<longdesc lang="en">Delay cluster recovery for this much time to allow for additional events to occur. Useful if your configuration is sensitive to the order in which ping updates arrive.</longdesc>
<shortdesc lang="en">Enabling this option will slow down cluster recovery under all conditions</shortdesc>
<content type="duration" default=""/>
</parameter>
<parameter name="no-quorum-policy" advanced="0" generated="0">
<longdesc lang="en">What to do when the cluster does not have quorum</longdesc>
<shortdesc lang="en">What to do when the cluster does not have quorum</shortdesc>
<content type="select" default="">
<option value="stop"/>
<option value="freeze"/>
<option value="ignore"/>
<option value="demote"/>
<option value="fence"/>
<option value="suicide"/>
</content>
</parameter>
<parameter name="shutdown-lock" advanced="0" generated="0">
<longdesc lang="en">When true, resources active on a node when it is cleanly shut down are kept "locked" to that node (not allowed to run elsewhere) until they start again on that node after it rejoins (or for at most shutdown-lock-limit, if set). Stonith resources and Pacemaker Remote connections are never locked. Clone and bundle instances and the promoted role of promotable clones are currently never locked, though support could be added in a future release.</longdesc>
<shortdesc lang="en">Whether to lock resources to a cleanly shut down node</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="shutdown-lock-limit" advanced="0" generated="0">
<longdesc lang="en">If shutdown-lock is true and this is set to a nonzero time duration, shutdown locks will expire after this much time has passed since the shutdown was initiated, even if the node has not rejoined.</longdesc>
<shortdesc lang="en">Do not lock resources to a cleanly shut down node longer than this</shortdesc>
<content type="duration" default=""/>
</parameter>
<parameter name="enable-acl" advanced="0" generated="0">
<longdesc lang="en">Enable Access Control Lists (ACLs) for the CIB</longdesc>
<shortdesc lang="en">Enable Access Control Lists (ACLs) for the CIB</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="symmetric-cluster" advanced="0" generated="0">
<longdesc lang="en">Whether resources can run on any node by default</longdesc>
<shortdesc lang="en">Whether resources can run on any node by default</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="maintenance-mode" advanced="0" generated="0">
<longdesc lang="en">Whether the cluster should refrain from monitoring, starting, and stopping resources</longdesc>
<shortdesc lang="en">Whether the cluster should refrain from monitoring, starting, and stopping resources</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="start-failure-is-fatal" advanced="0" generated="0">
<longdesc lang="en">When true, the cluster will immediately ban a resource from a node if it fails to start there. When false, the cluster will instead check the resource's fail count against its migration-threshold.</longdesc>
<shortdesc lang="en">Whether a start failure should prevent a resource from being recovered on the same node</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="enable-startup-probes" advanced="0" generated="0">
<longdesc lang="en">Whether the cluster should check for active resources during start-up</longdesc>
<shortdesc lang="en">Whether the cluster should check for active resources during start-up</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="fence-remote-without-quorum" advanced="1" generated="0">
<longdesc lang="en">By default, an inquorate node can not fence Pacemaker Remote nodes that are part of its partition as long as the cluster thinks they can be restarted. If true, inquorate nodes will be able to fence remote nodes regardless.</longdesc>
<shortdesc lang="en">Whether remote nodes can be fenced without quorum</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="stonith-enabled" advanced="1" generated="0">
<longdesc lang="en">If false, unresponsive nodes are immediately assumed to be harmless, and resources that were active on them may be recovered elsewhere. This can result in a "split-brain" situation, potentially leading to data loss and/or service unavailability.</longdesc>
<shortdesc lang="en">Whether nodes may be fenced as part of recovery</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="stonith-action" advanced="0" generated="0">
<longdesc lang="en">Action to send to fence device when a node needs to be fenced</longdesc>
<shortdesc lang="en">Action to send to fence device when a node needs to be fenced</shortdesc>
<content type="select" default="">
<option value="reboot"/>
<option value="off"/>
</content>
</parameter>
<parameter name="stonith-timeout" advanced="0" generated="0">
<longdesc lang="en">How long to wait for on, off, and reboot fence actions to complete by default</longdesc>
<shortdesc lang="en">How long to wait for on, off, and reboot fence actions to complete by default</shortdesc>
<content type="duration" default=""/>
</parameter>
<parameter name="have-watchdog" advanced="0" generated="1">
<longdesc lang="en">This is set automatically by the cluster according to whether SBD is detected to be in use. User-configured values are ignored. The value `true` is meaningful if diskless SBD is used and `stonith-watchdog-timeout` is nonzero. In that case, if fencing is required, watchdog-based self-fencing will be performed via SBD without requiring a fencing resource explicitly configured.</longdesc>
<shortdesc lang="en">Whether watchdog integration is enabled</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="stonith-watchdog-timeout" advanced="0" generated="0">
<longdesc lang="en">If this is set to a positive value, lost nodes are assumed to achieve self-fencing using watchdog-based SBD within this much time. This does not require a fencing resource to be explicitly configured, though a fence_watchdog resource can be configured, to limit use to specific nodes. If this is set to 0 (the default), the cluster will never assume watchdog-based self-fencing. If this is set to a negative value, the cluster will use twice the local value of the `SBD_WATCHDOG_TIMEOUT` environment variable if that is positive, or otherwise treat this as 0. WARNING: When used, this timeout must be larger than `SBD_WATCHDOG_TIMEOUT` on all nodes that use watchdog-based SBD, and Pacemaker will refuse to start on any of those nodes where this is not true for the local value or SBD is not active. When this is set to a negative value, `SBD_WATCHDOG_TIMEOUT` must be set to the same value on all nodes that use SBD, otherwise data corruption or loss could occur.</longdesc>
<shortdesc lang="en">How long before nodes can be assumed to be safely down when watchdog-based self-fencing via SBD is in use</shortdesc>
<content type="timeout" default=""/>
</parameter>
<parameter name="stonith-max-attempts" advanced="0" generated="0">
<longdesc lang="en">How many times fencing can fail before it will no longer be immediately re-attempted on a target</longdesc>
<shortdesc lang="en">How many times fencing can fail before it will no longer be immediately re-attempted on a target</shortdesc>
<content type="score" default=""/>
</parameter>
<parameter name="concurrent-fencing" advanced="0" generated="0">
<deprecated/>
<longdesc lang="en">Allow performing fencing operations in parallel</longdesc>
<shortdesc lang="en">Allow performing fencing operations in parallel</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="startup-fencing" advanced="1" generated="0">
<longdesc lang="en">Setting this to false may lead to a "split-brain" situation, potentially leading to data loss and/or service unavailability.</longdesc>
<shortdesc lang="en">Whether to fence unseen nodes at start-up</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="priority-fencing-delay" advanced="0" generated="0">
<longdesc lang="en">Apply specified delay for the fencings that are targeting the lost nodes with the highest total resource priority in case we don't have the majority of the nodes in our cluster partition, so that the more significant nodes potentially win any fencing match, which is especially meaningful under split-brain of 2-node cluster. A promoted resource instance takes the base priority + 1 on calculation if the base priority is not 0. Any static/random delays that are introduced by `pcmk_delay_base/max` configured for the corresponding fencing resources will be added to this delay. This delay should be significantly greater than, safely twice, the maximum `pcmk_delay_base/max`. By default, priority fencing delay is disabled.</longdesc>
<shortdesc lang="en">Apply fencing delay targeting the lost nodes with the highest total resource priority</shortdesc>
<content type="duration" default=""/>
</parameter>
<parameter name="node-pending-timeout" advanced="0" generated="0">
<longdesc lang="en">Fence nodes that do not join the controller process group within this much time after joining the cluster, to allow the cluster to continue managing resources. A value of 0 means never fence pending nodes. Setting the value to 2h means fence nodes after 2 hours.</longdesc>
<shortdesc lang="en">How long to wait for a node that has joined the cluster to join the controller process group</shortdesc>
<content type="duration" default=""/>
</parameter>
<parameter name="cluster-delay" advanced="0" generated="0">
<longdesc lang="en">The node elected Designated Controller (DC) will consider an action failed if it does not get a response from the node executing the action within this time (after considering the action's own timeout). The "correct" value will depend on the speed and load of your network and cluster nodes.</longdesc>
<shortdesc lang="en">Maximum time for node-to-node communication</shortdesc>
<content type="duration" default=""/>
</parameter>
<parameter name="load-threshold" advanced="0" generated="0">
<longdesc lang="en">The cluster will slow down its recovery process when the amount of system resources used (currently CPU) approaches this limit</longdesc>
<shortdesc lang="en">Maximum amount of system load that should be used by cluster nodes</shortdesc>
<content type="percentage" default=""/>
</parameter>
<parameter name="node-action-limit" advanced="0" generated="0">
<longdesc lang="en">Maximum number of jobs that can be scheduled per node (defaults to 2x cores)</longdesc>
<shortdesc lang="en">Maximum number of jobs that can be scheduled per node (defaults to 2x cores)</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="batch-limit" advanced="0" generated="0">
<longdesc lang="en">The "correct" value will depend on the speed and load of your network and cluster nodes. If set to 0, the cluster will impose a dynamically calculated limit when any node has a high load.</longdesc>
<shortdesc lang="en">Maximum number of jobs that the cluster may execute in parallel across all nodes</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="migration-limit" advanced="0" generated="0">
<longdesc lang="en">The number of live migration actions that the cluster is allowed to execute in parallel on a node (-1 means no limit)</longdesc>
<shortdesc lang="en">The number of live migration actions that the cluster is allowed to execute in parallel on a node (-1 means no limit)</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="cluster-ipc-limit" advanced="0" generated="0">
<longdesc lang="en">Raise this if log has "Evicting client" messages for cluster daemon PIDs (a good value is the number of resources in the cluster multiplied by the number of nodes).</longdesc>
<shortdesc lang="en">Maximum IPC message backlog before disconnecting a cluster daemon</shortdesc>
<content type="nonnegative_integer" default=""/>
</parameter>
<parameter name="stop-all-resources" advanced="0" generated="0">
<longdesc lang="en">Whether the cluster should stop all active resources</longdesc>
<shortdesc lang="en">Whether the cluster should stop all active resources</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="stop-removed-resources" advanced="0" generated="0">
<longdesc lang="en">Whether to stop resources that were removed from the configuration</longdesc>
<shortdesc lang="en">Whether to stop resources that were removed from the configuration</shortdesc>
<content type="boolean" default=""/>
</parameter>
+ <parameter name="stop-orphan-resources" advanced="0" generated="0">
+ <deprecated>
+ <replaced-with name="stop-removed-resources"/>
+ </deprecated>
+ <longdesc lang="en">Deprecated alias for stop-removed-resources</longdesc>
+ <shortdesc lang="en">Deprecated alias for stop-removed-resources</shortdesc>
+ <content type="boolean" default=""/>
+ </parameter>
<parameter name="stop-removed-actions" advanced="0" generated="0">
<longdesc lang="en">Whether to cancel recurring actions removed from the configuration</longdesc>
<shortdesc lang="en">Whether to cancel recurring actions removed from the configuration</shortdesc>
<content type="boolean" default=""/>
</parameter>
+ <parameter name="stop-orphan-actions" advanced="0" generated="0">
+ <deprecated>
+ <replaced-with name="stop-removed-actions"/>
+ </deprecated>
+ <longdesc lang="en">Deprecated alias for stop-removed-actions</longdesc>
+ <shortdesc lang="en">Deprecated alias for stop-removed-actions</shortdesc>
+ <content type="boolean" default=""/>
+ </parameter>
<parameter name="pe-error-series-max" advanced="0" generated="0">
<longdesc lang="en">Zero to disable, -1 to store unlimited.</longdesc>
<shortdesc lang="en">The number of scheduler inputs resulting in errors to save</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="pe-warn-series-max" advanced="0" generated="0">
<longdesc lang="en">Zero to disable, -1 to store unlimited.</longdesc>
<shortdesc lang="en">The number of scheduler inputs resulting in warnings to save</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="pe-input-series-max" advanced="0" generated="0">
<longdesc lang="en">Zero to disable, -1 to store unlimited.</longdesc>
<shortdesc lang="en">The number of scheduler inputs without errors or warnings to save</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="node-health-strategy" advanced="0" generated="0">
<longdesc lang="en">Requires external entities to create node attributes (named with the prefix "#health") with values "red", "yellow", or "green".</longdesc>
<shortdesc lang="en">How cluster should react to node health attributes</shortdesc>
<content type="select" default="">
<option value="none"/>
<option value="migrate-on-red"/>
<option value="only-green"/>
<option value="progressive"/>
<option value="custom"/>
</content>
</parameter>
<parameter name="node-health-base" advanced="0" generated="0">
<longdesc lang="en">Only used when "node-health-strategy" is set to "progressive".</longdesc>
<shortdesc lang="en">Base health score assigned to a node</shortdesc>
<content type="score" default=""/>
</parameter>
<parameter name="node-health-green" advanced="0" generated="0">
<longdesc lang="en">Only used when "node-health-strategy" is set to "custom" or "progressive".</longdesc>
<shortdesc lang="en">The score to use for a node health attribute whose value is "green"</shortdesc>
<content type="score" default=""/>
</parameter>
<parameter name="node-health-yellow" advanced="0" generated="0">
<longdesc lang="en">Only used when "node-health-strategy" is set to "custom" or "progressive".</longdesc>
<shortdesc lang="en">The score to use for a node health attribute whose value is "yellow"</shortdesc>
<content type="score" default=""/>
</parameter>
<parameter name="node-health-red" advanced="0" generated="0">
<longdesc lang="en">Only used when "node-health-strategy" is set to "custom" or "progressive".</longdesc>
<shortdesc lang="en">The score to use for a node health attribute whose value is "red"</shortdesc>
<content type="score" default=""/>
</parameter>
<parameter name="placement-strategy" advanced="0" generated="0">
<longdesc lang="en">How the cluster should allocate resources to nodes</longdesc>
<shortdesc lang="en">How the cluster should allocate resources to nodes</shortdesc>
<content type="select" default="">
<option value="default"/>
<option value="utilization"/>
<option value="minimal"/>
<option value="balanced"/>
</content>
</parameter>
</parameters>
</resource-agent>
<status code="0" message="OK"/>
</pacemaker-result>
=#=#=#= End test: List non-advanced cluster options (XML) - OK (0) =#=#=#=
* Passed: crm_attribute - List non-advanced cluster options (XML)
=#=#=#= Begin test: List all available cluster options =#=#=#=
Pacemaker cluster options
Also known as properties, these are options that affect behavior across the entire cluster. They are configured within cluster_property_set elements inside the crm_config subsection of the CIB configuration section.
* dc-version: Pacemaker version on cluster node elected Designated Controller (DC)
* Includes a hash which identifies the exact revision the code was built from. Used for diagnostic purposes.
* Possible values (generated by Pacemaker): version (no default)
* cluster-infrastructure: The messaging layer on which Pacemaker is currently running
* Used for informational and diagnostic purposes.
* Possible values (generated by Pacemaker): string (no default)
* cluster-name: An arbitrary name for the cluster
* This optional value is mostly for users' convenience as desired in administration, but may also be used in Pacemaker configuration rules via the #cluster-name node attribute, and by higher-level tools and resource agents.
* Possible values: string (no default)
* dc-deadtime: How long to wait for a response from other nodes during start-up
* The optimal value will depend on the speed and load of your network and the type of switches used.
* Possible values: duration (default: )
* cluster-recheck-interval: Polling interval to recheck cluster state and evaluate rules with date specifications
* Pacemaker is primarily event-driven, and looks ahead to know when to recheck cluster state for failure-timeout settings and most time-based rules. However, it will also recheck the cluster after this amount of inactivity, to evaluate rules with date specifications and serve as a fail-safe for certain types of scheduler bugs. A value of 0 disables polling. A positive value sets an interval in seconds, unless other units are specified (for example, "5min").
* Possible values: duration (default: )
* fence-reaction: How a cluster node should react if notified of its own fencing
* A cluster node may receive notification of a "succeeded" fencing that targeted it if fencing is misconfigured, or if fabric fencing is in use that doesn't cut cluster communication. Use "stop" to attempt to immediately stop Pacemaker and stay stopped, or "panic" to attempt to immediately reboot the local node, falling back to stop on failure.
* Possible values: "stop" (default), "panic"
* no-quorum-policy: What to do when the cluster does not have quorum
* Possible values: "stop" (default), "freeze", "ignore", "demote", "fence", "suicide"
* shutdown-lock: Whether to lock resources to a cleanly shut down node
* When true, resources active on a node when it is cleanly shut down are kept "locked" to that node (not allowed to run elsewhere) until they start again on that node after it rejoins (or for at most shutdown-lock-limit, if set). Stonith resources and Pacemaker Remote connections are never locked. Clone and bundle instances and the promoted role of promotable clones are currently never locked, though support could be added in a future release.
* Possible values: boolean (default: )
* shutdown-lock-limit: Do not lock resources to a cleanly shut down node longer than this
* If shutdown-lock is true and this is set to a nonzero time duration, shutdown locks will expire after this much time has passed since the shutdown was initiated, even if the node has not rejoined.
* Possible values: duration (default: )
* enable-acl: Enable Access Control Lists (ACLs) for the CIB
* Possible values: boolean (default: )
* symmetric-cluster: Whether resources can run on any node by default
* Possible values: boolean (default: )
* maintenance-mode: Whether the cluster should refrain from monitoring, starting, and stopping resources
* Possible values: boolean (default: )
* start-failure-is-fatal: Whether a start failure should prevent a resource from being recovered on the same node
* When true, the cluster will immediately ban a resource from a node if it fails to start there. When false, the cluster will instead check the resource's fail count against its migration-threshold.
* Possible values: boolean (default: )
* enable-startup-probes: Whether the cluster should check for active resources during start-up
* Possible values: boolean (default: )
* stonith-action: Action to send to fence device when a node needs to be fenced
* Possible values: "reboot" (default), "off"
* stonith-timeout: How long to wait for on, off, and reboot fence actions to complete by default
* Possible values: duration (default: )
* have-watchdog: Whether watchdog integration is enabled
* This is set automatically by the cluster according to whether SBD is detected to be in use. User-configured values are ignored. The value `true` is meaningful if diskless SBD is used and `stonith-watchdog-timeout` is nonzero. In that case, if fencing is required, watchdog-based self-fencing will be performed via SBD without requiring a fencing resource explicitly configured.
* Possible values (generated by Pacemaker): boolean (default: )
* stonith-watchdog-timeout: How long before nodes can be assumed to be safely down when watchdog-based self-fencing via SBD is in use
* If this is set to a positive value, lost nodes are assumed to achieve self-fencing using watchdog-based SBD within this much time. This does not require a fencing resource to be explicitly configured, though a fence_watchdog resource can be configured, to limit use to specific nodes. If this is set to 0 (the default), the cluster will never assume watchdog-based self-fencing. If this is set to a negative value, the cluster will use twice the local value of the `SBD_WATCHDOG_TIMEOUT` environment variable if that is positive, or otherwise treat this as 0. WARNING: When used, this timeout must be larger than `SBD_WATCHDOG_TIMEOUT` on all nodes that use watchdog-based SBD, and Pacemaker will refuse to start on any of those nodes where this is not true for the local value or SBD is not active. When this is set to a negative value, `SBD_WATCHDOG_TIMEOUT` must be set to the same value on all nodes that use SBD, otherwise data corruption or loss could occur.
* Possible values: timeout (default: )
* stonith-max-attempts: How many times fencing can fail before it will no longer be immediately re-attempted on a target
* Possible values: score (default: )
* priority-fencing-delay: Apply fencing delay targeting the lost nodes with the highest total resource priority
* Apply specified delay for the fencings that are targeting the lost nodes with the highest total resource priority in case we don't have the majority of the nodes in our cluster partition, so that the more significant nodes potentially win any fencing match, which is especially meaningful under split-brain of 2-node cluster. A promoted resource instance takes the base priority + 1 on calculation if the base priority is not 0. Any static/random delays that are introduced by `pcmk_delay_base/max` configured for the corresponding fencing resources will be added to this delay. This delay should be significantly greater than, safely twice, the maximum `pcmk_delay_base/max`. By default, priority fencing delay is disabled.
* Possible values: duration (default: )
* node-pending-timeout: How long to wait for a node that has joined the cluster to join the controller process group
* Fence nodes that do not join the controller process group within this much time after joining the cluster, to allow the cluster to continue managing resources. A value of 0 means never fence pending nodes. Setting the value to 2h means fence nodes after 2 hours.
* Possible values: duration (default: )
* cluster-delay: Maximum time for node-to-node communication
* The node elected Designated Controller (DC) will consider an action failed if it does not get a response from the node executing the action within this time (after considering the action's own timeout). The "correct" value will depend on the speed and load of your network and cluster nodes.
* Possible values: duration (default: )
* load-threshold: Maximum amount of system load that should be used by cluster nodes
* The cluster will slow down its recovery process when the amount of system resources used (currently CPU) approaches this limit
* Possible values: percentage (default: )
* node-action-limit: Maximum number of jobs that can be scheduled per node (defaults to 2x cores)
* Possible values: integer (default: )
* batch-limit: Maximum number of jobs that the cluster may execute in parallel across all nodes
* The "correct" value will depend on the speed and load of your network and cluster nodes. If set to 0, the cluster will impose a dynamically calculated limit when any node has a high load.
* Possible values: integer (default: )
* migration-limit: The number of live migration actions that the cluster is allowed to execute in parallel on a node (-1 means no limit)
* Possible values: integer (default: )
* cluster-ipc-limit: Maximum IPC message backlog before disconnecting a cluster daemon
* Raise this if log has "Evicting client" messages for cluster daemon PIDs (a good value is the number of resources in the cluster multiplied by the number of nodes).
* Possible values: nonnegative_integer (default: )
* stop-all-resources: Whether the cluster should stop all active resources
* Possible values: boolean (default: )
* stop-removed-resources: Whether to stop resources that were removed from the configuration
* Possible values: boolean (default: )
* stop-removed-actions: Whether to cancel recurring actions removed from the configuration
* Possible values: boolean (default: )
* pe-error-series-max: The number of scheduler inputs resulting in errors to save
* Zero to disable, -1 to store unlimited.
* Possible values: integer (default: )
* pe-warn-series-max: The number of scheduler inputs resulting in warnings to save
* Zero to disable, -1 to store unlimited.
* Possible values: integer (default: )
* pe-input-series-max: The number of scheduler inputs without errors or warnings to save
* Zero to disable, -1 to store unlimited.
* Possible values: integer (default: )
* node-health-strategy: How cluster should react to node health attributes
* Requires external entities to create node attributes (named with the prefix "#health") with values "red", "yellow", or "green".
* Possible values: "none" (default), "migrate-on-red", "only-green", "progressive", "custom"
* node-health-base: Base health score assigned to a node
* Only used when "node-health-strategy" is set to "progressive".
* Possible values: score (default: )
* node-health-green: The score to use for a node health attribute whose value is "green"
* Only used when "node-health-strategy" is set to "custom" or "progressive".
* Possible values: score (default: )
* node-health-yellow: The score to use for a node health attribute whose value is "yellow"
* Only used when "node-health-strategy" is set to "custom" or "progressive".
* Possible values: score (default: )
* node-health-red: The score to use for a node health attribute whose value is "red"
* Only used when "node-health-strategy" is set to "custom" or "progressive".
* Possible values: score (default: )
* placement-strategy: How the cluster should allocate resources to nodes
* Possible values: "default" (default), "utilization", "minimal", "balanced"
* ADVANCED OPTIONS:
* election-timeout: Declare an election failed if it is not decided within this much time. If you need to adjust this value, it probably indicates the presence of a bug.
* Possible values: duration (default: )
* shutdown-escalation: Exit immediately if shutdown does not complete within this much time. If you need to adjust this value, it probably indicates the presence of a bug.
* Possible values: duration (default: )
* join-integration-timeout: If you need to adjust this value, it probably indicates the presence of a bug.
* Possible values: duration (default: )
* join-finalization-timeout: If you need to adjust this value, it probably indicates the presence of a bug.
* Possible values: duration (default: )
* transition-delay: Enabling this option will slow down cluster recovery under all conditions
* Delay cluster recovery for this much time to allow for additional events to occur. Useful if your configuration is sensitive to the order in which ping updates arrive.
* Possible values: duration (default: )
* fence-remote-without-quorum: Whether remote nodes can be fenced without quorum
* By default, an inquorate node can not fence Pacemaker Remote nodes that are part of its partition as long as the cluster thinks they can be restarted. If true, inquorate nodes will be able to fence remote nodes regardless.
* Possible values: boolean (default: )
* stonith-enabled: Whether nodes may be fenced as part of recovery
* If false, unresponsive nodes are immediately assumed to be harmless, and resources that were active on them may be recovered elsewhere. This can result in a "split-brain" situation, potentially leading to data loss and/or service unavailability.
* Possible values: boolean (default: )
* startup-fencing: Whether to fence unseen nodes at start-up
* Setting this to false may lead to a "split-brain" situation, potentially leading to data loss and/or service unavailability.
* Possible values: boolean (default: )
* DEPRECATED OPTIONS (will be removed in a future release):
* concurrent-fencing: Allow performing fencing operations in parallel
* Possible values: boolean (default: )
+
+ * stop-orphan-resources: Deprecated alias for stop-removed-resources
+ * Possible values: boolean (default: )
+
+ * stop-orphan-actions: Deprecated alias for stop-removed-actions
+ * Possible values: boolean (default: )
=#=#=#= End test: List all available cluster options - OK (0) =#=#=#=
* Passed: crm_attribute - List all available cluster options
=#=#=#= Begin test: List all available cluster options (XML) =#=#=#=
<pacemaker-result api-version="X" request="crm_attribute --output-as=xml --list-options=cluster --all">
<resource-agent name="cluster-options" version="">
<version>1.1</version>
<longdesc lang="en">Also known as properties, these are options that affect behavior across the entire cluster. They are configured within cluster_property_set elements inside the crm_config subsection of the CIB configuration section.</longdesc>
<shortdesc lang="en">Pacemaker cluster options</shortdesc>
<parameters>
<parameter name="dc-version" advanced="0" generated="1">
<longdesc lang="en">Includes a hash which identifies the exact revision the code was built from. Used for diagnostic purposes.</longdesc>
<shortdesc lang="en">Pacemaker version on cluster node elected Designated Controller (DC)</shortdesc>
<content type="version"/>
</parameter>
<parameter name="cluster-infrastructure" advanced="0" generated="1">
<longdesc lang="en">Used for informational and diagnostic purposes.</longdesc>
<shortdesc lang="en">The messaging layer on which Pacemaker is currently running</shortdesc>
<content type="string"/>
</parameter>
<parameter name="cluster-name" advanced="0" generated="0">
<longdesc lang="en">This optional value is mostly for users' convenience as desired in administration, but may also be used in Pacemaker configuration rules via the #cluster-name node attribute, and by higher-level tools and resource agents.</longdesc>
<shortdesc lang="en">An arbitrary name for the cluster</shortdesc>
<content type="string"/>
</parameter>
<parameter name="dc-deadtime" advanced="0" generated="0">
<longdesc lang="en">The optimal value will depend on the speed and load of your network and the type of switches used.</longdesc>
<shortdesc lang="en">How long to wait for a response from other nodes during start-up</shortdesc>
<content type="duration" default=""/>
</parameter>
<parameter name="cluster-recheck-interval" advanced="0" generated="0">
<longdesc lang="en">Pacemaker is primarily event-driven, and looks ahead to know when to recheck cluster state for failure-timeout settings and most time-based rules. However, it will also recheck the cluster after this amount of inactivity, to evaluate rules with date specifications and serve as a fail-safe for certain types of scheduler bugs. A value of 0 disables polling. A positive value sets an interval in seconds, unless other units are specified (for example, "5min").</longdesc>
<shortdesc lang="en">Polling interval to recheck cluster state and evaluate rules with date specifications</shortdesc>
<content type="duration" default=""/>
</parameter>
<parameter name="fence-reaction" advanced="0" generated="0">
<longdesc lang="en">A cluster node may receive notification of a "succeeded" fencing that targeted it if fencing is misconfigured, or if fabric fencing is in use that doesn't cut cluster communication. Use "stop" to attempt to immediately stop Pacemaker and stay stopped, or "panic" to attempt to immediately reboot the local node, falling back to stop on failure.</longdesc>
<shortdesc lang="en">How a cluster node should react if notified of its own fencing</shortdesc>
<content type="select" default="">
<option value="stop"/>
<option value="panic"/>
</content>
</parameter>
<parameter name="election-timeout" advanced="1" generated="0">
<longdesc lang="en">Declare an election failed if it is not decided within this much time. If you need to adjust this value, it probably indicates the presence of a bug.</longdesc>
<shortdesc lang="en">Declare an election failed if it is not decided within this much time. If you need to adjust this value, it probably indicates the presence of a bug.</shortdesc>
<content type="duration" default=""/>
</parameter>
<parameter name="shutdown-escalation" advanced="1" generated="0">
<longdesc lang="en">Exit immediately if shutdown does not complete within this much time. If you need to adjust this value, it probably indicates the presence of a bug.</longdesc>
<shortdesc lang="en">Exit immediately if shutdown does not complete within this much time. If you need to adjust this value, it probably indicates the presence of a bug.</shortdesc>
<content type="duration" default=""/>
</parameter>
<parameter name="join-integration-timeout" advanced="1" generated="0">
<longdesc lang="en">If you need to adjust this value, it probably indicates the presence of a bug.</longdesc>
<shortdesc lang="en">If you need to adjust this value, it probably indicates the presence of a bug.</shortdesc>
<content type="duration" default=""/>
</parameter>
<parameter name="join-finalization-timeout" advanced="1" generated="0">
<longdesc lang="en">If you need to adjust this value, it probably indicates the presence of a bug.</longdesc>
<shortdesc lang="en">If you need to adjust this value, it probably indicates the presence of a bug.</shortdesc>
<content type="duration" default=""/>
</parameter>
<parameter name="transition-delay" advanced="1" generated="0">
<longdesc lang="en">Delay cluster recovery for this much time to allow for additional events to occur. Useful if your configuration is sensitive to the order in which ping updates arrive.</longdesc>
<shortdesc lang="en">Enabling this option will slow down cluster recovery under all conditions</shortdesc>
<content type="duration" default=""/>
</parameter>
<parameter name="no-quorum-policy" advanced="0" generated="0">
<longdesc lang="en">What to do when the cluster does not have quorum</longdesc>
<shortdesc lang="en">What to do when the cluster does not have quorum</shortdesc>
<content type="select" default="">
<option value="stop"/>
<option value="freeze"/>
<option value="ignore"/>
<option value="demote"/>
<option value="fence"/>
<option value="suicide"/>
</content>
</parameter>
<parameter name="shutdown-lock" advanced="0" generated="0">
<longdesc lang="en">When true, resources active on a node when it is cleanly shut down are kept "locked" to that node (not allowed to run elsewhere) until they start again on that node after it rejoins (or for at most shutdown-lock-limit, if set). Stonith resources and Pacemaker Remote connections are never locked. Clone and bundle instances and the promoted role of promotable clones are currently never locked, though support could be added in a future release.</longdesc>
<shortdesc lang="en">Whether to lock resources to a cleanly shut down node</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="shutdown-lock-limit" advanced="0" generated="0">
<longdesc lang="en">If shutdown-lock is true and this is set to a nonzero time duration, shutdown locks will expire after this much time has passed since the shutdown was initiated, even if the node has not rejoined.</longdesc>
<shortdesc lang="en">Do not lock resources to a cleanly shut down node longer than this</shortdesc>
<content type="duration" default=""/>
</parameter>
<parameter name="enable-acl" advanced="0" generated="0">
<longdesc lang="en">Enable Access Control Lists (ACLs) for the CIB</longdesc>
<shortdesc lang="en">Enable Access Control Lists (ACLs) for the CIB</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="symmetric-cluster" advanced="0" generated="0">
<longdesc lang="en">Whether resources can run on any node by default</longdesc>
<shortdesc lang="en">Whether resources can run on any node by default</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="maintenance-mode" advanced="0" generated="0">
<longdesc lang="en">Whether the cluster should refrain from monitoring, starting, and stopping resources</longdesc>
<shortdesc lang="en">Whether the cluster should refrain from monitoring, starting, and stopping resources</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="start-failure-is-fatal" advanced="0" generated="0">
<longdesc lang="en">When true, the cluster will immediately ban a resource from a node if it fails to start there. When false, the cluster will instead check the resource's fail count against its migration-threshold.</longdesc>
<shortdesc lang="en">Whether a start failure should prevent a resource from being recovered on the same node</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="enable-startup-probes" advanced="0" generated="0">
<longdesc lang="en">Whether the cluster should check for active resources during start-up</longdesc>
<shortdesc lang="en">Whether the cluster should check for active resources during start-up</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="fence-remote-without-quorum" advanced="1" generated="0">
<longdesc lang="en">By default, an inquorate node can not fence Pacemaker Remote nodes that are part of its partition as long as the cluster thinks they can be restarted. If true, inquorate nodes will be able to fence remote nodes regardless.</longdesc>
<shortdesc lang="en">Whether remote nodes can be fenced without quorum</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="stonith-enabled" advanced="1" generated="0">
<longdesc lang="en">If false, unresponsive nodes are immediately assumed to be harmless, and resources that were active on them may be recovered elsewhere. This can result in a "split-brain" situation, potentially leading to data loss and/or service unavailability.</longdesc>
<shortdesc lang="en">Whether nodes may be fenced as part of recovery</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="stonith-action" advanced="0" generated="0">
<longdesc lang="en">Action to send to fence device when a node needs to be fenced</longdesc>
<shortdesc lang="en">Action to send to fence device when a node needs to be fenced</shortdesc>
<content type="select" default="">
<option value="reboot"/>
<option value="off"/>
</content>
</parameter>
<parameter name="stonith-timeout" advanced="0" generated="0">
<longdesc lang="en">How long to wait for on, off, and reboot fence actions to complete by default</longdesc>
<shortdesc lang="en">How long to wait for on, off, and reboot fence actions to complete by default</shortdesc>
<content type="duration" default=""/>
</parameter>
<parameter name="have-watchdog" advanced="0" generated="1">
<longdesc lang="en">This is set automatically by the cluster according to whether SBD is detected to be in use. User-configured values are ignored. The value `true` is meaningful if diskless SBD is used and `stonith-watchdog-timeout` is nonzero. In that case, if fencing is required, watchdog-based self-fencing will be performed via SBD without requiring a fencing resource explicitly configured.</longdesc>
<shortdesc lang="en">Whether watchdog integration is enabled</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="stonith-watchdog-timeout" advanced="0" generated="0">
<longdesc lang="en">If this is set to a positive value, lost nodes are assumed to achieve self-fencing using watchdog-based SBD within this much time. This does not require a fencing resource to be explicitly configured, though a fence_watchdog resource can be configured, to limit use to specific nodes. If this is set to 0 (the default), the cluster will never assume watchdog-based self-fencing. If this is set to a negative value, the cluster will use twice the local value of the `SBD_WATCHDOG_TIMEOUT` environment variable if that is positive, or otherwise treat this as 0. WARNING: When used, this timeout must be larger than `SBD_WATCHDOG_TIMEOUT` on all nodes that use watchdog-based SBD, and Pacemaker will refuse to start on any of those nodes where this is not true for the local value or SBD is not active. When this is set to a negative value, `SBD_WATCHDOG_TIMEOUT` must be set to the same value on all nodes that use SBD, otherwise data corruption or loss could occur.</longdesc>
<shortdesc lang="en">How long before nodes can be assumed to be safely down when watchdog-based self-fencing via SBD is in use</shortdesc>
<content type="timeout" default=""/>
</parameter>
<parameter name="stonith-max-attempts" advanced="0" generated="0">
<longdesc lang="en">How many times fencing can fail before it will no longer be immediately re-attempted on a target</longdesc>
<shortdesc lang="en">How many times fencing can fail before it will no longer be immediately re-attempted on a target</shortdesc>
<content type="score" default=""/>
</parameter>
<parameter name="concurrent-fencing" advanced="0" generated="0">
<deprecated/>
<longdesc lang="en">Allow performing fencing operations in parallel</longdesc>
<shortdesc lang="en">Allow performing fencing operations in parallel</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="startup-fencing" advanced="1" generated="0">
<longdesc lang="en">Setting this to false may lead to a "split-brain" situation, potentially leading to data loss and/or service unavailability.</longdesc>
<shortdesc lang="en">Whether to fence unseen nodes at start-up</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="priority-fencing-delay" advanced="0" generated="0">
<longdesc lang="en">Apply specified delay for the fencings that are targeting the lost nodes with the highest total resource priority in case we don't have the majority of the nodes in our cluster partition, so that the more significant nodes potentially win any fencing match, which is especially meaningful under split-brain of 2-node cluster. A promoted resource instance takes the base priority + 1 on calculation if the base priority is not 0. Any static/random delays that are introduced by `pcmk_delay_base/max` configured for the corresponding fencing resources will be added to this delay. This delay should be significantly greater than, safely twice, the maximum `pcmk_delay_base/max`. By default, priority fencing delay is disabled.</longdesc>
<shortdesc lang="en">Apply fencing delay targeting the lost nodes with the highest total resource priority</shortdesc>
<content type="duration" default=""/>
</parameter>
<parameter name="node-pending-timeout" advanced="0" generated="0">
<longdesc lang="en">Fence nodes that do not join the controller process group within this much time after joining the cluster, to allow the cluster to continue managing resources. A value of 0 means never fence pending nodes. Setting the value to 2h means fence nodes after 2 hours.</longdesc>
<shortdesc lang="en">How long to wait for a node that has joined the cluster to join the controller process group</shortdesc>
<content type="duration" default=""/>
</parameter>
<parameter name="cluster-delay" advanced="0" generated="0">
<longdesc lang="en">The node elected Designated Controller (DC) will consider an action failed if it does not get a response from the node executing the action within this time (after considering the action's own timeout). The "correct" value will depend on the speed and load of your network and cluster nodes.</longdesc>
<shortdesc lang="en">Maximum time for node-to-node communication</shortdesc>
<content type="duration" default=""/>
</parameter>
<parameter name="load-threshold" advanced="0" generated="0">
<longdesc lang="en">The cluster will slow down its recovery process when the amount of system resources used (currently CPU) approaches this limit</longdesc>
<shortdesc lang="en">Maximum amount of system load that should be used by cluster nodes</shortdesc>
<content type="percentage" default=""/>
</parameter>
<parameter name="node-action-limit" advanced="0" generated="0">
<longdesc lang="en">Maximum number of jobs that can be scheduled per node (defaults to 2x cores)</longdesc>
<shortdesc lang="en">Maximum number of jobs that can be scheduled per node (defaults to 2x cores)</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="batch-limit" advanced="0" generated="0">
<longdesc lang="en">The "correct" value will depend on the speed and load of your network and cluster nodes. If set to 0, the cluster will impose a dynamically calculated limit when any node has a high load.</longdesc>
<shortdesc lang="en">Maximum number of jobs that the cluster may execute in parallel across all nodes</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="migration-limit" advanced="0" generated="0">
<longdesc lang="en">The number of live migration actions that the cluster is allowed to execute in parallel on a node (-1 means no limit)</longdesc>
<shortdesc lang="en">The number of live migration actions that the cluster is allowed to execute in parallel on a node (-1 means no limit)</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="cluster-ipc-limit" advanced="0" generated="0">
<longdesc lang="en">Raise this if log has "Evicting client" messages for cluster daemon PIDs (a good value is the number of resources in the cluster multiplied by the number of nodes).</longdesc>
<shortdesc lang="en">Maximum IPC message backlog before disconnecting a cluster daemon</shortdesc>
<content type="nonnegative_integer" default=""/>
</parameter>
<parameter name="stop-all-resources" advanced="0" generated="0">
<longdesc lang="en">Whether the cluster should stop all active resources</longdesc>
<shortdesc lang="en">Whether the cluster should stop all active resources</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="stop-removed-resources" advanced="0" generated="0">
<longdesc lang="en">Whether to stop resources that were removed from the configuration</longdesc>
<shortdesc lang="en">Whether to stop resources that were removed from the configuration</shortdesc>
<content type="boolean" default=""/>
</parameter>
+ <parameter name="stop-orphan-resources" advanced="0" generated="0">
+ <deprecated>
+ <replaced-with name="stop-removed-resources"/>
+ </deprecated>
+ <longdesc lang="en">Deprecated alias for stop-removed-resources</longdesc>
+ <shortdesc lang="en">Deprecated alias for stop-removed-resources</shortdesc>
+ <content type="boolean" default=""/>
+ </parameter>
<parameter name="stop-removed-actions" advanced="0" generated="0">
<longdesc lang="en">Whether to cancel recurring actions removed from the configuration</longdesc>
<shortdesc lang="en">Whether to cancel recurring actions removed from the configuration</shortdesc>
<content type="boolean" default=""/>
</parameter>
+ <parameter name="stop-orphan-actions" advanced="0" generated="0">
+ <deprecated>
+ <replaced-with name="stop-removed-actions"/>
+ </deprecated>
+ <longdesc lang="en">Deprecated alias for stop-removed-actions</longdesc>
+ <shortdesc lang="en">Deprecated alias for stop-removed-actions</shortdesc>
+ <content type="boolean" default=""/>
+ </parameter>
<parameter name="pe-error-series-max" advanced="0" generated="0">
<longdesc lang="en">Zero to disable, -1 to store unlimited.</longdesc>
<shortdesc lang="en">The number of scheduler inputs resulting in errors to save</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="pe-warn-series-max" advanced="0" generated="0">
<longdesc lang="en">Zero to disable, -1 to store unlimited.</longdesc>
<shortdesc lang="en">The number of scheduler inputs resulting in warnings to save</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="pe-input-series-max" advanced="0" generated="0">
<longdesc lang="en">Zero to disable, -1 to store unlimited.</longdesc>
<shortdesc lang="en">The number of scheduler inputs without errors or warnings to save</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="node-health-strategy" advanced="0" generated="0">
<longdesc lang="en">Requires external entities to create node attributes (named with the prefix "#health") with values "red", "yellow", or "green".</longdesc>
<shortdesc lang="en">How cluster should react to node health attributes</shortdesc>
<content type="select" default="">
<option value="none"/>
<option value="migrate-on-red"/>
<option value="only-green"/>
<option value="progressive"/>
<option value="custom"/>
</content>
</parameter>
<parameter name="node-health-base" advanced="0" generated="0">
<longdesc lang="en">Only used when "node-health-strategy" is set to "progressive".</longdesc>
<shortdesc lang="en">Base health score assigned to a node</shortdesc>
<content type="score" default=""/>
</parameter>
<parameter name="node-health-green" advanced="0" generated="0">
<longdesc lang="en">Only used when "node-health-strategy" is set to "custom" or "progressive".</longdesc>
<shortdesc lang="en">The score to use for a node health attribute whose value is "green"</shortdesc>
<content type="score" default=""/>
</parameter>
<parameter name="node-health-yellow" advanced="0" generated="0">
<longdesc lang="en">Only used when "node-health-strategy" is set to "custom" or "progressive".</longdesc>
<shortdesc lang="en">The score to use for a node health attribute whose value is "yellow"</shortdesc>
<content type="score" default=""/>
</parameter>
<parameter name="node-health-red" advanced="0" generated="0">
<longdesc lang="en">Only used when "node-health-strategy" is set to "custom" or "progressive".</longdesc>
<shortdesc lang="en">The score to use for a node health attribute whose value is "red"</shortdesc>
<content type="score" default=""/>
</parameter>
<parameter name="placement-strategy" advanced="0" generated="0">
<longdesc lang="en">How the cluster should allocate resources to nodes</longdesc>
<shortdesc lang="en">How the cluster should allocate resources to nodes</shortdesc>
<content type="select" default="">
<option value="default"/>
<option value="utilization"/>
<option value="minimal"/>
<option value="balanced"/>
</content>
</parameter>
</parameters>
</resource-agent>
<status code="0" message="OK"/>
</pacemaker-result>
=#=#=#= End test: List all available cluster options (XML) - OK (0) =#=#=#=
* Passed: crm_attribute - List all available cluster options (XML)
=#=#=#= Begin test: Return usage error if both -p and OCF_RESOURCE_INSTANCE are empty strings =#=#=#=
crm_attribute: -p/--promotion must be called from an OCF resource agent or with a resource ID specified
=#=#=#= End test: Return usage error if both -p and OCF_RESOURCE_INSTANCE are empty strings - Incorrect usage (64) =#=#=#=
* Passed: crm_attribute - Return usage error if both -p and OCF_RESOURCE_INSTANCE are empty strings
=#=#=#= Begin test: Query the value of an attribute that does not exist =#=#=#=
crm_attribute: Error performing operation: No such device or address
=#=#=#= End test: Query the value of an attribute that does not exist - No such object (105) =#=#=#=
* Passed: crm_attribute - Query the value of an attribute that does not exist
=#=#=#= Begin test: Configure something before erasing =#=#=#=
=#=#=#= Current cib after: Configure something before erasing =#=#=#=
<cib epoch="2" num_updates="0" admin_epoch="0">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-test_attr" name="test_attr" value="5"/>
</cluster_property_set>
</crm_config>
<nodes/>
<resources/>
<constraints/>
</configuration>
<status/>
</cib>
=#=#=#= End test: Configure something before erasing - OK (0) =#=#=#=
* Passed: crm_attribute - Configure something before erasing
=#=#=#= Begin test: Test '++' XML attribute update syntax =#=#=#=
=#=#=#= Current cib after: Test '++' XML attribute update syntax =#=#=#=
<cib epoch="2" num_updates="1" admin_epoch="1">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-test_attr" name="test_attr" value="5"/>
</cluster_property_set>
</crm_config>
<nodes/>
<resources/>
<constraints/>
</configuration>
<status/>
</cib>
=#=#=#= End test: Test '++' XML attribute update syntax - OK (0) =#=#=#=
* Passed: cibadmin - Test '++' XML attribute update syntax
=#=#=#= Begin test: Test '+=' XML attribute update syntax =#=#=#=
=#=#=#= Current cib after: Test '+=' XML attribute update syntax =#=#=#=
<cib epoch="2" num_updates="2" admin_epoch="3">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-test_attr" name="test_attr" value="5"/>
</cluster_property_set>
</crm_config>
<nodes/>
<resources/>
<constraints/>
</configuration>
<status/>
</cib>
=#=#=#= End test: Test '+=' XML attribute update syntax - OK (0) =#=#=#=
* Passed: cibadmin - Test '+=' XML attribute update syntax
=#=#=#= Begin test: Test '++' nvpair value update syntax =#=#=#=
=#=#=#= Current cib after: Test '++' nvpair value update syntax =#=#=#=
<cib epoch="3" num_updates="0" admin_epoch="3">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-test_attr" name="test_attr" value="6"/>
</cluster_property_set>
</crm_config>
<nodes/>
<resources/>
<constraints/>
</configuration>
<status/>
</cib>
=#=#=#= End test: Test '++' nvpair value update syntax - OK (0) =#=#=#=
* Passed: crm_attribute - Test '++' nvpair value update syntax
=#=#=#= Begin test: Test '++' nvpair value update syntax (XML) =#=#=#=
<pacemaker-result api-version="X" request="crm_attribute --output-as=xml -n test_attr -v value++ --score">
<status code="0" message="OK"/>
</pacemaker-result>
=#=#=#= Current cib after: Test '++' nvpair value update syntax (XML) =#=#=#=
<cib epoch="4" num_updates="0" admin_epoch="3">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-test_attr" name="test_attr" value="7"/>
</cluster_property_set>
</crm_config>
<nodes/>
<resources/>
<constraints/>
</configuration>
<status/>
</cib>
=#=#=#= End test: Test '++' nvpair value update syntax (XML) - OK (0) =#=#=#=
* Passed: crm_attribute - Test '++' nvpair value update syntax (XML)
=#=#=#= Begin test: Test '+=' nvpair value update syntax =#=#=#=
=#=#=#= Current cib after: Test '+=' nvpair value update syntax =#=#=#=
<cib epoch="5" num_updates="0" admin_epoch="3">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-test_attr" name="test_attr" value="9"/>
</cluster_property_set>
</crm_config>
<nodes/>
<resources/>
<constraints/>
</configuration>
<status/>
</cib>
=#=#=#= End test: Test '+=' nvpair value update syntax - OK (0) =#=#=#=
* Passed: crm_attribute - Test '+=' nvpair value update syntax
=#=#=#= Begin test: Test '+=' nvpair value update syntax (XML) =#=#=#=
<pacemaker-result api-version="X" request="crm_attribute --output-as=xml -n test_attr -v value+=2 --score">
<status code="0" message="OK"/>
</pacemaker-result>
=#=#=#= Current cib after: Test '+=' nvpair value update syntax (XML) =#=#=#=
<cib epoch="6" num_updates="0" admin_epoch="3">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-test_attr" name="test_attr" value="11"/>
</cluster_property_set>
</crm_config>
<nodes/>
<resources/>
<constraints/>
</configuration>
<status/>
</cib>
=#=#=#= End test: Test '+=' nvpair value update syntax (XML) - OK (0) =#=#=#=
* Passed: crm_attribute - Test '+=' nvpair value update syntax (XML)
=#=#=#= Begin test: Test '++' XML attribute update syntax (--score not set) =#=#=#=
=#=#=#= Current cib after: Test '++' XML attribute update syntax (--score not set) =#=#=#=
<cib epoch="6" num_updates="1" admin_epoch="4">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-test_attr" name="test_attr" value="11"/>
</cluster_property_set>
</crm_config>
<nodes/>
<resources/>
<constraints/>
</configuration>
<status/>
</cib>
=#=#=#= End test: Test '++' XML attribute update syntax (--score not set) - OK (0) =#=#=#=
* Passed: cibadmin - Test '++' XML attribute update syntax (--score not set)
=#=#=#= Begin test: Test '+=' XML attribute update syntax (--score not set) =#=#=#=
=#=#=#= Current cib after: Test '+=' XML attribute update syntax (--score not set) =#=#=#=
<cib epoch="6" num_updates="2" admin_epoch="6">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-test_attr" name="test_attr" value="11"/>
</cluster_property_set>
</crm_config>
<nodes/>
<resources/>
<constraints/>
</configuration>
<status/>
</cib>
=#=#=#= End test: Test '+=' XML attribute update syntax (--score not set) - OK (0) =#=#=#=
* Passed: cibadmin - Test '+=' XML attribute update syntax (--score not set)
=#=#=#= Begin test: Test '++' nvpair value update syntax (--score not set) =#=#=#=
=#=#=#= Current cib after: Test '++' nvpair value update syntax (--score not set) =#=#=#=
<cib epoch="7" num_updates="0" admin_epoch="6">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-test_attr" name="test_attr" value="12"/>
</cluster_property_set>
</crm_config>
<nodes/>
<resources/>
<constraints/>
</configuration>
<status/>
</cib>
=#=#=#= End test: Test '++' nvpair value update syntax (--score not set) - OK (0) =#=#=#=
* Passed: crm_attribute - Test '++' nvpair value update syntax (--score not set)
=#=#=#= Begin test: Test '++' nvpair value update syntax (--score not set) (XML) =#=#=#=
<pacemaker-result api-version="X" request="crm_attribute --output-as=xml -n test_attr -v value++">
<status code="0" message="OK"/>
</pacemaker-result>
=#=#=#= Current cib after: Test '++' nvpair value update syntax (--score not set) (XML) =#=#=#=
<cib epoch="8" num_updates="0" admin_epoch="6">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-test_attr" name="test_attr" value="13"/>
</cluster_property_set>
</crm_config>
<nodes/>
<resources/>
<constraints/>
</configuration>
<status/>
</cib>
=#=#=#= End test: Test '++' nvpair value update syntax (--score not set) (XML) - OK (0) =#=#=#=
* Passed: crm_attribute - Test '++' nvpair value update syntax (--score not set) (XML)
=#=#=#= Begin test: Test '+=' nvpair value update syntax (--score not set) =#=#=#=
=#=#=#= Current cib after: Test '+=' nvpair value update syntax (--score not set) =#=#=#=
<cib epoch="9" num_updates="0" admin_epoch="6">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-test_attr" name="test_attr" value="15"/>
</cluster_property_set>
</crm_config>
<nodes/>
<resources/>
<constraints/>
</configuration>
<status/>
</cib>
=#=#=#= End test: Test '+=' nvpair value update syntax (--score not set) - OK (0) =#=#=#=
* Passed: crm_attribute - Test '+=' nvpair value update syntax (--score not set)
=#=#=#= Begin test: Test '+=' nvpair value update syntax (--score not set) (XML) =#=#=#=
<pacemaker-result api-version="X" request="crm_attribute --output-as=xml -n test_attr -v value+=2">
<status code="0" message="OK"/>
</pacemaker-result>
=#=#=#= Current cib after: Test '+=' nvpair value update syntax (--score not set) (XML) =#=#=#=
<cib epoch="10" num_updates="0" admin_epoch="6">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-test_attr" name="test_attr" value="17"/>
</cluster_property_set>
</crm_config>
<nodes/>
<resources/>
<constraints/>
</configuration>
<status/>
</cib>
=#=#=#= End test: Test '+=' nvpair value update syntax (--score not set) (XML) - OK (0) =#=#=#=
* Passed: crm_attribute - Test '+=' nvpair value update syntax (--score not set) (XML)
=#=#=#= Begin test: Set cluster option =#=#=#=
=#=#=#= Current cib after: Set cluster option =#=#=#=
<cib epoch="2" num_updates="0" admin_epoch="0">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-cluster-delay" name="cluster-delay" value="60s"/>
</cluster_property_set>
</crm_config>
<nodes/>
<resources/>
<constraints/>
</configuration>
<status/>
</cib>
=#=#=#= End test: Set cluster option - OK (0) =#=#=#=
* Passed: crm_attribute - Set cluster option
=#=#=#= Begin test: Query new cluster option =#=#=#=
<nvpair id="cib-bootstrap-options-cluster-delay" name="cluster-delay" value="60s"/>
=#=#=#= End test: Query new cluster option - OK (0) =#=#=#=
* Passed: cibadmin - Query new cluster option
=#=#=#= Begin test: Set no-quorum policy =#=#=#=
=#=#=#= Current cib after: Set no-quorum policy =#=#=#=
<cib epoch="3" num_updates="0" admin_epoch="0">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-cluster-delay" name="cluster-delay" value="60s"/>
<nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
</cluster_property_set>
</crm_config>
<nodes/>
<resources/>
<constraints/>
</configuration>
<status/>
</cib>
=#=#=#= End test: Set no-quorum policy - OK (0) =#=#=#=
* Passed: crm_attribute - Set no-quorum policy
=#=#=#= Begin test: Delete nvpair =#=#=#=
=#=#=#= Current cib after: Delete nvpair =#=#=#=
<cib epoch="4" num_updates="0" admin_epoch="0">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
</cluster_property_set>
</crm_config>
<nodes/>
<resources/>
<constraints/>
</configuration>
<status/>
</cib>
=#=#=#= End test: Delete nvpair - OK (0) =#=#=#=
* Passed: cibadmin - Delete nvpair
=#=#=#= Begin test: Create operation should fail =#=#=#=
cibadmin: CIB API call failed: File exists
<failed>
<failed_update id="cib-bootstrap-options" object-type="cluster_property_set" operation="cib_create" reason="File exists">
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
</cluster_property_set>
</failed_update>
</failed>
=#=#=#= Current cib after: Create operation should fail =#=#=#=
<cib epoch="4" num_updates="0" admin_epoch="0">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
</cluster_property_set>
</crm_config>
<nodes/>
<resources/>
<constraints/>
</configuration>
<status/>
</cib>
=#=#=#= End test: Create operation should fail - Requested item already exists (108) =#=#=#=
* Passed: cibadmin - Create operation should fail
=#=#=#= Begin test: Modify cluster options section =#=#=#=
=#=#=#= Current cib after: Modify cluster options section =#=#=#=
<cib epoch="5" num_updates="0" admin_epoch="0">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
<nvpair id="cib-bootstrap-options-cluster-delay" name="cluster-delay" value="60s"/>
</cluster_property_set>
</crm_config>
<nodes/>
<resources/>
<constraints/>
</configuration>
<status/>
</cib>
=#=#=#= End test: Modify cluster options section - OK (0) =#=#=#=
* Passed: cibadmin - Modify cluster options section
=#=#=#= Begin test: Query updated cluster option =#=#=#=
<nvpair id="cib-bootstrap-options-cluster-delay" name="cluster-delay" value="60s"/>
=#=#=#= Current cib after: Query updated cluster option =#=#=#=
<cib epoch="5" num_updates="0" admin_epoch="0">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
<nvpair id="cib-bootstrap-options-cluster-delay" name="cluster-delay" value="60s"/>
</cluster_property_set>
</crm_config>
<nodes/>
<resources/>
<constraints/>
</configuration>
<status/>
</cib>
=#=#=#= End test: Query updated cluster option - OK (0) =#=#=#=
* Passed: cibadmin - Query updated cluster option
=#=#=#= Begin test: Set duplicate cluster option =#=#=#=
=#=#=#= Current cib after: Set duplicate cluster option =#=#=#=
<cib epoch="6" num_updates="0" admin_epoch="0">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
<nvpair id="cib-bootstrap-options-cluster-delay" name="cluster-delay" value="60s"/>
</cluster_property_set>
<cluster_property_set id="duplicate">
<nvpair id="duplicate-cluster-delay" name="cluster-delay" value="40s"/>
</cluster_property_set>
</crm_config>
<nodes/>
<resources/>
<constraints/>
</configuration>
<status/>
</cib>
=#=#=#= End test: Set duplicate cluster option - OK (0) =#=#=#=
* Passed: crm_attribute - Set duplicate cluster option
=#=#=#= Begin test: Setting multiply defined cluster option should fail =#=#=#=
crm_attribute: Please choose from one of the matches below and supply the 'id' with --attr-id
Multiple attributes match name=cluster-delay
Value: 60s (id=cib-bootstrap-options-cluster-delay)
Value: 40s (id=duplicate-cluster-delay)
=#=#=#= Current cib after: Setting multiply defined cluster option should fail =#=#=#=
<cib epoch="6" num_updates="0" admin_epoch="0">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
<nvpair id="cib-bootstrap-options-cluster-delay" name="cluster-delay" value="60s"/>
</cluster_property_set>
<cluster_property_set id="duplicate">
<nvpair id="duplicate-cluster-delay" name="cluster-delay" value="40s"/>
</cluster_property_set>
</crm_config>
<nodes/>
<resources/>
<constraints/>
</configuration>
<status/>
</cib>
=#=#=#= End test: Setting multiply defined cluster option should fail - Multiple items match request (109) =#=#=#=
* Passed: crm_attribute - Setting multiply defined cluster option should fail
=#=#=#= Begin test: Set cluster option with -s =#=#=#=
=#=#=#= Current cib after: Set cluster option with -s =#=#=#=
<cib epoch="7" num_updates="0" admin_epoch="0">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
<nvpair id="cib-bootstrap-options-cluster-delay" name="cluster-delay" value="60s"/>
</cluster_property_set>
<cluster_property_set id="duplicate">
<nvpair id="duplicate-cluster-delay" name="cluster-delay" value="30s"/>
</cluster_property_set>
</crm_config>
<nodes/>
<resources/>
<constraints/>
</configuration>
<status/>
</cib>
=#=#=#= End test: Set cluster option with -s - OK (0) =#=#=#=
* Passed: crm_attribute - Set cluster option with -s
=#=#=#= Begin test: Delete cluster option with -i =#=#=#=
Deleted crm_config option: id=(null) name=cluster-delay
=#=#=#= Current cib after: Delete cluster option with -i =#=#=#=
<cib epoch="8" num_updates="0" admin_epoch="0">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
</cluster_property_set>
<cluster_property_set id="duplicate">
<nvpair id="duplicate-cluster-delay" name="cluster-delay" value="30s"/>
</cluster_property_set>
</crm_config>
<nodes/>
<resources/>
<constraints/>
</configuration>
<status/>
</cib>
=#=#=#= End test: Delete cluster option with -i - OK (0) =#=#=#=
* Passed: crm_attribute - Delete cluster option with -i
=#=#=#= Begin test: Create node1 and bring it online =#=#=#=
unpack_resources error: Resource start-up disabled since no STONITH resources have been defined
unpack_resources error: Either configure some or disable STONITH with the stonith-enabled option
unpack_resources error: NOTE: Clusters with shared data need STONITH to ensure data integrity
unpack_resources error: Resource start-up disabled since no STONITH resources have been defined
unpack_resources error: Either configure some or disable STONITH with the stonith-enabled option
unpack_resources error: NOTE: Clusters with shared data need STONITH to ensure data integrity
unpack_resources error: Resource start-up disabled since no STONITH resources have been defined
unpack_resources error: Either configure some or disable STONITH with the stonith-enabled option
unpack_resources error: NOTE: Clusters with shared data need STONITH to ensure data integrity
Current cluster status:
* Full List of Resources:
* No resources
Performing Requested Modifications:
* Bringing node node1 online
Transition Summary:
Executing Cluster Transition:
Revised Cluster Status:
* Node List:
* Online: [ node1 ]
* Full List of Resources:
* No resources
=#=#=#= Current cib after: Create node1 and bring it online =#=#=#=
<cib epoch="9" num_updates="2" admin_epoch="0">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
</cluster_property_set>
<cluster_property_set id="duplicate">
<nvpair id="duplicate-cluster-delay" name="cluster-delay" value="30s"/>
</cluster_property_set>
</crm_config>
<nodes>
<node id="node1" uname="node1"/>
</nodes>
<resources/>
<constraints/>
</configuration>
<status>
<node_state id="node1" uname="node1" in_ccm="true" crmd="online" join="member" expected="member" crm-debug-origin="crm_simulate"/>
</status>
</cib>
=#=#=#= End test: Create node1 and bring it online - OK (0) =#=#=#=
* Passed: crm_simulate - Create node1 and bring it online
=#=#=#= Begin test: Create node attribute =#=#=#=
=#=#=#= Current cib after: Create node attribute =#=#=#=
<cib epoch="10" num_updates="0" admin_epoch="0">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
</cluster_property_set>
<cluster_property_set id="duplicate">
<nvpair id="duplicate-cluster-delay" name="cluster-delay" value="30s"/>
</cluster_property_set>
</crm_config>
<nodes>
<node id="node1" uname="node1">
<instance_attributes id="nodes-node1">
<nvpair id="nodes-node1-ram" name="ram" value="1024M"/>
</instance_attributes>
</node>
</nodes>
<resources/>
<constraints/>
</configuration>
<status>
<node_state id="node1" uname="node1" in_ccm="true" crmd="online" join="member" expected="member" crm-debug-origin="crm_simulate"/>
</status>
</cib>
=#=#=#= End test: Create node attribute - OK (0) =#=#=#=
* Passed: crm_attribute - Create node attribute
=#=#=#= Begin test: Query new node attribute =#=#=#=
<nvpair id="nodes-node1-ram" name="ram" value="1024M"/>
=#=#=#= Current cib after: Query new node attribute =#=#=#=
<cib epoch="10" num_updates="0" admin_epoch="0">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
</cluster_property_set>
<cluster_property_set id="duplicate">
<nvpair id="duplicate-cluster-delay" name="cluster-delay" value="30s"/>
</cluster_property_set>
</crm_config>
<nodes>
<node id="node1" uname="node1">
<instance_attributes id="nodes-node1">
<nvpair id="nodes-node1-ram" name="ram" value="1024M"/>
</instance_attributes>
</node>
</nodes>
<resources/>
<constraints/>
</configuration>
<status>
<node_state id="node1" uname="node1" in_ccm="true" crmd="online" join="member" expected="member" crm-debug-origin="crm_simulate"/>
</status>
</cib>
=#=#=#= End test: Query new node attribute - OK (0) =#=#=#=
* Passed: cibadmin - Query new node attribute
=#=#=#= Begin test: Create second node attribute =#=#=#=
=#=#=#= Current cib after: Create second node attribute =#=#=#=
<cib epoch="11" num_updates="0" admin_epoch="0">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
</cluster_property_set>
<cluster_property_set id="duplicate">
<nvpair id="duplicate-cluster-delay" name="cluster-delay" value="30s"/>
</cluster_property_set>
</crm_config>
<nodes>
<node id="node1" uname="node1">
<instance_attributes id="nodes-node1">
<nvpair id="nodes-node1-ram" name="ram" value="1024M"/>
<nvpair id="nodes-node1-rattr" name="rattr" value="XYZ"/>
</instance_attributes>
</node>
</nodes>
<resources/>
<constraints/>
</configuration>
<status>
<node_state id="node1" uname="node1" in_ccm="true" crmd="online" join="member" expected="member" crm-debug-origin="crm_simulate"/>
</status>
</cib>
=#=#=#= End test: Create second node attribute - OK (0) =#=#=#=
* Passed: crm_attribute - Create second node attribute
=#=#=#= Begin test: Query node attributes by pattern =#=#=#=
scope=nodes name=ram value=1024M
scope=nodes name=rattr value=XYZ
=#=#=#= End test: Query node attributes by pattern - OK (0) =#=#=#=
* Passed: crm_attribute - Query node attributes by pattern
=#=#=#= Begin test: Update node attributes by pattern =#=#=#=
=#=#=#= Current cib after: Update node attributes by pattern =#=#=#=
<cib epoch="12" num_updates="0" admin_epoch="0">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
</cluster_property_set>
<cluster_property_set id="duplicate">
<nvpair id="duplicate-cluster-delay" name="cluster-delay" value="30s"/>
</cluster_property_set>
</crm_config>
<nodes>
<node id="node1" uname="node1">
<instance_attributes id="nodes-node1">
<nvpair id="nodes-node1-ram" name="ram" value="1024M"/>
<nvpair id="nodes-node1-rattr" name="rattr" value="10"/>
</instance_attributes>
</node>
</nodes>
<resources/>
<constraints/>
</configuration>
<status>
<node_state id="node1" uname="node1" in_ccm="true" crmd="online" join="member" expected="member" crm-debug-origin="crm_simulate"/>
</status>
</cib>
=#=#=#= End test: Update node attributes by pattern - OK (0) =#=#=#=
* Passed: crm_attribute - Update node attributes by pattern
=#=#=#= Begin test: Delete node attributes by pattern =#=#=#=
Deleted nodes attribute: id=nodes-node1-rattr name=rattr
=#=#=#= Current cib after: Delete node attributes by pattern =#=#=#=
<cib epoch="13" num_updates="0" admin_epoch="0">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
</cluster_property_set>
<cluster_property_set id="duplicate">
<nvpair id="duplicate-cluster-delay" name="cluster-delay" value="30s"/>
</cluster_property_set>
</crm_config>
<nodes>
<node id="node1" uname="node1">
<instance_attributes id="nodes-node1">
<nvpair id="nodes-node1-ram" name="ram" value="1024M"/>
</instance_attributes>
</node>
</nodes>
<resources/>
<constraints/>
</configuration>
<status>
<node_state id="node1" uname="node1" in_ccm="true" crmd="online" join="member" expected="member" crm-debug-origin="crm_simulate"/>
</status>
</cib>
=#=#=#= End test: Delete node attributes by pattern - OK (0) =#=#=#=
* Passed: crm_attribute - Delete node attributes by pattern
=#=#=#= Begin test: Set a transient (fail-count) node attribute =#=#=#=
=#=#=#= Current cib after: Set a transient (fail-count) node attribute =#=#=#=
<cib epoch="13" num_updates="1" admin_epoch="0">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
</cluster_property_set>
<cluster_property_set id="duplicate">
<nvpair id="duplicate-cluster-delay" name="cluster-delay" value="30s"/>
</cluster_property_set>
</crm_config>
<nodes>
<node id="node1" uname="node1">
<instance_attributes id="nodes-node1">
<nvpair id="nodes-node1-ram" name="ram" value="1024M"/>
</instance_attributes>
</node>
</nodes>
<resources/>
<constraints/>
</configuration>
<status>
<node_state id="node1" uname="node1" in_ccm="true" crmd="online" join="member" expected="member" crm-debug-origin="crm_simulate">
<transient_attributes id="node1">
<instance_attributes id="status-node1">
<nvpair id="status-node1-fail-count-foo" name="fail-count-foo" value="3"/>
</instance_attributes>
</transient_attributes>
</node_state>
</status>
</cib>
=#=#=#= End test: Set a transient (fail-count) node attribute - OK (0) =#=#=#=
* Passed: crm_attribute - Set a transient (fail-count) node attribute
=#=#=#= Begin test: Query a fail count =#=#=#=
scope=status name=fail-count-foo value=3
=#=#=#= Current cib after: Query a fail count =#=#=#=
<cib epoch="13" num_updates="1" admin_epoch="0">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
</cluster_property_set>
<cluster_property_set id="duplicate">
<nvpair id="duplicate-cluster-delay" name="cluster-delay" value="30s"/>
</cluster_property_set>
</crm_config>
<nodes>
<node id="node1" uname="node1">
<instance_attributes id="nodes-node1">
<nvpair id="nodes-node1-ram" name="ram" value="1024M"/>
</instance_attributes>
</node>
</nodes>
<resources/>
<constraints/>
</configuration>
<status>
<node_state id="node1" uname="node1" in_ccm="true" crmd="online" join="member" expected="member" crm-debug-origin="crm_simulate">
<transient_attributes id="node1">
<instance_attributes id="status-node1">
<nvpair id="status-node1-fail-count-foo" name="fail-count-foo" value="3"/>
</instance_attributes>
</transient_attributes>
</node_state>
</status>
</cib>
=#=#=#= End test: Query a fail count - OK (0) =#=#=#=
* Passed: crm_failcount - Query a fail count
=#=#=#= Begin test: Show node attributes with crm_simulate =#=#=#=
unpack_resources error: Resource start-up disabled since no STONITH resources have been defined
unpack_resources error: Either configure some or disable STONITH with the stonith-enabled option
unpack_resources error: NOTE: Clusters with shared data need STONITH to ensure data integrity
Current cluster status:
* Node List:
* Online: [ node1 ]
* Full List of Resources:
* No resources
* Node Attributes:
* Node: node1:
* ram : 1024M
=#=#=#= End test: Show node attributes with crm_simulate - OK (0) =#=#=#=
* Passed: crm_simulate - Show node attributes with crm_simulate
=#=#=#= Begin test: Set a second transient node attribute =#=#=#=
=#=#=#= Current cib after: Set a second transient node attribute =#=#=#=
<cib epoch="13" num_updates="2" admin_epoch="0">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
</cluster_property_set>
<cluster_property_set id="duplicate">
<nvpair id="duplicate-cluster-delay" name="cluster-delay" value="30s"/>
</cluster_property_set>
</crm_config>
<nodes>
<node id="node1" uname="node1">
<instance_attributes id="nodes-node1">
<nvpair id="nodes-node1-ram" name="ram" value="1024M"/>
</instance_attributes>
</node>
</nodes>
<resources/>
<constraints/>
</configuration>
<status>
<node_state id="node1" uname="node1" in_ccm="true" crmd="online" join="member" expected="member" crm-debug-origin="crm_simulate">
<transient_attributes id="node1">
<instance_attributes id="status-node1">
<nvpair id="status-node1-fail-count-foo" name="fail-count-foo" value="3"/>
<nvpair id="status-node1-fail-count-bar" name="fail-count-bar" value="5"/>
</instance_attributes>
</transient_attributes>
</node_state>
</status>
</cib>
=#=#=#= End test: Set a second transient node attribute - OK (0) =#=#=#=
* Passed: crm_attribute - Set a second transient node attribute
=#=#=#= Begin test: Query transient node attributes by pattern =#=#=#=
scope=status name=fail-count-foo value=3
scope=status name=fail-count-bar value=5
=#=#=#= End test: Query transient node attributes by pattern - OK (0) =#=#=#=
* Passed: crm_attribute - Query transient node attributes by pattern
=#=#=#= Begin test: Update transient node attributes by pattern =#=#=#=
=#=#=#= Current cib after: Update transient node attributes by pattern =#=#=#=
<cib epoch="13" num_updates="4" admin_epoch="0">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
</cluster_property_set>
<cluster_property_set id="duplicate">
<nvpair id="duplicate-cluster-delay" name="cluster-delay" value="30s"/>
</cluster_property_set>
</crm_config>
<nodes>
<node id="node1" uname="node1">
<instance_attributes id="nodes-node1">
<nvpair id="nodes-node1-ram" name="ram" value="1024M"/>
</instance_attributes>
</node>
</nodes>
<resources/>
<constraints/>
</configuration>
<status>
<node_state id="node1" uname="node1" in_ccm="true" crmd="online" join="member" expected="member" crm-debug-origin="crm_simulate">
<transient_attributes id="node1">
<instance_attributes id="status-node1">
<nvpair id="status-node1-fail-count-foo" name="fail-count-foo" value="10"/>
<nvpair id="status-node1-fail-count-bar" name="fail-count-bar" value="10"/>
</instance_attributes>
</transient_attributes>
</node_state>
</status>
</cib>
=#=#=#= End test: Update transient node attributes by pattern - OK (0) =#=#=#=
* Passed: crm_attribute - Update transient node attributes by pattern
=#=#=#= Begin test: Delete transient node attributes by pattern =#=#=#=
Deleted status attribute: id=status-node1-fail-count-foo name=fail-count-foo
Deleted status attribute: id=status-node1-fail-count-bar name=fail-count-bar
=#=#=#= Current cib after: Delete transient node attributes by pattern =#=#=#=
<cib epoch="13" num_updates="6" admin_epoch="0">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
</cluster_property_set>
<cluster_property_set id="duplicate">
<nvpair id="duplicate-cluster-delay" name="cluster-delay" value="30s"/>
</cluster_property_set>
</crm_config>
<nodes>
<node id="node1" uname="node1">
<instance_attributes id="nodes-node1">
<nvpair id="nodes-node1-ram" name="ram" value="1024M"/>
</instance_attributes>
</node>
</nodes>
<resources/>
<constraints/>
</configuration>
<status>
<node_state id="node1" uname="node1" in_ccm="true" crmd="online" join="member" expected="member" crm-debug-origin="crm_simulate">
<transient_attributes id="node1">
<instance_attributes id="status-node1"/>
</transient_attributes>
</node_state>
</status>
</cib>
=#=#=#= End test: Delete transient node attributes by pattern - OK (0) =#=#=#=
* Passed: crm_attribute - Delete transient node attributes by pattern
=#=#=#= Begin test: crm_attribute given invalid delete usage =#=#=#=
crm_attribute: Error: must specify attribute name or pattern to delete
=#=#=#= End test: crm_attribute given invalid delete usage - Incorrect usage (64) =#=#=#=
* Passed: crm_attribute - crm_attribute given invalid delete usage
=#=#=#= Begin test: Set a utilization node attribute =#=#=#=
=#=#=#= Current cib after: Set a utilization node attribute =#=#=#=
<cib epoch="14" num_updates="0" admin_epoch="0">
<configuration>
<crm_config>
<cluster_property_set id="cib-bootstrap-options">
<nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
</cluster_property_set>
<cluster_property_set id="duplicate">
<nvpair id="duplicate-cluster-delay" name="cluster-delay" value="30s"/>
</cluster_property_set>
</crm_config>
<nodes>
<node id="node1" uname="node1">
<instance_attributes id="nodes-node1">
<nvpair id="nodes-node1-ram" name="ram" value="1024M"/>
</instance_attributes>
<utilization id="nodes-node1-utilization">
<nvpair id="nodes-node1-utilization-cpu" name="cpu" value="1"/>
</utilization>
</node>
</nodes>
<resources/>
<constraints/>
</configuration>
<status>
<node_state id="node1" uname="node1" in_ccm="true" crmd="online" join="member" expected="member" crm-debug-origin="crm_simulate">
<transient_attributes id="node1">
<instance_attributes id="status-node1"/>
</transient_attributes>
</node_state>
</status>
</cib>
=#=#=#= End test: Set a utilization node attribute - OK (0) =#=#=#=
* Passed: crm_attribute - Set a utilization node attribute
=#=#=#= Begin test: Query utilization node attribute =#=#=#=
scope=nodes name=cpu value=1
=#=#=#= End test: Query utilization node attribute - OK (0) =#=#=#=
* Passed: crm_attribute - Query utilization node attribute
=#=#=#= Begin test: Replace operation should fail =#=#=#=
cibadmin: CIB API call failed: Update was older than existing configuration
=#=#=#= End test: Replace operation should fail - Update was older than existing configuration (103) =#=#=#=
* Passed: cibadmin - Replace operation should fail
=#=#=#= Begin test: Query a nonexistent promotable score attribute =#=#=#=
crm_attribute: Error performing operation: No such device or address
=#=#=#= End test: Query a nonexistent promotable score attribute - No such object (105) =#=#=#=
* Passed: crm_attribute - Query a nonexistent promotable score attribute
=#=#=#= Begin test: Query a nonexistent promotable score attribute (XML) =#=#=#=
<pacemaker-result api-version="X" request="crm_attribute --output-as=xml -N cluster01 -p promotable-rsc -G">
<status code="105" message="No such object">
<errors>
<error>crm_attribute: Error performing operation: No such device or address</error>
</errors>
</status>
</pacemaker-result>
=#=#=#= End test: Query a nonexistent promotable score attribute (XML) - No such object (105) =#=#=#=
* Passed: crm_attribute - Query a nonexistent promotable score attribute (XML)
=#=#=#= Begin test: Delete a nonexistent promotable score attribute =#=#=#=
=#=#=#= End test: Delete a nonexistent promotable score attribute - OK (0) =#=#=#=
* Passed: crm_attribute - Delete a nonexistent promotable score attribute
=#=#=#= Begin test: Delete a nonexistent promotable score attribute (XML) =#=#=#=
<pacemaker-result api-version="X" request="crm_attribute --output-as=xml -N cluster01 -p promotable-rsc -D">
<status code="0" message="OK"/>
</pacemaker-result>
=#=#=#= End test: Delete a nonexistent promotable score attribute (XML) - OK (0) =#=#=#=
* Passed: crm_attribute - Delete a nonexistent promotable score attribute (XML)
=#=#=#= Begin test: Query after deleting a nonexistent promotable score attribute =#=#=#=
crm_attribute: Error performing operation: No such device or address
=#=#=#= End test: Query after deleting a nonexistent promotable score attribute - No such object (105) =#=#=#=
* Passed: crm_attribute - Query after deleting a nonexistent promotable score attribute
=#=#=#= Begin test: Query after deleting a nonexistent promotable score attribute (XML) =#=#=#=
<pacemaker-result api-version="X" request="crm_attribute --output-as=xml -N cluster01 -p promotable-rsc -G">
<status code="105" message="No such object">
<errors>
<error>crm_attribute: Error performing operation: No such device or address</error>
</errors>
</status>
</pacemaker-result>
=#=#=#= End test: Query after deleting a nonexistent promotable score attribute (XML) - No such object (105) =#=#=#=
* Passed: crm_attribute - Query after deleting a nonexistent promotable score attribute (XML)
=#=#=#= Begin test: Update a nonexistent promotable score attribute =#=#=#=
=#=#=#= End test: Update a nonexistent promotable score attribute - OK (0) =#=#=#=
* Passed: crm_attribute - Update a nonexistent promotable score attribute
=#=#=#= Begin test: Update a nonexistent promotable score attribute (XML) =#=#=#=
<pacemaker-result api-version="X" request="crm_attribute --output-as=xml -N cluster01 -p promotable-rsc -v 1">
<status code="0" message="OK"/>
</pacemaker-result>
=#=#=#= End test: Update a nonexistent promotable score attribute (XML) - OK (0) =#=#=#=
* Passed: crm_attribute - Update a nonexistent promotable score attribute (XML)
=#=#=#= Begin test: Query after updating a nonexistent promotable score attribute =#=#=#=
scope=status name=master-promotable-rsc value=1
=#=#=#= End test: Query after updating a nonexistent promotable score attribute - OK (0) =#=#=#=
* Passed: crm_attribute - Query after updating a nonexistent promotable score attribute
=#=#=#= Begin test: Query after updating a nonexistent promotable score attribute (XML) =#=#=#=
<pacemaker-result api-version="X" request="crm_attribute --output-as=xml -N cluster01 -p promotable-rsc -G">
<attribute name="master-promotable-rsc" value="1" scope="status"/>
<status code="0" message="OK"/>
</pacemaker-result>
=#=#=#= End test: Query after updating a nonexistent promotable score attribute (XML) - OK (0) =#=#=#=
* Passed: crm_attribute - Query after updating a nonexistent promotable score attribute (XML)
=#=#=#= Begin test: Update an existing promotable score attribute =#=#=#=
=#=#=#= End test: Update an existing promotable score attribute - OK (0) =#=#=#=
* Passed: crm_attribute - Update an existing promotable score attribute
=#=#=#= Begin test: Update an existing promotable score attribute (XML) =#=#=#=
<pacemaker-result api-version="X" request="crm_attribute --output-as=xml -N cluster01 -p promotable-rsc -v 5">
<status code="0" message="OK"/>
</pacemaker-result>
=#=#=#= End test: Update an existing promotable score attribute (XML) - OK (0) =#=#=#=
* Passed: crm_attribute - Update an existing promotable score attribute (XML)
=#=#=#= Begin test: Query after updating an existing promotable score attribute =#=#=#=
scope=status name=master-promotable-rsc value=5
=#=#=#= End test: Query after updating an existing promotable score attribute - OK (0) =#=#=#=
* Passed: crm_attribute - Query after updating an existing promotable score attribute
=#=#=#= Begin test: Query after updating an existing promotable score attribute (XML) =#=#=#=
<pacemaker-result api-version="X" request="crm_attribute --output-as=xml -N cluster01 -p promotable-rsc -G">
<attribute name="master-promotable-rsc" value="5" scope="status"/>
<status code="0" message="OK"/>
</pacemaker-result>
=#=#=#= End test: Query after updating an existing promotable score attribute (XML) - OK (0) =#=#=#=
* Passed: crm_attribute - Query after updating an existing promotable score attribute (XML)
=#=#=#= Begin test: Delete an existing promotable score attribute =#=#=#=
Deleted status attribute: id=status-1-master-promotable-rsc name=master-promotable-rsc
=#=#=#= End test: Delete an existing promotable score attribute - OK (0) =#=#=#=
* Passed: crm_attribute - Delete an existing promotable score attribute
=#=#=#= Begin test: Delete an existing promotable score attribute (XML) =#=#=#=
<pacemaker-result api-version="X" request="crm_attribute --output-as=xml -N cluster01 -p promotable-rsc -D">
<status code="0" message="OK"/>
</pacemaker-result>
=#=#=#= End test: Delete an existing promotable score attribute (XML) - OK (0) =#=#=#=
* Passed: crm_attribute - Delete an existing promotable score attribute (XML)
=#=#=#= Begin test: Query after deleting an existing promotable score attribute =#=#=#=
crm_attribute: Error performing operation: No such device or address
=#=#=#= End test: Query after deleting an existing promotable score attribute - No such object (105) =#=#=#=
* Passed: crm_attribute - Query after deleting an existing promotable score attribute
=#=#=#= Begin test: Query after deleting an existing promotable score attribute (XML) =#=#=#=
<pacemaker-result api-version="X" request="crm_attribute --output-as=xml -N cluster01 -p promotable-rsc -G">
<status code="105" message="No such object">
<errors>
<error>crm_attribute: Error performing operation: No such device or address</error>
</errors>
</status>
</pacemaker-result>
=#=#=#= End test: Query after deleting an existing promotable score attribute (XML) - No such object (105) =#=#=#=
* Passed: crm_attribute - Query after deleting an existing promotable score attribute (XML)
=#=#=#= Begin test: Update a promotable score attribute to -INFINITY =#=#=#=
=#=#=#= End test: Update a promotable score attribute to -INFINITY - OK (0) =#=#=#=
* Passed: crm_attribute - Update a promotable score attribute to -INFINITY
=#=#=#= Begin test: Update a promotable score attribute to -INFINITY (XML) =#=#=#=
<pacemaker-result api-version="X" request="crm_attribute --output-as=xml -N cluster01 -p -v -INFINITY">
<status code="0" message="OK"/>
</pacemaker-result>
=#=#=#= End test: Update a promotable score attribute to -INFINITY (XML) - OK (0) =#=#=#=
* Passed: crm_attribute - Update a promotable score attribute to -INFINITY (XML)
=#=#=#= Begin test: Query after updating a promotable score attribute to -INFINITY =#=#=#=
scope=status name=master-promotable-rsc value=-INFINITY
=#=#=#= End test: Query after updating a promotable score attribute to -INFINITY - OK (0) =#=#=#=
* Passed: crm_attribute - Query after updating a promotable score attribute to -INFINITY
=#=#=#= Begin test: Query after updating a promotable score attribute to -INFINITY (XML) =#=#=#=
<pacemaker-result api-version="X" request="crm_attribute --output-as=xml -N cluster01 -p -G">
<attribute name="master-promotable-rsc" value="-INFINITY" scope="status"/>
<status code="0" message="OK"/>
</pacemaker-result>
=#=#=#= End test: Query after updating a promotable score attribute to -INFINITY (XML) - OK (0) =#=#=#=
* Passed: crm_attribute - Query after updating a promotable score attribute to -INFINITY (XML)
=#=#=#= Begin test: Try OCF_RESOURCE_INSTANCE if -p is specified with an empty string =#=#=#=
scope=status name=master-promotable-rsc value=-INFINITY
=#=#=#= End test: Try OCF_RESOURCE_INSTANCE if -p is specified with an empty string - OK (0) =#=#=#=
* Passed: crm_attribute - Try OCF_RESOURCE_INSTANCE if -p is specified with an empty string
diff --git a/cts/cli/regression.daemons.exp b/cts/cli/regression.daemons.exp
index ea3e363e6a..6825c952ba 100644
--- a/cts/cli/regression.daemons.exp
+++ b/cts/cli/regression.daemons.exp
@@ -1,750 +1,768 @@
=#=#=#= Begin test: Get CIB manager metadata =#=#=#=
<resource-agent name="pacemaker-based" version="">
<version>
1.1
</version>
<longdesc lang="en">
Cluster options used by Pacemaker's Cluster Information Base manager
</longdesc>
<shortdesc lang="en">
Cluster Information Base manager options
</shortdesc>
<parameters>
<parameter name="enable-acl">
<longdesc lang="en">
Enable Access Control Lists (ACLs) for the CIB
</longdesc>
<shortdesc lang="en">
Enable Access Control Lists (ACLs) for the CIB
</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="cluster-ipc-limit">
<longdesc lang="en">
Raise this if log has "Evicting client" messages for cluster daemon PIDs (a good value is the number of resources in the cluster multiplied by the number of nodes).
</longdesc>
<shortdesc lang="en">
Maximum IPC message backlog before disconnecting a cluster daemon
</shortdesc>
<content type="integer" default=""/>
</parameter>
</parameters>
</resource-agent>
=#=#=#= End test: Get CIB manager metadata - OK (0) =#=#=#=
* Passed: pacemaker-based - Get CIB manager metadata
=#=#=#= Begin test: Get controller metadata =#=#=#=
<resource-agent name="pacemaker-controld" version="">
<version>
1.1
</version>
<longdesc lang="en">
Cluster options used by Pacemaker's controller
</longdesc>
<shortdesc lang="en">
Pacemaker controller options
</shortdesc>
<parameters>
<parameter name="dc-version">
<longdesc lang="en">
Includes a hash which identifies the exact revision the code was built from. Used for diagnostic purposes.
</longdesc>
<shortdesc lang="en">
Pacemaker version on cluster node elected Designated Controller (DC)
</shortdesc>
<content type="string"/>
</parameter>
<parameter name="cluster-infrastructure">
<longdesc lang="en">
Used for informational and diagnostic purposes.
</longdesc>
<shortdesc lang="en">
The messaging layer on which Pacemaker is currently running
</shortdesc>
<content type="string"/>
</parameter>
<parameter name="cluster-name">
<longdesc lang="en">
This optional value is mostly for users' convenience as desired in administration, but may also be used in Pacemaker configuration rules via the #cluster-name node attribute, and by higher-level tools and resource agents.
</longdesc>
<shortdesc lang="en">
An arbitrary name for the cluster
</shortdesc>
<content type="string"/>
</parameter>
<parameter name="dc-deadtime">
<longdesc lang="en">
The optimal value will depend on the speed and load of your network and the type of switches used.
</longdesc>
<shortdesc lang="en">
How long to wait for a response from other nodes during start-up
</shortdesc>
<content type="time" default=""/>
</parameter>
<parameter name="cluster-recheck-interval">
<longdesc lang="en">
Pacemaker is primarily event-driven, and looks ahead to know when to recheck cluster state for failure-timeout settings and most time-based rules. However, it will also recheck the cluster after this amount of inactivity, to evaluate rules with date specifications and serve as a fail-safe for certain types of scheduler bugs. A value of 0 disables polling. A positive value sets an interval in seconds, unless other units are specified (for example, "5min").
</longdesc>
<shortdesc lang="en">
Polling interval to recheck cluster state and evaluate rules with date specifications
</shortdesc>
<content type="time" default=""/>
</parameter>
<parameter name="fence-reaction">
<longdesc lang="en">
A cluster node may receive notification of a "succeeded" fencing that targeted it if fencing is misconfigured, or if fabric fencing is in use that doesn't cut cluster communication. Use "stop" to attempt to immediately stop Pacemaker and stay stopped, or "panic" to attempt to immediately reboot the local node, falling back to stop on failure. Allowed values: stop, panic
</longdesc>
<shortdesc lang="en">
How a cluster node should react if notified of its own fencing
</shortdesc>
<content type="select" default="">
<option value="stop"/>
<option value="panic"/>
</content>
</parameter>
<parameter name="election-timeout">
<longdesc lang="en">
Declare an election failed if it is not decided within this much time. If you need to adjust this value, it probably indicates the presence of a bug.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only ***
</shortdesc>
<content type="time" default=""/>
</parameter>
<parameter name="shutdown-escalation">
<longdesc lang="en">
Exit immediately if shutdown does not complete within this much time. If you need to adjust this value, it probably indicates the presence of a bug.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only ***
</shortdesc>
<content type="time" default=""/>
</parameter>
<parameter name="join-integration-timeout">
<longdesc lang="en">
If you need to adjust this value, it probably indicates the presence of a bug.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only ***
</shortdesc>
<content type="time" default=""/>
</parameter>
<parameter name="join-finalization-timeout">
<longdesc lang="en">
If you need to adjust this value, it probably indicates the presence of a bug.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only ***
</shortdesc>
<content type="time" default=""/>
</parameter>
<parameter name="transition-delay">
<longdesc lang="en">
Delay cluster recovery for this much time to allow for additional events to occur. Useful if your configuration is sensitive to the order in which ping updates arrive.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only *** Enabling this option will slow down cluster recovery under all conditions
</shortdesc>
<content type="time" default=""/>
</parameter>
<parameter name="stonith-watchdog-timeout">
<longdesc lang="en">
If this is set to a positive value, lost nodes are assumed to achieve self-fencing using watchdog-based SBD within this much time. This does not require a fencing resource to be explicitly configured, though a fence_watchdog resource can be configured, to limit use to specific nodes. If this is set to 0 (the default), the cluster will never assume watchdog-based self-fencing. If this is set to a negative value, the cluster will use twice the local value of the `SBD_WATCHDOG_TIMEOUT` environment variable if that is positive, or otherwise treat this as 0. WARNING: When used, this timeout must be larger than `SBD_WATCHDOG_TIMEOUT` on all nodes that use watchdog-based SBD, and Pacemaker will refuse to start on any of those nodes where this is not true for the local value or SBD is not active. When this is set to a negative value, `SBD_WATCHDOG_TIMEOUT` must be set to the same value on all nodes that use SBD, otherwise data corruption or loss could occur.
</longdesc>
<shortdesc lang="en">
How long before nodes can be assumed to be safely down when watchdog-based self-fencing via SBD is in use
</shortdesc>
<content type="time" default=""/>
</parameter>
<parameter name="stonith-max-attempts">
<longdesc lang="en">
How many times fencing can fail before it will no longer be immediately re-attempted on a target
</longdesc>
<shortdesc lang="en">
How many times fencing can fail before it will no longer be immediately re-attempted on a target
</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="load-threshold">
<longdesc lang="en">
The cluster will slow down its recovery process when the amount of system resources used (currently CPU) approaches this limit
</longdesc>
<shortdesc lang="en">
Maximum amount of system load that should be used by cluster nodes
</shortdesc>
<content type="percentage" default=""/>
</parameter>
<parameter name="node-action-limit">
<longdesc lang="en">
Maximum number of jobs that can be scheduled per node (defaults to 2x cores)
</longdesc>
<shortdesc lang="en">
Maximum number of jobs that can be scheduled per node (defaults to 2x cores)
</shortdesc>
<content type="integer" default=""/>
</parameter>
</parameters>
</resource-agent>
=#=#=#= End test: Get controller metadata - OK (0) =#=#=#=
* Passed: pacemaker-controld - Get controller metadata
=#=#=#= Begin test: Get fencer metadata =#=#=#=
<resource-agent name="pacemaker-fenced" version="">
<version>
1.1
</version>
<longdesc lang="en">
Instance attributes available for all "stonith"-class resources and used by Pacemaker's fence daemon
</longdesc>
<shortdesc lang="en">
Instance attributes available for all "stonith"-class resources
</shortdesc>
<parameters>
<parameter name="pcmk_host_argument">
<longdesc lang="en">
If the fencing agent metadata advertises support for the "port" or "plug" parameter, that will be used as the default, otherwise "none" will be used, which tells the cluster not to supply any additional parameters.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only *** Name of agent parameter that should be set to the fencing target
</shortdesc>
<content type="string"/>
</parameter>
<parameter name="pcmk_host_map">
<longdesc lang="en">
For example, "node1:1;node2:2,3" would tell the cluster to use port 1 for node1 and ports 2 and 3 for node2.
</longdesc>
<shortdesc lang="en">
A mapping of node names to port numbers for devices that do not support node names.
</shortdesc>
<content type="string"/>
</parameter>
<parameter name="pcmk_host_list">
<longdesc lang="en">
Comma-separated list of nodes that can be targeted by this device (for example, "node1,node2,node3"). If pcmk_host_check is "static-list", either this or pcmk_host_map must be set.
</longdesc>
<shortdesc lang="en">
Nodes targeted by this device
</shortdesc>
<content type="string"/>
</parameter>
<parameter name="pcmk_host_check">
<longdesc lang="en">
Use "dynamic-list" to query the device via the 'list' command; "static-list" to check the pcmk_host_list attribute; "status" to query the device via the 'status' command; or "none" to assume every device can fence every node. The default value is "static-list" if pcmk_host_map or pcmk_host_list is set; otherwise "dynamic-list" if the device supports the list operation; otherwise "status" if the device supports the status operation; otherwise "none" Allowed values: dynamic-list, static-list, status, none
</longdesc>
<shortdesc lang="en">
How to determine which nodes can be targeted by the device
</shortdesc>
<content type="select">
<option value="dynamic-list"/>
<option value="static-list"/>
<option value="status"/>
<option value="none"/>
</content>
</parameter>
<parameter name="pcmk_delay_max">
<longdesc lang="en">
Enable a delay of no more than the time specified before executing fencing actions. Pacemaker derives the overall delay by taking the value of pcmk_delay_base and adding a random delay value such that the sum is kept below this maximum.
</longdesc>
<shortdesc lang="en">
Enable a delay of no more than the time specified before executing fencing actions.
</shortdesc>
<content type="time" default=""/>
</parameter>
<parameter name="pcmk_delay_base">
<longdesc lang="en">
This enables a static delay for fencing actions, which can help avoid "death matches" where two nodes try to fence each other at the same time. If pcmk_delay_max is also used, a random delay will be added such that the total delay is kept below that value. This can be set to a single time value to apply to any node targeted by this device (useful if a separate device is configured for each target), or to a node map (for example, "node1:1s;node2:5") to set a different value for each target.
</longdesc>
<shortdesc lang="en">
Enable a base delay for fencing actions and specify base delay value.
</shortdesc>
<content type="string" default=""/>
</parameter>
<parameter name="pcmk_action_limit">
<longdesc lang="en">
If the concurrent-fencing cluster property is "true", this specifies the maximum number of actions that can be performed in parallel on this device. A value of -1 means unlimited.
</longdesc>
<shortdesc lang="en">
The maximum number of actions can be performed in parallel on this device
</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="pcmk_reboot_action">
<longdesc lang="en">
Some devices do not support the standard commands or may provide additional ones. Use this to specify an alternate, device-specific, command that implements the 'reboot' action.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only *** An alternate command to run instead of 'reboot'
</shortdesc>
<content type="string" default=""/>
</parameter>
<parameter name="pcmk_reboot_timeout">
<longdesc lang="en">
Some devices need much more/less time to complete than normal. Use this to specify an alternate, device-specific, timeout for 'reboot' actions.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only *** Specify an alternate timeout to use for 'reboot' actions instead of stonith-timeout
</shortdesc>
<content type="time" default=""/>
</parameter>
<parameter name="pcmk_reboot_retries">
<longdesc lang="en">
Some devices do not support multiple connections. Operations may "fail" if the device is busy with another task. In that case, Pacemaker will automatically retry the operation if there is time remaining. Use this option to alter the number of times Pacemaker tries a 'reboot' action before giving up.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only *** The maximum number of times to try the 'reboot' command within the timeout period
</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="pcmk_off_action">
<longdesc lang="en">
Some devices do not support the standard commands or may provide additional ones. Use this to specify an alternate, device-specific, command that implements the 'off' action.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only *** An alternate command to run instead of 'off'
</shortdesc>
<content type="string" default=""/>
</parameter>
<parameter name="pcmk_off_timeout">
<longdesc lang="en">
Some devices need much more/less time to complete than normal. Use this to specify an alternate, device-specific, timeout for 'off' actions.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only *** Specify an alternate timeout to use for 'off' actions instead of stonith-timeout
</shortdesc>
<content type="time" default=""/>
</parameter>
<parameter name="pcmk_off_retries">
<longdesc lang="en">
Some devices do not support multiple connections. Operations may "fail" if the device is busy with another task. In that case, Pacemaker will automatically retry the operation if there is time remaining. Use this option to alter the number of times Pacemaker tries a 'off' action before giving up.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only *** The maximum number of times to try the 'off' command within the timeout period
</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="pcmk_on_action">
<longdesc lang="en">
Some devices do not support the standard commands or may provide additional ones. Use this to specify an alternate, device-specific, command that implements the 'on' action.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only *** An alternate command to run instead of 'on'
</shortdesc>
<content type="string" default=""/>
</parameter>
<parameter name="pcmk_on_timeout">
<longdesc lang="en">
Some devices need much more/less time to complete than normal. Use this to specify an alternate, device-specific, timeout for 'on' actions.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only *** Specify an alternate timeout to use for 'on' actions instead of stonith-timeout
</shortdesc>
<content type="time" default=""/>
</parameter>
<parameter name="pcmk_on_retries">
<longdesc lang="en">
Some devices do not support multiple connections. Operations may "fail" if the device is busy with another task. In that case, Pacemaker will automatically retry the operation if there is time remaining. Use this option to alter the number of times Pacemaker tries a 'on' action before giving up.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only *** The maximum number of times to try the 'on' command within the timeout period
</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="pcmk_list_action">
<longdesc lang="en">
Some devices do not support the standard commands or may provide additional ones. Use this to specify an alternate, device-specific, command that implements the 'list' action.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only *** An alternate command to run instead of 'list'
</shortdesc>
<content type="string" default=""/>
</parameter>
<parameter name="pcmk_list_timeout">
<longdesc lang="en">
Some devices need much more/less time to complete than normal. Use this to specify an alternate, device-specific, timeout for 'list' actions.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only *** Specify an alternate timeout to use for 'list' actions instead of stonith-timeout
</shortdesc>
<content type="time" default=""/>
</parameter>
<parameter name="pcmk_list_retries">
<longdesc lang="en">
Some devices do not support multiple connections. Operations may "fail" if the device is busy with another task. In that case, Pacemaker will automatically retry the operation if there is time remaining. Use this option to alter the number of times Pacemaker tries a 'list' action before giving up.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only *** The maximum number of times to try the 'list' command within the timeout period
</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="pcmk_monitor_action">
<longdesc lang="en">
Some devices do not support the standard commands or may provide additional ones. Use this to specify an alternate, device-specific, command that implements the 'monitor' action.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only *** An alternate command to run instead of 'monitor'
</shortdesc>
<content type="string" default=""/>
</parameter>
<parameter name="pcmk_monitor_timeout">
<longdesc lang="en">
Some devices need much more/less time to complete than normal. Use this to specify an alternate, device-specific, timeout for 'monitor' actions.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only *** Specify an alternate timeout to use for 'monitor' actions instead of stonith-timeout
</shortdesc>
<content type="time" default=""/>
</parameter>
<parameter name="pcmk_monitor_retries">
<longdesc lang="en">
Some devices do not support multiple connections. Operations may "fail" if the device is busy with another task. In that case, Pacemaker will automatically retry the operation if there is time remaining. Use this option to alter the number of times Pacemaker tries a 'monitor' action before giving up.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only *** The maximum number of times to try the 'monitor' command within the timeout period
</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="pcmk_status_action">
<longdesc lang="en">
Some devices do not support the standard commands or may provide additional ones. Use this to specify an alternate, device-specific, command that implements the 'status' action.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only *** An alternate command to run instead of 'status'
</shortdesc>
<content type="string" default=""/>
</parameter>
<parameter name="pcmk_status_timeout">
<longdesc lang="en">
Some devices need much more/less time to complete than normal. Use this to specify an alternate, device-specific, timeout for 'status' actions.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only *** Specify an alternate timeout to use for 'status' actions instead of stonith-timeout
</shortdesc>
<content type="time" default=""/>
</parameter>
<parameter name="pcmk_status_retries">
<longdesc lang="en">
Some devices do not support multiple connections. Operations may "fail" if the device is busy with another task. In that case, Pacemaker will automatically retry the operation if there is time remaining. Use this option to alter the number of times Pacemaker tries a 'status' action before giving up.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only *** The maximum number of times to try the 'status' command within the timeout period
</shortdesc>
<content type="integer" default=""/>
</parameter>
</parameters>
</resource-agent>
=#=#=#= End test: Get fencer metadata - OK (0) =#=#=#=
* Passed: pacemaker-fenced - Get fencer metadata
=#=#=#= Begin test: Get scheduler metadata =#=#=#=
<resource-agent name="pacemaker-schedulerd" version="">
<version>
1.1
</version>
<longdesc lang="en">
Cluster options used by Pacemaker's scheduler
</longdesc>
<shortdesc lang="en">
Pacemaker scheduler options
</shortdesc>
<parameters>
<parameter name="no-quorum-policy">
<longdesc lang="en">
What to do when the cluster does not have quorum Allowed values: stop, freeze, ignore, demote, fence, suicide
</longdesc>
<shortdesc lang="en">
What to do when the cluster does not have quorum
</shortdesc>
<content type="select" default="">
<option value="stop"/>
<option value="freeze"/>
<option value="ignore"/>
<option value="demote"/>
<option value="fence"/>
<option value="suicide"/>
</content>
</parameter>
<parameter name="shutdown-lock">
<longdesc lang="en">
When true, resources active on a node when it is cleanly shut down are kept "locked" to that node (not allowed to run elsewhere) until they start again on that node after it rejoins (or for at most shutdown-lock-limit, if set). Stonith resources and Pacemaker Remote connections are never locked. Clone and bundle instances and the promoted role of promotable clones are currently never locked, though support could be added in a future release.
</longdesc>
<shortdesc lang="en">
Whether to lock resources to a cleanly shut down node
</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="shutdown-lock-limit">
<longdesc lang="en">
If shutdown-lock is true and this is set to a nonzero time duration, shutdown locks will expire after this much time has passed since the shutdown was initiated, even if the node has not rejoined.
</longdesc>
<shortdesc lang="en">
Do not lock resources to a cleanly shut down node longer than this
</shortdesc>
<content type="time" default=""/>
</parameter>
<parameter name="symmetric-cluster">
<longdesc lang="en">
Whether resources can run on any node by default
</longdesc>
<shortdesc lang="en">
Whether resources can run on any node by default
</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="maintenance-mode">
<longdesc lang="en">
Whether the cluster should refrain from monitoring, starting, and stopping resources
</longdesc>
<shortdesc lang="en">
Whether the cluster should refrain from monitoring, starting, and stopping resources
</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="start-failure-is-fatal">
<longdesc lang="en">
When true, the cluster will immediately ban a resource from a node if it fails to start there. When false, the cluster will instead check the resource's fail count against its migration-threshold.
</longdesc>
<shortdesc lang="en">
Whether a start failure should prevent a resource from being recovered on the same node
</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="enable-startup-probes">
<longdesc lang="en">
Whether the cluster should check for active resources during start-up
</longdesc>
<shortdesc lang="en">
Whether the cluster should check for active resources during start-up
</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="fence-remote-without-quorum">
<longdesc lang="en">
By default, an inquorate node can not fence Pacemaker Remote nodes that are part of its partition as long as the cluster thinks they can be restarted. If true, inquorate nodes will be able to fence remote nodes regardless.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only *** Whether remote nodes can be fenced without quorum
</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="stonith-enabled">
<longdesc lang="en">
If false, unresponsive nodes are immediately assumed to be harmless, and resources that were active on them may be recovered elsewhere. This can result in a "split-brain" situation, potentially leading to data loss and/or service unavailability.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only *** Whether nodes may be fenced as part of recovery
</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="stonith-action">
<longdesc lang="en">
Action to send to fence device when a node needs to be fenced Allowed values: reboot, off
</longdesc>
<shortdesc lang="en">
Action to send to fence device when a node needs to be fenced
</shortdesc>
<content type="select" default="">
<option value="reboot"/>
<option value="off"/>
</content>
</parameter>
<parameter name="stonith-timeout">
<longdesc lang="en">
How long to wait for on, off, and reboot fence actions to complete by default
</longdesc>
<shortdesc lang="en">
How long to wait for on, off, and reboot fence actions to complete by default
</shortdesc>
<content type="time" default=""/>
</parameter>
<parameter name="have-watchdog">
<longdesc lang="en">
This is set automatically by the cluster according to whether SBD is detected to be in use. User-configured values are ignored. The value `true` is meaningful if diskless SBD is used and `stonith-watchdog-timeout` is nonzero. In that case, if fencing is required, watchdog-based self-fencing will be performed via SBD without requiring a fencing resource explicitly configured.
</longdesc>
<shortdesc lang="en">
Whether watchdog integration is enabled
</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="concurrent-fencing">
<longdesc lang="en">
Allow performing fencing operations in parallel
</longdesc>
<shortdesc lang="en">
*** Deprecated ***
</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="startup-fencing">
<longdesc lang="en">
Setting this to false may lead to a "split-brain" situation, potentially leading to data loss and/or service unavailability.
</longdesc>
<shortdesc lang="en">
*** Advanced Use Only *** Whether to fence unseen nodes at start-up
</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="priority-fencing-delay">
<longdesc lang="en">
Apply specified delay for the fencings that are targeting the lost nodes with the highest total resource priority in case we don't have the majority of the nodes in our cluster partition, so that the more significant nodes potentially win any fencing match, which is especially meaningful under split-brain of 2-node cluster. A promoted resource instance takes the base priority + 1 on calculation if the base priority is not 0. Any static/random delays that are introduced by `pcmk_delay_base/max` configured for the corresponding fencing resources will be added to this delay. This delay should be significantly greater than, safely twice, the maximum `pcmk_delay_base/max`. By default, priority fencing delay is disabled.
</longdesc>
<shortdesc lang="en">
Apply fencing delay targeting the lost nodes with the highest total resource priority
</shortdesc>
<content type="time" default=""/>
</parameter>
<parameter name="node-pending-timeout">
<longdesc lang="en">
Fence nodes that do not join the controller process group within this much time after joining the cluster, to allow the cluster to continue managing resources. A value of 0 means never fence pending nodes. Setting the value to 2h means fence nodes after 2 hours.
</longdesc>
<shortdesc lang="en">
How long to wait for a node that has joined the cluster to join the controller process group
</shortdesc>
<content type="time" default=""/>
</parameter>
<parameter name="cluster-delay">
<longdesc lang="en">
The node elected Designated Controller (DC) will consider an action failed if it does not get a response from the node executing the action within this time (after considering the action's own timeout). The "correct" value will depend on the speed and load of your network and cluster nodes.
</longdesc>
<shortdesc lang="en">
Maximum time for node-to-node communication
</shortdesc>
<content type="time" default=""/>
</parameter>
<parameter name="batch-limit">
<longdesc lang="en">
The "correct" value will depend on the speed and load of your network and cluster nodes. If set to 0, the cluster will impose a dynamically calculated limit when any node has a high load.
</longdesc>
<shortdesc lang="en">
Maximum number of jobs that the cluster may execute in parallel across all nodes
</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="migration-limit">
<longdesc lang="en">
The number of live migration actions that the cluster is allowed to execute in parallel on a node (-1 means no limit)
</longdesc>
<shortdesc lang="en">
The number of live migration actions that the cluster is allowed to execute in parallel on a node (-1 means no limit)
</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="stop-all-resources">
<longdesc lang="en">
Whether the cluster should stop all active resources
</longdesc>
<shortdesc lang="en">
Whether the cluster should stop all active resources
</shortdesc>
<content type="boolean" default=""/>
</parameter>
<parameter name="stop-removed-resources">
<longdesc lang="en">
Whether to stop resources that were removed from the configuration
</longdesc>
<shortdesc lang="en">
Whether to stop resources that were removed from the configuration
</shortdesc>
<content type="boolean" default=""/>
</parameter>
+ <parameter name="stop-orphan-resources">
+ <longdesc lang="en">
+ Deprecated alias for stop-removed-resources
+ </longdesc>
+ <shortdesc lang="en">
+ *** Deprecated *** *** Replaced with stop-removed-resources ***
+ </shortdesc>
+ <content type="boolean" default=""/>
+ </parameter>
<parameter name="stop-removed-actions">
<longdesc lang="en">
Whether to cancel recurring actions removed from the configuration
</longdesc>
<shortdesc lang="en">
Whether to cancel recurring actions removed from the configuration
</shortdesc>
<content type="boolean" default=""/>
</parameter>
+ <parameter name="stop-orphan-actions">
+ <longdesc lang="en">
+ Deprecated alias for stop-removed-actions
+ </longdesc>
+ <shortdesc lang="en">
+ *** Deprecated *** *** Replaced with stop-removed-actions ***
+ </shortdesc>
+ <content type="boolean" default=""/>
+ </parameter>
<parameter name="pe-error-series-max">
<longdesc lang="en">
Zero to disable, -1 to store unlimited.
</longdesc>
<shortdesc lang="en">
The number of scheduler inputs resulting in errors to save
</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="pe-warn-series-max">
<longdesc lang="en">
Zero to disable, -1 to store unlimited.
</longdesc>
<shortdesc lang="en">
The number of scheduler inputs resulting in warnings to save
</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="pe-input-series-max">
<longdesc lang="en">
Zero to disable, -1 to store unlimited.
</longdesc>
<shortdesc lang="en">
The number of scheduler inputs without errors or warnings to save
</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="node-health-strategy">
<longdesc lang="en">
Requires external entities to create node attributes (named with the prefix "#health") with values "red", "yellow", or "green". Allowed values: none, migrate-on-red, only-green, progressive, custom
</longdesc>
<shortdesc lang="en">
How cluster should react to node health attributes
</shortdesc>
<content type="select" default="">
<option value="none"/>
<option value="migrate-on-red"/>
<option value="only-green"/>
<option value="progressive"/>
<option value="custom"/>
</content>
</parameter>
<parameter name="node-health-base">
<longdesc lang="en">
Only used when "node-health-strategy" is set to "progressive".
</longdesc>
<shortdesc lang="en">
Base health score assigned to a node
</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="node-health-green">
<longdesc lang="en">
Only used when "node-health-strategy" is set to "custom" or "progressive".
</longdesc>
<shortdesc lang="en">
The score to use for a node health attribute whose value is "green"
</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="node-health-yellow">
<longdesc lang="en">
Only used when "node-health-strategy" is set to "custom" or "progressive".
</longdesc>
<shortdesc lang="en">
The score to use for a node health attribute whose value is "yellow"
</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="node-health-red">
<longdesc lang="en">
Only used when "node-health-strategy" is set to "custom" or "progressive".
</longdesc>
<shortdesc lang="en">
The score to use for a node health attribute whose value is "red"
</shortdesc>
<content type="integer" default=""/>
</parameter>
<parameter name="placement-strategy">
<longdesc lang="en">
How the cluster should allocate resources to nodes Allowed values: default, utilization, minimal, balanced
</longdesc>
<shortdesc lang="en">
How the cluster should allocate resources to nodes
</shortdesc>
<content type="select" default="">
<option value="default"/>
<option value="utilization"/>
<option value="minimal"/>
<option value="balanced"/>
</content>
</parameter>
</parameters>
</resource-agent>
=#=#=#= End test: Get scheduler metadata - OK (0) =#=#=#=
* Passed: pacemaker-schedulerd - Get scheduler metadata
diff --git a/lib/common/options_display.c b/lib/common/options_display.c
index 16615de691..135919a0c9 100644
--- a/lib/common/options_display.c
+++ b/lib/common/options_display.c
@@ -1,508 +1,553 @@
/*
* Copyright 2024-2025 the Pacemaker project contributors
*
* The version control history for this file may have further details.
*
* This source code is licensed under the GNU Lesser General Public License
* version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY.
*/
#include <crm_internal.h>
#include <glib.h> // GSList, GString
#include "crmcommon_private.h"
/*!
* \internal
* \brief Output an option's possible values
*
* \param[in,out] out Output object
* \param[in] option Option whose possible values to add
*/
static void
add_possible_values_default(pcmk__output_t *out,
const pcmk__cluster_option_t *option)
{
const char *id = _("Possible values");
GString *buf = g_string_sized_new(256);
pcmk__assert(option->type != NULL);
if (pcmk_is_set(option->flags, pcmk__opt_generated)) {
id = _("Possible values (generated by Pacemaker)");
}
if ((option->values != NULL) && (strcmp(option->type, "select") == 0)) {
const char *delim = ", ";
bool found_default = (option->default_value == NULL);
char *str = pcmk__str_copy(option->values);
for (const char *value = strtok(str, delim); value != NULL;
value = strtok(NULL, delim)) {
if (buf->len > 0) {
g_string_append(buf, delim);
}
g_string_append_c(buf, '"');
g_string_append(buf, value);
g_string_append_c(buf, '"');
if (!found_default && (strcmp(value, option->default_value) == 0)) {
found_default = true;
g_string_append(buf, _(" (default)"));
}
}
free(str);
} else if (option->default_value != NULL) {
pcmk__g_strcat(buf,
option->type, _(" (default: \""), option->default_value,
"\")", NULL);
} else {
pcmk__g_strcat(buf, option->type, _(" (no default)"), NULL);
}
out->list_item(out, id, "%s", buf->str);
g_string_free(buf, TRUE);
}
/*!
* \internal
* \brief Output a single option's metadata
*
* \param[in,out] out Output object
* \param[in] option Option to add
*/
static void
add_option_metadata_default(pcmk__output_t *out,
const pcmk__cluster_option_t *option)
{
const char *desc_short = option->description_short;
const char *desc_long = option->description_long;
pcmk__assert((desc_short != NULL) || (desc_long != NULL));
if (desc_short == NULL) {
desc_short = desc_long;
desc_long = NULL;
}
out->list_item(out, option->name, "%s", _(desc_short));
out->begin_list(out, NULL, NULL, NULL);
if (desc_long != NULL) {
out->list_item(out, NULL, "%s", _(desc_long));
}
add_possible_values_default(out, option);
out->end_list(out);
}
/*!
* \internal
* \brief Output the metadata for a list of options
*
* \param[in,out] out Output object
* \param[in] args Message-specific arguments
*
* \return Standard Pacemaker return code
*
* \note \p args should contain the following:
* -# Fake resource agent name for the option list (ignored)
* -# Short description of option list
* -# Long description of option list
* -# Filter: Group of <tt>enum pcmk__opt_flags</tt>; output an option
* only if its \c flags member has all these flags set
* -# <tt>NULL</tt>-terminated list of options whose metadata to format
* -# All: If \c true, output all options; otherwise, exclude advanced and
* deprecated options unless \c pcmk__opt_advanced and
* \c pcmk__opt_deprecated flags (respectively) are set in the filter.
*/
PCMK__OUTPUT_ARGS("option-list", "const char *", "const char *", "const char *",
"uint32_t", "const pcmk__cluster_option_t *", "bool")
static int
option_list_default(pcmk__output_t *out, va_list args)
{
const char *name G_GNUC_UNUSED = va_arg(args, const char *);
const char *desc_short = va_arg(args, const char *);
const char *desc_long = va_arg(args, const char *);
const uint32_t filter = va_arg(args, uint32_t);
const pcmk__cluster_option_t *option_list =
va_arg(args, pcmk__cluster_option_t *);
const bool all = (bool) va_arg(args, int);
const bool show_deprecated = all
|| pcmk_is_set(filter, pcmk__opt_deprecated);
const bool show_advanced = all || pcmk_is_set(filter, pcmk__opt_advanced);
bool old_fancy = false;
GSList *deprecated = NULL;
GSList *advanced = NULL;
+ GSList *aliased = NULL; // Options with deprecated aliases (alt_name)
pcmk__assert((out != NULL) && (desc_short != NULL)
&& (desc_long != NULL) && (option_list != NULL));
old_fancy = pcmk__output_text_get_fancy(out);
pcmk__output_text_set_fancy(out, true);
out->info(out, "%s", _(desc_short));
out->spacer(out);
out->info(out, "%s", _(desc_long));
out->begin_list(out, NULL, NULL, NULL);
for (const pcmk__cluster_option_t *option = option_list;
option->name != NULL; option++) {
- // Store deprecated and advanced options to display later if appropriate
- if (pcmk_all_flags_set(option->flags, filter)) {
- if (pcmk_is_set(option->flags, pcmk__opt_deprecated)) {
- if (show_deprecated) {
- deprecated = g_slist_prepend(deprecated, (gpointer) option);
- }
+ if (!pcmk_all_flags_set(option->flags, filter)) {
+ continue;
+ }
- } else if (pcmk_is_set(option->flags, pcmk__opt_advanced)) {
- if (show_advanced) {
- advanced = g_slist_prepend(advanced, (gpointer) option);
- }
+ // Store deprecated and advanced options to display later if appropriate
+ if (pcmk_is_set(option->flags, pcmk__opt_deprecated)) {
+ if (show_deprecated) {
+ deprecated = g_slist_prepend(deprecated, (gpointer) option);
+ }
- } else {
- out->spacer(out);
- add_option_metadata_default(out, option);
+ } else if (pcmk_is_set(option->flags, pcmk__opt_advanced)) {
+ if (show_advanced) {
+ advanced = g_slist_prepend(advanced, (gpointer) option);
}
+
+ } else {
+ out->spacer(out);
+ add_option_metadata_default(out, option);
+ }
+
+ if (show_deprecated && (option->alt_name != NULL)) {
+ aliased = g_slist_prepend(aliased, (gpointer) option);
}
}
if (advanced != NULL) {
advanced = g_slist_reverse(advanced);
out->spacer(out);
out->begin_list(out, NULL, NULL, _("ADVANCED OPTIONS"));
for (const GSList *iter = advanced; iter != NULL; iter = iter->next) {
const pcmk__cluster_option_t *option = iter->data;
out->spacer(out);
add_option_metadata_default(out, option);
}
out->end_list(out);
g_slist_free(advanced);
}
- if (deprecated != NULL) {
+ if ((deprecated != NULL) || (aliased != NULL)) {
deprecated = g_slist_reverse(deprecated);
+ aliased = g_slist_reverse(aliased);
out->spacer(out);
out->begin_list(out, NULL, NULL,
_("DEPRECATED OPTIONS (will be removed in a future "
"release)"));
+
for (const GSList *iter = deprecated; iter != NULL; iter = iter->next) {
const pcmk__cluster_option_t *option = iter->data;
out->spacer(out);
add_option_metadata_default(out, option);
}
+
+ for (const GSList *iter = aliased; iter != NULL; iter = iter->next) {
+ const pcmk__cluster_option_t *option = iter->data;
+ char *desc = crm_strdup_printf(_("Deprecated alias for %s"),
+ option->name);
+ pcmk__cluster_option_t alias = *option;
+
+ alias.name = option->alt_name;
+ alias.alt_name = NULL;
+ alias.flags |= pcmk__opt_deprecated;
+ alias.description_short = desc;
+ alias.description_long = NULL;
+
+ out->spacer(out);
+ add_option_metadata_default(out, &alias);
+ free(desc);
+ }
+
out->end_list(out);
g_slist_free(deprecated);
+ g_slist_free(aliased);
}
out->end_list(out);
pcmk__output_text_set_fancy(out, old_fancy);
return pcmk_rc_ok;
}
/*!
* \internal
* \brief Add a description element to an OCF-like metadata XML node
*
* Include a translation based on the current locale if \c ENABLE_NLS is
* defined.
*
* \param[in,out] out Output object
* \param[in] for_long If \c true, add long description; otherwise, add
* short description
* \param[in] desc Textual description to add
*/
static void
add_desc_xml(pcmk__output_t *out, bool for_long, const char *desc)
{
const char *tag = (for_long? PCMK_XE_LONGDESC : PCMK_XE_SHORTDESC);
xmlNode *node = pcmk__output_create_xml_text_node(out, tag, desc);
pcmk__xe_set(node, PCMK_XA_LANG, PCMK__VALUE_EN);
#ifdef ENABLE_NLS
{
static const char *locale = NULL;
if (strcmp(desc, _(desc)) == 0) {
return;
}
if (locale == NULL) {
locale = strtok(setlocale(LC_ALL, NULL), "_");
}
node = pcmk__output_create_xml_text_node(out, tag, _(desc));
pcmk__xe_set(node, PCMK_XA_LANG, locale);
}
#endif
}
/*!
* \internal
* \brief Output an option's possible values
*
* Add a \c PCMK_XE_OPTION element for each of the option's possible values.
*
* \param[in,out] out Output object
* \param[in] option Option whose possible values to add
*/
static void
add_possible_values_xml(pcmk__output_t *out,
const pcmk__cluster_option_t *option)
{
if ((option->values != NULL) && (strcmp(option->type, "select") == 0)) {
const char *delim = ", ";
char *str = pcmk__str_copy(option->values);
const char *ptr = strtok(str, delim);
while (ptr != NULL) {
pcmk__output_create_xml_node(out, PCMK_XE_OPTION,
PCMK_XA_VALUE, ptr,
NULL);
ptr = strtok(NULL, delim);
}
free(str);
}
}
/*!
* \internal
* \brief Map an option type to one suitable for daemon metadata
*
* \param[in] type Option type to map
*
* \return String suitable for daemon metadata to display as an option type
*/
static const char *
map_legacy_option_type(const char *type)
{
// @COMPAT Drop this function when we drop daemon metadata commands
if (pcmk__str_any_of(type, PCMK_VALUE_DURATION, PCMK_VALUE_TIMEOUT, NULL)) {
return PCMK__VALUE_TIME;
} else if (pcmk__str_any_of(type,
PCMK_VALUE_NONNEGATIVE_INTEGER,
PCMK_VALUE_SCORE, NULL)) {
return PCMK_VALUE_INTEGER;
} else if (pcmk__str_eq(type, PCMK_VALUE_VERSION, pcmk__str_none)) {
return PCMK_VALUE_STRING;
} else {
return type;
}
}
/*!
* \internal
* \brief Add a \c PCMK_XE_PARAMETER element to an OCF-like metadata XML node
*
* \param[in,out] out Output object
* \param[in] option Option to add as a \c PCMK_XE_PARAMETER element
* \param[in] replaced_with Name of option that replaces this one (ignored
* if this option is not deprecated)
*/
static void
add_option_metadata_xml(pcmk__output_t *out,
const pcmk__cluster_option_t *option,
const char *replaced_with)
{
const char *type = option->type;
const char *desc_long = option->description_long;
const char *desc_short = option->description_short;
const bool advanced = pcmk_is_set(option->flags, pcmk__opt_advanced);
const bool deprecated = pcmk_is_set(option->flags, pcmk__opt_deprecated);
const bool generated = pcmk_is_set(option->flags, pcmk__opt_generated);
// OCF requires "1"/"0" and does not allow "true"/"false
// @COMPAT Variables no longer needed after we drop legacy mode
const char *advanced_s = advanced? "1" : "0";
const char *generated_s = generated? "1" : "0";
// @COMPAT For daemon metadata only; drop when daemon metadata is dropped
const bool legacy = pcmk__output_get_legacy_xml(out);
char *desc_long_legacy = NULL;
GString *desc_short_legacy = NULL;
// The standard requires a parameter type
pcmk__assert(type != NULL);
// The standard requires long and short parameter descriptions
pcmk__assert((desc_long != NULL) || (desc_short != NULL));
if (desc_long == NULL) {
desc_long = desc_short;
} else if (desc_short == NULL) {
desc_short = desc_long;
}
if (legacy) {
// This is ugly but it will go away at a major release bump
type = map_legacy_option_type(type);
if (option->values != NULL) {
desc_long_legacy = crm_strdup_printf("%s Allowed values: %s",
desc_long, option->values);
desc_long = desc_long_legacy;
}
if (deprecated || advanced) {
const size_t init_sz = 1023;
if (desc_long != option->description_long) {
/* desc_long was NULL and got assigned desc_short, which was
* non-empty. Let desc_long have the "real" description, and put
* the flag in desc_short.
*/
desc_short = "";
} else {
desc_short = pcmk__s(option->description_short, "");
}
if (deprecated) {
pcmk__add_word(&desc_short_legacy, init_sz,
"*** Deprecated ***");
if (replaced_with != NULL) {
pcmk__g_strcat(desc_short_legacy,
" *** Replaced with ", replaced_with, " ***",
NULL);
}
}
if (advanced) {
pcmk__add_word(&desc_short_legacy, init_sz,
"*** Advanced Use Only ***");
}
pcmk__add_word(&desc_short_legacy, 0, desc_short);
desc_short = desc_short_legacy->str;
}
/* These must be NULL when used as attribute values later.
* PCMK_XA_ADVANCED and PCMK_XA_GENERATED break validation for some
* legacy tools.
*/
advanced_s = NULL;
generated_s = NULL;
}
pcmk__output_xml_create_parent(out, PCMK_XE_PARAMETER,
PCMK_XA_NAME, option->name,
PCMK_XA_ADVANCED, advanced_s,
PCMK_XA_GENERATED, generated_s,
NULL);
if (deprecated && !legacy) {
pcmk__output_xml_create_parent(out, PCMK_XE_DEPRECATED, NULL);
if (replaced_with != NULL) {
pcmk__output_create_xml_node(out, PCMK_XE_REPLACED_WITH,
PCMK_XA_NAME, replaced_with,
NULL);
}
pcmk__output_xml_pop_parent(out);
}
add_desc_xml(out, true, desc_long);
add_desc_xml(out, false, desc_short);
pcmk__output_xml_create_parent(out, PCMK_XE_CONTENT,
PCMK_XA_TYPE, type,
PCMK_XA_DEFAULT, option->default_value,
NULL);
add_possible_values_xml(out, option);
pcmk__output_xml_pop_parent(out);
pcmk__output_xml_pop_parent(out);
free(desc_long_legacy);
if (desc_short_legacy != NULL) {
g_string_free(desc_short_legacy, TRUE);
}
}
/*!
* \internal
* \brief Output the metadata for a list of options as OCF-like XML
*
* \param[in,out] out Output object
* \param[in] args Message-specific arguments
*
* \return Standard Pacemaker return code
*
* \note \p args should contain the following:
* -# Fake resource agent name for the option list
* -# Short description of option list
* -# Long description of option list
* -# Filter: Group of <tt>enum pcmk__opt_flags</tt>; output an option
* only if its \c flags member has all these flags set
* -# <tt>NULL</tt>-terminated list of options whose metadata to format
* -# Whether to output all options (ignored, treated as \c true)
*/
PCMK__OUTPUT_ARGS("option-list", "const char *", "const char *", "const char *",
"uint32_t", "const pcmk__cluster_option_t *", "bool")
static int
option_list_xml(pcmk__output_t *out, va_list args)
{
const char *name = va_arg(args, const char *);
const char *desc_short = va_arg(args, const char *);
const char *desc_long = va_arg(args, const char *);
const uint32_t filter = va_arg(args, uint32_t);
const pcmk__cluster_option_t *option_list =
va_arg(args, pcmk__cluster_option_t *);
pcmk__assert((out != NULL) && (name != NULL) && (desc_short != NULL)
&& (desc_long != NULL) && (option_list != NULL));
pcmk__output_xml_create_parent(out, PCMK_XE_RESOURCE_AGENT,
PCMK_XA_NAME, name,
PCMK_XA_VERSION, PACEMAKER_VERSION,
NULL);
pcmk__output_create_xml_text_node(out, PCMK_XE_VERSION, PCMK_OCF_VERSION);
add_desc_xml(out, true, desc_long);
add_desc_xml(out, false, desc_short);
pcmk__output_xml_create_parent(out, PCMK_XE_PARAMETERS, NULL);
for (const pcmk__cluster_option_t *option = option_list;
option->name != NULL; option++) {
- if (pcmk_all_flags_set(option->flags, filter)) {
- add_option_metadata_xml(out, option, NULL);
+ if (!pcmk_all_flags_set(option->flags, filter)) {
+ continue;
+ }
+
+ add_option_metadata_xml(out, option, NULL);
+
+ if (option->alt_name != NULL) {
+ pcmk__cluster_option_t alias = *option;
+ char *desc = crm_strdup_printf(_("Deprecated alias for %s"),
+ option->name);
+
+ alias.name = option->alt_name;
+ alias.alt_name = NULL;
+ alias.flags |= pcmk__opt_deprecated;
+ alias.description_short = desc;
+ alias.description_long = NULL;
+
+ add_option_metadata_xml(out, &alias, option->name);
+ free(desc);
}
}
pcmk__output_xml_pop_parent(out);
pcmk__output_xml_pop_parent(out);
return pcmk_rc_ok;
}
static pcmk__message_entry_t fmt_functions[] = {
{ "option-list", "default", option_list_default },
{ "option-list", "xml", option_list_xml },
{ NULL, NULL, NULL }
};
/*!
* \internal
* \brief Register the formatting functions for option lists
*
* \param[in,out] out Output object
*/
void
pcmk__register_option_messages(pcmk__output_t *out) {
pcmk__register_messages(out, fmt_functions);
}

File Metadata

Mime Type
text/x-diff
Expires
Mon, Sep 22, 11:27 PM (13 h, 16 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2395037
Default Alt Text
(178 KB)

Event Timeline