19 #include <sys/types.h> 28 if (cmd ==
'v' || cmd ==
'$') {
30 printf(
"Written by Andrew Beekhof and " 31 "the Pacemaker project contributors\n");
33 }
else if (cmd ==
'!') {
57 N_(
"Pacemaker version on cluster node elected Designated Controller " 59 N_(
"Includes a hash which identifies the exact revision the code was " 60 "built from. Used for diagnostic purposes."),
66 N_(
"The messaging layer on which Pacemaker is currently running"),
67 N_(
"Used for informational and diagnostic purposes."),
73 N_(
"An arbitrary name for the cluster"),
74 N_(
"This optional value is mostly for users' convenience as desired " 75 "in administration, but may also be used in Pacemaker " 76 "configuration rules via the #cluster-name node attribute, and " 77 "by higher-level tools and resource agents."),
83 N_(
"How long to wait for a response from other nodes during start-up"),
84 N_(
"The optimal value will depend on the speed and load of your " 85 "network and the type of switches used."),
91 N_(
"Polling interval to recheck cluster state and evaluate rules " 92 "with date specifications"),
93 N_(
"Pacemaker is primarily event-driven, and looks ahead to know when " 94 "to recheck cluster state for failure-timeout settings and most " 95 "time-based rules. However, it will also recheck the cluster after " 96 "this amount of inactivity, to evaluate rules with date " 97 "specifications and serve as a fail-safe for certain types of " 98 "scheduler bugs. A value of 0 disables polling. A positive value " 99 "sets an interval in seconds, unless other units are specified " 100 "(for example, \"5min\")."),
107 N_(
"How a cluster node should react if notified of its own fencing"),
108 N_(
"A cluster node may receive notification of a \"succeeded\" " 109 "fencing that targeted it if fencing is misconfigured, or if " 110 "fabric fencing is in use that doesn't cut cluster communication. " 111 "Use \"stop\" to attempt to immediately stop Pacemaker and stay " 112 "stopped, or \"panic\" to attempt to immediately reboot the local " 113 "node, falling back to stop on failure."),
119 N_(
"Declare an election failed if it is not decided within this much " 120 "time. If you need to adjust this value, it probably indicates " 121 "the presence of a bug."),
128 N_(
"Exit immediately if shutdown does not complete within this much " 129 "time. If you need to adjust this value, it probably indicates " 130 "the presence of a bug."),
138 N_(
"If you need to adjust this value, it probably indicates " 139 "the presence of a bug."),
147 N_(
"If you need to adjust this value, it probably indicates " 148 "the presence of a bug."),
156 N_(
"Enabling this option will slow down cluster recovery under all " 158 N_(
"Delay cluster recovery for this much time to allow for additional " 159 "events to occur. Useful if your configuration is sensitive to " 160 "the order in which ping updates arrive."),
169 N_(
"What to do when the cluster does not have quorum"),
176 N_(
"Whether to lock resources to a cleanly shut down node"),
177 N_(
"When true, resources active on a node when it is cleanly shut down " 178 "are kept \"locked\" to that node (not allowed to run elsewhere) " 179 "until they start again on that node after it rejoins (or for at " 180 "most shutdown-lock-limit, if set). Stonith resources and " 181 "Pacemaker Remote connections are never locked. Clone and bundle " 182 "instances and the promoted role of promotable clones are " 183 "currently never locked, though support could be added in a future " 190 N_(
"Do not lock resources to a cleanly shut down node longer than " 192 N_(
"If shutdown-lock is true and this is set to a nonzero time " 193 "duration, shutdown locks will expire after this much time has " 194 "passed since the shutdown was initiated, even if the node has not " 201 N_(
"Enable Access Control Lists (ACLs) for the CIB"),
208 N_(
"Whether resources can run on any node by default"),
215 N_(
"Whether the cluster should refrain from monitoring, starting, and " 216 "stopping resources"),
223 N_(
"Whether a start failure should prevent a resource from being " 224 "recovered on the same node"),
225 N_(
"When true, the cluster will immediately ban a resource from a node " 226 "if it fails to start there. When false, the cluster will instead " 227 "check the resource's fail count against its migration-threshold.")
233 N_(
"Whether the cluster should check for active resources during " 243 N_(
"Whether nodes may be fenced as part of recovery"),
244 N_(
"If false, unresponsive nodes are immediately assumed to be " 245 "harmless, and resources that were active on them may be recovered " 246 "elsewhere. This can result in a \"split-brain\" situation, " 247 "potentially leading to data loss and/or service unavailability."),
254 N_(
"Action to send to fence device when a node needs to be fenced " 255 "(\"poweroff\" is a deprecated alias for \"off\")"),
262 N_(
"How long to wait for on, off, and reboot fence actions to complete " 270 N_(
"Whether watchdog integration is enabled"),
271 N_(
"This is set automatically by the cluster according to whether SBD " 272 "is detected to be in use. User-configured values are ignored. " 273 "The value `true` is meaningful if diskless SBD is used and " 274 "`stonith-watchdog-timeout` is nonzero. In that case, if fencing " 275 "is required, watchdog-based self-fencing will be performed via " 276 "SBD without requiring a fencing resource explicitly configured."),
292 N_(
"How long before nodes can be assumed to be safely down when " 293 "watchdog-based self-fencing via SBD is in use"),
294 N_(
"If this is set to a positive value, lost nodes are assumed to " 295 "achieve self-fencing using watchdog-based SBD within this much " 296 "time. This does not require a fencing resource to be explicitly " 297 "configured, though a fence_watchdog resource can be configured, to " 298 "limit use to specific nodes. If this is set to 0 (the default), " 299 "the cluster will never assume watchdog-based self-fencing. If this " 300 "is set to a negative value, the cluster will use twice the local " 301 "value of the `SBD_WATCHDOG_TIMEOUT` environment variable if that " 302 "is positive, or otherwise treat this as 0. WARNING: When used, " 303 "this timeout must be larger than `SBD_WATCHDOG_TIMEOUT` on all " 304 "nodes that use watchdog-based SBD, and Pacemaker will refuse to " 305 "start on any of those nodes where this is not true for the local " 306 "value or SBD is not active. When this is set to a negative value, " 307 "`SBD_WATCHDOG_TIMEOUT` must be set to the same value on all nodes " 308 "that use SBD, otherwise data corruption or loss could occur."),
314 N_(
"How many times fencing can fail before it will no longer be " 315 "immediately re-attempted on a target"),
320 #if PCMK__CONCURRENT_FENCING_DEFAULT_TRUE 327 N_(
"Allow performing fencing operations in parallel"),
334 N_(
"Whether to fence unseen nodes at start-up"),
335 N_(
"Setting this to false may lead to a \"split-brain\" situation, " 336 "potentially leading to data loss and/or service unavailability."),
342 N_(
"Apply fencing delay targeting the lost nodes with the highest " 343 "total resource priority"),
344 N_(
"Apply specified delay for the fencings that are targeting the lost " 345 "nodes with the highest total resource priority in case we don't " 346 "have the majority of the nodes in our cluster partition, so that " 347 "the more significant nodes potentially win any fencing match, " 348 "which is especially meaningful under split-brain of 2-node " 349 "cluster. A promoted resource instance takes the base priority + 1 " 350 "on calculation if the base priority is not 0. Any static/random " 351 "delays that are introduced by `pcmk_delay_base/max` configured " 352 "for the corresponding fencing resources will be added to this " 353 "delay. This delay should be significantly greater than, safely " 354 "twice, the maximum `pcmk_delay_base/max`. By default, priority " 355 "fencing delay is disabled."),
361 N_(
"How long to wait for a node that has joined the cluster to join " 362 "the controller process group"),
363 N_(
"Fence nodes that do not join the controller process group within " 364 "this much time after joining the cluster, to allow the cluster " 365 "to continue managing resources. A value of 0 means never fence " 366 "pending nodes. Setting the value to 2h means fence nodes after " 373 N_(
"Maximum time for node-to-node communication"),
374 N_(
"The node elected Designated Controller (DC) will consider an action " 375 "failed if it does not get a response from the node executing the " 376 "action within this time (after considering the action's own " 377 "timeout). The \"correct\" value will depend on the speed and " 378 "load of your network and cluster nodes.")
386 N_(
"Maximum amount of system load that should be used by cluster " 388 N_(
"The cluster will slow down its recovery process when the amount of " 389 "system resources used (currently CPU) approaches this limit"),
395 N_(
"Maximum number of jobs that can be scheduled per node (defaults to " 403 N_(
"Maximum number of jobs that the cluster may execute in parallel " 405 N_(
"The \"correct\" value will depend on the speed and load of your " 406 "network and cluster nodes. If set to 0, the cluster will " 407 "impose a dynamically calculated limit when any node has a " 414 N_(
"The number of live migration actions that the cluster is allowed " 415 "to execute in parallel on a node (-1 means no limit)"),
433 N_(
"Maximum IPC message backlog before disconnecting a cluster daemon"),
434 N_(
"Raise this if log has \"Evicting client\" messages for cluster " 435 "daemon PIDs (a good value is the number of resources in the " 436 "cluster multiplied by the number of nodes)."),
444 N_(
"Whether the cluster should stop all active resources"),
451 N_(
"Whether to stop resources that were removed from the " 459 N_(
"Whether to cancel recurring actions removed from the " 467 N_(
"Whether to remove stopped resources from the executor"),
468 N_(
"Values other than default are poorly tested and potentially " 477 N_(
"The number of scheduler inputs resulting in errors to save"),
478 N_(
"Zero to disable, -1 to store unlimited."),
484 N_(
"The number of scheduler inputs resulting in warnings to save"),
485 N_(
"Zero to disable, -1 to store unlimited."),
491 N_(
"The number of scheduler inputs without errors or warnings to save"),
492 N_(
"Zero to disable, -1 to store unlimited."),
503 N_(
"How cluster should react to node health attributes"),
504 N_(
"Requires external entities to create node attributes (named with " 505 "the prefix \"#health\") with values \"red\", \"yellow\", or " 512 N_(
"Base health score assigned to a node"),
513 N_(
"Only used when \"node-health-strategy\" is set to " 520 N_(
"The score to use for a node health attribute whose value is " 522 N_(
"Only used when \"node-health-strategy\" is set to \"custom\" or " 529 N_(
"The score to use for a node health attribute whose value is " 531 N_(
"Only used when \"node-health-strategy\" is set to \"custom\" or " 538 N_(
"The score to use for a node health attribute whose value is " 540 N_(
"Only used when \"node-health-strategy\" is set to \"custom\" or " 551 N_(
"How the cluster should allocate resources to nodes"),
569 N_(
"An alternate parameter to supply instead of 'port'"),
570 N_(
"Some devices do not support the standard 'port' parameter or may " 571 "provide additional ones. Use this to specify an alternate, device-" 572 "specific, parameter that should indicate the machine to be " 573 "fenced. A value of \"none\" can be used to tell the cluster not " 574 "to supply any additional parameters."),
580 N_(
"A mapping of node names to port numbers for devices that do not " 581 "support node names."),
582 N_(
"For example, \"node1:1;node2:2,3\" would tell the cluster to use " 583 "port 1 for node1 and ports 2 and 3 for node2."),
589 N_(
"Nodes targeted by this device"),
590 N_(
"Comma-separated list of nodes that can be targeted by this device " 591 "(for example, \"node1,node2,node3\"). If pcmk_host_check is " 592 "\"static-list\", either this or pcmk_host_map must be set."),
600 N_(
"How to determine which nodes can be targeted by the device"),
601 N_(
"Use \"dynamic-list\" to query the device via the 'list' command; " 602 "\"static-list\" to check the pcmk_host_list attribute; " 603 "\"status\" to query the device via the 'status' command; or " 604 "\"none\" to assume every device can fence every node. " 605 "The default value is \"static-list\" if pcmk_host_map or " 606 "pcmk_host_list is set; otherwise \"dynamic-list\" if the device " 607 "supports the list operation; otherwise \"status\" if the device " 608 "supports the status operation; otherwise \"none\""),
614 N_(
"Enable a delay of no more than the time specified before executing " 616 N_(
"Enable a delay of no more than the time specified before executing " 617 "fencing actions. Pacemaker derives the overall delay by taking " 618 "the value of pcmk_delay_base and adding a random delay value such " 619 "that the sum is kept below this maximum."),
625 N_(
"Enable a base delay for fencing actions and specify base delay " 627 N_(
"This enables a static delay for fencing actions, which can help " 628 "avoid \"death matches\" where two nodes try to fence each other " 629 "at the same time. If pcmk_delay_max is also used, a random delay " 630 "will be added such that the total delay is kept below that value. " 631 "This can be set to a single time value to apply to any node " 632 "targeted by this device (useful if a separate device is " 633 "configured for each target), or to a node map (for example, " 634 "\"node1:1s;node2:5\") to set a different value for each target."),
640 N_(
"The maximum number of actions can be performed in parallel on this " 642 N_(
"Cluster property concurrent-fencing=\"true\" needs to be " 643 "configured first. Then use this to specify the maximum number of " 644 "actions can be performed in parallel on this device. A value of " 645 "-1 means an unlimited number of actions can be performed in " 652 N_(
"An alternate command to run instead of 'reboot'"),
653 N_(
"Some devices do not support the standard commands or may provide " 654 "additional ones. Use this to specify an alternate, device-" 655 "specific, command that implements the 'reboot' action."),
661 N_(
"Specify an alternate timeout to use for 'reboot' actions instead " 662 "of stonith-timeout"),
663 N_(
"Some devices need much more/less time to complete than normal. " 664 "Use this to specify an alternate, device-specific, timeout for " 665 "'reboot' actions."),
671 N_(
"The maximum number of times to try the 'reboot' command within the " 673 N_(
"Some devices do not support multiple connections. Operations may " 674 "\"fail\" if the device is busy with another task. In that case, " 675 "Pacemaker will automatically retry the operation if there is time " 676 "remaining. Use this option to alter the number of times Pacemaker " 677 "tries a 'reboot' action before giving up."),
683 N_(
"An alternate command to run instead of 'off'"),
684 N_(
"Some devices do not support the standard commands or may provide " 685 "additional ones. Use this to specify an alternate, device-" 686 "specific, command that implements the 'off' action."),
692 N_(
"Specify an alternate timeout to use for 'off' actions instead of " 694 N_(
"Some devices need much more/less time to complete than normal. " 695 "Use this to specify an alternate, device-specific, timeout for " 702 N_(
"The maximum number of times to try the 'off' command within the " 704 N_(
"Some devices do not support multiple connections. Operations may " 705 "\"fail\" if the device is busy with another task. In that case, " 706 "Pacemaker will automatically retry the operation if there is time " 707 "remaining. Use this option to alter the number of times Pacemaker " 708 "tries a 'off' action before giving up."),
714 N_(
"An alternate command to run instead of 'on'"),
715 N_(
"Some devices do not support the standard commands or may provide " 716 "additional ones. Use this to specify an alternate, device-" 717 "specific, command that implements the 'on' action."),
723 N_(
"Specify an alternate timeout to use for 'on' actions instead of " 725 N_(
"Some devices need much more/less time to complete than normal. " 726 "Use this to specify an alternate, device-specific, timeout for " 733 N_(
"The maximum number of times to try the 'on' command within the " 735 N_(
"Some devices do not support multiple connections. Operations may " 736 "\"fail\" if the device is busy with another task. In that case, " 737 "Pacemaker will automatically retry the operation if there is time " 738 "remaining. Use this option to alter the number of times Pacemaker " 739 "tries a 'on' action before giving up."),
745 N_(
"An alternate command to run instead of 'list'"),
746 N_(
"Some devices do not support the standard commands or may provide " 747 "additional ones. Use this to specify an alternate, device-" 748 "specific, command that implements the 'list' action."),
754 N_(
"Specify an alternate timeout to use for 'list' actions instead of " 756 N_(
"Some devices need much more/less time to complete than normal. " 757 "Use this to specify an alternate, device-specific, timeout for " 764 N_(
"The maximum number of times to try the 'list' command within the " 766 N_(
"Some devices do not support multiple connections. Operations may " 767 "\"fail\" if the device is busy with another task. In that case, " 768 "Pacemaker will automatically retry the operation if there is time " 769 "remaining. Use this option to alter the number of times Pacemaker " 770 "tries a 'list' action before giving up."),
776 N_(
"An alternate command to run instead of 'monitor'"),
777 N_(
"Some devices do not support the standard commands or may provide " 778 "additional ones. Use this to specify an alternate, device-" 779 "specific, command that implements the 'monitor' action."),
785 N_(
"Specify an alternate timeout to use for 'monitor' actions instead " 786 "of stonith-timeout"),
787 N_(
"Some devices need much more/less time to complete than normal. " 788 "Use this to specify an alternate, device-specific, timeout for " 789 "'monitor' actions."),
795 N_(
"The maximum number of times to try the 'monitor' command within " 796 "the timeout period"),
797 N_(
"Some devices do not support multiple connections. Operations may " 798 "\"fail\" if the device is busy with another task. In that case, " 799 "Pacemaker will automatically retry the operation if there is time " 800 "remaining. Use this option to alter the number of times Pacemaker " 801 "tries a 'monitor' action before giving up."),
807 N_(
"An alternate command to run instead of 'status'"),
808 N_(
"Some devices do not support the standard commands or may provide " 809 "additional ones. Use this to specify an alternate, device-" 810 "specific, command that implements the 'status' action."),
816 N_(
"Specify an alternate timeout to use for 'status' actions instead " 817 "of stonith-timeout"),
818 N_(
"Some devices need much more/less time to complete than normal. " 819 "Use this to specify an alternate, device-specific, timeout for " 820 "'status' actions."),
826 N_(
"The maximum number of times to try the 'status' command within " 827 "the timeout period"),
828 N_(
"Some devices do not support multiple connections. Operations may " 829 "\"fail\" if the device is busy with another task. In that case, " 830 "Pacemaker will automatically retry the operation if there is time " 831 "remaining. Use this option to alter the number of times Pacemaker " 832 "tries a 'status' action before giving up."),
849 N_(
"Resource assignment priority"),
850 N_(
"If not all resources can be active, the cluster will stop " 851 "lower-priority resources in order to keep higher-priority ones " 858 N_(
"Default value for influence in colocation constraints"),
859 N_(
"Use this value as the default for influence in all colocation " 860 "constraints involving this resource, as well as in the implicit " 861 "colocation constraints created if this resource is in a group."),
869 N_(
"State the cluster should attempt to keep this resource in"),
870 N_(
"\"Stopped\" forces the resource to be stopped. " 871 "\"Started\" allows the resource to be started (and in the case of " 872 "promotable clone resources, promoted if appropriate). " 873 "\"Unpromoted\" allows the resource to be started, but only in the " 874 "unpromoted role if the resource is promotable. " 875 "\"Promoted\" is equivalent to \"Started\"."),
881 N_(
"Whether the cluster is allowed to actively change the resource's " 883 N_(
"If false, the cluster will not start, stop, promote, or demote the " 884 "resource on any node. Recurring actions for the resource are " 885 "unaffected. If true, a true value for the maintenance-mode " 886 "cluster option, the maintenance node attribute, or the " 887 "maintenance resource meta-attribute overrides this."),
893 N_(
"If true, the cluster will not schedule any actions involving the " 895 N_(
"If true, the cluster will not start, stop, promote, or demote the " 896 "resource on any node, and will pause any recurring monitors " 897 "(except those specifying role as \"Stopped\"). If false, a true " 898 "value for the maintenance-mode cluster option or maintenance node " 899 "attribute overrides this."),
905 N_(
"Score to add to the current node when a resource is already " 907 N_(
"Score to add to the current node when a resource is already " 908 "active. This allows running resources to stay where they are, " 909 "even if they would be placed elsewhere if they were being started " 910 "from a stopped state. " 911 "The default is 1 for individual clone instances, and 0 for all " 920 N_(
"Conditions under which the resource can be started"),
921 N_(
"Conditions under which the resource can be started. " 922 "\"nothing\" means the cluster can always start this resource. " 923 "\"quorum\" means the cluster can start this resource only if a " 924 "majority of the configured nodes are active. " 925 "\"fencing\" means the cluster can start this resource only if a " 926 "majority of the configured nodes are active and any failed or " 927 "unknown nodes have been fenced. " 928 "\"unfencing\" means the cluster can start this resource only if " 929 "a majority of the configured nodes are active and any failed or " 930 "unknown nodes have been fenced, and only on nodes that have been " 932 "The default is \"quorum\" for resources with a class of stonith; " 933 "otherwise, \"unfencing\" if unfencing is active in the cluster; " 934 "otherwise, \"fencing\" if the stonith-enabled cluster option is " 936 "otherwise, \"quorum\"."),
942 N_(
"Number of failures on a node before the resource becomes " 943 "ineligible to run there."),
944 N_(
"Number of failures that may occur for this resource on a node, " 945 "before that node is marked ineligible to host this resource. A " 946 "value of 0 indicates that this feature is disabled (the node will " 947 "never be marked ineligible). By contrast, the cluster treats " 948 "\"INFINITY\" (the default) as a very large but finite number. " 949 "This option has an effect only if the failed operation specifies " 950 "its on-fail attribute as \"restart\" (the default), and " 951 "additionally for failed start operations, if the " 952 "start-failure-is-fatal cluster property is set to false."),
958 N_(
"Number of seconds before acting as if a failure had not occurred"),
959 N_(
"Number of seconds after a failed action for this resource before " 960 "acting as if the failure had not occurred, and potentially " 961 "allowing the resource back to the node on which it failed. " 962 "A value of 0 indicates that this feature is disabled."),
970 N_(
"What to do if the cluster finds the resource active on more than " 972 N_(
"What to do if the cluster finds the resource active on more than " 974 "\"block\" means to mark the resource as unmanaged. " 975 "\"stop_only\" means to stop all active instances of this resource " 976 "and leave them stopped. " 977 "\"stop_start\" means to stop all active instances of this " 978 "resource and start the resource in one location only. " 979 "\"stop_unexpected\" means to stop all active instances of this " 980 "resource except where the resource should be active. (This should " 981 "be used only when extra instances are not expected to disrupt " 982 "existing instances, and the resource agent's monitor of an " 983 "existing instance is capable of detecting any problems that could " 984 "be caused. Note that any resources ordered after this one will " 985 "still need to be restarted.)"),
991 N_(
"Whether the cluster should try to \"live migrate\" this resource " 992 "when it needs to be moved"),
993 N_(
"Whether the cluster should try to \"live migrate\" this resource " 994 "when it needs to be moved. " 995 "The default is true for ocf:pacemaker:remote resources, and false " 1002 N_(
"Whether the resource should be allowed to run on a node even if " 1003 "the node's health score would otherwise prevent it"),
1010 N_(
"Where to check user-defined node attributes"),
1011 N_(
"Whether to check user-defined node attributes on the physical host " 1012 "where a container is running or on the local node. This is " 1013 "usually set for a bundle resource and inherited by the bundle's " 1014 "primitive resource. " 1015 "A value of \"host\" means to check user-defined node attributes " 1016 "on the underlying physical host. Any other value means to check " 1017 "user-defined node attributes on the local node (for a bundled " 1018 "primitive resource, this is the bundle node)."),
1024 N_(
"Name of the Pacemaker Remote guest node this resource is " 1025 "associated with, if any"),
1026 N_(
"Name of the Pacemaker Remote guest node this resource is " 1027 "associated with, if any. If specified, this both enables the " 1028 "resource as a guest node and defines the unique name used to " 1029 "identify the guest node. The guest must be configured to run the " 1030 "Pacemaker Remote daemon when it is started. " 1031 "WARNING: This value cannot overlap with any resource or node " 1038 N_(
"If remote-node is specified, the IP address or hostname used to " 1039 "connect to the guest via Pacemaker Remote"),
1040 N_(
"If remote-node is specified, the IP address or hostname used to " 1041 "connect to the guest via Pacemaker Remote. The Pacemaker Remote " 1042 "daemon on the guest must be configured to accept connections on " 1044 "The default is the value of the remote-node meta-attribute."),
1050 N_(
"If remote-node is specified, port on the guest used for its " 1051 "Pacemaker Remote connection"),
1052 N_(
"If remote-node is specified, the port on the guest used for its " 1053 "Pacemaker Remote connection. The Pacemaker Remote daemon on the " 1054 "guest must be configured to listen on this port."),
1060 N_(
"If remote-node is specified, how long before a pending Pacemaker " 1061 "Remote guest connection times out."),
1068 N_(
"If remote-node is specified, this acts as the allow-migrate " 1069 "meta-attribute for the implicit remote connection resource " 1070 "(ocf:pacemaker:remote)."),
1096 const char *
const prefixes[] = {
"PCMK_",
"HA_"};
1098 const char *value = NULL;
1100 CRM_CHECK(!pcmk__str_empty(option),
return NULL);
1103 int rv = snprintf(env_name,
NAME_MAX,
"%s%s", prefixes[i], option);
1106 crm_err(
"Failed to write %s%s to buffer: %s", prefixes[i], option,
1111 if (rv >=
sizeof(env_name)) {
1112 crm_trace(
"\"%s%s\" is too long", prefixes[i], option);
1116 value = getenv(env_name);
1117 if (value != NULL) {
1118 crm_trace(
"Found %s = %s", env_name, value);
1123 crm_trace(
"Nothing found for %s", option);
1147 const char *
const prefixes[] = {
"PCMK_",
"HA_"};
1150 CRM_CHECK(!pcmk__str_empty(option) && (strchr(option,
'=') == NULL),
1154 int rv = snprintf(env_name,
NAME_MAX,
"%s%s", prefixes[i], option);
1157 crm_err(
"Failed to write %s%s to buffer: %s", prefixes[i], option,
1162 if (rv >=
sizeof(env_name)) {
1163 crm_trace(
"\"%s%s\" is too long", prefixes[i], option);
1167 if (value != NULL) {
1168 crm_trace(
"Setting %s to %s", env_name, value);
1169 rv = setenv(env_name, value, 1);
1172 rv = unsetenv(env_name);
1176 crm_err(
"Failed to %sset %s: %s", (value != NULL)?
"" :
"un",
1177 env_name, strerror(errno));
1180 if (!compat && (value != NULL)) {
1205 return (value != NULL)
1207 || ((daemon != NULL) && (strstr(value, daemon) != NULL)));
1257 return (value != NULL)
1277 long long num = 0LL;
1320 float number = strtof(value, &end);
1322 return ((end == NULL) || (end[0] ==
'%')) && (number >= 0);
1354 const char *value = NULL;
1358 if (table != NULL) {
1359 value = g_hash_table_lookup(table, option->
name);
1361 if ((value == NULL) && (option->
alt_name != NULL)) {
1362 value = g_hash_table_lookup(table, option->
alt_name);
1363 if (value != NULL) {
1365 "option '%s' is deprecated and will be " 1366 "removed in a future release",
1374 if ((value != NULL) && (option->
is_valid != NULL)
1378 "because '%s' is invalid", option->
name, value);
1382 if (value != NULL) {
1390 if (value == NULL) {
1391 crm_trace(
"No value or default provided for cluster option '%s'",
1397 crm_err(
"Bug: default value for cluster option '%s' is invalid",
1401 crm_trace(
"Using default value '%s' for cluster option '%s'",
1402 value, option->
name);
1403 if (table != NULL) {
1422 option->
name != NULL; option++) {
1425 return cluster_option_value(options, option);
1453 const char *desc_short,
const char *desc_long,
1454 uint32_t filter,
bool all)
1456 return out->
message(out,
"option-list",
name, desc_short, desc_long, filter,
1457 cluster_options, all);
1476 const char *desc_short,
const char *desc_long,
1479 return out->
message(out,
"option-list",
name, desc_short, desc_long,
1503 const char *desc_short,
const char *desc_long,
1506 return out->
message(out,
"option-list",
name, desc_short, desc_long,
1525 const char *desc_short,
const char *desc_long,
1530 xmlNode *top = NULL;
1531 const xmlNode *metadata = NULL;
1532 GString *metadata_s = NULL;
1546 (uint32_t) filter,
true);
1552 metadata_s = g_string_sized_new(16384);
1560 g_string_free(metadata_s, TRUE);
1568 option->
name != NULL; option++) {
1570 cluster_option_value(options, option);
#define PCMK_OPT_PE_WARN_SERIES_MAX
#define CRM_CHECK(expr, failure_action)
#define PCMK_VALUE_DYNAMIC_LIST
#define PCMK_VALUE_STOP_UNEXPECTED
#define PCMK_OPT_STONITH_ENABLED
Common fencing resource parameter.
#define PCMK_OPT_NODE_HEALTH_GREEN
#define PCMK_VALUE_STATUS
#define PCMK_STONITH_HOST_CHECK
#define PCMK_META_MIGRATION_THRESHOLD
_Noreturn crm_exit_t crm_exit(crm_exit_t rc)
#define PCMK_META_REQUIRES
#define PCMK_VALUE_INFINITY
bool pcmk__strcase_any_of(const char *s,...) G_GNUC_NULL_TERMINATED
int(* message)(pcmk__output_t *out, const char *message_id,...)
#define PCMK_OPT_CONCURRENT_FENCING
void pcmk__xml_string(const xmlNode *data, uint32_t options, GString *buffer, int depth)
#define pcmk__config_warn(fmt...)
#define PCMK_META_CONTAINER_ATTRIBUTE_TARGET
#define PCMK_VALUE_PERCENTAGE
bool pcmk__valid_interval_spec(const char *value)
#define PCMK_OPT_SHUTDOWN_LOCK
#define PCMK_OPT_NODE_HEALTH_RED
#define PCMK_STONITH_HOST_MAP
#define pcmk__config_err(fmt...)
#define PCMK_VALUE_STOP_START
#define PCMK_ACTION_MONITOR
#define PCMK_VALUE_DEFAULT
#define PCMK_META_MULTIPLE_ACTIVE
#define PCMK_OPT_ENABLE_ACL
#define PCMK_OPT_CLUSTER_NAME
bool(* is_valid)(const char *)
#define PCMK_OPT_FENCE_REACTION
#define PCMK_STONITH_HOST_LIST
const char * default_value
#define PCMK_OPT_CLUSTER_RECHECK_INTERVAL
#define PCMK_OPT_STOP_ORPHAN_ACTIONS
#define PCMK_META_REMOTE_CONNECT_TIMEOUT
#define PCMK_OPT_DC_VERSION
#define PCMK_OPT_STONITH_ACTION
#define PACEMAKER_VERSION
bool pcmk__valid_percentage(const char *value)
Include indentation and newlines.
int pcmk__output_fencing_params(pcmk__output_t *out, const char *name, const char *desc_short, const char *desc_long, bool all)
#define PCMK_OPT_ENABLE_STARTUP_PROBES
#define PCMK_META_REMOTE_ALLOW_MIGRATE
void pcmk__set_env_option(const char *option, const char *value, bool compat)
Set or unset a Pacemaker environment variable option.
#define PCMK_META_IS_MANAGED
#define PCMK_VALUE_TIMEOUT
#define PCMK_META_REMOTE_ADDR
#define PCMK_VALUE_NOTHING
#define PCMK_VALUE_FENCING
#define PCMK_ACTION_STATUS
char int pcmk_parse_interval_spec(const char *input, guint *result_ms)
Parse milliseconds from a Pacemaker interval specification.
#define PCMK_META_ALLOW_UNHEALTHY_NODES
#define PCMK_OPT_PLACEMENT_STRATEGY
#define PCMK_OPT_STONITH_MAX_ATTEMPTS
#define PCMK_ACTION_REBOOT
int pcmk__scan_ll(const char *text, long long *result, long long default_value)
#define PCMK_OPT_BATCH_LIMIT
bool pcmk__valid_no_quorum_policy(const char *value)
#define PCMK_OPT_SHUTDOWN_ESCALATION
#define PCMK_VALUE_MINIMAL
#define PCMK_VALUE_DURATION
bool pcmk__valid_int(const char *value)
#define PCMK_OPT_STOP_ALL_RESOURCES
xmlNode * pcmk__xe_first_child(const xmlNode *parent, const char *node_name, const char *attr_n, const char *attr_v)
#define PCMK_ROLE_STOPPED
bool pcmk__valid_placement_strategy(const char *value)
#define crm_trace(fmt, args...)
#define PCMK_VALUE_ONLY_GREEN
#define PCMK_OPT_DC_DEADTIME
int pcmk__daemon_metadata(pcmk__output_t *out, const char *name, const char *desc_short, const char *desc_long, enum pcmk__opt_flags filter)
#define PCMK_OPT_MAINTENANCE_MODE
#define PCMK_META_REMOTE_NODE
int(*) int(*) void(*) void(* output_xml)(pcmk__output_t *out, const char *name, const char *buf)
#define PCMK_OPT_SHUTDOWN_LOCK_LIMIT
#define PCMK_OPT_CLUSTER_IPC_LIMIT
#define PCMK_META_RESOURCE_STICKINESS
#define PCMK_VALUE_IGNORE
#define PCMK_OPT_PRIORITY_FENCING_DELAY
Wrappers for and extensions to libxml2.
#define PCMK_OPT_TRANSITION_DELAY
#define PCMK_OPT_STARTUP_FENCING
#define PCMK_META_TARGET_ROLE
void(* finish)(pcmk__output_t *out, crm_exit_t exit_status, bool print, void **copy_dest)
#define PCMK_VALUE_BOOLEAN
#define PCMK_VALUE_NONNEGATIVE_INTEGER
No additional information.
int pcmk__output_primitive_meta(pcmk__output_t *out, const char *name, const char *desc_short, const char *desc_long, bool all)
#define PCMK_OPT_CLUSTER_DELAY
#define PCMK__ACTION_POWEROFF
void pcmk__validate_cluster_options(GHashTable *options)
void free_xml(xmlNode *child)
#define PCMK_OPT_NODE_PENDING_TIMEOUT
#define PCMK_VALUE_QUORUM
const char * pcmk__cluster_option(GHashTable *options, const char *name)
bool pcmk_str_is_infinity(const char *s)
#define PCMK_OPT_START_FAILURE_IS_FATAL
#define PCMK_OPT_NODE_ACTION_LIMIT
#define PCMK_STONITH_ACTION_LIMIT
#define PCMK_VALUE_CUSTOM
#define PCMK_OPT_NODE_HEALTH_YELLOW
#define PCMK_VALUE_FENCE_LEGACY
void pcmk__output_free(pcmk__output_t *out)
#define pcmk__assert(expr)
#define PCMK_OPT_NODE_HEALTH_STRATEGY
#define PCMK_VALUE_SELECT
#define PCMK_OPT_STONITH_TIMEOUT
int crm_str_to_boolean(const char *s, int *ret)
#define PCMK_STONITH_HOST_ARGUMENT
#define PCMK_XE_RESOURCE_AGENT
#define PCMK_META_MAINTENANCE
#define PCMK_VALUE_UTILIZATION
bool pcmk__is_fencing_action(const char *action)
#define PCMK_OPT_NODE_HEALTH_BASE
#define PCMK_ROLE_PROMOTED
#define PCMK_OPT_SYMMETRIC_CLUSTER
#define PCMK_ROLE_STARTED
#define PCMK_OPT_LOAD_THRESHOLD
#define PCMK_OPT_PE_INPUT_SERIES_MAX
#define crm_err(fmt, args...)
bool pcmk_str_is_minus_infinity(const char *s)
#define PCMK_META_REMOTE_PORT
#define PCMK_VALUE_STOP_ONLY
#define PCMK_OPT_PE_ERROR_SERIES_MAX
#define PCMK_OPT_STOP_ORPHAN_RESOURCES
#define PCMK_OPT_ELECTION_TIMEOUT
#define PCMK_META_FAILURE_TIMEOUT
This structure contains everything that makes up a single output formatter.
#define PCMK_OPT_JOIN_FINALIZATION_TIMEOUT
bool pcmk__valid_positive_int(const char *value)
#define PCMK_ROLE_UNPROMOTED
#define PCMK_OPT_MIGRATION_LIMIT
#define PCMK_OPT_NO_QUORUM_POLICY
#define PCMK_OPT_HAVE_WATCHDOG
#define PCMK_VALUE_VERSION
#define PCMK_VALUE_PROGRESSIVE
#define PCMK_VALUE_STATIC_LIST
#define PCMK_STONITH_DELAY_BASE
#define PCMK_VALUE_BALANCED
#define PCMK_VALUE_STRING
#define PCMK_META_CRITICAL
void pcmk__cli_help(char cmd)
#define PCMK_META_PRIORITY
int pcmk__output_cluster_options(pcmk__output_t *out, const char *name, const char *desc_short, const char *desc_long, uint32_t filter, bool all)
#define PCMK__OPT_REMOVE_AFTER_STOP
int pcmk__output_new(pcmk__output_t **out, const char *fmt_name, const char *filename, char **argv)
bool pcmk__env_option_enabled(const char *daemon, const char *option)
#define PCMK_VALUE_UNFENCING
#define PCMK_VALUE_INTEGER
gboolean crm_is_true(const char *s)
void pcmk__output_set_legacy_xml(pcmk__output_t *out)
#define PCMK_VALUE_FREEZE
const char * pcmk__env_option(const char *option)
#define PCMK_STONITH_DELAY_MAX
void pcmk__insert_dup(GHashTable *table, const char *name, const char *value)
#define PCMK_VALUE_DEMOTE
bool pcmk__validate_health_strategy(const char *value)
bool pcmk__valid_boolean(const char *value)
#define PCMK_OPT_CLUSTER_INFRASTRUCTURE
#define PCMK_OPT_JOIN_INTEGRATION_TIMEOUT
#define PCMK_META_ALLOW_MIGRATE
#define PCMK_OPT_STONITH_WATCHDOG_TIMEOUT
#define PCMK_VALUE_MIGRATE_ON_RED