mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2024-12-16 10:20:02 +02:00
e3fe3434b4
The new name is preferred because pgBackRest does not support any SSL protocol versions (they are all considered to be insecure). The old name will continue to be accepted.
2758 lines
99 KiB
Perl
2758 lines
99 KiB
Perl
####################################################################################################################################
|
|
# Configuration Definition Data
|
|
#
|
|
# Contains the defines for options: which commands the option can/cannot be specified, for which commands it is required, default
|
|
# settings, types, ranges, whether the option is negatable, whether it has dependencies, etc. The initial section is the global
|
|
# section meaning the defines defined there apply to all commands listed for the option.
|
|
#
|
|
# CFGDEF_INHERIT:
|
|
# Inherit all definitions for the referenced option. Any definitions can be overridden.
|
|
#
|
|
# CFGDEF_COMMAND:
|
|
# List of commands the option can be used with this option. An empty hash signifies that the command does not deviate from the
|
|
# option defaults. Otherwise, overrides can be specified.
|
|
#
|
|
# NOTE: If the option (A) has a dependency on another option (B) then the CFGCMD_ must also be specified in the other option
|
|
# (B), else it will still error on the option (A).
|
|
#
|
|
# CFGDEF_REQUIRED:
|
|
# In global section:
|
|
# true - if the option does not have a default, then setting CFGDEF_REQUIRED in the global section means all commands
|
|
# listed in CFGDEF_COMMAND require the user to set it.
|
|
# false - no commands listed require it as an option but it can be set. This can be overridden for individual commands by
|
|
# setting CFGDEF_REQUIRED in the CFGDEF_COMMAND section.
|
|
# In CFGDEF_COMMAND section:
|
|
# true - the option must be set somehow for the command, either by default (CFGDEF_DEFAULT) or by the user.
|
|
# &CFGCMD_CHECK =>
|
|
# {
|
|
# &CFGDEF_REQUIRED => true
|
|
# },
|
|
# false - mainly used for overriding the CFGDEF_REQUIRED in the global section.
|
|
#
|
|
# CFGDEF_DEFAULT:
|
|
# Sets a default for the option for all commands if listed in the global section, or for specific commands if listed in the
|
|
# CFGDEF_COMMAND section.
|
|
#
|
|
# CFGDEF_NEGATE:
|
|
# The option can be negated with "no" e.g. --no-compress. This applies tp options that are only valid on the command line (i.e.
|
|
# no config section defined). All config options are automatically negatable.
|
|
#
|
|
# CFGDEF_RESET:
|
|
# The option can be reset to default even if the default is undefined.
|
|
#
|
|
# CFGDEF_DEPEND:
|
|
# Specify the dependencies this option has on another option. All commands listed for this option must also be listed in the
|
|
# dependent option(s).
|
|
# CFGDEF_DEPEND_LIST further defines the allowable settings for the depended option.
|
|
#
|
|
# CFGDEF_ALLOW_LIST:
|
|
# Lists the allowable settings for the option.
|
|
#
|
|
# CFGDEF_INTERNAL:
|
|
# Option is used by the command internally but is not exposed in the documentation. This is useful for commands that need to know
|
|
# where they are running by looking at other options in the config. Also good for test options.
|
|
####################################################################################################################################
|
|
package pgBackRestBuild::Config::Data;
|
|
|
|
use strict;
|
|
use warnings FATAL => qw(all);
|
|
use Carp qw(confess);
|
|
|
|
use Cwd qw(abs_path);
|
|
use Exporter qw(import);
|
|
our @EXPORT = qw();
|
|
use File::Basename qw(dirname basename);
|
|
use Getopt::Long qw(GetOptions);
|
|
use Storable qw(dclone);
|
|
|
|
use pgBackRest::Common::Exception;
|
|
use pgBackRest::Common::Io::Base;
|
|
use pgBackRest::Common::Log;
|
|
use pgBackRest::Common::Wait;
|
|
use pgBackRest::Version;
|
|
|
|
####################################################################################################################################
|
|
# Command constants - commands that are allowed in the exe
|
|
####################################################################################################################################
|
|
use constant CFGCMD_ARCHIVE_GET => 'archive-get';
|
|
push @EXPORT, qw(CFGCMD_ARCHIVE_GET);
|
|
use constant CFGCMD_ARCHIVE_GET_ASYNC => 'archive-get-async';
|
|
push @EXPORT, qw(CFGCMD_ARCHIVE_GET_ASYNC);
|
|
use constant CFGCMD_ARCHIVE_PUSH => 'archive-push';
|
|
push @EXPORT, qw(CFGCMD_ARCHIVE_PUSH);
|
|
use constant CFGCMD_ARCHIVE_PUSH_ASYNC => 'archive-push-async';
|
|
push @EXPORT, qw(CFGCMD_ARCHIVE_PUSH_ASYNC);
|
|
use constant CFGCMD_BACKUP => 'backup';
|
|
push @EXPORT, qw(CFGCMD_BACKUP);
|
|
use constant CFGCMD_CHECK => 'check';
|
|
push @EXPORT, qw(CFGCMD_CHECK);
|
|
use constant CFGCMD_EXPIRE => 'expire';
|
|
push @EXPORT, qw(CFGCMD_EXPIRE);
|
|
use constant CFGCMD_HELP => 'help';
|
|
push @EXPORT, qw(CFGCMD_HELP);
|
|
use constant CFGCMD_INFO => 'info';
|
|
push @EXPORT, qw(CFGCMD_INFO);
|
|
use constant CFGCMD_LOCAL => 'local';
|
|
push @EXPORT, qw(CFGCMD_LOCAL);
|
|
use constant CFGCMD_REMOTE => 'remote';
|
|
push @EXPORT, qw(CFGCMD_REMOTE);
|
|
use constant CFGCMD_RESTORE => 'restore';
|
|
push @EXPORT, qw(CFGCMD_RESTORE);
|
|
use constant CFGCMD_STANZA_CREATE => 'stanza-create';
|
|
push @EXPORT, qw(CFGCMD_STANZA_CREATE);
|
|
use constant CFGCMD_STANZA_DELETE => 'stanza-delete';
|
|
push @EXPORT, qw(CFGCMD_STANZA_DELETE);
|
|
use constant CFGCMD_STANZA_UPGRADE => 'stanza-upgrade';
|
|
push @EXPORT, qw(CFGCMD_STANZA_UPGRADE);
|
|
use constant CFGCMD_START => 'start';
|
|
push @EXPORT, qw(CFGCMD_START);
|
|
use constant CFGCMD_STOP => 'stop';
|
|
push @EXPORT, qw(CFGCMD_STOP);
|
|
use constant CFGCMD_VERSION => 'version';
|
|
push @EXPORT, qw(CFGCMD_VERSION);
|
|
|
|
####################################################################################################################################
|
|
# Option constants - options that are allowed for commands
|
|
####################################################################################################################################
|
|
|
|
# Command-line only options
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
use constant CFGOPT_CONFIG => 'config';
|
|
push @EXPORT, qw(CFGOPT_CONFIG);
|
|
use constant CFGOPT_CONFIG_PATH => 'config-path';
|
|
push @EXPORT, qw(CFGOPT_CONFIG_PATH);
|
|
use constant CFGOPT_CONFIG_INCLUDE_PATH => 'config-include-path';
|
|
push @EXPORT, qw(CFGOPT_CONFIG_INCLUDE_PATH);
|
|
use constant CFGOPT_DELTA => 'delta';
|
|
push @EXPORT, qw(CFGOPT_DELTA);
|
|
use constant CFGOPT_FORCE => 'force';
|
|
push @EXPORT, qw(CFGOPT_FORCE);
|
|
use constant CFGOPT_ONLINE => 'online';
|
|
push @EXPORT, qw(CFGOPT_ONLINE);
|
|
use constant CFGOPT_SET => 'set';
|
|
push @EXPORT, qw(CFGOPT_SET);
|
|
use constant CFGOPT_STANZA => 'stanza';
|
|
push @EXPORT, qw(CFGOPT_STANZA);
|
|
use constant CFGOPT_TARGET => 'target';
|
|
push @EXPORT, qw(CFGOPT_TARGET);
|
|
use constant CFGOPT_TARGET_EXCLUSIVE => 'target-exclusive';
|
|
push @EXPORT, qw(CFGOPT_TARGET_EXCLUSIVE);
|
|
use constant CFGOPT_TARGET_ACTION => 'target-action';
|
|
push @EXPORT, qw(CFGOPT_TARGET_ACTION);
|
|
use constant CFGOPT_TARGET_TIMELINE => 'target-timeline';
|
|
push @EXPORT, qw(CFGOPT_TARGET_TIMELINE);
|
|
use constant CFGOPT_TYPE => 'type';
|
|
push @EXPORT, qw(CFGOPT_TYPE);
|
|
use constant CFGOPT_OUTPUT => 'output';
|
|
push @EXPORT, qw(CFGOPT_OUTPUT);
|
|
|
|
# Command-line only local/remote options
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
use constant CFGOPT_C => 'c';
|
|
push @EXPORT, qw(CFGOPT_C);
|
|
use constant CFGOPT_COMMAND => 'command';
|
|
push @EXPORT, qw(CFGOPT_COMMAND);
|
|
use constant CFGOPT_PROCESS => 'process';
|
|
push @EXPORT, qw(CFGOPT_PROCESS);
|
|
use constant CFGOPT_HOST_ID => 'host-id';
|
|
push @EXPORT, qw(CFGOPT_HOST_ID);
|
|
|
|
# Command-line only test options
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
use constant CFGOPT_TEST => 'test';
|
|
push @EXPORT, qw(CFGOPT_TEST);
|
|
use constant CFGOPT_TEST_DELAY => 'test-delay';
|
|
push @EXPORT, qw(CFGOPT_TEST_DELAY);
|
|
use constant CFGOPT_TEST_POINT => 'test-point';
|
|
push @EXPORT, qw(CFGOPT_TEST_POINT);
|
|
|
|
# General options
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
use constant CFGOPT_ARCHIVE_TIMEOUT => 'archive-timeout';
|
|
push @EXPORT, qw(CFGOPT_ARCHIVE_TIMEOUT);
|
|
use constant CFGOPT_BUFFER_SIZE => 'buffer-size';
|
|
push @EXPORT, qw(CFGOPT_BUFFER_SIZE);
|
|
use constant CFGOPT_DB_TIMEOUT => 'db-timeout';
|
|
push @EXPORT, qw(CFGOPT_DB_TIMEOUT);
|
|
use constant CFGOPT_COMPRESS => 'compress';
|
|
push @EXPORT, qw(CFGOPT_COMPRESS);
|
|
use constant CFGOPT_COMPRESS_LEVEL => 'compress-level';
|
|
push @EXPORT, qw(CFGOPT_COMPRESS_LEVEL);
|
|
use constant CFGOPT_COMPRESS_LEVEL_NETWORK => 'compress-level-network';
|
|
push @EXPORT, qw(CFGOPT_COMPRESS_LEVEL_NETWORK);
|
|
use constant CFGOPT_NEUTRAL_UMASK => 'neutral-umask';
|
|
push @EXPORT, qw(CFGOPT_NEUTRAL_UMASK);
|
|
use constant CFGOPT_PROTOCOL_TIMEOUT => 'protocol-timeout';
|
|
push @EXPORT, qw(CFGOPT_PROTOCOL_TIMEOUT);
|
|
use constant CFGOPT_PROCESS_MAX => 'process-max';
|
|
push @EXPORT, qw(CFGOPT_PROCESS_MAX);
|
|
|
|
# Commands
|
|
use constant CFGOPT_CMD_SSH => 'cmd-ssh';
|
|
push @EXPORT, qw(CFGOPT_CMD_SSH);
|
|
|
|
# Paths
|
|
use constant CFGOPT_LOCK_PATH => 'lock-path';
|
|
push @EXPORT, qw(CFGOPT_LOCK_PATH);
|
|
use constant CFGOPT_LOG_PATH => 'log-path';
|
|
push @EXPORT, qw(CFGOPT_LOG_PATH);
|
|
use constant CFGOPT_SPOOL_PATH => 'spool-path';
|
|
push @EXPORT, qw(CFGOPT_SPOOL_PATH);
|
|
|
|
# Perl
|
|
use constant CFGOPT_PERL_OPTION => 'perl-option';
|
|
push @EXPORT, qw(CFGOPT_PERL_OPTION);
|
|
|
|
# Logging
|
|
use constant CFGOPT_LOG_LEVEL_CONSOLE => 'log-level-console';
|
|
push @EXPORT, qw(CFGOPT_LOG_LEVEL_CONSOLE);
|
|
use constant CFGOPT_LOG_LEVEL_FILE => 'log-level-file';
|
|
push @EXPORT, qw(CFGOPT_LOG_LEVEL_FILE);
|
|
use constant CFGOPT_LOG_LEVEL_STDERR => 'log-level-stderr';
|
|
push @EXPORT, qw(CFGOPT_LOG_LEVEL_STDERR);
|
|
use constant CFGOPT_LOG_SUBPROCESS => 'log-subprocess';
|
|
push @EXPORT, qw(CFGOPT_LOG_SUBPROCESS);
|
|
use constant CFGOPT_LOG_TIMESTAMP => 'log-timestamp';
|
|
push @EXPORT, qw(CFGOPT_LOG_TIMESTAMP);
|
|
|
|
# Repository options
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
# Determines how many repositories can be configured
|
|
use constant CFGDEF_INDEX_REPO => 1;
|
|
|
|
# Prefix that must be used by all repo options that allow multiple configurations
|
|
use constant CFGDEF_PREFIX_REPO => 'repo';
|
|
push @EXPORT, qw(CFGDEF_PREFIX_REPO);
|
|
|
|
# Repository General
|
|
use constant CFGOPT_REPO_CIPHER_TYPE => CFGDEF_PREFIX_REPO . '-cipher-type';
|
|
push @EXPORT, qw(CFGOPT_REPO_CIPHER_TYPE);
|
|
use constant CFGOPT_REPO_CIPHER_PASS => CFGDEF_PREFIX_REPO . '-cipher-pass';
|
|
push @EXPORT, qw(CFGOPT_REPO_CIPHER_PASS);
|
|
use constant CFGOPT_REPO_HARDLINK => CFGDEF_PREFIX_REPO . '-hardlink';
|
|
push @EXPORT, qw(CFGOPT_REPO_HARDLINK);
|
|
use constant CFGOPT_REPO_PATH => CFGDEF_PREFIX_REPO . '-path';
|
|
push @EXPORT, qw(CFGOPT_REPO_PATH);
|
|
use constant CFGOPT_REPO_TYPE => CFGDEF_PREFIX_REPO . '-type';
|
|
push @EXPORT, qw(CFGOPT_REPO_TYPE);
|
|
|
|
# Repository Retention
|
|
use constant CFGOPT_REPO_RETENTION_ARCHIVE => CFGDEF_PREFIX_REPO . '-retention-archive';
|
|
push @EXPORT, qw(CFGOPT_REPO_RETENTION_ARCHIVE);
|
|
use constant CFGOPT_REPO_RETENTION_ARCHIVE_TYPE => CFGDEF_PREFIX_REPO . '-retention-archive-type';
|
|
push @EXPORT, qw(CFGOPT_REPO_RETENTION_ARCHIVE_TYPE);
|
|
use constant CFGOPT_REPO_RETENTION_DIFF => CFGDEF_PREFIX_REPO . '-retention-diff';
|
|
push @EXPORT, qw(CFGOPT_REPO_RETENTION_DIFF);
|
|
use constant CFGOPT_REPO_RETENTION_FULL => CFGDEF_PREFIX_REPO . '-retention-full';
|
|
push @EXPORT, qw(CFGOPT_REPO_RETENTION_FULL);
|
|
|
|
# Repository Host
|
|
use constant CFGOPT_REPO_HOST => CFGDEF_PREFIX_REPO . '-host';
|
|
push @EXPORT, qw(CFGOPT_REPO_HOST);
|
|
use constant CFGOPT_REPO_HOST_CMD => CFGOPT_REPO_HOST . '-cmd';
|
|
push @EXPORT, qw(CFGOPT_REPO_HOST_CMD);
|
|
use constant CFGOPT_REPO_HOST_CONFIG => CFGOPT_REPO_HOST . '-config';
|
|
push @EXPORT, qw(CFGOPT_REPO_HOST_CONFIG);
|
|
use constant CFGOPT_REPO_HOST_CONFIG_INCLUDE_PATH => CFGOPT_REPO_HOST_CONFIG . '-include-path';
|
|
push @EXPORT, qw(CFGOPT_REPO_HOST_CONFIG_INCLUDE_PATH);
|
|
use constant CFGOPT_REPO_HOST_CONFIG_PATH => CFGOPT_REPO_HOST_CONFIG . '-path';
|
|
push @EXPORT, qw(CFGOPT_REPO_HOST_CONFIG_PATH);
|
|
use constant CFGOPT_REPO_HOST_PORT => CFGOPT_REPO_HOST . '-port';
|
|
push @EXPORT, qw(CFGOPT_REPO_HOST_PORT);
|
|
use constant CFGOPT_REPO_HOST_USER => CFGOPT_REPO_HOST . '-user';
|
|
push @EXPORT, qw(CFGOPT_REPO_HOST_USER);
|
|
|
|
# Repository S3
|
|
use constant CFGDEF_REPO_S3 => CFGDEF_PREFIX_REPO . '-s3';
|
|
use constant CFGOPT_REPO_S3_KEY => CFGDEF_REPO_S3 . '-key';
|
|
push @EXPORT, qw(CFGOPT_REPO_S3_KEY);
|
|
use constant CFGOPT_REPO_S3_KEY_SECRET => CFGDEF_REPO_S3 . '-key-secret';
|
|
push @EXPORT, qw(CFGOPT_REPO_S3_KEY_SECRET);
|
|
use constant CFGOPT_REPO_S3_BUCKET => CFGDEF_REPO_S3 . '-bucket';
|
|
push @EXPORT, qw(CFGOPT_REPO_S3_BUCKET);
|
|
use constant CFGOPT_REPO_S3_CA_FILE => CFGDEF_REPO_S3 . '-ca-file';
|
|
push @EXPORT, qw(CFGOPT_REPO_S3_CA_FILE);
|
|
use constant CFGOPT_REPO_S3_CA_PATH => CFGDEF_REPO_S3 . '-ca-path';
|
|
push @EXPORT, qw(CFGOPT_REPO_S3_CA_PATH);
|
|
use constant CFGOPT_REPO_S3_ENDPOINT => CFGDEF_REPO_S3 . '-endpoint';
|
|
push @EXPORT, qw(CFGOPT_REPO_S3_ENDPOINT);
|
|
use constant CFGOPT_REPO_S3_HOST => CFGDEF_REPO_S3 . '-host';
|
|
push @EXPORT, qw(CFGOPT_REPO_S3_HOST);
|
|
use constant CFGOPT_REPO_S3_REGION => CFGDEF_REPO_S3 . '-region';
|
|
push @EXPORT, qw(CFGOPT_REPO_S3_REGION);
|
|
use constant CFGOPT_REPO_S3_TOKEN => CFGDEF_REPO_S3 . '-token';
|
|
push @EXPORT, qw(CFGOPT_REPO_S3_TOKEN);
|
|
use constant CFGOPT_REPO_S3_VERIFY_TLS => CFGDEF_REPO_S3 . '-verify-tls';
|
|
push @EXPORT, qw(CFGOPT_REPO_S3_VERIFY_TLS);
|
|
|
|
# Archive options
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
use constant CFGOPT_ARCHIVE_ASYNC => 'archive-async';
|
|
push @EXPORT, qw(CFGOPT_ARCHIVE_ASYNC);
|
|
use constant CFGOPT_ARCHIVE_GET_QUEUE_MAX => 'archive-get-queue-max';
|
|
push @EXPORT, qw(CFGOPT_ARCHIVE_GET_QUEUE_MAX);
|
|
use constant CFGOPT_ARCHIVE_PUSH_QUEUE_MAX => 'archive-push-queue-max';
|
|
push @EXPORT, qw(CFGOPT_ARCHIVE_PUSH_QUEUE_MAX);
|
|
|
|
# Backup options
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
use constant CFGOPT_ARCHIVE_CHECK => 'archive-check';
|
|
push @EXPORT, qw(CFGOPT_ARCHIVE_CHECK);
|
|
use constant CFGOPT_ARCHIVE_COPY => 'archive-copy';
|
|
push @EXPORT, qw(CFGOPT_ARCHIVE_COPY);
|
|
use constant CFGOPT_BACKUP_STANDBY => 'backup-standby';
|
|
push @EXPORT, qw(CFGOPT_BACKUP_STANDBY);
|
|
use constant CFGOPT_CHECKSUM_PAGE => 'checksum-page';
|
|
push @EXPORT, qw(CFGOPT_CHECKSUM_PAGE);
|
|
use constant CFGOPT_EXCLUDE => 'exclude';
|
|
push @EXPORT, qw(CFGOPT_EXCLUDE);
|
|
use constant CFGOPT_MANIFEST_SAVE_THRESHOLD => 'manifest-save-threshold';
|
|
push @EXPORT, qw(CFGOPT_MANIFEST_SAVE_THRESHOLD);
|
|
use constant CFGOPT_RESUME => 'resume';
|
|
push @EXPORT, qw(CFGOPT_RESUME);
|
|
use constant CFGOPT_START_FAST => 'start-fast';
|
|
push @EXPORT, qw(CFGOPT_START_FAST);
|
|
use constant CFGOPT_STOP_AUTO => 'stop-auto';
|
|
push @EXPORT, qw(CFGOPT_STOP_AUTO);
|
|
|
|
# Restore options
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
use constant CFGOPT_DB_INCLUDE => 'db-include';
|
|
push @EXPORT, qw(CFGOPT_DB_INCLUDE);
|
|
use constant CFGOPT_LINK_ALL => 'link-all';
|
|
push @EXPORT, qw(CFGOPT_LINK_ALL);
|
|
use constant CFGOPT_LINK_MAP => 'link-map';
|
|
push @EXPORT, qw(CFGOPT_LINK_MAP);
|
|
use constant CFGOPT_TABLESPACE_MAP_ALL => 'tablespace-map-all';
|
|
push @EXPORT, qw(CFGOPT_TABLESPACE_MAP_ALL);
|
|
use constant CFGOPT_TABLESPACE_MAP => 'tablespace-map';
|
|
push @EXPORT, qw(CFGOPT_TABLESPACE_MAP);
|
|
use constant CFGOPT_RECOVERY_OPTION => 'recovery-option';
|
|
push @EXPORT, qw(CFGOPT_RECOVERY_OPTION);
|
|
|
|
# Stanza options
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
# Determines how many databases can be configured
|
|
use constant CFGDEF_INDEX_PG => 8;
|
|
push @EXPORT, qw(CFGDEF_INDEX_PG);
|
|
|
|
# Prefix that must be used by all db options that allow multiple configurations
|
|
use constant CFGDEF_PREFIX_PG => 'pg';
|
|
push @EXPORT, qw(CFGDEF_PREFIX_PG);
|
|
|
|
use constant CFGOPT_PG_HOST => CFGDEF_PREFIX_PG . '-host';
|
|
push @EXPORT, qw(CFGOPT_PG_HOST);
|
|
use constant CFGOPT_PG_HOST_CMD => CFGOPT_PG_HOST . '-cmd';
|
|
push @EXPORT, qw(CFGOPT_PG_HOST_CMD);
|
|
use constant CFGOPT_PG_HOST_CONFIG => CFGOPT_PG_HOST . '-config';
|
|
push @EXPORT, qw(CFGOPT_PG_HOST_CONFIG);
|
|
use constant CFGOPT_PG_HOST_CONFIG_INCLUDE_PATH => CFGOPT_PG_HOST_CONFIG . '-include-path';
|
|
push @EXPORT, qw(CFGOPT_PG_HOST_CONFIG_INCLUDE_PATH);
|
|
use constant CFGOPT_PG_HOST_CONFIG_PATH => CFGOPT_PG_HOST_CONFIG . '-path';
|
|
push @EXPORT, qw(CFGOPT_PG_HOST_CONFIG_PATH);
|
|
use constant CFGOPT_PG_HOST_PORT => CFGOPT_PG_HOST . '-port';
|
|
push @EXPORT, qw(CFGOPT_PG_HOST_PORT);
|
|
use constant CFGOPT_PG_HOST_USER => CFGOPT_PG_HOST . '-user';
|
|
push @EXPORT, qw(CFGOPT_PG_HOST_USER);
|
|
|
|
use constant CFGOPT_PG_PATH => CFGDEF_PREFIX_PG . '-path';
|
|
push @EXPORT, qw(CFGOPT_PG_PATH);
|
|
use constant CFGOPT_PG_PORT => CFGDEF_PREFIX_PG . '-port';
|
|
push @EXPORT, qw(CFGOPT_PG_PORT);
|
|
use constant CFGOPT_PG_SOCKET_PATH => CFGDEF_PREFIX_PG . '-socket-path';
|
|
push @EXPORT, qw(CFGOPT_PG_SOCKET_PATH);
|
|
|
|
####################################################################################################################################
|
|
# Option values - for options that have a specific list of allowed values
|
|
####################################################################################################################################
|
|
|
|
# Local/remote types
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
use constant CFGOPTVAL_LOCAL_TYPE_DB => 'db';
|
|
push @EXPORT, qw(CFGOPTVAL_LOCAL_TYPE_DB);
|
|
use constant CFGOPTVAL_LOCAL_TYPE_BACKUP => 'backup';
|
|
push @EXPORT, qw(CFGOPTVAL_LOCAL_TYPE_BACKUP);
|
|
use constant CFGOPTVAL_REMOTE_TYPE_DB => CFGOPTVAL_LOCAL_TYPE_DB;
|
|
push @EXPORT, qw(CFGOPTVAL_REMOTE_TYPE_DB);
|
|
use constant CFGOPTVAL_REMOTE_TYPE_BACKUP => CFGOPTVAL_LOCAL_TYPE_BACKUP;
|
|
push @EXPORT, qw(CFGOPTVAL_REMOTE_TYPE_BACKUP);
|
|
|
|
# Backup type
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
use constant CFGOPTVAL_BACKUP_TYPE_FULL => 'full';
|
|
push @EXPORT, qw(CFGOPTVAL_BACKUP_TYPE_FULL);
|
|
use constant CFGOPTVAL_BACKUP_TYPE_DIFF => 'diff';
|
|
push @EXPORT, qw(CFGOPTVAL_BACKUP_TYPE_DIFF);
|
|
use constant CFGOPTVAL_BACKUP_TYPE_INCR => 'incr';
|
|
push @EXPORT, qw(CFGOPTVAL_BACKUP_TYPE_INCR);
|
|
|
|
# Repo type
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
use constant CFGOPTVAL_REPO_TYPE_CIFS => 'cifs';
|
|
push @EXPORT, qw(CFGOPTVAL_REPO_TYPE_CIFS);
|
|
use constant CFGOPTVAL_REPO_TYPE_POSIX => 'posix';
|
|
push @EXPORT, qw(CFGOPTVAL_REPO_TYPE_POSIX);
|
|
use constant CFGOPTVAL_REPO_TYPE_S3 => 's3';
|
|
push @EXPORT, qw(CFGOPTVAL_REPO_TYPE_S3);
|
|
|
|
# Repo encryption type
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
use constant CFGOPTVAL_REPO_CIPHER_TYPE_NONE => 'none';
|
|
push @EXPORT, qw(CFGOPTVAL_REPO_CIPHER_TYPE_NONE);
|
|
use constant CFGOPTVAL_REPO_CIPHER_TYPE_AES_256_CBC => 'aes-256-cbc';
|
|
push @EXPORT, qw(CFGOPTVAL_REPO_CIPHER_TYPE_AES_256_CBC);
|
|
|
|
# Info output
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
use constant CFGOPTVAL_INFO_OUTPUT_TEXT => 'text';
|
|
push @EXPORT, qw(CFGOPTVAL_INFO_OUTPUT_TEXT);
|
|
use constant CFGOPTVAL_INFO_OUTPUT_JSON => 'json';
|
|
push @EXPORT, qw(CFGOPTVAL_INFO_OUTPUT_JSON);
|
|
|
|
# Restore type
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
use constant CFGOPTVAL_RESTORE_TYPE_NAME => 'name';
|
|
push @EXPORT, qw(CFGOPTVAL_RESTORE_TYPE_NAME);
|
|
use constant CFGOPTVAL_RESTORE_TYPE_TIME => 'time';
|
|
push @EXPORT, qw(CFGOPTVAL_RESTORE_TYPE_TIME);
|
|
use constant CFGOPTVAL_RESTORE_TYPE_XID => 'xid';
|
|
push @EXPORT, qw(CFGOPTVAL_RESTORE_TYPE_XID);
|
|
use constant CFGOPTVAL_RESTORE_TYPE_PRESERVE => 'preserve';
|
|
push @EXPORT, qw(CFGOPTVAL_RESTORE_TYPE_PRESERVE);
|
|
use constant CFGOPTVAL_RESTORE_TYPE_NONE => 'none';
|
|
push @EXPORT, qw(CFGOPTVAL_RESTORE_TYPE_NONE);
|
|
use constant CFGOPTVAL_RESTORE_TYPE_IMMEDIATE => 'immediate';
|
|
push @EXPORT, qw(CFGOPTVAL_RESTORE_TYPE_IMMEDIATE);
|
|
use constant CFGOPTVAL_RESTORE_TYPE_DEFAULT => 'default';
|
|
push @EXPORT, qw(CFGOPTVAL_RESTORE_TYPE_DEFAULT);
|
|
|
|
# Restore target action
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
use constant CFGOPTVAL_RESTORE_TARGET_ACTION_PAUSE => 'pause';
|
|
push @EXPORT, qw(CFGOPTVAL_RESTORE_TARGET_ACTION_PAUSE);
|
|
use constant CFGOPTVAL_RESTORE_TARGET_ACTION_PROMOTE => 'promote';
|
|
push @EXPORT, qw(CFGOPTVAL_RESTORE_TARGET_ACTION_PROMOTE);
|
|
use constant CFGOPTVAL_RESTORE_TARGET_ACTION_SHUTDOWN => 'shutdown';
|
|
push @EXPORT, qw(CFGOPTVAL_RESTORE_TARGET_ACTION_SHUTDOWN);
|
|
|
|
####################################################################################################################################
|
|
# Option defaults - only defined here when the default is used in more than one place
|
|
####################################################################################################################################
|
|
use constant CFGDEF_DEFAULT_BUFFER_SIZE_MIN => 16384;
|
|
|
|
use constant CFGDEF_DEFAULT_COMPRESS_LEVEL_MIN => 0;
|
|
use constant CFGDEF_DEFAULT_COMPRESS_LEVEL_MAX => 9;
|
|
|
|
use constant CFGDEF_DEFAULT_CONFIG_PATH => '/etc/' . PROJECT_EXE;
|
|
use constant CFGDEF_DEFAULT_CONFIG => CFGDEF_DEFAULT_CONFIG_PATH . '/' . PROJECT_CONF;
|
|
use constant CFGDEF_DEFAULT_CONFIG_INCLUDE_PATH => CFGDEF_DEFAULT_CONFIG_PATH . '/conf.d';
|
|
|
|
use constant CFGDEF_DEFAULT_DB_TIMEOUT => 1800;
|
|
use constant CFGDEF_DEFAULT_DB_TIMEOUT_MIN => WAIT_TIME_MINIMUM;
|
|
use constant CFGDEF_DEFAULT_DB_TIMEOUT_MAX => 86400 * 7;
|
|
|
|
use constant CFGDEF_DEFAULT_PROTOCOL_PORT_MIN => 0;
|
|
use constant CFGDEF_DEFAULT_PROTOCOL_PORT_MAX => 65535;
|
|
|
|
use constant CFGDEF_DEFAULT_RETENTION_MIN => 1;
|
|
use constant CFGDEF_DEFAULT_RETENTION_MAX => 9999999;
|
|
|
|
####################################################################################################################################
|
|
# Option definition constants - defines, types, sections, etc.
|
|
####################################################################################################################################
|
|
|
|
# Command defines
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
# Does this command log to a file? This is the default behavior, but it can be overridden in code by calling logFileInit(). The
|
|
# default is true.
|
|
use constant CFGDEF_LOG_FILE => 'log-file';
|
|
push @EXPORT, qw(CFGDEF_LOG_FILE);
|
|
|
|
# Defines the log level to use for default messages that are output for every command. For example, the log message that lists all
|
|
# the options passed is usually output at the info level, but that might not be appropriate for some commands, such as info. Allow
|
|
# the log level to be lowered so these common messages will not be emmitted where they might be distracting.
|
|
use constant CFGDEF_LOG_LEVEL_DEFAULT => 'log-level-default';
|
|
push @EXPORT, qw(CFGDEF_LOG_LEVEL_DEFAULT);
|
|
|
|
# Defines the max log level that may be assigned for the output type. For instance, it's not OK for the local and remote processes
|
|
# to log anything but errors to stderr because it will cause the process to error on exit.
|
|
use constant CFGDEF_LOG_LEVEL_STDERR_MAX => 'log-level-stderr-max';
|
|
push @EXPORT, qw(CFGDEF_LOG_LEVEL_STDERR_MAX);
|
|
|
|
# Does the command require a lock? This doesn't mean a lock can't be taken explicitly later, just controls whether a lock will be
|
|
# acquired as soon at the command starts.
|
|
use constant CFGDEF_LOCK_REQUIRED => 'lock-required';
|
|
push @EXPORT, qw(CFGDEF_LOCK_REQUIRED);
|
|
|
|
# Does the command require a lock on the remote? The lock will only be acquired for process id 0.
|
|
use constant CFGDEF_LOCK_REMOTE_REQUIRED => 'lock-remote-required';
|
|
push @EXPORT, qw(CFGDEF_LOCK_REMOTE_REQUIRED);
|
|
|
|
# What type of lock is required?
|
|
use constant CFGDEF_LOCK_TYPE => 'lock-type';
|
|
push @EXPORT, qw(CFGDEF_LOCK_TYPE);
|
|
|
|
use constant CFGDEF_LOCK_TYPE_ARCHIVE => 'archive';
|
|
push @EXPORT, qw(CFGDEF_LOCK_TYPE_ARCHIVE);
|
|
use constant CFGDEF_LOCK_TYPE_BACKUP => 'backup';
|
|
push @EXPORT, qw(CFGDEF_LOCK_TYPE_BACKUP);
|
|
use constant CFGDEF_LOCK_TYPE_ALL => 'all';
|
|
push @EXPORT, qw(CFGDEF_LOCK_TYPE_ALL);
|
|
use constant CFGDEF_LOCK_TYPE_NONE => 'none';
|
|
push @EXPORT, qw(CFGDEF_LOCK_TYPE_NONE);
|
|
|
|
# Does the command allow parameters? If not then the config parser will automatically error out if parameters are detected. If so,
|
|
# then the command is responsible for ensuring that the parameters are valid.
|
|
use constant CFGDEF_PARAMETER_ALLOWED => 'parameter-allowed';
|
|
push @EXPORT, qw(CFGDEF_PARAMETER_ALLOWED);
|
|
|
|
# Option defines
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
use constant CFGDEF_ALLOW_LIST => 'allow-list';
|
|
push @EXPORT, qw(CFGDEF_ALLOW_LIST);
|
|
use constant CFGDEF_ALLOW_RANGE => 'allow-range';
|
|
push @EXPORT, qw(CFGDEF_ALLOW_RANGE);
|
|
use constant CFGDEF_DEFAULT => 'default';
|
|
push @EXPORT, qw(CFGDEF_DEFAULT);
|
|
use constant CFGDEF_DEPEND => 'depend';
|
|
push @EXPORT, qw(CFGDEF_DEPEND);
|
|
use constant CFGDEF_DEPEND_OPTION => 'depend-option';
|
|
push @EXPORT, qw(CFGDEF_DEPEND_OPTION);
|
|
use constant CFGDEF_DEPEND_LIST => 'depend-list';
|
|
push @EXPORT, qw(CFGDEF_DEPEND_LIST);
|
|
use constant CFGDEF_INDEX => 'index';
|
|
push @EXPORT, qw(CFGDEF_INDEX);
|
|
use constant CFGDEF_INDEX_TOTAL => 'indexTotal';
|
|
push @EXPORT, qw(CFGDEF_INDEX_TOTAL);
|
|
use constant CFGDEF_INHERIT => 'inherit';
|
|
push @EXPORT, qw(CFGDEF_INHERIT);
|
|
use constant CFGDEF_INTERNAL => 'internal';
|
|
push @EXPORT, qw(CFGDEF_INTERNAL);
|
|
use constant CFGDEF_NAME_ALT => 'name-alt';
|
|
push @EXPORT, qw(CFGDEF_NAME_ALT);
|
|
use constant CFGDEF_NEGATE => 'negate';
|
|
push @EXPORT, qw(CFGDEF_NEGATE);
|
|
use constant CFGDEF_PREFIX => 'prefix';
|
|
push @EXPORT, qw(CFGDEF_PREFIX);
|
|
use constant CFGDEF_COMMAND => 'command';
|
|
push @EXPORT, qw(CFGDEF_COMMAND);
|
|
use constant CFGDEF_REQUIRED => 'required';
|
|
push @EXPORT, qw(CFGDEF_REQUIRED);
|
|
use constant CFGDEF_RESET => 'reset';
|
|
push @EXPORT, qw(CFGDEF_RESET);
|
|
use constant CFGDEF_SECTION => 'section';
|
|
push @EXPORT, qw(CFGDEF_SECTION);
|
|
use constant CFGDEF_SECURE => 'secure';
|
|
push @EXPORT, qw(CFGDEF_SECURE);
|
|
use constant CFGDEF_TYPE => 'type';
|
|
push @EXPORT, qw(CFGDEF_TYPE);
|
|
|
|
# Option types
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
use constant CFGDEF_TYPE_BOOLEAN => 'boolean';
|
|
push @EXPORT, qw(CFGDEF_TYPE_BOOLEAN);
|
|
use constant CFGDEF_TYPE_FLOAT => 'float';
|
|
push @EXPORT, qw(CFGDEF_TYPE_FLOAT);
|
|
use constant CFGDEF_TYPE_HASH => 'hash';
|
|
push @EXPORT, qw(CFGDEF_TYPE_HASH);
|
|
use constant CFGDEF_TYPE_INTEGER => 'integer';
|
|
push @EXPORT, qw(CFGDEF_TYPE_INTEGER);
|
|
use constant CFGDEF_TYPE_LIST => 'list';
|
|
push @EXPORT, qw(CFGDEF_TYPE_LIST);
|
|
use constant CFGDEF_TYPE_PATH => 'path';
|
|
push @EXPORT, qw(CFGDEF_TYPE_PATH);
|
|
use constant CFGDEF_TYPE_STRING => 'string';
|
|
push @EXPORT, qw(CFGDEF_TYPE_STRING);
|
|
use constant CFGDEF_TYPE_SIZE => 'size';
|
|
push @EXPORT, qw(CFGDEF_TYPE_SIZE);
|
|
|
|
# Option config sections
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
use constant CFGDEF_SECTION_GLOBAL => 'global';
|
|
push @EXPORT, qw(CFGDEF_SECTION_GLOBAL);
|
|
use constant CFGDEF_SECTION_STANZA => 'stanza';
|
|
push @EXPORT, qw(CFGDEF_SECTION_STANZA);
|
|
|
|
####################################################################################################################################
|
|
# Command definition data
|
|
####################################################################################################################################
|
|
my $rhCommandDefine =
|
|
{
|
|
&CFGCMD_ARCHIVE_GET =>
|
|
{
|
|
&CFGDEF_LOG_FILE => false,
|
|
&CFGDEF_LOCK_TYPE => CFGDEF_LOCK_TYPE_ARCHIVE,
|
|
&CFGDEF_PARAMETER_ALLOWED => true,
|
|
},
|
|
|
|
&CFGCMD_ARCHIVE_GET_ASYNC =>
|
|
{
|
|
&CFGDEF_LOG_FILE => true,
|
|
&CFGDEF_LOCK_REQUIRED => true,
|
|
&CFGDEF_LOCK_TYPE => CFGDEF_LOCK_TYPE_ARCHIVE,
|
|
&CFGDEF_PARAMETER_ALLOWED => true,
|
|
},
|
|
|
|
&CFGCMD_ARCHIVE_PUSH =>
|
|
{
|
|
&CFGDEF_LOG_FILE => false,
|
|
&CFGDEF_LOCK_REMOTE_REQUIRED => true,
|
|
&CFGDEF_LOCK_TYPE => CFGDEF_LOCK_TYPE_ARCHIVE,
|
|
&CFGDEF_PARAMETER_ALLOWED => true,
|
|
},
|
|
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC =>
|
|
{
|
|
&CFGDEF_LOG_FILE => true,
|
|
&CFGDEF_LOCK_REQUIRED => true,
|
|
&CFGDEF_LOCK_REMOTE_REQUIRED => true,
|
|
&CFGDEF_LOCK_TYPE => CFGDEF_LOCK_TYPE_ARCHIVE,
|
|
&CFGDEF_PARAMETER_ALLOWED => true,
|
|
},
|
|
|
|
&CFGCMD_BACKUP =>
|
|
{
|
|
&CFGDEF_LOCK_REQUIRED => true,
|
|
&CFGDEF_LOCK_REMOTE_REQUIRED => true,
|
|
&CFGDEF_LOCK_TYPE => CFGDEF_LOCK_TYPE_BACKUP,
|
|
},
|
|
|
|
&CFGCMD_CHECK =>
|
|
{
|
|
&CFGDEF_LOG_FILE => false,
|
|
},
|
|
|
|
&CFGCMD_EXPIRE =>
|
|
{
|
|
&CFGDEF_LOCK_REQUIRED => true,
|
|
&CFGDEF_LOCK_TYPE => CFGDEF_LOCK_TYPE_BACKUP,
|
|
},
|
|
|
|
&CFGCMD_HELP =>
|
|
{
|
|
&CFGDEF_LOG_FILE => false,
|
|
&CFGDEF_LOG_LEVEL_DEFAULT => DEBUG,
|
|
&CFGDEF_PARAMETER_ALLOWED => true,
|
|
},
|
|
|
|
&CFGCMD_INFO =>
|
|
{
|
|
&CFGDEF_LOG_FILE => false,
|
|
&CFGDEF_LOG_LEVEL_DEFAULT => DEBUG,
|
|
},
|
|
|
|
&CFGCMD_LOCAL =>
|
|
{
|
|
&CFGDEF_LOG_LEVEL_STDERR_MAX => ERROR,
|
|
},
|
|
|
|
&CFGCMD_REMOTE =>
|
|
{
|
|
&CFGDEF_LOG_LEVEL_STDERR_MAX => ERROR,
|
|
},
|
|
|
|
&CFGCMD_RESTORE =>
|
|
{
|
|
},
|
|
|
|
&CFGCMD_STANZA_CREATE =>
|
|
{
|
|
&CFGDEF_LOCK_REQUIRED => true,
|
|
&CFGDEF_LOCK_TYPE => CFGDEF_LOCK_TYPE_ALL,
|
|
},
|
|
|
|
&CFGCMD_STANZA_DELETE =>
|
|
{
|
|
&CFGDEF_LOCK_REQUIRED => true,
|
|
&CFGDEF_LOCK_TYPE => CFGDEF_LOCK_TYPE_ALL,
|
|
},
|
|
|
|
&CFGCMD_STANZA_UPGRADE =>
|
|
{
|
|
&CFGDEF_LOCK_REQUIRED => true,
|
|
&CFGDEF_LOCK_TYPE => CFGDEF_LOCK_TYPE_ALL,
|
|
},
|
|
|
|
&CFGCMD_START =>
|
|
{
|
|
},
|
|
|
|
&CFGCMD_STOP =>
|
|
{
|
|
},
|
|
|
|
&CFGCMD_VERSION =>
|
|
{
|
|
&CFGDEF_LOG_FILE => false,
|
|
&CFGDEF_LOG_LEVEL_DEFAULT => DEBUG,
|
|
},
|
|
};
|
|
|
|
####################################################################################################################################
|
|
# Option definition data
|
|
####################################################################################################################################
|
|
my %hConfigDefine =
|
|
(
|
|
# Command-line only options
|
|
#-------------------------------------------------------------------------------------------------------------------------------
|
|
&CFGOPT_CONFIG =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_DEFAULT => CFGDEF_DEFAULT_CONFIG,
|
|
&CFGDEF_NEGATE => true,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC => {},
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC => {},
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_CHECK => {},
|
|
&CFGCMD_EXPIRE => {},
|
|
&CFGCMD_INFO => {},
|
|
&CFGCMD_LOCAL => {},
|
|
&CFGCMD_REMOTE => {},
|
|
&CFGCMD_RESTORE => {},
|
|
&CFGCMD_STANZA_CREATE => {},
|
|
&CFGCMD_STANZA_DELETE => {},
|
|
&CFGCMD_STANZA_UPGRADE => {},
|
|
&CFGCMD_START => {},
|
|
&CFGCMD_STOP => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_CONFIG_INCLUDE_PATH =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_PATH,
|
|
&CFGDEF_INHERIT => CFGOPT_CONFIG,
|
|
&CFGDEF_DEFAULT => CFGDEF_DEFAULT_CONFIG_INCLUDE_PATH,
|
|
&CFGDEF_NEGATE => false,
|
|
},
|
|
|
|
&CFGOPT_CONFIG_PATH =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_PATH,
|
|
&CFGDEF_INHERIT => CFGOPT_CONFIG,
|
|
&CFGDEF_DEFAULT => CFGDEF_DEFAULT_CONFIG_PATH,
|
|
&CFGDEF_NEGATE => false,
|
|
},
|
|
|
|
&CFGOPT_FORCE =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_BACKUP =>
|
|
{
|
|
&CFGDEF_DEFAULT => false,
|
|
&CFGDEF_DEPEND =>
|
|
{
|
|
&CFGDEF_DEPEND_OPTION => CFGOPT_ONLINE,
|
|
&CFGDEF_DEPEND_LIST => [false],
|
|
},
|
|
},
|
|
|
|
&CFGCMD_RESTORE =>
|
|
{
|
|
&CFGDEF_DEFAULT => false,
|
|
},
|
|
|
|
&CFGCMD_STANZA_CREATE =>
|
|
{
|
|
&CFGDEF_DEFAULT => false,
|
|
},
|
|
|
|
&CFGCMD_STANZA_DELETE =>
|
|
{
|
|
&CFGDEF_DEFAULT => false,
|
|
},
|
|
|
|
&CFGCMD_STOP =>
|
|
{
|
|
&CFGDEF_DEFAULT => false
|
|
}
|
|
}
|
|
},
|
|
|
|
&CFGOPT_ONLINE =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN,
|
|
&CFGDEF_NEGATE => true,
|
|
&CFGDEF_DEFAULT => true,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_STANZA_CREATE => {},
|
|
&CFGCMD_STANZA_UPGRADE => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_SET =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_RESTORE =>
|
|
{
|
|
&CFGDEF_DEFAULT => 'latest',
|
|
}
|
|
}
|
|
},
|
|
|
|
&CFGOPT_STANZA =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC => {},
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC => {},
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_CHECK => {},
|
|
&CFGCMD_EXPIRE => {},
|
|
&CFGCMD_INFO =>
|
|
{
|
|
&CFGDEF_REQUIRED => false
|
|
},
|
|
&CFGCMD_LOCAL => {},
|
|
&CFGCMD_REMOTE =>
|
|
{
|
|
&CFGDEF_REQUIRED => false
|
|
},
|
|
&CFGCMD_RESTORE => {},
|
|
&CFGCMD_STANZA_CREATE => {},
|
|
&CFGCMD_STANZA_DELETE => {},
|
|
&CFGCMD_STANZA_UPGRADE => {},
|
|
&CFGCMD_START =>
|
|
{
|
|
&CFGDEF_REQUIRED => false
|
|
},
|
|
&CFGCMD_STOP =>
|
|
{
|
|
&CFGDEF_REQUIRED => false
|
|
}
|
|
}
|
|
},
|
|
|
|
&CFGOPT_TARGET =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_RESTORE =>
|
|
{
|
|
&CFGDEF_DEPEND =>
|
|
{
|
|
&CFGDEF_DEPEND_OPTION => CFGOPT_TYPE,
|
|
&CFGDEF_DEPEND_LIST =>
|
|
[
|
|
&CFGOPTVAL_RESTORE_TYPE_NAME,
|
|
&CFGOPTVAL_RESTORE_TYPE_TIME,
|
|
&CFGOPTVAL_RESTORE_TYPE_XID,
|
|
],
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_TARGET_EXCLUSIVE =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_RESTORE =>
|
|
{
|
|
&CFGDEF_DEFAULT => false,
|
|
&CFGDEF_DEPEND =>
|
|
{
|
|
&CFGDEF_DEPEND_OPTION => CFGOPT_TYPE,
|
|
&CFGDEF_DEPEND_LIST =>
|
|
[
|
|
&CFGOPTVAL_RESTORE_TYPE_TIME,
|
|
&CFGOPTVAL_RESTORE_TYPE_XID,
|
|
],
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_TARGET_ACTION =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_RESTORE =>
|
|
{
|
|
&CFGDEF_DEFAULT => CFGOPTVAL_RESTORE_TARGET_ACTION_PAUSE,
|
|
|
|
&CFGDEF_ALLOW_LIST =>
|
|
[
|
|
&CFGOPTVAL_RESTORE_TARGET_ACTION_PAUSE,
|
|
&CFGOPTVAL_RESTORE_TARGET_ACTION_PROMOTE,
|
|
&CFGOPTVAL_RESTORE_TARGET_ACTION_SHUTDOWN,
|
|
],
|
|
|
|
&CFGDEF_DEPEND =>
|
|
{
|
|
&CFGDEF_DEPEND_OPTION => CFGOPT_TYPE,
|
|
&CFGDEF_DEPEND_LIST =>
|
|
[
|
|
&CFGOPTVAL_RESTORE_TYPE_IMMEDIATE,
|
|
&CFGOPTVAL_RESTORE_TYPE_NAME,
|
|
&CFGOPTVAL_RESTORE_TYPE_TIME,
|
|
&CFGOPTVAL_RESTORE_TYPE_XID,
|
|
],
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_TARGET_TIMELINE =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_RESTORE =>
|
|
{
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_DEPEND =>
|
|
{
|
|
&CFGDEF_DEPEND_OPTION => CFGOPT_TYPE,
|
|
&CFGDEF_DEPEND_LIST =>
|
|
[
|
|
&CFGOPTVAL_RESTORE_TYPE_DEFAULT,
|
|
&CFGOPTVAL_RESTORE_TYPE_NAME,
|
|
&CFGOPTVAL_RESTORE_TYPE_TIME,
|
|
&CFGOPTVAL_RESTORE_TYPE_XID,
|
|
],
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_TYPE =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_BACKUP =>
|
|
{
|
|
&CFGDEF_DEFAULT => CFGOPTVAL_BACKUP_TYPE_INCR,
|
|
&CFGDEF_ALLOW_LIST =>
|
|
[
|
|
&CFGOPTVAL_BACKUP_TYPE_FULL,
|
|
&CFGOPTVAL_BACKUP_TYPE_DIFF,
|
|
&CFGOPTVAL_BACKUP_TYPE_INCR,
|
|
]
|
|
},
|
|
|
|
&CFGCMD_LOCAL =>
|
|
{
|
|
&CFGDEF_ALLOW_LIST =>
|
|
[
|
|
&CFGOPTVAL_LOCAL_TYPE_DB,
|
|
&CFGOPTVAL_LOCAL_TYPE_BACKUP,
|
|
],
|
|
},
|
|
|
|
&CFGCMD_REMOTE =>
|
|
{
|
|
&CFGDEF_ALLOW_LIST =>
|
|
[
|
|
&CFGOPTVAL_REMOTE_TYPE_DB,
|
|
&CFGOPTVAL_REMOTE_TYPE_BACKUP,
|
|
],
|
|
},
|
|
|
|
&CFGCMD_RESTORE =>
|
|
{
|
|
&CFGDEF_DEFAULT => CFGOPTVAL_RESTORE_TYPE_DEFAULT,
|
|
&CFGDEF_ALLOW_LIST =>
|
|
[
|
|
&CFGOPTVAL_RESTORE_TYPE_NAME,
|
|
&CFGOPTVAL_RESTORE_TYPE_TIME,
|
|
&CFGOPTVAL_RESTORE_TYPE_XID,
|
|
&CFGOPTVAL_RESTORE_TYPE_PRESERVE,
|
|
&CFGOPTVAL_RESTORE_TYPE_NONE,
|
|
&CFGOPTVAL_RESTORE_TYPE_IMMEDIATE,
|
|
&CFGOPTVAL_RESTORE_TYPE_DEFAULT,
|
|
]
|
|
}
|
|
}
|
|
},
|
|
|
|
&CFGOPT_OUTPUT =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_INFO =>
|
|
{
|
|
&CFGDEF_DEFAULT => CFGOPTVAL_INFO_OUTPUT_TEXT,
|
|
&CFGDEF_ALLOW_LIST =>
|
|
[
|
|
&CFGOPTVAL_INFO_OUTPUT_TEXT,
|
|
&CFGOPTVAL_INFO_OUTPUT_JSON,
|
|
]
|
|
}
|
|
}
|
|
},
|
|
|
|
# Command-line only local/remote options
|
|
#-------------------------------------------------------------------------------------------------------------------------------
|
|
&CFGOPT_C =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN,
|
|
&CFGDEF_INTERNAL => true,
|
|
&CFGDEF_DEFAULT => false,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_REMOTE => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_COMMAND =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_LOCAL => {},
|
|
&CFGCMD_REMOTE => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_HOST_ID =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_INTEGER,
|
|
&CFGDEF_ALLOW_RANGE => [1, CFGDEF_INDEX_PG > CFGDEF_INDEX_REPO ? CFGDEF_INDEX_PG : CFGDEF_INDEX_REPO],
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_LOCAL => {},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_PROCESS =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_INTEGER,
|
|
&CFGDEF_ALLOW_RANGE => [0, 1024],
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_LOCAL =>
|
|
{
|
|
&CFGDEF_REQUIRED => true,
|
|
},
|
|
&CFGCMD_REMOTE =>
|
|
{
|
|
&CFGDEF_REQUIRED => true,
|
|
},
|
|
},
|
|
},
|
|
|
|
# Command-line only test options
|
|
#-------------------------------------------------------------------------------------------------------------------------------
|
|
&CFGOPT_TEST =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN,
|
|
&CFGDEF_INTERNAL => true,
|
|
&CFGDEF_DEFAULT => false,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_BACKUP => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_TEST_DELAY =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_FLOAT,
|
|
&CFGDEF_INTERNAL => true,
|
|
&CFGDEF_DEFAULT => 5,
|
|
&CFGDEF_ALLOW_RANGE => [.1, 60],
|
|
&CFGDEF_DEPEND =>
|
|
{
|
|
&CFGDEF_DEPEND_OPTION => CFGOPT_TEST,
|
|
&CFGDEF_DEPEND_LIST => [true],
|
|
},
|
|
&CFGDEF_COMMAND => CFGOPT_TEST,
|
|
},
|
|
|
|
&CFGOPT_TEST_POINT =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_HASH,
|
|
&CFGDEF_INTERNAL => true,
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_DEPEND => CFGOPT_TEST_DELAY,
|
|
&CFGDEF_COMMAND => CFGOPT_TEST,
|
|
},
|
|
|
|
# General options
|
|
#-------------------------------------------------------------------------------------------------------------------------------
|
|
&CFGOPT_ARCHIVE_TIMEOUT =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_FLOAT,
|
|
&CFGDEF_DEFAULT => 60,
|
|
&CFGDEF_ALLOW_RANGE => [WAIT_TIME_MINIMUM, 86400],
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_CHECK => {},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_BUFFER_SIZE =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_SIZE,
|
|
&CFGDEF_DEFAULT => COMMON_IO_BUFFER_MAX,
|
|
&CFGDEF_ALLOW_LIST =>
|
|
[
|
|
&CFGDEF_DEFAULT_BUFFER_SIZE_MIN,
|
|
&CFGDEF_DEFAULT_BUFFER_SIZE_MIN * 2,
|
|
&CFGDEF_DEFAULT_BUFFER_SIZE_MIN * 4,
|
|
&CFGDEF_DEFAULT_BUFFER_SIZE_MIN * 8,
|
|
&CFGDEF_DEFAULT_BUFFER_SIZE_MIN * 16,
|
|
&CFGDEF_DEFAULT_BUFFER_SIZE_MIN * 32,
|
|
&CFGDEF_DEFAULT_BUFFER_SIZE_MIN * 64,
|
|
&CFGDEF_DEFAULT_BUFFER_SIZE_MIN * 128,
|
|
&CFGDEF_DEFAULT_BUFFER_SIZE_MIN * 256,
|
|
&CFGDEF_DEFAULT_BUFFER_SIZE_MIN * 512,
|
|
&CFGDEF_DEFAULT_BUFFER_SIZE_MIN * 1024,
|
|
],
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC => {},
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC => {},
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_CHECK => {},
|
|
&CFGCMD_EXPIRE => {},
|
|
&CFGCMD_INFO => {},
|
|
&CFGCMD_LOCAL => {},
|
|
&CFGCMD_REMOTE => {},
|
|
&CFGCMD_RESTORE => {},
|
|
&CFGCMD_STANZA_CREATE => {},
|
|
&CFGCMD_STANZA_DELETE => {},
|
|
&CFGCMD_STANZA_UPGRADE => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_DB_TIMEOUT =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_FLOAT,
|
|
&CFGDEF_DEFAULT => CFGDEF_DEFAULT_DB_TIMEOUT,
|
|
&CFGDEF_ALLOW_RANGE => [CFGDEF_DEFAULT_DB_TIMEOUT_MIN, CFGDEF_DEFAULT_DB_TIMEOUT_MAX],
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC => {},
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC => {},
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_CHECK => {},
|
|
&CFGCMD_LOCAL => {},
|
|
&CFGCMD_REMOTE => {},
|
|
&CFGCMD_STANZA_CREATE => {},
|
|
&CFGCMD_STANZA_DELETE => {},
|
|
&CFGCMD_STANZA_UPGRADE => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_DELTA =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN,
|
|
&CFGDEF_DEFAULT => false,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_RESTORE => {},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_COMPRESS =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN,
|
|
&CFGDEF_DEFAULT => true,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC => {},
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC => {},
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_RESTORE => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_COMPRESS_LEVEL =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_INTEGER,
|
|
&CFGDEF_DEFAULT => 6,
|
|
&CFGDEF_ALLOW_RANGE => [CFGDEF_DEFAULT_COMPRESS_LEVEL_MIN, CFGDEF_DEFAULT_COMPRESS_LEVEL_MAX],
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC => {},
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC => {},
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_CHECK => {},
|
|
&CFGCMD_INFO => {},
|
|
&CFGCMD_LOCAL => {},
|
|
&CFGCMD_REMOTE => {},
|
|
&CFGCMD_RESTORE => {},
|
|
&CFGCMD_STANZA_CREATE => {},
|
|
&CFGCMD_STANZA_DELETE => {},
|
|
&CFGCMD_STANZA_UPGRADE => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_COMPRESS_LEVEL_NETWORK =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_INTEGER,
|
|
&CFGDEF_DEFAULT => 3,
|
|
&CFGDEF_ALLOW_RANGE => [CFGDEF_DEFAULT_COMPRESS_LEVEL_MIN, CFGDEF_DEFAULT_COMPRESS_LEVEL_MAX],
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC => {},
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC => {},
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_CHECK => {},
|
|
&CFGCMD_INFO => {},
|
|
&CFGCMD_LOCAL => {},
|
|
&CFGCMD_REMOTE => {},
|
|
&CFGCMD_RESTORE => {},
|
|
&CFGCMD_STANZA_CREATE => {},
|
|
&CFGCMD_STANZA_DELETE => {},
|
|
&CFGCMD_STANZA_UPGRADE => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_NEUTRAL_UMASK =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN,
|
|
&CFGDEF_DEFAULT => true,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC => {},
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC => {},
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_CHECK => {},
|
|
&CFGCMD_EXPIRE => {},
|
|
&CFGCMD_LOCAL => {},
|
|
&CFGCMD_REMOTE => {},
|
|
&CFGCMD_RESTORE => {},
|
|
&CFGCMD_STANZA_CREATE => {},
|
|
&CFGCMD_STANZA_DELETE => {},
|
|
&CFGCMD_STANZA_UPGRADE => {},
|
|
&CFGCMD_START => {},
|
|
&CFGCMD_STOP => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_CMD_SSH =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_DEFAULT => 'ssh',
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC => {},
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC => {},
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_CHECK => {},
|
|
&CFGCMD_EXPIRE => {},
|
|
&CFGCMD_INFO => {},
|
|
&CFGCMD_LOCAL => {},
|
|
&CFGCMD_RESTORE => {},
|
|
&CFGCMD_STANZA_CREATE => {},
|
|
&CFGCMD_STANZA_DELETE => {},
|
|
&CFGCMD_STANZA_UPGRADE => {},
|
|
&CFGCMD_START => {},
|
|
&CFGCMD_STOP => {},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_LOCK_PATH =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_PATH,
|
|
&CFGDEF_DEFAULT => '/tmp/' . PROJECT_EXE,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC => {},
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC => {},
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_EXPIRE => {},
|
|
&CFGCMD_INFO => {},
|
|
&CFGCMD_LOCAL => {},
|
|
&CFGCMD_REMOTE => {},
|
|
&CFGCMD_RESTORE => {},
|
|
&CFGCMD_STANZA_CREATE => {},
|
|
&CFGCMD_STANZA_DELETE => {},
|
|
&CFGCMD_STANZA_UPGRADE => {},
|
|
&CFGCMD_START => {},
|
|
&CFGCMD_STOP => {},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_LOG_PATH =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_PATH,
|
|
&CFGDEF_DEFAULT => '/var/log/' . PROJECT_EXE,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC => {},
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC => {},
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_CHECK => {},
|
|
&CFGCMD_EXPIRE => {},
|
|
&CFGCMD_INFO => {},
|
|
&CFGCMD_LOCAL => {},
|
|
&CFGCMD_REMOTE => {},
|
|
&CFGCMD_RESTORE => {},
|
|
&CFGCMD_STANZA_CREATE => {},
|
|
&CFGCMD_STANZA_DELETE => {},
|
|
&CFGCMD_STANZA_UPGRADE => {},
|
|
&CFGCMD_START => {},
|
|
&CFGCMD_STOP => {},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_PERL_OPTION =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_LIST,
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_INTERNAL => true,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC => {},
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC => {},
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_CHECK => {},
|
|
&CFGCMD_EXPIRE => {},
|
|
&CFGCMD_INFO => {},
|
|
&CFGCMD_LOCAL => {},
|
|
&CFGCMD_REMOTE => {},
|
|
&CFGCMD_RESTORE => {},
|
|
&CFGCMD_STANZA_CREATE => {},
|
|
&CFGCMD_STANZA_UPGRADE => {},
|
|
&CFGCMD_START => {},
|
|
&CFGCMD_STOP => {},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_PROTOCOL_TIMEOUT =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_FLOAT,
|
|
&CFGDEF_DEFAULT => CFGDEF_DEFAULT_DB_TIMEOUT + 30,
|
|
&CFGDEF_ALLOW_RANGE => [CFGDEF_DEFAULT_DB_TIMEOUT_MIN, CFGDEF_DEFAULT_DB_TIMEOUT_MAX],
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC => {},
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC => {},
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_CHECK => {},
|
|
&CFGCMD_INFO => {},
|
|
&CFGCMD_LOCAL => {},
|
|
&CFGCMD_REMOTE => {},
|
|
&CFGCMD_RESTORE => {},
|
|
&CFGCMD_STANZA_CREATE => {},
|
|
&CFGCMD_STANZA_DELETE => {},
|
|
&CFGCMD_STANZA_UPGRADE => {},
|
|
}
|
|
},
|
|
|
|
# Repository options
|
|
#-------------------------------------------------------------------------------------------------------------------------------
|
|
&CFGOPT_REPO_CIPHER_PASS =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_PREFIX => CFGDEF_PREFIX_REPO,
|
|
&CFGDEF_INDEX_TOTAL => CFGDEF_INDEX_REPO,
|
|
&CFGDEF_SECURE => true,
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_DEPEND =>
|
|
{
|
|
&CFGDEF_DEPEND_OPTION => CFGOPT_REPO_CIPHER_TYPE,
|
|
&CFGDEF_DEPEND_LIST => [CFGOPTVAL_REPO_CIPHER_TYPE_AES_256_CBC],
|
|
},
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'repo-cipher-pass' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
},
|
|
&CFGDEF_COMMAND => CFGOPT_REPO_TYPE,
|
|
},
|
|
|
|
&CFGOPT_REPO_CIPHER_TYPE =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_PREFIX => CFGDEF_PREFIX_REPO,
|
|
&CFGDEF_INDEX_TOTAL => CFGDEF_INDEX_REPO,
|
|
&CFGDEF_DEFAULT => CFGOPTVAL_REPO_CIPHER_TYPE_NONE,
|
|
&CFGDEF_ALLOW_LIST =>
|
|
[
|
|
&CFGOPTVAL_REPO_CIPHER_TYPE_NONE,
|
|
&CFGOPTVAL_REPO_CIPHER_TYPE_AES_256_CBC,
|
|
],
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'repo-cipher-type' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
},
|
|
&CFGDEF_COMMAND => CFGOPT_REPO_TYPE,
|
|
},
|
|
|
|
&CFGOPT_REPO_HARDLINK =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN,
|
|
&CFGDEF_PREFIX => CFGDEF_PREFIX_REPO,
|
|
&CFGDEF_INDEX_TOTAL => CFGDEF_INDEX_REPO,
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'hardlink' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
},
|
|
&CFGDEF_DEFAULT => false,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_BACKUP => {},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_REPO_HOST =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_PREFIX => CFGDEF_PREFIX_REPO,
|
|
&CFGDEF_INDEX_TOTAL => CFGDEF_INDEX_REPO,
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'backup-host' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
},
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC => {},
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC => {},
|
|
&CFGCMD_BACKUP =>
|
|
{
|
|
&CFGDEF_INTERNAL => true,
|
|
},
|
|
&CFGCMD_CHECK => {},
|
|
&CFGCMD_EXPIRE =>
|
|
{
|
|
&CFGDEF_INTERNAL => true,
|
|
},
|
|
&CFGCMD_INFO => {},
|
|
&CFGCMD_LOCAL => {},
|
|
&CFGCMD_RESTORE => {},
|
|
&CFGCMD_STANZA_CREATE =>
|
|
{
|
|
&CFGDEF_INTERNAL => true,
|
|
},
|
|
&CFGCMD_STANZA_DELETE =>
|
|
{
|
|
&CFGDEF_INTERNAL => true,
|
|
},
|
|
&CFGCMD_STANZA_UPGRADE =>
|
|
{
|
|
&CFGDEF_INTERNAL => true,
|
|
},
|
|
&CFGCMD_START => {},
|
|
&CFGCMD_STOP => {},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_REPO_HOST_CMD =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_PREFIX => CFGDEF_PREFIX_REPO,
|
|
&CFGDEF_INDEX_TOTAL => CFGDEF_INDEX_REPO,
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'backup-cmd' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
},
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC => {},
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC => {},
|
|
&CFGCMD_CHECK => {},
|
|
&CFGCMD_INFO => {},
|
|
&CFGCMD_LOCAL => {},
|
|
&CFGCMD_RESTORE => {},
|
|
&CFGCMD_START => {},
|
|
&CFGCMD_STOP => {},
|
|
},
|
|
&CFGDEF_DEPEND =>
|
|
{
|
|
&CFGDEF_DEPEND_OPTION => CFGOPT_REPO_HOST
|
|
},
|
|
},
|
|
|
|
&CFGOPT_REPO_HOST_CONFIG =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_PREFIX => CFGDEF_PREFIX_REPO,
|
|
&CFGDEF_INDEX_TOTAL => CFGDEF_INDEX_REPO,
|
|
&CFGDEF_DEFAULT => CFGDEF_DEFAULT_CONFIG,
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'backup-config' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
},
|
|
&CFGDEF_COMMAND => CFGOPT_REPO_HOST_CMD,
|
|
&CFGDEF_DEPEND =>
|
|
{
|
|
&CFGDEF_DEPEND_OPTION => CFGOPT_REPO_HOST
|
|
},
|
|
},
|
|
|
|
&CFGOPT_REPO_HOST_CONFIG_PATH =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_PATH,
|
|
&CFGDEF_INHERIT => CFGOPT_REPO_HOST_CONFIG,
|
|
&CFGDEF_DEFAULT => CFGDEF_DEFAULT_CONFIG_PATH,
|
|
},
|
|
|
|
&CFGOPT_REPO_HOST_CONFIG_INCLUDE_PATH =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_PATH,
|
|
&CFGDEF_INHERIT => CFGOPT_REPO_HOST_CONFIG,
|
|
&CFGDEF_DEFAULT => CFGDEF_DEFAULT_CONFIG_INCLUDE_PATH,
|
|
},
|
|
|
|
&CFGOPT_REPO_HOST_PORT =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_INTEGER,
|
|
&CFGDEF_PREFIX => CFGDEF_PREFIX_REPO,
|
|
&CFGDEF_INDEX_TOTAL => CFGDEF_INDEX_REPO,
|
|
&CFGDEF_ALLOW_RANGE => [CFGDEF_DEFAULT_PROTOCOL_PORT_MIN, CFGDEF_DEFAULT_PROTOCOL_PORT_MAX],
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'backup-ssh-port' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
},
|
|
&CFGDEF_COMMAND => CFGOPT_REPO_HOST_CMD,
|
|
&CFGDEF_DEPEND =>
|
|
{
|
|
&CFGDEF_DEPEND_OPTION => CFGOPT_REPO_HOST
|
|
}
|
|
},
|
|
|
|
&CFGOPT_REPO_HOST_USER =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_PREFIX => CFGDEF_PREFIX_REPO,
|
|
&CFGDEF_INDEX_TOTAL => CFGDEF_INDEX_REPO,
|
|
&CFGDEF_DEFAULT => PROJECT_EXE,
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'backup-user' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
},
|
|
&CFGDEF_COMMAND => CFGOPT_REPO_HOST_CMD,
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_DEPEND =>
|
|
{
|
|
&CFGDEF_DEPEND_OPTION => CFGOPT_REPO_HOST
|
|
}
|
|
},
|
|
|
|
&CFGOPT_REPO_PATH =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_PATH,
|
|
&CFGDEF_PREFIX => CFGDEF_PREFIX_REPO,
|
|
&CFGDEF_INDEX_TOTAL => CFGDEF_INDEX_REPO,
|
|
&CFGDEF_DEFAULT => '/var/lib/' . PROJECT_EXE,
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'repo-path' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
},
|
|
&CFGDEF_COMMAND => CFGOPT_REPO_TYPE,
|
|
},
|
|
|
|
&CFGOPT_REPO_RETENTION_ARCHIVE =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_INTEGER,
|
|
&CFGDEF_PREFIX => CFGDEF_PREFIX_REPO,
|
|
&CFGDEF_INDEX_TOTAL => CFGDEF_INDEX_REPO,
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_ALLOW_RANGE => [CFGDEF_DEFAULT_RETENTION_MIN, CFGDEF_DEFAULT_RETENTION_MAX],
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'retention-archive' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
},
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_EXPIRE => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_REPO_RETENTION_ARCHIVE_TYPE =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_PREFIX => CFGDEF_PREFIX_REPO,
|
|
&CFGDEF_INDEX_TOTAL => CFGDEF_INDEX_REPO,
|
|
&CFGDEF_DEFAULT => CFGOPTVAL_BACKUP_TYPE_FULL,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_EXPIRE => {},
|
|
},
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'retention-archive-type' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
},
|
|
&CFGDEF_ALLOW_LIST =>
|
|
[
|
|
&CFGOPTVAL_BACKUP_TYPE_FULL,
|
|
&CFGOPTVAL_BACKUP_TYPE_DIFF,
|
|
&CFGOPTVAL_BACKUP_TYPE_INCR,
|
|
]
|
|
},
|
|
|
|
&CFGOPT_REPO_RETENTION_DIFF =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_INTEGER,
|
|
&CFGDEF_PREFIX => CFGDEF_PREFIX_REPO,
|
|
&CFGDEF_INDEX_TOTAL => CFGDEF_INDEX_REPO,
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_ALLOW_RANGE => [CFGDEF_DEFAULT_RETENTION_MIN, CFGDEF_DEFAULT_RETENTION_MAX],
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'retention-diff' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
},
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_EXPIRE => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_REPO_RETENTION_FULL =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_INTEGER,
|
|
&CFGDEF_PREFIX => CFGDEF_PREFIX_REPO,
|
|
&CFGDEF_INDEX_TOTAL => CFGDEF_INDEX_REPO,
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_ALLOW_RANGE => [CFGDEF_DEFAULT_RETENTION_MIN, CFGDEF_DEFAULT_RETENTION_MAX],
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'retention-full' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
},
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_EXPIRE => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_REPO_S3_BUCKET =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_PREFIX => CFGDEF_PREFIX_REPO,
|
|
&CFGDEF_INDEX_TOTAL => CFGDEF_INDEX_REPO,
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_DEPEND =>
|
|
{
|
|
&CFGDEF_DEPEND_OPTION => CFGOPT_REPO_TYPE,
|
|
&CFGDEF_DEPEND_LIST => [CFGOPTVAL_REPO_TYPE_S3],
|
|
},
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'repo-s3-bucket' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
},
|
|
&CFGDEF_COMMAND => CFGOPT_REPO_TYPE,
|
|
},
|
|
|
|
&CFGOPT_REPO_S3_CA_FILE =>
|
|
{
|
|
&CFGDEF_INHERIT => CFGOPT_REPO_S3_HOST,
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'repo-s3-ca-file' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_REPO_S3_CA_PATH =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_PATH,
|
|
&CFGDEF_INHERIT => CFGOPT_REPO_S3_HOST,
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'repo-s3-ca-path' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_REPO_S3_KEY =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_PREFIX => CFGDEF_PREFIX_REPO,
|
|
&CFGDEF_INDEX_TOTAL => CFGDEF_INDEX_REPO,
|
|
&CFGDEF_SECURE => true,
|
|
&CFGDEF_REQUIRED => true,
|
|
&CFGDEF_DEPEND =>
|
|
{
|
|
&CFGDEF_DEPEND_OPTION => CFGOPT_REPO_TYPE,
|
|
&CFGDEF_DEPEND_LIST => [CFGOPTVAL_REPO_TYPE_S3],
|
|
},
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'repo-s3-key' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
},
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC => {},
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC => {},
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_CHECK => {},
|
|
&CFGCMD_EXPIRE => {},
|
|
&CFGCMD_INFO => {},
|
|
&CFGCMD_LOCAL =>
|
|
{
|
|
&CFGDEF_REQUIRED => false,
|
|
},
|
|
&CFGCMD_REMOTE =>
|
|
{
|
|
&CFGDEF_REQUIRED => false,
|
|
},
|
|
&CFGCMD_RESTORE => {},
|
|
&CFGCMD_STANZA_CREATE => {},
|
|
&CFGCMD_STANZA_DELETE => {},
|
|
&CFGCMD_STANZA_UPGRADE => {},
|
|
&CFGCMD_START => {},
|
|
&CFGCMD_STOP => {},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_REPO_S3_KEY_SECRET =>
|
|
{
|
|
&CFGDEF_INHERIT => CFGOPT_REPO_S3_KEY,
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'repo-s3-key-secret' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_REPO_S3_ENDPOINT =>
|
|
{
|
|
&CFGDEF_INHERIT => CFGOPT_REPO_S3_BUCKET,
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'repo-s3-endpoint' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_REPO_S3_HOST =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_PREFIX => CFGDEF_PREFIX_REPO,
|
|
&CFGDEF_INDEX_TOTAL => CFGDEF_INDEX_REPO,
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_DEPEND => CFGOPT_REPO_S3_BUCKET,
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'repo-s3-host' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
},
|
|
&CFGDEF_COMMAND => CFGOPT_REPO_TYPE,
|
|
},
|
|
|
|
&CFGOPT_REPO_S3_REGION,
|
|
{
|
|
&CFGDEF_INHERIT => CFGOPT_REPO_S3_BUCKET,
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'repo-s3-region' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_REPO_S3_TOKEN =>
|
|
{
|
|
&CFGDEF_INHERIT => CFGOPT_REPO_S3_KEY,
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_COMMAND => CFGOPT_REPO_TYPE,
|
|
},
|
|
|
|
&CFGOPT_REPO_S3_VERIFY_TLS =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN,
|
|
&CFGDEF_PREFIX => CFGDEF_PREFIX_REPO,
|
|
&CFGDEF_INDEX_TOTAL => CFGDEF_INDEX_REPO,
|
|
&CFGDEF_DEFAULT => true,
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'repo-s3-verify-ssl' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
'repo?-s3-verify-ssl' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
},
|
|
&CFGDEF_COMMAND => CFGOPT_REPO_TYPE,
|
|
&CFGDEF_DEPEND => CFGOPT_REPO_S3_BUCKET,
|
|
},
|
|
|
|
&CFGOPT_REPO_TYPE =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_PREFIX => CFGDEF_PREFIX_REPO,
|
|
&CFGDEF_INDEX_TOTAL => CFGDEF_INDEX_REPO,
|
|
&CFGDEF_DEFAULT => CFGOPTVAL_REPO_TYPE_POSIX,
|
|
&CFGDEF_ALLOW_LIST =>
|
|
[
|
|
&CFGOPTVAL_REPO_TYPE_CIFS,
|
|
&CFGOPTVAL_REPO_TYPE_POSIX,
|
|
&CFGOPTVAL_REPO_TYPE_S3,
|
|
],
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'repo-type' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
},
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC => {},
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC => {},
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_CHECK => {},
|
|
&CFGCMD_EXPIRE => {},
|
|
&CFGCMD_INFO => {},
|
|
&CFGCMD_LOCAL => {},
|
|
&CFGCMD_REMOTE => {},
|
|
&CFGCMD_RESTORE => {},
|
|
&CFGCMD_STANZA_CREATE => {},
|
|
&CFGCMD_STANZA_DELETE => {},
|
|
&CFGCMD_STANZA_UPGRADE => {},
|
|
&CFGCMD_START => {},
|
|
&CFGCMD_STOP => {},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_SPOOL_PATH =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_PATH,
|
|
&CFGDEF_DEFAULT => '/var/spool/' . PROJECT_EXE,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET =>
|
|
{
|
|
&CFGDEF_DEPEND =>
|
|
{
|
|
&CFGDEF_DEPEND_OPTION => CFGOPT_ARCHIVE_ASYNC,
|
|
&CFGDEF_DEPEND_LIST => [true],
|
|
},
|
|
},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC => {},
|
|
&CFGCMD_LOCAL => {},
|
|
&CFGCMD_ARCHIVE_PUSH =>
|
|
{
|
|
&CFGDEF_DEPEND =>
|
|
{
|
|
&CFGDEF_DEPEND_OPTION => CFGOPT_ARCHIVE_ASYNC,
|
|
&CFGDEF_DEPEND_LIST => [true],
|
|
},
|
|
},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC => {},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_PROCESS_MAX =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_INTEGER,
|
|
&CFGDEF_DEFAULT => 1,
|
|
&CFGDEF_ALLOW_RANGE => [1, 999],
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC => {},
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC => {},
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_RESTORE => {},
|
|
}
|
|
},
|
|
|
|
# Logging options
|
|
#-------------------------------------------------------------------------------------------------------------------------------
|
|
&CFGOPT_LOG_LEVEL_CONSOLE =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_DEFAULT => lc(WARN),
|
|
&CFGDEF_ALLOW_LIST =>
|
|
[
|
|
lc(OFF),
|
|
lc(ERROR),
|
|
lc(WARN),
|
|
lc(INFO),
|
|
lc(DETAIL),
|
|
lc(DEBUG),
|
|
lc(TRACE),
|
|
],
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC => {},
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC => {},
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_CHECK => {},
|
|
&CFGCMD_EXPIRE => {},
|
|
&CFGCMD_INFO => {},
|
|
&CFGCMD_RESTORE => {},
|
|
&CFGCMD_STANZA_CREATE => {},
|
|
&CFGCMD_STANZA_DELETE => {},
|
|
&CFGCMD_STANZA_UPGRADE => {},
|
|
&CFGCMD_START => {},
|
|
&CFGCMD_STOP => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_LOG_LEVEL_FILE =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_DEFAULT => lc(INFO),
|
|
&CFGDEF_ALLOW_LIST => CFGOPT_LOG_LEVEL_CONSOLE,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC => {},
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC => {},
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_CHECK => {},
|
|
&CFGCMD_EXPIRE => {},
|
|
&CFGCMD_INFO => {},
|
|
&CFGCMD_LOCAL =>
|
|
{
|
|
&CFGDEF_DEFAULT => lc(OFF),
|
|
},
|
|
&CFGCMD_REMOTE =>
|
|
{
|
|
&CFGDEF_DEFAULT => lc(OFF),
|
|
},
|
|
&CFGCMD_RESTORE => {},
|
|
&CFGCMD_STANZA_CREATE => {},
|
|
&CFGCMD_STANZA_DELETE => {},
|
|
&CFGCMD_STANZA_UPGRADE => {},
|
|
&CFGCMD_START => {},
|
|
&CFGCMD_STOP => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_LOG_LEVEL_STDERR =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_DEFAULT => lc(WARN),
|
|
&CFGDEF_ALLOW_LIST => CFGOPT_LOG_LEVEL_CONSOLE,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC => {},
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC => {},
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_CHECK => {},
|
|
&CFGCMD_EXPIRE => {},
|
|
&CFGCMD_INFO => {},
|
|
&CFGCMD_LOCAL => {},
|
|
&CFGCMD_REMOTE => {},
|
|
&CFGCMD_RESTORE => {},
|
|
&CFGCMD_STANZA_CREATE => {},
|
|
&CFGCMD_STANZA_DELETE => {},
|
|
&CFGCMD_STANZA_UPGRADE => {},
|
|
&CFGCMD_START => {},
|
|
&CFGCMD_STOP => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_LOG_SUBPROCESS =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN,
|
|
&CFGDEF_DEFAULT => false,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC => {},
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC => {},
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_CHECK => {},
|
|
&CFGCMD_EXPIRE => {},
|
|
&CFGCMD_INFO => {},
|
|
&CFGCMD_LOCAL => {},
|
|
&CFGCMD_REMOTE => {},
|
|
&CFGCMD_RESTORE => {},
|
|
&CFGCMD_STANZA_CREATE => {},
|
|
&CFGCMD_STANZA_DELETE => {},
|
|
&CFGCMD_STANZA_UPGRADE => {},
|
|
&CFGCMD_START => {},
|
|
&CFGCMD_STOP => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_LOG_TIMESTAMP =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN,
|
|
&CFGDEF_DEFAULT => true,
|
|
&CFGDEF_COMMAND => CFGOPT_LOG_LEVEL_CONSOLE,
|
|
},
|
|
|
|
# Archive options
|
|
#-------------------------------------------------------------------------------------------------------------------------------
|
|
&CFGOPT_ARCHIVE_ASYNC =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN,
|
|
&CFGDEF_DEFAULT => false,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_ARCHIVE_PUSH_QUEUE_MAX =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_SIZE,
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'archive-queue-max' => {},
|
|
},
|
|
&CFGDEF_ALLOW_RANGE => [0, 4 * 1024 * 1024 * 1024 * 1024 * 1024], # 0-4PB
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_PUSH => {},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC => {},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_ARCHIVE_GET_QUEUE_MAX =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_SIZE,
|
|
&CFGDEF_DEFAULT => 128 * 1024 * 1024, # 128MB
|
|
&CFGDEF_ALLOW_RANGE => [0, 4 * 1024 * 1024 * 1024 * 1024 * 1024], # 0-4PB
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET => {},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC => {},
|
|
},
|
|
},
|
|
|
|
# Backup options
|
|
#-------------------------------------------------------------------------------------------------------------------------------
|
|
&CFGOPT_ARCHIVE_CHECK =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN,
|
|
&CFGDEF_DEFAULT => true,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_BACKUP =>
|
|
{
|
|
&CFGDEF_DEPEND =>
|
|
{
|
|
&CFGDEF_DEPEND_OPTION => CFGOPT_ONLINE,
|
|
&CFGDEF_DEPEND_LIST => [true],
|
|
},
|
|
},
|
|
&CFGCMD_CHECK => {},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_ARCHIVE_COPY =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN,
|
|
&CFGDEF_DEFAULT => false,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_BACKUP =>
|
|
{
|
|
&CFGDEF_DEPEND =>
|
|
{
|
|
&CFGDEF_DEPEND_OPTION => CFGOPT_ARCHIVE_CHECK,
|
|
&CFGDEF_DEPEND_LIST => [true],
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
&CFGOPT_BACKUP_STANDBY =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN,
|
|
&CFGDEF_DEFAULT => false,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_CHECK => {},
|
|
&CFGCMD_STANZA_CREATE => {},
|
|
&CFGCMD_STANZA_UPGRADE => {},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_CHECKSUM_PAGE =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN,
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_BACKUP => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_EXCLUDE =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_LIST,
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_BACKUP => {},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_MANIFEST_SAVE_THRESHOLD =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_SIZE,
|
|
&CFGDEF_DEFAULT => 1 * 1024 * 1024 * 1024,
|
|
&CFGDEF_ALLOW_RANGE => [1, 1024 * 1024 * 1024 * 1024], # 1-1TB
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_BACKUP => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_RESUME =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN,
|
|
&CFGDEF_DEFAULT => true,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_BACKUP => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_START_FAST =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN,
|
|
&CFGDEF_DEFAULT => false,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_BACKUP => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_STOP_AUTO =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN,
|
|
&CFGDEF_DEFAULT => false,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_BACKUP => {},
|
|
}
|
|
},
|
|
|
|
# Restore options
|
|
#-------------------------------------------------------------------------------------------------------------------------------
|
|
&CFGOPT_DB_INCLUDE =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_LIST,
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_RESTORE => {},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_LINK_ALL =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_BOOLEAN,
|
|
&CFGDEF_DEFAULT => false,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_RESTORE => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_LINK_MAP =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_HASH,
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_RESTORE => {},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_TABLESPACE_MAP_ALL =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_RESTORE => {},
|
|
}
|
|
},
|
|
|
|
&CFGOPT_TABLESPACE_MAP =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_HASH,
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_RESTORE => {},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_RECOVERY_OPTION =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_HASH,
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_RESTORE => {},
|
|
},
|
|
&CFGDEF_DEPEND =>
|
|
{
|
|
&CFGDEF_DEPEND_OPTION => CFGOPT_TYPE,
|
|
&CFGDEF_DEPEND_LIST =>
|
|
[
|
|
&CFGOPTVAL_RESTORE_TYPE_DEFAULT,
|
|
&CFGOPTVAL_RESTORE_TYPE_IMMEDIATE,
|
|
&CFGOPTVAL_RESTORE_TYPE_NAME,
|
|
&CFGOPTVAL_RESTORE_TYPE_TIME,
|
|
&CFGOPTVAL_RESTORE_TYPE_XID,
|
|
],
|
|
},
|
|
},
|
|
|
|
# Stanza options
|
|
#-------------------------------------------------------------------------------------------------------------------------------
|
|
&CFGOPT_PG_HOST =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_STANZA,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_PREFIX => CFGDEF_PREFIX_PG,
|
|
&CFGDEF_INDEX_TOTAL => CFGDEF_INDEX_PG,
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'db-host' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
'db?-host' => {&CFGDEF_RESET => false},
|
|
},
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET =>
|
|
{
|
|
&CFGDEF_INTERNAL => true,
|
|
},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC =>
|
|
{
|
|
&CFGDEF_INTERNAL => true,
|
|
},
|
|
&CFGCMD_ARCHIVE_PUSH =>
|
|
{
|
|
&CFGDEF_INTERNAL => true,
|
|
},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC =>
|
|
{
|
|
&CFGDEF_INTERNAL => true,
|
|
},
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_CHECK => {},
|
|
&CFGCMD_EXPIRE => {},
|
|
&CFGCMD_LOCAL => {},
|
|
&CFGCMD_RESTORE =>
|
|
{
|
|
&CFGDEF_INTERNAL => true,
|
|
},
|
|
&CFGCMD_STANZA_CREATE => {},
|
|
&CFGCMD_STANZA_DELETE => {},
|
|
&CFGCMD_STANZA_UPGRADE => {},
|
|
&CFGCMD_START => {},
|
|
&CFGCMD_STOP => {},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_PG_HOST_CMD =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_STANZA,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_STRING,
|
|
&CFGDEF_PREFIX => CFGDEF_PREFIX_PG,
|
|
&CFGDEF_INDEX_TOTAL => CFGDEF_INDEX_PG,
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'db-cmd' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
'db?-cmd' => {&CFGDEF_RESET => false},
|
|
},
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_CHECK => {},
|
|
&CFGCMD_EXPIRE => {},
|
|
&CFGCMD_LOCAL => {},
|
|
&CFGCMD_STANZA_CREATE => {},
|
|
&CFGCMD_STANZA_DELETE => {},
|
|
&CFGCMD_STANZA_UPGRADE => {},
|
|
&CFGCMD_START => {},
|
|
&CFGCMD_STOP => {},
|
|
},
|
|
&CFGDEF_DEPEND =>
|
|
{
|
|
&CFGDEF_DEPEND_OPTION => CFGOPT_PG_HOST
|
|
},
|
|
},
|
|
|
|
&CFGOPT_PG_HOST_CONFIG =>
|
|
{
|
|
&CFGDEF_INHERIT => CFGOPT_PG_HOST_CMD,
|
|
&CFGDEF_DEFAULT => CFGDEF_DEFAULT_CONFIG,
|
|
&CFGDEF_REQUIRED => true,
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'db-config' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
'db?-config' => {&CFGDEF_RESET => false},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_PG_HOST_CONFIG_PATH =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_PATH,
|
|
&CFGDEF_INHERIT => CFGOPT_PG_HOST_CMD,
|
|
&CFGDEF_DEFAULT => CFGDEF_DEFAULT_CONFIG_PATH,
|
|
},
|
|
|
|
&CFGOPT_PG_HOST_CONFIG_INCLUDE_PATH =>
|
|
{
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_PATH,
|
|
&CFGDEF_INHERIT => CFGOPT_PG_HOST_CMD,
|
|
&CFGDEF_DEFAULT => CFGDEF_DEFAULT_CONFIG_INCLUDE_PATH,
|
|
},
|
|
|
|
&CFGOPT_PG_HOST_PORT =>
|
|
{
|
|
&CFGDEF_INHERIT => CFGOPT_PG_HOST_CMD,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_INTEGER,
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_ALLOW_RANGE => [CFGDEF_DEFAULT_PROTOCOL_PORT_MIN, CFGDEF_DEFAULT_PROTOCOL_PORT_MAX],
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'db-ssh-port' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
'db?-ssh-port' => {&CFGDEF_RESET => false},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_PG_HOST_USER =>
|
|
{
|
|
&CFGDEF_INHERIT => CFGOPT_PG_HOST_CMD,
|
|
&CFGDEF_DEFAULT => 'postgres',
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'db-user' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
'db?-user' => {&CFGDEF_RESET => false},
|
|
},
|
|
&CFGDEF_REQUIRED => false,
|
|
},
|
|
|
|
&CFGOPT_PG_PATH =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_STANZA,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_PATH,
|
|
&CFGDEF_PREFIX => CFGDEF_PREFIX_PG,
|
|
&CFGDEF_INDEX_TOTAL => CFGDEF_INDEX_PG,
|
|
&CFGDEF_REQUIRED => true,
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'db-path' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
'db?-path' => {&CFGDEF_RESET => false},
|
|
},
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_ARCHIVE_GET =>
|
|
{
|
|
&CFGDEF_REQUIRED => false
|
|
},
|
|
&CFGCMD_ARCHIVE_GET_ASYNC =>
|
|
{
|
|
&CFGDEF_REQUIRED => false
|
|
},
|
|
&CFGCMD_ARCHIVE_PUSH =>
|
|
{
|
|
&CFGDEF_REQUIRED => false
|
|
},
|
|
&CFGCMD_ARCHIVE_PUSH_ASYNC =>
|
|
{
|
|
&CFGDEF_REQUIRED => false
|
|
},
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_CHECK => {},
|
|
&CFGCMD_LOCAL =>
|
|
{
|
|
&CFGDEF_REQUIRED => false
|
|
},
|
|
&CFGCMD_REMOTE =>
|
|
{
|
|
&CFGDEF_REQUIRED => false
|
|
},
|
|
&CFGCMD_RESTORE => {},
|
|
&CFGCMD_STANZA_CREATE => {},
|
|
&CFGCMD_STANZA_DELETE => {},
|
|
&CFGCMD_STANZA_UPGRADE => {},
|
|
},
|
|
},
|
|
|
|
&CFGOPT_PG_PORT =>
|
|
{
|
|
&CFGDEF_SECTION => CFGDEF_SECTION_STANZA,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_INTEGER,
|
|
&CFGDEF_PREFIX => CFGDEF_PREFIX_PG,
|
|
&CFGDEF_INDEX_TOTAL => CFGDEF_INDEX_PG,
|
|
&CFGDEF_DEFAULT => 5432,
|
|
&CFGDEF_ALLOW_RANGE => [CFGDEF_DEFAULT_PROTOCOL_PORT_MIN, CFGDEF_DEFAULT_PROTOCOL_PORT_MAX],
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'db-port' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
'db?-port' => {&CFGDEF_RESET => false},
|
|
},
|
|
&CFGDEF_COMMAND =>
|
|
{
|
|
&CFGCMD_BACKUP => {},
|
|
&CFGCMD_CHECK => {},
|
|
&CFGCMD_LOCAL => {},
|
|
&CFGCMD_REMOTE => {},
|
|
&CFGCMD_STANZA_CREATE => {},
|
|
&CFGCMD_STANZA_DELETE => {},
|
|
&CFGCMD_STANZA_UPGRADE => {},
|
|
},
|
|
&CFGDEF_DEPEND =>
|
|
{
|
|
&CFGDEF_DEPEND_OPTION => CFGOPT_PG_PATH
|
|
},
|
|
},
|
|
|
|
&CFGOPT_PG_SOCKET_PATH =>
|
|
{
|
|
&CFGDEF_INHERIT => CFGOPT_PG_PORT,
|
|
&CFGDEF_TYPE => CFGDEF_TYPE_PATH,
|
|
&CFGDEF_DEFAULT => undef,
|
|
&CFGDEF_REQUIRED => false,
|
|
&CFGDEF_NAME_ALT =>
|
|
{
|
|
'db-socket-path' => {&CFGDEF_INDEX => 1, &CFGDEF_RESET => false},
|
|
'db?-socket-path' => {&CFGDEF_RESET => false},
|
|
},
|
|
},
|
|
);
|
|
|
|
####################################################################################################################################
|
|
# Process command define defaults
|
|
####################################################################################################################################
|
|
foreach my $strCommand (sort(keys(%{$rhCommandDefine})))
|
|
{
|
|
# Log files are created by default
|
|
if (!defined($rhCommandDefine->{$strCommand}{&CFGDEF_LOG_FILE}))
|
|
{
|
|
$rhCommandDefine->{$strCommand}{&CFGDEF_LOG_FILE} = true;
|
|
}
|
|
|
|
# Default log level is INFO
|
|
if (!defined($rhCommandDefine->{$strCommand}{&CFGDEF_LOG_LEVEL_DEFAULT}))
|
|
{
|
|
$rhCommandDefine->{$strCommand}{&CFGDEF_LOG_LEVEL_DEFAULT} = INFO;
|
|
}
|
|
|
|
# Default max stderr log level is TRACE
|
|
if (!defined($rhCommandDefine->{$strCommand}{&CFGDEF_LOG_LEVEL_STDERR_MAX}))
|
|
{
|
|
$rhCommandDefine->{$strCommand}{&CFGDEF_LOG_LEVEL_STDERR_MAX} = TRACE;
|
|
}
|
|
|
|
# Default lock required is false
|
|
if (!defined($rhCommandDefine->{$strCommand}{&CFGDEF_LOCK_REQUIRED}))
|
|
{
|
|
$rhCommandDefine->{$strCommand}{&CFGDEF_LOCK_REQUIRED} = false;
|
|
}
|
|
|
|
# Default lock remote required is false
|
|
if (!defined($rhCommandDefine->{$strCommand}{&CFGDEF_LOCK_REMOTE_REQUIRED}))
|
|
{
|
|
$rhCommandDefine->{$strCommand}{&CFGDEF_LOCK_REMOTE_REQUIRED} = false;
|
|
}
|
|
|
|
# Lock type must be set if a lock is required
|
|
if (!defined($rhCommandDefine->{$strCommand}{&CFGDEF_LOCK_TYPE}))
|
|
{
|
|
# Is a lock type required?
|
|
if ($rhCommandDefine->{$strCommand}{&CFGDEF_LOCK_REQUIRED})
|
|
{
|
|
confess &log(ERROR, "lock type is required for command '${strCommand}'");
|
|
}
|
|
|
|
$rhCommandDefine->{$strCommand}{&CFGDEF_LOCK_TYPE} = CFGDEF_LOCK_TYPE_NONE;
|
|
}
|
|
else
|
|
{
|
|
if ($rhCommandDefine->{$strCommand}{&CFGDEF_LOCK_REQUIRED} &&
|
|
$rhCommandDefine->{$strCommand}{&CFGDEF_LOCK_TYPE} eq CFGDEF_LOCK_TYPE_NONE)
|
|
{
|
|
confess &log(ERROR, "lock type is required for command '${strCommand}' and cannot be 'none'");
|
|
}
|
|
}
|
|
|
|
# Default parameter allowed is false
|
|
if (!defined($rhCommandDefine->{$strCommand}{&CFGDEF_PARAMETER_ALLOWED}))
|
|
{
|
|
$rhCommandDefine->{$strCommand}{&CFGDEF_PARAMETER_ALLOWED} = false;
|
|
}
|
|
}
|
|
|
|
####################################################################################################################################
|
|
# Process option define defaults
|
|
####################################################################################################################################
|
|
foreach my $strKey (sort(keys(%hConfigDefine)))
|
|
{
|
|
# If the define is a scalar then copy the entire define from the referenced option
|
|
if (defined($hConfigDefine{$strKey}{&CFGDEF_INHERIT}))
|
|
{
|
|
# Make a copy in case there are overrides that need to be applied after inheriting
|
|
my $hConfigDefineOverride = dclone($hConfigDefine{$strKey});
|
|
|
|
# Copy the option being inherited from
|
|
$hConfigDefine{$strKey} = dclone($hConfigDefine{$hConfigDefine{$strKey}{&CFGDEF_INHERIT}});
|
|
|
|
# No need to copy the inheritance key
|
|
delete($hConfigDefine{$strKey}{&CFGDEF_INHERIT});
|
|
|
|
# It makes no sense to inherit alt names - they must be specified for each option
|
|
delete($hConfigDefine{$strKey}{&CFGDEF_NAME_ALT});
|
|
|
|
# Apply overrides
|
|
foreach my $strOptionDef (sort(keys(%{$hConfigDefineOverride})))
|
|
{
|
|
$hConfigDefine{$strKey}{$strOptionDef} = $hConfigDefineOverride->{$strOptionDef};
|
|
}
|
|
}
|
|
|
|
# If the command section is a scalar then copy the section from the referenced option
|
|
if (defined($hConfigDefine{$strKey}{&CFGDEF_COMMAND}) && !ref($hConfigDefine{$strKey}{&CFGDEF_COMMAND}))
|
|
{
|
|
$hConfigDefine{$strKey}{&CFGDEF_COMMAND} =
|
|
dclone($hConfigDefine{$hConfigDefine{$strKey}{&CFGDEF_COMMAND}}{&CFGDEF_COMMAND});
|
|
}
|
|
|
|
# If the required section is a scalar then copy the section from the referenced option
|
|
if (defined($hConfigDefine{$strKey}{&CFGDEF_DEPEND}) && !ref($hConfigDefine{$strKey}{&CFGDEF_DEPEND}))
|
|
{
|
|
$hConfigDefine{$strKey}{&CFGDEF_DEPEND} =
|
|
dclone($hConfigDefine{$hConfigDefine{$strKey}{&CFGDEF_DEPEND}}{&CFGDEF_DEPEND});
|
|
}
|
|
|
|
# If the allow list is a scalar then copy the list from the referenced option
|
|
if (defined($hConfigDefine{$strKey}{&CFGDEF_ALLOW_LIST}) && !ref($hConfigDefine{$strKey}{&CFGDEF_ALLOW_LIST}))
|
|
{
|
|
$hConfigDefine{$strKey}{&CFGDEF_ALLOW_LIST} =
|
|
dclone($hConfigDefine{$hConfigDefine{$strKey}{&CFGDEF_ALLOW_LIST}}{&CFGDEF_ALLOW_LIST});
|
|
}
|
|
|
|
# Default type is string
|
|
if (!defined($hConfigDefine{$strKey}{&CFGDEF_TYPE}))
|
|
{
|
|
&log(ASSERT, "type is required for option '${strKey}'");
|
|
}
|
|
|
|
# Default required is true
|
|
if (!defined($hConfigDefine{$strKey}{&CFGDEF_REQUIRED}))
|
|
{
|
|
$hConfigDefine{$strKey}{&CFGDEF_REQUIRED} = true;
|
|
}
|
|
|
|
# Default internal is false
|
|
if (!defined($hConfigDefine{$strKey}{&CFGDEF_INTERNAL}))
|
|
{
|
|
$hConfigDefine{$strKey}{&CFGDEF_INTERNAL} = false;
|
|
}
|
|
|
|
# Set index total for any option where it has not been explicitly defined
|
|
if (!defined($hConfigDefine{$strKey}{&CFGDEF_INDEX_TOTAL}))
|
|
{
|
|
$hConfigDefine{$strKey}{&CFGDEF_INDEX_TOTAL} = 1;
|
|
}
|
|
|
|
# All boolean config options can be negated. Boolean command-line options must be marked for negation individually.
|
|
if ($hConfigDefine{$strKey}{&CFGDEF_TYPE} eq CFGDEF_TYPE_BOOLEAN && defined($hConfigDefine{$strKey}{&CFGDEF_SECTION}))
|
|
{
|
|
$hConfigDefine{$strKey}{&CFGDEF_NEGATE} = true;
|
|
}
|
|
|
|
# Default for negation is false
|
|
if (!defined($hConfigDefine{$strKey}{&CFGDEF_NEGATE}))
|
|
{
|
|
$hConfigDefine{$strKey}{&CFGDEF_NEGATE} = false;
|
|
}
|
|
|
|
# All config options can be reset
|
|
if (defined($hConfigDefine{$strKey}{&CFGDEF_SECTION}))
|
|
{
|
|
$hConfigDefine{$strKey}{&CFGDEF_RESET} = true;
|
|
}
|
|
elsif (!defined($hConfigDefine{$strKey}{&CFGDEF_RESET}))
|
|
{
|
|
$hConfigDefine{$strKey}{&CFGDEF_RESET} = false;
|
|
}
|
|
|
|
# By default options are not secure
|
|
if (!defined($hConfigDefine{$strKey}{&CFGDEF_SECURE}))
|
|
{
|
|
$hConfigDefine{$strKey}{&CFGDEF_SECURE} = false;
|
|
}
|
|
|
|
# Set all indices to 1 by default - this defines how many copies of any option there can be
|
|
if (!defined($hConfigDefine{$strKey}{&CFGDEF_INDEX_TOTAL}))
|
|
{
|
|
$hConfigDefine{$strKey}{&CFGDEF_INDEX_TOTAL} = 1;
|
|
}
|
|
|
|
# All int and float options must have an allow range
|
|
if (($hConfigDefine{$strKey}{&CFGDEF_TYPE} eq CFGDEF_TYPE_INTEGER ||
|
|
$hConfigDefine{$strKey}{&CFGDEF_TYPE} eq CFGDEF_TYPE_FLOAT ||
|
|
$hConfigDefine{$strKey}{&CFGDEF_TYPE} eq CFGDEF_TYPE_SIZE) &&
|
|
!(defined($hConfigDefine{$strKey}{&CFGDEF_ALLOW_RANGE}) || defined($hConfigDefine{$strKey}{&CFGDEF_ALLOW_LIST})))
|
|
{
|
|
confess &log(ASSERT, "int/float option '${strKey}' must have allow range or list");
|
|
}
|
|
|
|
# Ensure all commands are valid
|
|
foreach my $strCommand (sort(keys(%{$hConfigDefine{$strKey}{&CFGDEF_COMMAND}})))
|
|
{
|
|
if (!defined($rhCommandDefine->{$strCommand}))
|
|
{
|
|
confess &log(ASSERT, "invalid command '${strCommand}'");
|
|
}
|
|
}
|
|
}
|
|
|
|
####################################################################################################################################
|
|
# Get option definition
|
|
####################################################################################################################################
|
|
sub cfgDefine
|
|
{
|
|
return dclone(\%hConfigDefine);
|
|
}
|
|
|
|
push @EXPORT, qw(cfgDefine);
|
|
|
|
####################################################################################################################################
|
|
# Get command definition
|
|
####################################################################################################################################
|
|
sub cfgDefineCommand
|
|
{
|
|
return dclone($rhCommandDefine);
|
|
}
|
|
|
|
push @EXPORT, qw(cfgDefineCommand);
|
|
|
|
####################################################################################################################################
|
|
# Get list of all commands
|
|
####################################################################################################################################
|
|
sub cfgDefineCommandList
|
|
{
|
|
# Return sorted list
|
|
return (sort(keys(%{$rhCommandDefine})));
|
|
}
|
|
|
|
push @EXPORT, qw(cfgDefineCommandList);
|
|
|
|
####################################################################################################################################
|
|
# Get list of all option types
|
|
####################################################################################################################################
|
|
sub cfgDefineOptionTypeList
|
|
{
|
|
my $rhOptionTypeMap;
|
|
|
|
# Get unique list of types
|
|
foreach my $strOption (sort(keys(%hConfigDefine)))
|
|
{
|
|
my $strOptionType = $hConfigDefine{$strOption}{&CFGDEF_TYPE};
|
|
|
|
if (!defined($rhOptionTypeMap->{$strOptionType}))
|
|
{
|
|
$rhOptionTypeMap->{$strOptionType} = true;
|
|
}
|
|
};
|
|
|
|
# Return sorted list
|
|
return (sort(keys(%{$rhOptionTypeMap})));
|
|
}
|
|
|
|
push @EXPORT, qw(cfgDefineOptionTypeList);
|
|
|
|
1;
|